Megosztás a következőn keresztül:


Hívások átvitele

Aktív hívás során előfordulhat, hogy át szeretné vinni a hívást egy másik személynek, számnak vagy hangpostának. Tanuljuk meg, hogyan.

Előfeltételek

Telepítse a SDK-t

npm install A parancs használatával telepítse az Azure Communication Services Common and Calling SDK for JavaScriptet:

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

Szükséges objektumok inicializálása

A CallClient legtöbb hívási művelethez szükség van egy példányra. Új CallClient példány létrehozásakor konfigurálhatja egyéni beállításokkal, például egy példánysal Logger .

CallClient A példánnyal létrehozhat egy példányt CallAgent a createCallAgent. Ez a metódus aszinkron módon egy CallAgent példányobjektumot ad vissza.

A createCallAgent metódus argumentumként használható CommunicationTokenCredential . Elfogad egy felhasználói hozzáférési jogkivonatot.

A példányon található getDeviceManager metódust használhatja a CallClient hozzáféréshez 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 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()

A Microsoft-infrastruktúra SDK-kapcsolatának legjobb kezelése

A Call Agent példány segít a hívások kezelésében (a hívásokhoz való csatlakozáshoz vagy a hívások indításához). A hívó SDK működéséhez csatlakoznia kell a Microsoft infrastruktúrájához, hogy értesítést kapjon a bejövő hívásokról, és koordinálja az egyéb hívásadatokat. Két Call Agent lehetséges állapota van:

Csatlakoztatott – A Call Agent connectionStatue érték azt Connected jelenti, hogy az ügyfél SDK csatlakoztatva van, és képes értesítéseket fogadni a Microsoft-infrastruktúrából.

Leválasztva – Az Call Agent állapotok connectionStatue értéke Disconnected olyan probléma, amely miatt az SDK nem tud megfelelően csatlakozni. Call Agent újra létre kell hozni.

  • invalidToken: Ha egy jogkivonat lejárt, vagy érvénytelen Call Agent , a példány ezzel a hibával megszakad.
  • connectionIssue: Ha probléma merül fel azzal kapcsolatban, hogy az ügyfél csatlakozik a Microsoft-infrastruktúrához, miután sok újrapróbálkozás Call Agent felfedi a connectionIssue hibát.

A tulajdonság aktuális értékének connectionState vizsgálatával ellenőrizheti, hogy a helyi Call Agent csatlakozik-e a Microsoft-infrastruktúrához. Egy aktív hívás során meghallgathatja az connectionStateChanged eseményt, és megállapíthatja, hogy a kapcsolat megszakadt állapotban van-e.Call Agent

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 hívásátvitel az alapvető Call API kiterjesztett funkciója. Először importálnia kell a hívási funkciókat a Hívó SDK-ból:

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

Ezután lekérheti az átviteli funkció API-objektumát a híváspéldányból:

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

A hívásátadás három fél bevonásával történik:

  • Átadó: Az a személy, aki kezdeményezi az átadási kérelmet.
  • Átvevő: Az átvitt személy.
  • Átviteli cél: Az a személy, akinek átviszik.

Átvitel a résztvevőnek:

  1. Már van egy csatlakoztatott hívás az átadó és az átvevő között. Az átvevő úgy dönt, hogy a hívást az átvevőtől az átadási célhoz továbbítja.
  2. Az átadó meghívja az API-t transfer .
  3. Az átviteli cél csak akkor fogad bejövő hívást, ha a címzett elfogadja az átadási kérelmet.

Az aktuális hívás átviteléhez használhatja az transfer API-t. transfer a választható transferCallOptionsértéket veszi fel, amely lehetővé teszi a jelölő beállítását disableForwardingAndUnanswered :

  • disableForwardingAndUnanswered = false: Ha az átviteli cél nem fogadja az átadási hívást, az átvitel az átviteli cél továbbítási és megválaszolatlan beállításait követi.
  • disableForwardingAndUnanswered = true: Ha az átviteli cél nem fogadja az átadási hívást, az átviteli kísérlet véget ér.
// transfer target can be an Azure Communication Services user
const id = { communicationUserId: <ACS_USER_ID> };
// call transfer API
const transfer = callTransferApi.transfer({targetParticipant: id});

Átvitel hívásra:

  1. Már van egy csatlakoztatott hívás az átadó és az átvevő között.
  2. Már van csatlakoztatott hívás az átadó és az átviteli cél között.
  3. Az átvevő úgy dönt, hogy a hívást átviszi az átvevővel az átadási céllal rendelkező hívásra.
  4. Az átadó meghívja az API-t transfer .
  5. Az átviteli cél csak akkor fogad bejövő hívást, ha a címzett elfogadja az átadási kérelmet.

Az aktuális hívás átviteléhez használhatja az transfer API-t.

// transfer to the target call specifying the call id
const id = { targetCallId: <CALL_ID> };
// call transfer API
const transfer = callTransferApi.transfer({ targetCallId: <CALL_ID> });

Az transfer API-val feliratkozhat a következőre stateChanged: . Emellett átadással state és error tulajdonságokkal is rendelkezik

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

Az átvevő meghallgathat egy eseményt transferAccepted . Az esemény figyelője rendelkezik egy TransferEventArgs olyan figyelővel, amely tartalmazza az új átviteli hívás hívásobjektumát a címzett és az átviteli cél között.

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

Az átadó előfizethet az eseményekre az átvitel állapotának módosításához. Ha az átvevő hívása sikeresen kapcsolódott az átadási célhoz, az átvevő lekötheti az eredeti hívást az átvevővel.

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

Átvitel hangpostára:

  1. Már van egy csatlakoztatott hívás az átadó és az átvevő között.
  2. A cél résztvevő hangpostaüzenetének Teams-felhasználói azonosítója ismert.
  3. Az átvevő úgy dönt, hogy a hívást a címzettel a hangposta-azonosítóval ellátott hangpostára továbbítja.
  4. Az átadó meghívja az API-t transfer .
  5. Az átvevő megkapja az átadási kérelmet.

Az aktuális hívás átviteléhez használhatja az transfer API-t.

// transfer to the target call specifying the call id
const id = { targetParticipantVoicemail: <TEAMS_USER_ID> };
// call transfer API
const transfer = callTransferApi.transfer({ target: id });

Az transfer API-val feliratkozhat a következőre stateChanged: . Emellett átadással state és error tulajdonságokkal is rendelkezik

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

Az átvevő meghallgathat egy eseményt transferAccepted . Az esemény figyelője rendelkezik egy TransferEventArgs olyan figyelővel, amely tartalmazza az új átviteli hívás hívásobjektumát a címzett és a cél résztvevő hangpostája között.

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

Az átadó előfizethet az eseményekre az átvitel állapotának módosításához. Ha a címzett hívása sikeresen kapcsolódott a cél résztvevő hangpostához, az átvevő lekötheti az eredeti hívást a címzettel.

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

Következő lépések