Trasferire e inoltrare chiamate
Durante una chiamata attiva, è possibile trasferire la chiamata a un'altra persona o numero. Si apprenderà come.
Prerequisiti
- Un account Azure con una sottoscrizione attiva. Creare un account gratuitamente.
- Una risorsa di Servizi di comunicazione distribuita. Creare una risorsa di Servizi di comunicazione.
- Token di accesso utente per abilitare il client chiamante. Per altre informazioni, vedere Creare e gestire i token di accesso.
- Facoltativo: Completare la guida introduttiva per aggiungere chiamate vocali all'applicazione
Installare SDK
Usare il npm install
comando per installare l'SDK comune e chiamante Servizi di comunicazione di Azure per JavaScript:
npm install @azure/communication-common --save
npm install @azure/communication-calling --save
Inizializzare gli oggetti necessari
Per la maggior parte delle operazioni di chiamata è necessaria un'istanza CallClient
di . Quando si crea una nuova CallClient
istanza, è possibile configurarla con opzioni personalizzate come un'istanza Logger
di .
Con l'istanza di è possibile creare un'istanza CallClient
CallAgent
chiamando .createCallAgent
Questo metodo restituisce in modo asincrono un CallAgent
oggetto istanza.
Il createCallAgent
metodo usa CommunicationTokenCredential
come argomento. Accetta un token di accesso utente.
È possibile usare il metodo nell'istanza getDeviceManager
CallClient
di per accedere deviceManager
a .
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()
Come gestire al meglio la connettività dell'SDK all'infrastruttura Microsoft
L'istanza Call Agent
consente di gestire le chiamate (per partecipare o avviare le chiamate). Per lavorare con l'SDK per chiamate, è necessario connettersi all'infrastruttura Microsoft per ricevere notifiche delle chiamate in arrivo e coordinare altri dettagli delle chiamate. Gli Call Agent
stati possibili sono due:
Connessione ed: un Call Agent
valore connectionStatue indica Connected
che l'SDK client è connesso e in grado di ricevere notifiche dall'infrastruttura Microsoft.
Disconnesso : valore Call Agent
connectionStatue di Disconnected
stati che impedisce all'SDK di connettersi correttamente. Call Agent
deve essere ricreato.
invalidToken
: se un token è scaduto o l'istanza non è validaCall Agent
si disconnette con questo errore.connectionIssue
: se si verifica un problema con il client che si connette a Microsoft infrascture, dopo molti tentativiCall Agent
espone l'erroreconnectionIssue
.
È possibile verificare se l'infrastruttura locale Call Agent
è connessa all'infrastruttura Microsoft controllando il valore corrente della connectionState
proprietà. Durante una chiamata attiva è possibile restare in ascolto dell'evento connectionStateChanged
per determinare se Call Agent
cambia da Connessione stato disconnesso a Disconnesso.
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);
Il trasferimento delle chiamate è una funzionalità estesa dell'API principale Call
. È prima necessario importare le funzionalità chiamante da Calling SDK:
import { Features} from "@azure/communication-calling";
È quindi possibile ottenere l'oggetto API della funzionalità di trasferimento dall'istanza di chiamata:
const callTransferApi = call.feature(Features.Transfer);
I trasferimenti di chiamata coinvolgono tre parti:
- Transferor: persona che avvia la richiesta di trasferimento.
- Transferee: la persona che viene trasferita.
- Destinazione trasferimento: la persona a cui viene trasferito.
Trasferimento al partecipante:
- Esiste già una chiamata connessa tra il transferor e il trasferimento. Il transferor decide di trasferire la chiamata dall'utente trasferito alla destinazione di trasferimento.
- Il transferor chiama l'API
transfer
. - La destinazione di trasferimento riceve una chiamata in ingresso solo se il trasferimento accetta la richiesta di trasferimento.
Per trasferire una chiamata corrente, è possibile usare l'API transfer
. transfer
accetta l'oggetto facoltativo transferCallOptions
, che consente di impostare un disableForwardingAndUnanswered
flag:
disableForwardingAndUnanswered = false
: se la destinazione di trasferimento non risponde alla chiamata di trasferimento, il trasferimento segue l'inoltro di destinazione del trasferimento e le impostazioni senza risposta.disableForwardingAndUnanswered = true
: se la destinazione di trasferimento non risponde alla chiamata di trasferimento, il tentativo di trasferimento termina.
// transfer target can be an Azure Communication Services user
const id = { communicationUserId: <ACS_USER_ID> };
// call transfer API
const transfer = callTransferApi.transfer({targetParticipant: id});
Trasferisci per chiamare:
- Esiste già una chiamata connessa tra il transferor e il trasferimento.
- Esiste già una chiamata connessa tra il transferor e la destinazione di trasferimento.
- Il transferor decide di trasferire la chiamata con l'utente trasferito alla chiamata con destinazione di trasferimento.
- Il transferor chiama l'API
transfer
. - La destinazione di trasferimento riceve una chiamata in ingresso solo se il trasferimento accetta la richiesta di trasferimento.
Per trasferire una chiamata corrente, è possibile usare l'API 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> });
L'API transfer
consente di sottoscrivere stateChanged
. Viene inoltre fornito con un trasferimento state
e error
proprietà
// 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
L'oggetto transfere può restare in ascolto di un transferAccepted
evento. Il listener per questo evento ha un TransferEventArgs
oggetto che contiene l'oggetto chiamata della nuova chiamata di trasferimento tra l'oggetto transferee e la destinazione di trasferimento.
// Transferee can subscribe to the transferAccepted event
callTransferApi.on('transferAccepted', args => {
const newTransferCall = args.targetCall;
});
Il transferor può sottoscrivere eventi per la modifica dello stato del trasferimento. Se la chiamata al transferee è stata connessa correttamente con la destinazione di trasferimento, il transferor può appendere la chiamata originale con il trasferimento.
transfer.on('stateChanged', () => {
if (transfer.state === 'Transferred') {
call.hangUp();
}
});