Sdílet prostřednictvím


Přepojení hovorů

Během aktivního hovoru můžete hovor přepojení přepojení na jinou osobu nebo číslo. Pojďme se naučit, jak na to.

Požadavky

Nainstalujte sadu SDK .

npm install Pomocí příkazu nainstalujte sadu AZURE Communication Services Common and Calling SDK pro JavaScript:

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

Inicializace požadovaných objektů

Pro CallClient většinu operací volání se vyžaduje instance. Když vytvoříte novou CallClient instanci, můžete ji nakonfigurovat s vlastními možnostmi, jako je Logger instance.

CallClient S instancí můžete vytvořit CallAgent instanci voláním createCallAgent. Tato metoda asynchronně vrátí CallAgent objekt instance.

Metoda createCallAgent se používá CommunicationTokenCredential jako argument. Přijímá přístupový token uživatele.

K přístupu deviceManagermůžete použít metodu getDeviceManager v CallClient instanci .

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 nejlépe spravovat připojení sady SDK k infrastruktuře Microsoftu

Tato Call Agent instance vám pomůže spravovat hovory (pro připojení nebo zahájení hovorů). Aby bylo možné pracovat s vaší sadou SDK volání, musí se připojit k infrastruktuře Microsoftu, aby bylo možné dostávat oznámení o příchozích hovorech a koordinovat další podrobnosti volání. Máte Call Agent dva možné stavy:

Připojení edCall Agent Hodnota connectionStatue znamená, Connected že klientská sada SDK je připojená a dokáže přijímat oznámení z infrastruktury Microsoftu.

OdpojenoCall Agent Hodnota Disconnected connectionStatue stavů existuje problém, který brání sadě SDK, aby se správně připojil. Call Agent by se mělo znovu vytvořit.

  • invalidToken: Pokud vypršela platnost tokenu nebo je neplatná Call Agent instance, odpojí se s touto chybou.
  • connectionIssue: Pokud došlo k problému s klientem, který se připojuje k infrascture Microsoftu, po mnoha opakovaných pokusech Call AgentconnectionIssue se zobrazí chyba.

Zkontrolujte, jestli je vaše místní Call Agent infrastruktura připojená k infrastruktuře Microsoftu, a to kontrolou aktuální hodnoty connectionState vlastnosti. Během aktivního volání můžete naslouchat connectionStateChanged události, abyste zjistili, jestli Call Agent se změny z Připojení stavuOdpojeno.

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

Přenos volání je rozšířená funkce základního Call rozhraní API. Nejdřív je potřeba importovat funkce volání ze sady SDK pro volání:

import { Features} from "@azure/communication-calling";

Pak můžete objekt rozhraní API funkce přenosu získat z instance volání:

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

Přenosy hovorů zahrnují tři strany:

  • Převodce: Osoba, která zahájí žádost o převod.
  • Příjemce: Osoba, která je převedena.
  • Cíl převodu: Osoba, na kterou se převádí.

Převod na účastníka:

  1. Mezi převodcem a příjemcem už existuje propojené volání. Přepojeníse rozhodne převést hovor z příjemce na cíl přenosu.
  2. Přepojení volá transfer rozhraní API.
  3. Cíl přenosu obdrží příchozí hovor pouze v případě, že příjemce přijme žádost o převod.

K přenosu aktuálního volání můžete použít transfer rozhraní API. transfer přebírá volitelný příznak transferCallOptions, který umožňuje nastavit disableForwardingAndUnanswered příznak:

  • disableForwardingAndUnanswered = false: Pokud cíl přenosu neodpoví na přepojení, přenos se řídí přesměrováním cíle přenosu a nezodpovězeným nastavením.
  • disableForwardingAndUnanswered = true: Pokud cíl přenosu neodpoví na přepojení, pokus o převod skončí.
// transfer target can be an Azure Communication Services user
const id = { communicationUserId: <ACS_USER_ID> };
// call transfer API
const transfer = callTransferApi.transfer({targetParticipant: id});

Přepojení na hovor:

  1. Mezi převodcem a příjemcem už existuje propojené volání.
  2. Mezi převodcem a cílovým přenosem už existuje propojené volání.
  3. Přepojení se rozhodne převést hovor s příjemcem na hovor s cílem převodu.
  4. Přepojení volá transfer rozhraní API.
  5. Cíl přenosu obdrží příchozí hovor pouze v případě, že příjemce přijme žádost o převod.

K přenosu aktuálního volání můžete použít transfer rozhraní 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> });

Rozhraní transfer API umožňuje přihlásit se k odběru stateChanged. Dodává se také s přenosem state a vlastnostmi.error

// 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

Příjemce může naslouchat transferAccepted události. Naslouchací proces pro tuto událost obsahuje TransferEventArgs objekt volání nového přepojiného volání mezi příjemcem a cílem přenosu.

// Transferee can subscribe to the transferAccepted event
callTransferApi.on('transferAccepted', args => {
    const newTransferCall =  args.targetCall;
});

Převodce se může přihlásit k odběru událostí pro změnu stavu přenosu. Pokud bylo volání na příjemce úspěšně připojeno k cíli přenosu, může přepojovač zavěsit původní hovor s příjemcem.

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

Další kroky