Udostępnij za pośrednictwem


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 deviceManagerdo 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łą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 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:

  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 transfer interfejs API.
  3. 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:

  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 transfer interfejs API.
  5. 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:

  1. Istnieje połączenie między transferorem a transferem.
  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 transfer interfejs API.
  5. 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();
   }
});

Następne kroki