Dela via


Överföra anrop

Under ett aktivt samtal kanske du vill överföra samtalet till en annan person, ett nummer eller en röstbrevlåda. Nu ska vi lära oss hur.

Förutsättningar

Installera SDK:n

npm install Använd kommandot för att installera Azure Communication Services Common och Calling SDK för JavaScript:

npm install @azure/communication-common --save
npm install @azure/communication-calling --save

Initiera nödvändiga objekt

En CallClient instans krävs för de flesta anropsåtgärder. När du skapar en ny CallClient instans kan du konfigurera den med anpassade alternativ som en Logger instans.

Med instansen CallClient kan du skapa en CallAgent instans genom att anropa createCallAgent. Den här metoden returnerar asynkront ett CallAgent instansobjekt.

Metoden createCallAgent använder CommunicationTokenCredential som argument. Den accepterar en användaråtkomsttoken.

Du kan använda getDeviceManager metoden på instansen CallClient för att få åtkomst deviceManagertill .

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()

Så här hanterar du SDK-anslutning till Microsoft-infrastruktur på bästa sätt

Instansen Call Agent hjälper dig att hantera anrop (för att ansluta eller starta samtal). För att kunna arbeta måste din anropande SDK ansluta till Microsofts infrastruktur för att få meddelanden om inkommande samtal och samordna annan samtalsinformation. Du Call Agent har två möjliga tillstånd:

Ansluten – Ett Call Agent connectionStatue-värde Connected innebär att klient-SDK:t är anslutet och kan ta emot meddelanden från Microsofts infrastruktur.

Frånkopplad – Ett Call Agent connectionStatue-värde för Disconnected tillstånd det finns ett problem som hindrar SDK:n från att ansluta korrekt. Call Agent ska återskapas.

  • invalidToken: Om en token har upphört att gälla eller om en ogiltig Call Agent instans kopplas från med det här felet.
  • connectionIssue: Om det finns ett problem med att klienten ansluter till Microsoft-infrastrukturen, efter att många återförsök Call Agent har exponerat connectionIssue felet.

Du kan kontrollera om din lokala Call Agent är ansluten till Microsofts infrastruktur genom att granska det aktuella värdet för connectionState egenskapen. Under ett aktivt anrop kan du lyssna på connectionStateChanged händelsen för att avgöra om Call Agent det ändras från Anslutet till frånkopplat tillstånd.

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);

Anropsöverföring är en utökad funktion i kärn-API Call :et. Du måste först importera samtalsfunktioner från anropande SDK:

import { Features} from "@azure/communication-calling";

Sedan kan du hämta api-objektet för överföringsfunktionen från anropsinstansen:

const callTransferApi = call.feature(Features.Transfer);

Samtalsöverföringar omfattar tre parter:

  • Transferor: Den person som initierar överföringsbegäran.
  • Överförd: Den person som överförs.
  • Överföringsmål: Den person som överförs till.

Överför till deltagare:

  1. Det finns redan ett anslutet anrop mellan transferorn och överföringsmottagaren. Transferorn bestämmer sig för att överföra anropet från överföringsmottagaren till överföringsmålet.
  2. Transferorn anropar API:ettransfer.
  3. Överföringsmålet tar endast emot ett inkommande samtal om överföringsmottagaren godkänner överföringsbegäran.

Om du vill överföra ett aktuellt anrop kan du använda API:et transfer . transfer tar den valfria transferCallOptions, som gör att du kan ange en disableForwardingAndUnanswered flagga:

  • disableForwardingAndUnanswered = false: Om överföringsmålet inte svarar på överföringsanropet följer överföringen vidarebefordran av överföringsmål och obesvarade inställningar.
  • disableForwardingAndUnanswered = true: Om överföringsmålet inte svarar på överföringsanropet avslutas överföringsförsöket.
// transfer target can be an Azure Communication Services user
const id = { communicationUserId: <ACS_USER_ID> };
// call transfer API
const transfer = callTransferApi.transfer({targetParticipant: id});

Överför till anrop:

  1. Det finns redan ett anslutet anrop mellan transferorn och överföringsmottagaren.
  2. Det finns redan ett anslutet anrop mellan transferorn och överföringsmålet.
  3. Transferorn bestämmer sig för att överföra samtalet med den överlåtna till anropet med överföringsmålet.
  4. Transferorn anropar API:ettransfer.
  5. Överföringsmålet tar endast emot ett inkommande samtal om överföringsmottagaren godkänner överföringsbegäran.

Om du vill överföra ett aktuellt anrop kan du använda API:et 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> });

Med API:et transfer kan du prenumerera på stateChanged. Den levereras också med en överföring state och error egenskaper

// 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

Överföringsmottagaren kan lyssna på en transferAccepted händelse. Lyssnaren för den här händelsen har en TransferEventArgs som innehåller anropsobjektet för det nya överföringsanropet mellan överföringsmottagaren och överföringsmålet.

// Transferee can subscribe to the transferAccepted event
callTransferApi.on('transferAccepted', args => {
    const newTransferCall =  args.targetCall;
});

Transferorn kan prenumerera på händelser för ändring av överföringstillståndet. Om anropet till överföringsobjektet har anslutits till överföringsmålet kan överföraren lägga på det ursprungliga anropet med överföringsmottagaren.

transfer.on('stateChanged', () => {
   if (transfer.state === 'Transferred') {
       call.hangUp();
   }
});

Överför till röstbrevlåda:

  1. Det finns ett anslutet anrop mellan transferorn och den överlåtna.
  2. Teams användaridentifierare för röstbrevlådan för måldeltagare är känd.
  3. Överföraren bestämmer sig för att överföra samtalet med den överförde till måldeltagarens röstbrevlåda med måldeltagarens Teams-användaridentifierare.
  4. Transferorn anropar API:ettransfer.
  5. Överföringsmottagaren tar emot överföringsbegäran.

Om du vill överföra ett aktuellt anrop kan du använda API:et transfer .

// 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 });

Med API:et transfer kan du prenumerera på stateChanged. Den levereras också med en överföring state och error egenskaper

// 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

Överföringsmottagaren kan lyssna på en transferAccepted händelse. Lyssnaren för den här händelsen har en TransferEventArgs som innehåller samtalsobjektet för det nya överföringsanropet mellan överföringsmottagaren och måldeltagarens röstbrevlåda.

// Transferee can subscribe to the transferAccepted event
callTransferApi.on('transferAccepted', args => {
    const newTransferCall =  args.targetCall;
});

Transferorn kan prenumerera på händelser för ändring av överföringstillståndet. Om samtalet till överföringsmottagaren har anslutits med röstbrevlådan för måldeltagare kan överföraren lägga på det ursprungliga samtalet med överföringsmottagaren.

transfer.on('stateChanged', () => {
   if (transfer.state === 'Transferred') {
       call.hangUp();
   }
});

Nästa steg