Přepojení hovorů
Během aktivního hovoru můžete chtít hovor přepojení na jinou osobu, číslo nebo hlasovou poštu. Pojďme se naučit, jak na to.
Požadavky
- Účet Azure s aktivním předplatným. Vytvoření účtu zdarma
- Nasazený prostředek komunikační služby. Vytvořte prostředek komunikační služby.
- Přístupový token uživatele pro povolení volajícího klienta. Další informace najdete v tématu Vytváření a správa přístupových tokenů.
- Volitelné: Dokončením rychlého startu přidáte do aplikace hlasové hovory.
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 deviceManager
můž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řipojeno – Call Agent
Hodnota connectionStatue znamená, Connected
že klientská sada SDK je připojená a dokáže přijímat oznámení z infrastruktury Microsoftu.
Odpojeno – Call 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 pokusechCall Agent
connectionIssue
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 a zjistit, jestli Call Agent
se změny ze stavu Připojeno k Odpojeno .
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:
- 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.
- Přepojení volá
transfer
rozhraní API. - Cíl přenosu přijme příchozí hovor.
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:
- Mezi převodcem a příjemcem už existuje propojené volání.
- Mezi převodcem a cílovým přenosem už existuje propojené volání.
- Přepojení se rozhodne převést hovor s příjemcem na hovor s cílem převodu.
- Přepojení volá
transfer
rozhraní API. - Cíl přenosu přijme příchozí hovor.
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();
}
});
Přenos do hlasové pošty:
- Mezi převodcem a příjemcem je připojeno volání.
- Identifikátor uživatele teams cílové hlasové pošty účastníka je známý.
- Přepojení se rozhodne přepojení hovoru s příjemcem do hlasové pošty cílového účastníka pomocí identifikátoru uživatele Teams cílového účastníka.
- Přepojení volá
transfer
rozhraní API. - Příjemce obdrží žádost o převod.
K přenosu aktuálního volání můžete použít transfer
rozhraní 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 });
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řenosu mezi uživatelem přenosu a hlasovou zprávou cílového účastníka.
// 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 byl hovor na příjemce úspěšně připojen k hlasové poště cílového účastníka, může přepojovač zavěsit původní hovor s příjemcem.
transfer.on('stateChanged', () => {
if (transfer.state === 'Transferred') {
call.hangUp();
}
});