통화 전송
중요
이 문서에 설명된 기능은 현재 공개 미리 보기 상태입니다. 이 미리 보기 버전은 서비스 수준 계약 없이 제공되며 프로덕션 워크로드에는 사용하지 않는 것이 좋습니다. 특정 기능이 지원되지 않거나 기능이 제한될 수 있습니다. 자세한 내용은 Microsoft Azure Preview에 대한 추가 사용 약관을 참조하세요.
활성 통화 중에 다른 사용자 또는 번호로 통화를 전송할 수 있습니다. 방법을 알아보겠습니다.
필수 구성 요소
- 활성 구독이 있는 Azure 계정. 체험 계정을 만듭니다.
- 배포된 Communication Services 리소스. Communication Services 리소스를 만듭니다.
- 호출 클라이언트를 사용하도록 설정하는 사용자 액세스 토큰입니다. 자세한 내용은 액세스 토큰 만들기 및 관리를 참조하세요.
- 선택 사항: 빠른 시작을 완료하여 애플리케이션에 음성 통화 추가
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 Azure Communication Services user name'});
const deviceManager = await callClient.getDeviceManager()
참고
이 API는 개발자를 위한 미리 보기로 제공되며 수신한 피드백을 기반으로 변경될 수 있습니다. 프로덕션 환경에서 이 API를 사용하지 마세요. 이 API를 사용하려면 Azure Communication Services Calling Web SDK의 '베타' 릴리스를 사용하세요.
통화 전송은 핵심 Call
API의 확장 기능입니다. 먼저 통화 SDK에서 통화 기능을 가져와야 합니다.
import { Features} from "@azure/communication-calling";
그런 다음 호출 인스턴스에서 전송 기능 API 개체를 가져올 수 있습니다.
const callTransferApi = call.feature(Features.Transfer);
통화 전환에는 세 명의 당사자가 포함됩니다.
- '전송자': 전송 요청을 시작한 사람입니다.
- '피전송자': 이 사람의 통화가 전송됩니다.
- '전송 대상': 통화가 이 사람에게 전송됩니다.
참가자에게 전송:
- '전송자'와 '피전송자' 사이에 이미 연결된 통화가 있습니다. '전송자'가 '피전송자'와의 통화를 '전송 대상'으로 전송하기로 결정합니다.
- '전송자'가
transfer
API를 호출합니다. - '피전송자'는
transferRequested
이벤트를 사용하여 '전송 대상'으로의 전송 요청을accept
할지 아니면reject
할지 결정합니다. - '전송 대상'은 '피전송자'가 전송 요청을 수락한 경우에만 수신 통화를 받습니다.
현재 통화를 전송하려면 transfer
API를 사용하면 됩니다. transfer
는 사용자가 disableForwardingAndUnanswered
플래그를 설정할 수 있는 transferCallOptions
옵션을 허용합니다.
disableForwardingAndUnanswered = false
: '전송 대상'이 전송 통화에 응답하지 않으면 전송은 '전송 대상' 착신 전환 및 응답 없음 설정을 따릅니다.disableForwardingAndUnanswered = true
: '전송 대상'이 전송 통화에 응답하지 않으면 전송 시도가 종료됩니다.
// transfer target can be an Azure Communication Services user
const id = { communicationUserId: <ACS_USER_ID> };
// call transfer API
const transfer = callTransferApi.transfer({targetParticipant: id});
호출로 전송:
- '전송자'와 '피전송자' 사이에 이미 연결된 통화가 있습니다.
- 전송자와 전송대상 간에 이미 연결된 호출이 있습니다.
- 전송자는 전송 대상을 사용하여 전송자와 통화를 전송하기로 결정합니다.
- '전송자'가
transfer
API를 호출합니다. - '피전송자'는
transferRequested
이벤트를 사용하여 '전송 대상'으로의 전송 요청을accept
할지 아니면reject
할지 결정합니다. - '전송 대상'은 '피전송자'가 전송 요청을 수락한 경우에만 수신 통화를 받습니다.
현재 통화를 전송하려면 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를 사용하여 transferStateChanged
및 transferRequested
이벤트를 구독할 수 있습니다. transferRequested
이벤트는 call
인스턴스에서 발생하고, transferStateChanged
이벤트와 전송 state
및 error
는 transfer
인스턴스에서 발생합니다.
// 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
이벤트에서 transferRequestedEventArgs
의 accept()
또는 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();
});
전송자는 전송 상태 변경을 위해 이벤트를 구독할 수 있습니다. 전송자에 대한 호출이 전송 대상과 성공적으로 연결된 경우 전송자는 전송자와 원래 호출을 끊을 수 있습니다.
transfer.on('stateChanged', () => {
if (transfer.state === 'Transferred') {
call.hangUp();
}
});