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

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 createCallAgentmé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:

  1. 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.
  2. O emitente da transferência chama a transfer API.
  3. O beneficiário decide se deseja accept ou reject a solicitação de transferência para o destino de transferência usando um transferRequested evento.
  4. 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:

  1. Já existe uma chamada conectada entre o emitente da transferência e o destinatário da transferência.
  2. Já existe uma chamada conectada entre o emitente da transferência e o destino da transferência.
  3. O emitente da transferência decide transferir a chamada do destinatário da transferência para o destino de transferência.
  4. O emitente da transferência chama a transfer API.
  5. O beneficiário decide se deseja accept ou reject a solicitação de transferência para o destino de transferência usando um transferRequested evento.
  6. 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 transferAPI 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 acceptou 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();
   }
});

Próximas etapas