Ö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
- Ett Azure-konto med en aktiv prenumeration. Skapa ett konto utan kostnad.
- En distribuerad Communication Services-resurs. Skapa en Communication Services-resurs.
- En användaråtkomsttoken för att aktivera den anropande klienten. Mer information finns i Skapa och hantera åtkomsttoken.
- Valfritt: Slutför snabbstarten för att lägga till röstsamtal i ditt program
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 deviceManager
till .
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 ogiltigCall 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ökCall Agent
har exponeratconnectionIssue
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:
- 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.
- Transferorn anropar API:et
transfer
. - Ö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:
- Det finns redan ett anslutet anrop mellan transferorn och överföringsmottagaren.
- Det finns redan ett anslutet anrop mellan transferorn och överföringsmålet.
- Transferorn bestämmer sig för att överföra samtalet med den överlåtna till anropet med överföringsmålet.
- Transferorn anropar API:et
transfer
. - Ö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:
- Det finns ett anslutet anrop mellan transferorn och den överlåtna.
- Teams användaridentifierare för röstbrevlådan för måldeltagare är känd.
- Ö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.
- Transferorn anropar API:et
transfer
. - Ö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();
}
});