Trasferire le chiamate

Importante

Le funzionalità descritte in questo documento sono attualmente in anteprima pubblica. Questa versione di anteprima viene fornita senza contratto di servizio e non è consigliata per carichi di lavoro di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate. Per altre informazioni, vedere Condizioni supplementari per l'utilizzo delle anteprime di Microsoft Azure.

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

Prerequisiti

Installare l'SDK

Usare il npm install comando per installare il Servizi di comunicazione di Azure e gli SDK comuni per JavaScript.

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

Inizializzare gli oggetti necessari

Un'istanza di CallClient è necessaria per la maggior parte delle operazioni di chiamata. Creare una nuova CallClient istanza. È possibile configurarlo con opzioni personalizzate, ad esempio un'istanza di Logger.

Quando si dispone di CallClient un'istanza di , è possibile creare CallAgent un'istanza chiamando il createCallAgent metodo CallClient sull'istanza . Questo metodo restituisce in modo asincrono un CallAgent oggetto istanza.

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

È possibile usare il getDeviceManager metodo CallClient nell'istanza di 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 wherever desired. To console, file, buffer, REST API, etc...
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 ACS user name'});
const deviceManager = await callClient.getDeviceManager()

Nota

Questa API viene fornita come anteprima per gli sviluppatori e potrebbe essere modificata in base ai commenti ricevuti. Non usare questa API in un ambiente di produzione. Per usare questa API, usare la versione "beta" di ACS Calling Web SDK

Il trasferimento delle chiamate è una funzionalità estesa Call dell'API principale. È prima necessario ottenere l'oggetto API della funzionalità di trasferimento:

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

I trasferimenti di chiamata coinvolgono tre parti:

  • Trasferimentore: la persona che avvia la richiesta di trasferimento.
  • Trasferito: la persona che viene trasferita.
  • Destinazione di trasferimento: la persona a cui viene trasferito.

Trasferimento al partecipante:

  1. Esiste già una chiamata connessa tra il trasfertore e il trasferitore. Il trasferimento decide di trasferire la chiamata dal trasferitore all'oggetto di destinazione del trasferimento.
  2. Il trasferimento chiama l'API. transfer
  3. Il destinatario del trasferimento decide se determinare se la richiesta di trasferimento alla destinazione del trasferimento accept viene inviata tramite un evento reject transferRequested .
  4. La destinazione di trasferimento riceve una chiamata in ingresso solo se il destinatario accetta la richiesta di trasferimento.

Per trasferire una chiamata corrente, è possibile usare transfer l'API . transfer accetta transferCallOptions l'oggetto facoltativo , 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 della destinazione di trasferimento e le impostazioni senza risposta.
  • disableForwardingAndUnanswered = true: se la destinazione del trasferimento non risponde alla chiamata di trasferimento, il tentativo di trasferimento termina.
// transfer target can be an ACS user
const id = { communicationUserId: <ACS_USER_ID> };
// call transfer API
const transfer = callTransferApi.transfer({targetParticipant: id});

Trasferimento a chiamata:

  1. Esiste già una chiamata connessa tra il trasfertore e il trasferitore.
  2. Esiste già una chiamata connessa tra il trasferimento e la destinazione di trasferimento.
  3. Il trasferimento decide di trasferire la chiamata con il trasferitore alla chiamata con destinazione di trasferimento.
  4. Il trasferimento chiama l'API. transfer
  5. Il destinatario del trasferimento decide se determinare se la richiesta di trasferimento alla destinazione del trasferimento accept viene inviata tramite un evento reject transferRequested .
  6. La destinazione di trasferimento riceve una chiamata in ingresso solo se il destinatario accetta la richiesta di trasferimento.

Per trasferire una chiamata corrente, è possibile usare transfer l'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> });

transferL'API consente di sottoscrivere transferStateChanged gli eventi e transferRequested . Un transferRequested evento proviene da un'istanza di , un evento e lo call transferStateChanged state error trasferisce e proviene da un'istanza transfer di .

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

Il trasferitore può accettare o rifiutare la richiesta di trasferimento avviata dal trasferimentotore nell'evento transferRequested usando o in accept() reject() transferRequestedEventArgs . È possibile accedere targetParticipant alle informazioni e ai metodi o in accept reject transferRequestedEventArgs .

// Transferee to accept the transfer request
callTransferApi.on('transferRequested', args => {
    args.accept();
});

// Transferee to reject the transfer request
callTransferApi.on('transferRequested', args => {
    args.reject();
});

Il trasferimento può sottoscrivere eventi per la modifica dello stato del trasferimento. Se la chiamata al destinatario del trasferimento è stata connessa correttamente con la destinazione transfer, il trasferimento può bloccarsi la chiamata originale con transferee.

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

Passaggi successivi