Transferir chamadas
Durante uma chamada ativa, você pode querer transferir a chamada para outra pessoa, número ou correio de voz. Vamos aprender como.
Pré-requisitos
- Uma conta do Azure com uma subscrição ativa. Crie uma conta gratuitamente.
- Um recurso de Serviços de Comunicação implantado. Crie um recurso de Serviços de Comunicação.
- Um token de acesso de usuário para habilitar o cliente chamador. Para obter mais informações, consulte Criar e gerenciar tokens de acesso.
- Opcional: conclua o início rápido para adicionar chamadas de voz ao seu aplicativo
Instale o SDK
Use o npm install
comando para instalar o SDK de Chamada e Comum dos Serviços de Comunicação do Azure para JavaScript:
npm install @azure/communication-common --save
npm install @azure/communication-calling --save
Inicializar objetos necessários
Uma CallClient
instância é necessária para a maioria das operações de chamada. Ao criar uma nova CallClient
instância, você pode configurá-la com opções personalizadas, como uma Logger
instância.
Com a CallClient
instância, você pode criar uma CallAgent
instância chamando o createCallAgent
arquivo . Esse método retorna de forma assíncrona um objeto de CallAgent
instância.
O createCallAgent
método usa CommunicationTokenCredential
como argumento. Ele aceita um token de acesso de usuário.
Você pode usar o getDeviceManager
método na CallClient
instância para acessar deviceManager
o .
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()
Como gerenciar melhor a conectividade do SDK com a infraestrutura da Microsoft
A Call Agent
instância ajuda você a gerenciar chamadas (para ingressar ou iniciar chamadas). Para funcionar, seu SDK de chamada precisa se conectar à infraestrutura da Microsoft para receber notificações de chamadas recebidas e coordenar outros detalhes da chamada. O seu Call Agent
tem dois estados possíveis:
Conectado - Um Call Agent
valor connectionStatue significa que o SDK do Connected
cliente está conectado e é capaz de receber notificações da infraestrutura da Microsoft.
Desconectado - Um Call Agent
valor connectionStatue de Disconnected
estados há um problema que está impedindo o SDK de se conectar corretamente. Call Agent
devem ser recriados.
invalidToken
: Se um token expirou ou é inválidoCall Agent
, a instância se desconecta com esse erro.connectionIssue
: Se houver um problema com o cliente se conectando à infrascture da Microsoft, depois de muitas tentativasCall Agent
expõe oconnectionIssue
erro.
Você pode verificar se seu local Call Agent
está conectado à infraestrutura da Microsoft inspecionando o valor atual da connectionState
propriedade. Durante uma chamada ativa, você pode ouvir o connectionStateChanged
evento para determinar se Call Agent
muda do estado Conectado para Desconectado.
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);
A transferência de chamadas é um recurso estendido da API principal Call
. Primeiro, você precisa importar recursos de chamada do SDK de chamada:
import { Features} from "@azure/communication-calling";
Em seguida, você pode obter o objeto da API do recurso de transferência da instância de chamada:
const callTransferApi = call.feature(Features.Transfer);
As transferências de chamadas envolvem três partes:
- Cedente: A pessoa que inicia o pedido de transferência.
- Cessionário: A pessoa que está a ser transferida.
- Alvo da transferência: a pessoa para a qual está sendo transferida.
Transferência para o participante:
- Já existe uma chamada conectada entre o cedente e o cessionário. O cedente decide transferir a chamada do cessionário para o destino da transferência.
- O cedente chama a
transfer
API. - O destino de transferência recebe uma chamada recebida.
Para transferir uma chamada atual, você pode usar a transfer
API. transfer
leva o opcional transferCallOptions
, que permite definir uma disableForwardingAndUnanswered
bandeira:
disableForwardingAndUnanswered = false
: Se o destino de transferência não atender a chamada de transferência, a transferência segue as configurações de encaminhamento e não resposta do destino de transferência.disableForwardingAndUnanswered = true
: Se o destino de transferência não atender a chamada de transferência, a tentativa de transferência 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});
Transferir para chamada:
- Já existe uma chamada conectada entre o cedente e o cessionário.
- Já existe uma chamada conectada entre o cedente e o destino de transferência.
- O cedente decide transferir a chamada com o cessionário para a chamada com destino de transferência.
- O cedente chama a
transfer
API. - O destino de transferência recebe uma chamada recebida.
Para transferir uma chamada atual, você pode usar a 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> });
A transfer
API permite-lhe subscrever o stateChanged
. Ele também vem com uma transferência state
e error
propriedades
// 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 cessionário pode ouvir um transferAccepted
evento. O ouvinte desse evento tem um TransferEventArgs
que contém o objeto de chamada da nova chamada de transferência entre o cessionário e o destino de transferência.
// Transferee can subscribe to the transferAccepted event
callTransferApi.on('transferAccepted', args => {
const newTransferCall = args.targetCall;
});
O cedente pode subscrever eventos para alteração do estado da transferência. Se a chamada para o cessionário foi conectada com sucesso com o destino de transferência, o cedente pode desligar a chamada original com o cessionário.
transfer.on('stateChanged', () => {
if (transfer.state === 'Transferred') {
call.hangUp();
}
});
Transferência para correio de voz:
- Existe uma chamada conectada entre o cedente e o cessionário.
- O Identificador de Usuário do Teams da caixa postal do participante de destino é conhecido.
- O cedente decide transferir a chamada com o cessionário para o correio de voz do participante alvo usando o Identificador de Usuário do Teams do participante alvo.
- O cedente chama a
transfer
API. - O cessionário recebe o pedido de transferência.
Para transferir uma chamada atual, você pode usar a transfer
API.
// 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 });
A transfer
API permite-lhe subscrever o stateChanged
. Ele também vem com uma transferência state
e error
propriedades
// 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 cessionário pode ouvir um transferAccepted
evento. O ouvinte deste evento tem um TransferEventArgs
que contém o objeto de chamada da nova chamada de transferência entre o cessionário e a caixa postal do participante de destino.
// Transferee can subscribe to the transferAccepted event
callTransferApi.on('transferAccepted', args => {
const newTransferCall = args.targetCall;
});
O cedente pode subscrever eventos para alteração do estado da transferência. Se a chamada para o cessionário foi conectada com sucesso com o correio de voz do participante alvo, o cedente pode desligar a chamada original com o cessionário.
transfer.on('stateChanged', () => {
if (transfer.state === 'Transferred') {
call.hangUp();
}
});