Transfer połączeń
Podczas aktywnego połączenia możesz przenieść połączenie do innej osoby, numeru lub poczty głosowej. Dowiedzmy się, jak to zrobić.
Wymagania wstępne
- Konto platformy Azure z aktywną subskrypcją. Utwórz konto bezpłatnie.
- Wdrożony zasób usług komunikacyjnych. Utwórz zasób usług komunikacyjnych.
- Token dostępu użytkownika umożliwiający włączenie klienta wywołującego. Aby uzyskać więcej informacji, zobacz Tworzenie tokenów dostępu i zarządzanie nimi.
- Opcjonalnie: ukończ przewodnik Szybki start, aby dodać połączenie głosowe do aplikacji
Instalacja zestawu SDK
Użyj polecenia , npm install
aby zainstalować wspólny zestaw SDK usług Azure Communication Services i wywołujący dla języka JavaScript:
npm install @azure/communication-common --save
npm install @azure/communication-calling --save
Inicjowanie wymaganych obiektów
Wystąpienie CallClient
jest wymagane w przypadku większości operacji wywołania. Podczas tworzenia nowego CallClient
wystąpienia można skonfigurować je za pomocą opcji niestandardowych, takich jak Logger
wystąpienie.
CallClient
Za pomocą wystąpienia można utworzyć CallAgent
wystąpienie, wywołując element createCallAgent
. Ta metoda asynchronicznie zwraca CallAgent
obiekt wystąpienia.
Metoda createCallAgent
używa CommunicationTokenCredential
jako argumentu. Akceptuje token dostępu użytkownika.
Aby uzyskać dostęp deviceManager
do obiektu , możesz użyć getDeviceManager
metody w wystąpieniu CallClient
.
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 console, file, buffer, REST API, or whatever location you want
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()
Jak najlepiej zarządzać łącznością zestawu SDK z infrastrukturą firmy Microsoft
Wystąpienie Call Agent
pomaga zarządzać wywołaniami (aby dołączyć lub uruchomić wywołania). Aby można było pracować z zestawem SDK wywołującym, należy połączyć się z infrastrukturą firmy Microsoft, aby otrzymywać powiadomienia o połączeniach przychodzących i koordynować inne szczegóły połączeń. Istnieją Call Agent
dwa możliwe stany:
Połączono — Call Agent
wartość Connected
connectionStatue oznacza, że zestaw SDK klienta jest połączony i może odbierać powiadomienia z infrastruktury firmy Microsoft.
Rozłączone — Call Agent
wartość Disconnected
connectionStatue stanów występuje problem uniemożliwiający prawidłowe nawiązywanie połączenia z zestawem SDK. Call Agent
należy utworzyć ponownie.
invalidToken
: Jeśli token wygasł lub jest nieprawidłoweCall Agent
wystąpienie rozłącza się z tym błędem.connectionIssue
: Jeśli występuje problem z połączeniem klienta z infrastrukturą firmy Microsoft, po wielu ponownych próbachCall Agent
connectionIssue
wystąpi błąd.
Możesz sprawdzić, czy środowisko lokalne Call Agent
jest połączone z infrastrukturą firmy Microsoft, sprawdzając bieżącą connectionState
wartość właściwości. Podczas aktywnego wywołania można nasłuchiwać zdarzenia, connectionStateChanged
aby określić, czy Call Agent
zmiany ze stanu Połączono z Odłączone .
const connectionState = callAgentInstance.connectionState;
console.log(connectionState); // it may return either of 'Connected' | 'Disconnected'
const connectionStateCallback = (args) => {
console.log(args); // it will return an object with oldState and newState, each of having a value of either of 'Connected' | 'Disconnected'
// it will also return reason, either of 'invalidToken' | 'connectionIssue'
}
callAgentInstance.on('connectionStateChanged', connectionStateCallback);
Transfer wywołań to rozszerzona funkcja podstawowego Call
interfejsu API. Najpierw należy zaimportować funkcje wywołujące z zestawu Sdk wywołującego:
import { Features} from "@azure/communication-calling";
Następnie możesz pobrać obiekt interfejsu API funkcji transferu z wystąpienia wywołania:
const callTransferApi = call.feature(Features.Transfer);
Transfery połączeń obejmują trzy strony:
- Transferor: osoba, która inicjuje żądanie przeniesienia.
- Transfer: Osoba, która jest przenoszona.
- Cel transferu: osoba, do której jest przenoszona.
Przenieś do uczestnika:
- Istnieje już połączenie między transferorem a transferem. Transferor decyduje się przenieść połączenie z transferu do celu transferu.
- Transferor wywołuje
transfer
interfejs API. - Obiekt docelowy transferu odbiera połączenie przychodzące tylko wtedy, gdy transfer akceptuje żądanie przeniesienia.
Aby przenieść bieżące wywołanie, możesz użyć interfejsu transfer
API. transfer
pobiera opcjonalny element transferCallOptions
, który umożliwia ustawienie flagi disableForwardingAndUnanswered
:
disableForwardingAndUnanswered = false
: Jeśli obiekt docelowy transferu nie odpowiada na wywołanie transferu, transfer jest zgodny z ustawieniami przekazywania docelowego transferu i bez odpowiedzi.disableForwardingAndUnanswered = true
: Jeśli obiekt docelowy transferu nie odpowiada na wywołanie transferu, próba przeniesienia zakończy się.
// transfer target can be an Azure Communication Services user
const id = { communicationUserId: <ACS_USER_ID> };
// call transfer API
const transfer = callTransferApi.transfer({targetParticipant: id});
Przenieś do połączenia:
- Istnieje już połączenie między transferorem a transferem.
- Istnieje już połączenie między transferorem a obiektem docelowym transferu.
- Transferor decyduje się przenieść połączenie z transferem do połączenia z celem transferu.
- Transferor wywołuje
transfer
interfejs API. - Obiekt docelowy transferu odbiera połączenie przychodzące tylko wtedy, gdy transfer akceptuje żądanie przeniesienia.
Aby przenieść bieżące wywołanie, możesz użyć interfejsu 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> });
Interfejs transfer
API umożliwia subskrybowanie usługi stateChanged
. Jest również dostarczany z transferem state
i error
właściwościami
// 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
Transfer może nasłuchiwać transferAccepted
zdarzenia. Odbiornik dla tego zdarzenia zawiera TransferEventArgs
obiekt wywołania nowego wywołania transferu między transferem a obiektem docelowym transferu.
// Transferee can subscribe to the transferAccepted event
callTransferApi.on('transferAccepted', args => {
const newTransferCall = args.targetCall;
});
Transferor może subskrybować zdarzenia dotyczące zmiany stanu transferu. Jeśli połączenie z transferem zostało pomyślnie nawiązane z obiektem docelowym transferu, transferor może zawiesić oryginalne połączenie z transferem.
transfer.on('stateChanged', () => {
if (transfer.state === 'Transferred') {
call.hangUp();
}
});
Przenieś do poczty głosowej:
- Istnieje połączenie między transferorem a transferem.
- Znany jest identyfikator użytkownika aplikacji Teams docelowej poczty głosowej uczestnika.
- Transferor decyduje się przenieść połączenie z transferem do wiadomości głosowej uczestnika docelowego przy użyciu identyfikatora użytkownika aplikacji Teams uczestnika docelowego.
- Transferor wywołuje
transfer
interfejs API. - Transfer odbiera żądanie przeniesienia.
Aby przenieść bieżące wywołanie, możesz użyć interfejsu transfer
API.
// transfer to the target participant voicemail specified by their Teams User Identifier
const id: MicrosoftTeamsUserIdentifier = { microsoftTeamsUserId: userId}
// call transfer API
const transfer = callTransferApi.transfer({ targetParticipantVoicemail: id });
Interfejs transfer
API umożliwia subskrybowanie usługi stateChanged
. Jest również dostarczany z transferem state
i error
właściwościami
// 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
Transfer może nasłuchiwać transferAccepted
zdarzenia. Odbiornik dla tego zdarzenia zawiera TransferEventArgs
obiekt wywołania nowego połączenia transferowego między transferem a docelową pocztą głosową uczestnika.
// Transferee can subscribe to the transferAccepted event
callTransferApi.on('transferAccepted', args => {
const newTransferCall = args.targetCall;
});
Transferor może subskrybować zdarzenia dotyczące zmiany stanu transferu. Jeśli połączenie z transferem zostało pomyślnie połączone z docelową pocztą głosową uczestnika, transferor może zawiesić oryginalne połączenie z transferem.
transfer.on('stateChanged', () => {
if (transfer.state === 'Transferred') {
call.hangUp();
}
});