통화 전송

중요

이 문서에 설명된 기능은 현재 공개 미리 보기 상태입니다. 이 미리 보기 버전은 서비스 수준 계약 없이 제공되며 프로덕션 워크로드에는 사용하지 않는 것이 좋습니다. 특정 기능이 지원되지 않거나 기능이 제한될 수 있습니다. 자세한 내용은 Microsoft Azure Preview에 대한 추가 사용 약관을 참조하세요.

활성 호출 중에는 다른 사용자 또는 번호로 호출을 전송 하는 것이 좋습니다. 방법에 대해 알아보겠습니다.

필수 구성 요소

SDK 설치

npm install 명령을 사용하여 JavaScript용 Azure Communication Services 통화 SDK 및 일반 SDK를 설치합니다.

npm install @azure/communication-common --save
npm install @azure/communication-calling --save

필요한 개체 초기화

CallClient 인스턴스는 대부분의 호출 작업에 필요합니다. 새 인스턴스를 만들어 CallClient 보겠습니다. 로거 인스턴스와 같은 사용자 지정 옵션을 사용하여 구성할 수 있습니다.

CallClient 인스턴스가 있으면 CallClient 인스턴스에서 createCallAgent 메서드를 호출하여 CallAgent 인스턴스를 만들 수 있습니다. 이 메서드는 CallAgent 인스턴스 개체를 비동기적으로 반환됩니다.

createCallAgent 메서드는 CommunicationTokenCredential을 인수로 사용합니다. 사용자 액세스 토큰이 허용됩니다.

CallClient 인스턴스에서 getDeviceManager 메서드를 사용하여 deviceManager에 액세스할 수 있습니다.

const { CallClient } = require('@azure/communication-calling');
const { AzureCommunicationTokenCredential} = require('@azure/communication-common');
const { AzureLogger, setLogLevel } = require("@azure/logger");

// Set the logger's log level
setLogLevel('verbose');

// Redirect log output to wherever desired. To console, file, buffer, REST API, etc...
AzureLogger.log = (...args) => {
    console.log(...args); // Redirect log output to console
};

const userToken = '<USER_TOKEN>';
callClient = new CallClient(options);
const tokenCredential = new AzureCommunicationTokenCredential(userToken);
const callAgent = await callClient.createCallAgent(tokenCredential, {displayName: 'optional ACS user name'});
const deviceManager = await callClient.getDeviceManager()

참고

이 API는 개발자를 위한 미리 보기로 제공되며 수신한 피드백을 기반으로 변경될 수 있습니다. 프로덕션 환경에서 이 API를 사용하지 마세요. 이 API를 사용하려면 ACS 통화 웹 SDK의 '베타' 릴리스를 사용하세요.

통화 전송은 핵심 Call API의 확장 기능입니다. 먼저 전송 기능 API 개체를 가져와야 합니다.

const callTransferApi = call.feature(Features.Transfer);

통화 전환에는 세 명의 당사자가 포함됩니다.

  • '전송자': 전송 요청을 시작한 사람입니다.
  • '피전송자': 이 사람의 통화가 전송됩니다.
  • '전송 대상': 통화가 이 사람에게 전송됩니다.

참가자로 전송:

  1. '전송자'와 '피전송자' 사이에 이미 연결된 통화가 있습니다. '전송자'가 '피전송자'와의 통화를 '전송 대상'으로 전송하기로 결정합니다.
  2. '전송자'가 transfer API를 호출합니다.
  3. '피전송자'는 transferRequested 이벤트를 사용하여 '전송 대상'으로의 전송 요청을 accept할지 아니면 reject할지 결정합니다.
  4. '전송 대상'은 '피전송자'가 전송 요청을 수락한 경우에만 수신 통화를 받습니다.

현재 통화를 전송하려면 transfer API를 사용하면 됩니다. transfer는 사용자가 disableForwardingAndUnanswered 플래그를 설정할 수 있는 transferCallOptions 옵션을 허용합니다.

  • disableForwardingAndUnanswered = false: '전송 대상'이 전송 통화에 응답하지 않으면 전송은 '전송 대상' 착신 전환 및 응답 없음 설정을 따릅니다.
  • disableForwardingAndUnanswered = true: '전송 대상'이 전송 통화에 응답하지 않으면 전송 시도가 종료됩니다.
// transfer target can be an ACS user
const id = { communicationUserId: <ACS_USER_ID> };
// call transfer API
const transfer = callTransferApi.transfer({targetParticipant: id});

호출로 전송:

  1. '전송자'와 '피전송자' 사이에 이미 연결된 통화가 있습니다.
  2. 전송자 또는 전송 대상 간에 이미 연결 된 호출이 있습니다.
  3. 전송 또는 transferee 호출을 전송 대상을 사용 하는 호출로 전송 하기로 결정 합니다.
  4. '전송자'가 transfer API를 호출합니다.
  5. '피전송자'는 transferRequested 이벤트를 사용하여 '전송 대상'으로의 전송 요청을 accept할지 아니면 reject할지 결정합니다.
  6. '전송 대상'은 '피전송자'가 전송 요청을 수락한 경우에만 수신 통화를 받습니다.

현재 통화를 전송하려면 transfer API를 사용하면 됩니다.

// transfer to the target call specifying the call id
const id = { targetCallId: <CALL_ID> };
// call transfer API
const transfer = callTransferApi.transfer({ targetCallId: <CALL_ID> });

transfer API를 사용하여 transferStateChangedtransferRequested 이벤트를 구독할 수 있습니다. transferRequested 이벤트는 call 인스턴스에서 발생하고, transferStateChanged 이벤트와 전송 stateerrortransfer 인스턴스에서 발생합니다.

// transfer state
const transferState = transfer.state; // None | Transferring | Transferred | Failed

// to check the transfer failure reason
const transferError = transfer.error; // transfer error code that describes the failure if a transfer request failed

'피전송자'는 transferRequested 이벤트에서 transferRequestedEventArgsaccept() 또는 reject()를 사용하여 '전송자'가 시작한 전송 요청을 수락하거나 거부할 수 있습니다. transferRequestedEventArgs에서 targetParticipant 정보와 accept 또는 reject 메서드에 액세스할 수 있습니다.

// Transferee to accept the transfer request
callTransferApi.on('transferRequested', args => {
    args.accept();
});

// Transferee to reject the transfer request
callTransferApi.on('transferRequested', args => {
    args.reject();
});

전송자 또는 는 전송 상태 변경에 대 한 이벤트를 구독할 수 있습니다. Transferee 에 대 한 호출이 전송 대상 에 성공적으로 연결 된 경우에는 transferee 를 사용 하 여 원래 호출을 중지할 수 있습니다 .

transfer.on('stateChanged', () => {
   if (transfer.state === 'Transferred') {
       call.hangUp();
   }
});

다음 단계