Transferir e encaminhar chamadas
Importante
A funcionalidade descrita neste documento está em versão prévia pública. Essa versão prévia é fornecida sem um contrato de nível de serviço e não é recomendada para cargas de trabalho de produção. Alguns recursos podem não ter suporte ou podem ter restrição de recursos. Para obter mais informações, consulte Termos de Uso Complementares de Versões Prévias do Microsoft Azure.
Durante uma chamada ativa, talvez você queira transferir a chamada para outra pessoa ou número. Vamos aprender como.
Pré-requisitos
- Uma conta do Azure com uma assinatura ativa. Crie uma conta gratuitamente.
- Um recurso dos Serviços de Comunicação implantado. Crie um recurso dos Serviços de Comunicação.
- Um token de acesso de usuário para habilitar o cliente de chamada. Para saber mais, confira Criar e gerenciar token de acesso.
- Opcional: conclua o guia de início rápido para adicionar uma chamada de voz ao seu aplicativo
Instalar o SDK
Use o comando npm install
para instalar a chamada dos Serviços de Comunicação do Azure e SDKs comuns para JavaScript.
npm install @azure/communication-common --save
npm install @azure/communication-calling --save
Inicializar objetos necessários
A instância CallClient é necessária para a maioria das operações de chamada. Vamos criar uma nova instância CallClient
. Você pode configurá-la com opções personalizadas, como uma instância do Agente.
Quando você tem uma CallClient
instância, é possível criar uma CallAgent
instância, chamando o createCallAgent
método na instância CallClient
. Esse método retorna de modo assíncrono um objeto de instância CallAgent
.
O método createCallAgent
usa CommunicationTokenCredential
como um argumento. Ele aceita um token de acesso do usuário.
Você pode usar o método getDeviceManager
na instância CallClient
para acessar o 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()
Observação
Esta API é fornecida como uma versão prévia para desenvolvedores e pode ser alterada com base nos comentários que recebemos. Não use esta API em um ambiente de produção. Para usar essa API, use a versão beta do SDK de chamadas da Web dos Serviços de Comunicação do Azure
A transferência de chamadas é um recurso estendido da API Call
principal. Primeiro, você precisa importar recursos de chamada do SDK de Chamada:
import { Features} from "@azure/communication-calling";
Em seguida, você pode obter o objeto de API de recurso de transferência da instância de chamada:
const callTransferApi = call.feature(Features.Transfer);
As transferências de chamada envolvem três partes:
- Emitente da transferência : Aquele que inicia a solicitação de transferência.
- Destino de transferência: a pessoa que está sendo transferida.
- Destino da transferência: a pessoa que está sendo transferida.
Transferir para o participante:
- Já existe uma chamada conectada entre o emitente da transferência e o destinatário da transferência. O emitente da transferência decide transferir a chamada do transferida para o destino de transferência.
- O emitente da transferência chama a
transfer
API. - O beneficiário decide se deseja
accept
oureject
a solicitação de transferência para o destino de transferência usando umtransferRequested
evento. - Odestino de transferência recebe uma chamada de entrada somente se odestinatário da transferência aceitar a solicitação de transferência.
Para transferir uma chamada atual, você pode usar a API transfer
. O transfer
usa o transferCallOptions
opcional, que permite que você defina um sinalizador disableForwardingAndUnanswered
:
disableForwardingAndUnanswered = false
: Se o destino da transferência não responder à chamada de transferência, a transferência segue as configurações não respondidas e de encaminhamento do destino de transferência.disableForwardingAndUnanswered = true
: Se o destino da transferência não responder à chamada de transferência, a tentativa de transferência se encerra.
// transfer target can be an Azure Communication Services user
const id = { communicationUserId: <ACS_USER_ID> };
// call transfer API
const transfer = callTransferApi.transfer({targetParticipant: id});
Transferir para a chamada:
- Já existe uma chamada conectada entre o emitente da transferência e o destinatário da transferência.
- Já existe uma chamada conectada entre o emitente da transferência e o destino da transferência.
- O emitente da transferência decide transferir a chamada do destinatário da transferência para o destino de transferência.
- O emitente da transferência chama a
transfer
API. - O beneficiário decide se deseja
accept
oureject
a solicitação de transferência para o destino de transferência usando umtransferRequested
evento. - Odestino de transferência recebe uma chamada de entrada somente se odestinatário da transferência aceitar a solicitação de transferência.
Para transferir uma chamada atual, você pode usar a 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> });
A transfer
API permite que você assine os eventostransferStateChanged
e transferRequested
. Um evento transferRequested
vem de uma instância call
; um evento transferStateChanged
e uma transferência state
e error
provenientes de uma transfer
instância.
// 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
O destinatário da transferência pode aceitar ou rejeitar a solicitação de transferência iniciada pelo emitente da transferência no evento transferRequested
por meio do accept()
ou doreject()
no transferRequestedEventArgs
. Você pode acessar informações targetParticipant
e accept
ou os métodos reject
em 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();
});
O emitente da transferência pode assinar eventos para obter a alteração do estado da transferência. Se a chamada para o destinatário da transferência tiver sido conectada com êxito ao destino de transferência, o emitente da transferência poderá desligar a chamada original com o destinatário da transferência.
transfer.on('stateChanged', () => {
if (transfer.state === 'Transferred') {
call.hangUp();
}
});