Partilhar via


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

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 createCallAgentarquivo . 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 deviceManagero .

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álido Call 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 tentativas Call Agent expõe o connectionIssue 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:

  1. 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.
  2. O cedente chama a transfer API.
  3. 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:

  1. Já existe uma chamada conectada entre o cedente e o cessionário.
  2. Já existe uma chamada conectada entre o cedente e o destino de transferência.
  3. O cedente decide transferir a chamada com o cessionário para a chamada com destino de transferência.
  4. O cedente chama a transfer API.
  5. 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:

  1. Existe uma chamada conectada entre o cedente e o cessionário.
  2. O Identificador de Usuário do Teams da caixa postal do participante de destino é conhecido.
  3. 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.
  4. O cedente chama a transfer API.
  5. 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();
   }
});

Próximos passos