Condividi tramite


Trasferire e inoltrare chiamate

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

Prerequisiti

Installazione dell'SDK

Usare il comando npm install per installare SDK comuni e di chiamata di 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 di CallClient. Quando si crea una nuova istanza di CallClient, è possibile configurarla con opzioni personalizzate come un'istanza di Logger.

Con l'istanza di CallClient è possibile creare un'istanza di CallAgent chiamando il createCallAgent. Questo metodo restituisce in modo asincrono un oggetto istanza CallAgent.

Il metodo createCallAgent usa CommunicationTokenCredential come argomento. Accetta un token di accesso utente.

È possibile usare il metodo getDeviceManager nell'istanza di CallClient per accedere a deviceManager.

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. Call Agent ha due possibili stati:

Connesso : un valore connectionStatue Call Agent di Connected indica che l'SDK client è connesso e in grado di ricevere notifiche dall'infrastruttura Microsoft.

Disconnesso : un valore connectionStatue Call Agent di Disconnected indica un problema che impedisce all'SDK di connettersi correttamente. Call Agent deve essere ricreato.

  • invalidToken: se un token è scaduto o non è valido l'istanza 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 proprietà connectionState. Durante una chiamata attiva è possibile restare in ascolto dell'evento connectionStateChanged per determinare se Call Agent cambia dallo stato Connesso 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 trasferee. Il transferor decide di trasferire la chiamata dal transferee alla destinazione trasferimento.
  2. Il transferor chiama l'API transfer.
  3. La destinazione di trasferimento riceve una chiamata in ingresso solo se il transferee 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 flag disableForwardingAndUnanswered:

  • 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 trasferee.
  2. Esiste già una chiamata connessa tra il transferor e la destinazione di trasferimento.
  3. Il transferor decide di trasferire la chiamata con il transferee 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 transferee 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 proprietà di trasferimento state e 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

L'oggetto transferee può restare in ascolto di un evento transferAccepted. Il listener per questo evento ha un TransferEventArgs che contiene l'oggetto chiamata della nuova chiamata di trasferimento tra il 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 transferee.

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

Trasferimento alla segreteria telefonica:

  1. Esiste una chiamata connessa tra il transferor e il trasferee.
  2. L'identificatore utente di Teams della segreteria telefonica del partecipante di destinazione è noto.
  3. Il transferor decide di trasferire la chiamata con il transferee alla segreteria telefonica del partecipante di destinazione usando l’ID utente di Teams del partecipante di destinazione.
  4. Il transferor chiama l'API transfer.
  5. Il transferee riceve la richiesta di trasferimento.

Per trasferire una chiamata corrente, è possibile usare l'API transfer.

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

L'API transfer consente di sottoscrivere stateChanged. Viene inoltre fornito con proprietà di trasferimento state e 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

L'oggetto transferee può restare in ascolto di un evento transferAccepted. Il listener per questo evento ha un TransferEventArgs che contiene l'oggetto chiamata della nuova chiamata di trasferimento tra il transferee e la segreteria telefonica del partecipante di destinazione.

// 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 alla segreteria telefonica del partecipante di destinazione, transferor può appendere la chiamata originale con transferee.

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

Passaggi successivi