Trasferire e inoltrare chiamate

Durante una chiamata attiva, è possibile trasferire la chiamata a un'altra persona o numero. Si apprenderà come.

Prerequisiti

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 CallClientCallAgent 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 getDeviceManagerCallClient di per accedere deviceManagera .

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 è valida Call Agent si disconnette con questo errore.
  • connectionIssue: se si verifica un problema con il client che si connette a Microsoft infrascture, dopo molti tentativi Call Agent espone l'errore connectionIssue .

È 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:

  1. 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.
  2. Il transferor chiama l'API transfer .
  3. 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:

  1. Esiste già una chiamata connessa tra il transferor e il trasferimento.
  2. Esiste già una chiamata connessa tra il transferor e la destinazione di trasferimento.
  3. Il transferor decide di trasferire la chiamata con l'utente trasferito alla chiamata con destinazione di trasferimento.
  4. Il transferor chiama l'API transfer .
  5. 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();
   }
});

Passaggi successivi