Udostępnij przez


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

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 getDeviceManagerdo obiektu , możesz użyć CallClient metody w wystąpieniu 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 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()

Zarządzanie łą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łączonoCall Agent wartość Connected connectionStatue oznacza, że zestaw SDK klienta jest połączony i może odbierać powiadomienia z infrastruktury firmy Microsoft.

RozłączoneCall 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łowe Call 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óbach Call Agent uwidacznia błąd connectionIssue.

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 inicjująca żądanie przeniesienia.
  • Osoba przenoszona: Osoba, która jest przenoszona.
  • Obiekt docelowy transferu: osoba, do której jest przesyłane połączenie.

Przenieś do uczestnika:

  1. Istnieje już połączenie między transferorem a transferem. Transferor decyduje się przenieść połączenie z transferu do celu transferu.
  2. Transferor wywołuje operację transfer.
  3. Obiekt docelowy transferu odbiera połączenie przychodzące.

Aby przenieść bieżące wywołanie, możesz użyć operacji transfer. Operacja transfer przyjmuje opcjonalny element transferCallOptions, umożliwiając 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:

  1. Istnieje już połączenie między transferorem a transferem.
  2. Istnieje już połączenie między transferorem a obiektem docelowym transferu.
  3. Transferor decyduje się przenieść połączenie z transferem do połączenia z celem transferu.
  4. Transferor wywołuje operację transfer.
  5. Obiekt docelowy transferu odbiera połączenie przychodzące.

Aby przenieść bieżące połączenie, użyj polecenia transfer.

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

Obiekt transfer Aobject umożliwia subskrybowanie 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 ma TransferEventArgs, który zawiera obiekt wywołania nowego połączenia transferowego między osobą przekazywaną a celem 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:

  1. Istnieje połączenie między transfererem a transferobiorcą.
  2. Znany jest identyfikator użytkownika aplikacji Teams docelowej poczty głosowej uczestnika.
  3. 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.
  4. Transferor wywołuje metodę transfer.
  5. Transfer odbiera żądanie przeniesienia.

Aby przenieść bieżące połączenie, możesz użyć polecenia transfer.

// 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 });

Operacja transfer umożliwia subskrybowanie 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 ma TransferEventArgs, który zawiera obiekt wywołania nowego połączenia transferowego pomiędzy osobą przekazującą a pocztą głosową docelowego 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 transferowanym pomyślnie nawiązało kontakt z docelową pocztą głosową uczestnika, transferujący może zakończyć oryginalne połączenie z transferowanym.

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

Informacje o inicjalnym rozmówcy i przekazującym

Gdy uczestnik przekazuje lub przesyła połączenie, transferInfo jest wypełniany informacjami na temat poprzedniego stanu połączenia. Te informacje obejmują callerInfoelement , który opisuje początkowy obiekt wywołujący i transferorInfo, który opisuje jednostkę przesyłającą lub przekazującą wywołanie.

Na przykład, jeśli użytkownik usług Azure Communication Services wykonuje połączenie do kolejki połączeń usługi Teams, która następnie przekierowuje połączenie do użytkownika Microsoft 365, callerInfo określi użytkownika usług Azure Communication Services, a transferorInfo określi kolejkę połączeń usługi Teams. Osoby wywołujące i transferatory mają możliwość aktualizowania ich displayName. Jeśli tak, zmiana wyzwala jedno z wydarzeń callerInfoChanged lub transferorInfoChanged.

Aby uzyskać więcej informacji na temat zdarzeń zmiany, zobacz Event: callerInfoChanged i Event: transferorInfoChanged. Zdarzenia zmiany dotyczą wszystkich wywołań i dowolnej tożsamości, w tym funkcji Bring Your Own Identity (BYOI) lub Platformy Microsoft 365.

const incomingCallHandler = async (args: { incomingCall: IncomingCall }) => {
    const incomingCall = args.incomingCall;
    // Get information about initial caller
    const callerInfo = incomingCall.callerInfo
    // Get information about initial caller
    const transferorInfo = incomingCall.transferorInfo
};

Następne kroki