Transferencia de llamadas

Importante

La funcionalidad que se describe en este documento se encuentra actualmente en versión preliminar pública. Esta versión preliminar se ofrece sin Acuerdo de Nivel de Servicio y no se recomienda para cargas de trabajo de producción. Es posible que algunas características no sean compatibles o que tengan sus funcionalidades limitadas. Para más información, consulte Términos de uso complementarios de las Versiones Preliminares de Microsoft Azure.

Durante una llamada activa, puede transferirla a otra persona o número. Veamos cómo hacerlo.

Requisitos previos

Instalación del SDK

Use el comando npm install para instalar los SDK comunes y de llamada de Azure Communication Services para JavaScript.

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

Inicialización de los objetos necesarios

Se requiere una instancia de CallClient para la mayoría de las operaciones de llamada. Vamos a crear una instancia de CallClient. Se puede configurar con opciones personalizadas como una instancia del registrador.

Cuando haya creado una instancia de CallClient, puede crear una de CallAgent mediante una llamada al método createCallAgent en la instancia de CallClient. Este método devuelve un objeto de instancia CallAgent de manera asincrónica.

El método createCallAgent utiliza CommunicationTokenCredential como argumento. Acepta un token de acceso de usuario.

Puede usar el método getDeviceManager en la instancia de CallClient para acceder 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

Esta API se ofrece a los desarrolladores como versión preliminar y puede cambiar en función de los comentarios que recibamos. No utilice esta API en un entorno de producción. Para usar esta API, utilice la versión beta del SDK web de llamada de ACS.

La trasferencia de llamadas es una característica extendida de la API Call principal. Primero debe obtener el objeto de API de la característica de transferencia:

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

Las transferencias de llamadas implican tres entidades:

  • Transmitente: la persona que inicia la solicitud de transferencia.
  • Adquirente: la persona que se va a transferir.
  • Destino de la transferencia: la persona a la que se transfiere.

Las transferencias siguen estos pasos:

  1. Ya hay una llamada conectada entre el transmitente y el adquirente. El transmitente decide transferir la llamada del adquirente al destino de la transferencia.
  2. El transmitente llama a transfer API.
  3. El adquirente decide si accept o reject la solicitud de transferencia al destino de la transferencia mediante un evento transferRequested.
  4. El destino de la transferencia recibe una llamada entrante solo si el adquirente acepta la solicitud de transferencia.

Para transferir la llamada actual, puede usar transfer API. transfer toma el objeto transferCallOptions opcional, que permite establecer la marca disableForwardingAndUnanswered:

  • disableForwardingAndUnanswered = false: si el destino de la transferencia no responde a la llamada de transferencia, la transferencia sigue las configuraciones de reenvío y sin respuesta del destino de la transferencia.
  • disableForwardingAndUnanswered = true: si el destino de la transferencia no responde a la llamada de transferencia, el intento de transferencia finalizará.
// transfer target can be an ACS user
const id = { communicationUserId: <ACS_USER_ID> };
// call transfer API
const transfer = callTransferApi.transfer({targetParticipant: id});

transfer API le permite suscribirse a los eventos transferStateChanged y transferRequested. Un evento transferRequested procede de una instancia de call, un evento transferStateChanged y la transferencia state y error provienen de una instancia de transfer.

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

El adquirente puede aceptar o rechazar la solicitud de transferencia iniciada por el transmitente en el evento transferRequested a través de accept() o reject() en transferRequestedEventArgs. Puede acceder a la información de targetParticipant y a los métodos accept y reject en 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();
});

Pasos siguientes