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
- Una cuenta de Azure con una suscripción activa. Cree una cuenta gratuita.
- Un recurso de Communication Services implementado. Cree un recurso de Communication Services.
- Un token de acceso de usuario para habilitar el cliente de llamada. Para más información, consulte Inicio rápido: Creación y administración de tokens de acceso.
- Opcional: Realice el inicio rápido para agregar llamadas de voz a la aplicación
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 Azure Communication Services 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, use la versión "beta" del SDK web de llamada de Azure Communication Services.
La trasferencia de llamadas es una característica extendida de la API Call
principal. En primer lugar, debe importar las características de llamada desde el SDK de llamada:
import { Features} from "@azure/communication-calling";
A continuación, puede obtener el objeto de API de la característica de transferencia de la instancia de llamada:
const callTransferApi = call.feature(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.
Transferencia al participante:
- Ya hay una llamada conectada entre el transmitente y el adquirente. El transmitente decide transferir la llamada del adquirente al destino de la transferencia.
- El transmitente llama a
transfer
API. - El adquirente decide si
accept
oreject
la solicitud de transferencia al destino de la transferencia mediante un eventotransferRequested
. - 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 Azure Communication Services user
const id = { communicationUserId: <ACS_USER_ID> };
// call transfer API
const transfer = callTransferApi.transfer({targetParticipant: id});
Transferencia para llamar:
- Ya hay una llamada conectada entre el transmitente y el adquirente.
- Ya hay una llamada conectada entre el transmitente y el destino de la transferencia.
- El transmitente decide transferir la llamada con el adquirente a la llamada con destino de la transferencia.
- El transmitente llama a
transfer
API. - El adquirente decide si
accept
oreject
la solicitud de transferencia al destino de la transferencia mediante un eventotransferRequested
. - 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 to the target call specifying the call id
const id = { targetCallId: <CALL_ID> };
// call transfer API
const transfer = callTransferApi.transfer({ targetCallId: <CALL_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();
});
El transmitente puede suscribirse a eventos para cambiar el estado de la transferencia. Si la llamada al adquirente se conectó correctamente con destino de transferencia, el transmitente puede hacer que la llamada original se cuelgue con el adquirente.
transfer.on('stateChanged', () => {
if (transfer.state === 'Transferred') {
call.hangUp();
}
});