Bagikan melalui


Mentransfer panggilan

Selama panggilan aktif, Anda mungkin ingin mentransfer panggilan ke orang lain, nomor, atau ke pesan suara. Mari kita belajar bagaimana.

Prasyarat

Pasang SDK

npm install Gunakan perintah untuk menginstal SDK Umum dan Panggilan Azure Communication Services untuk JavaScript:

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

Menginisialisasi objek yang diperlukan

Instans CallClient diperlukan untuk sebagian besar operasi panggilan. Saat membuat instans baru CallClient , Anda dapat mengonfigurasinya dengan opsi kustom seperti Logger instans.

CallClient Dengan instans, Anda dapat membuat CallAgent instans dengan memanggil createCallAgent. Metode ini secara asinkron mengembalikan objek instans CallAgent.

Metode createCallAgent menggunakan CommunicationTokenCredential sebagai argumen. Hal ini menerima token akses pengguna.

Anda dapat menggunakan metode getDeviceManager pada instans CallClient untuk mengakses 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()

Cara terbaik mengelola konektivitas SDK ke infrastruktur Microsoft

Call Agent Instans ini membantu Anda mengelola panggilan (untuk bergabung atau memulai panggilan). Untuk bekerja, SDK panggilan Anda perlu tersambung ke infrastruktur Microsoft untuk mendapatkan pemberitahuan panggilan masuk dan mengoordinasikan detail panggilan lainnya. Anda Call Agent memiliki dua kemungkinan status:

Tersambung - Nilai Call Agent Connected connectionStatue berarti SDK klien terhubung dan mampu menerima pemberitahuan dari infrastruktur Microsoft.

Terputus - Nilai Call Agent Disconnected status connectionStatue ada masalah yang mencegah SDK menyambungkannya dengan benar. Call Agent harus dibuat ulang.

  • invalidToken: Jika token kedaluwarsa atau instans tidak valid Call Agent terputus dengan kesalahan ini.
  • connectionIssue: Jika ada masalah dengan klien yang terhubung ke microsoft infrascture, setelah banyak percobaan Call Agent ulang mengekspos connectionIssue kesalahan.

Anda dapat memeriksa apakah lokal Call Agent Anda tersambung ke infrastruktur Microsoft dengan memeriksa nilai connectionState properti saat ini. Selama panggilan aktif, Anda dapat mendengarkan connectionStateChanged acara untuk menentukan apakah Call Agent perubahan dari status Tersambung ke Terputus .

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

Transfer panggilan adalah fitur tambahan dari Call API inti. Pertama-tama Anda perlu mengimpor Fitur panggilan dari SDK Panggilan:

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

Kemudian Anda bisa mendapatkan objek API fitur transfer dari instans panggilan:

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

Transfer panggilan melibatkan tiga pihak:

  • Transferor: Orang yang memulai permintaan transfer.
  • Transferee: Orang yang sedang ditransfer.
  • Target transfer: Orang yang menjadi tujuan transfer.

Transfer ke peserta:

  1. Sudah ada panggilan yang tersambung antara penerima transfer dan transferee. transferor memutuskan untuk mentransfer panggilan dari transferee ke target transfer.
  2. transferor memanggil transfer API.
  3. Target transfer menerima panggilan masuk hanya jika transferee menerima permintaan transfer.

Untuk mentransfer panggilan saat ini, Anda dapat menggunakan transfer API. transfer menggunakan transferCallOptions opsional, yang memungkinkan Anda mengatur bendera disableForwardingAndUnanswered:

  • disableForwardingAndUnanswered = false: Jika target transfer tidak menjawab panggilan transfer, transfer mengikuti setelan penerusan target transfer dan tidak dijawab.
  • disableForwardingAndUnanswered = true: Jika target transfer tidak menjawab panggilan transfer, upaya transfer akan berakhir.
// transfer target can be an Azure Communication Services user
const id = { communicationUserId: <ACS_USER_ID> };
// call transfer API
const transfer = callTransferApi.transfer({targetParticipant: id});

Transfer untuk memanggil:

  1. Sudah ada panggilan yang tersambung antara penerima transfer dan transferee.
  2. Sudah ada panggilan yang terhubung antara transferor dan target transfer.
  3. Transferor memutuskan untuk mentransfer panggilan dengan penerima transfer ke panggilan dengan target transfer.
  4. transferor memanggil transfer API.
  5. Target transfer menerima panggilan masuk hanya jika transferee menerima permintaan transfer.

Untuk mentransfer panggilan saat ini, Anda dapat menggunakan 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> });

transfer API memungkinkan Anda untuk berlangganan stateChanged. Ini juga dilengkapi dengan transfer state dan error properti

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

Penerima transfer dapat mendengarkan transferAccepted acara. Pendengar untuk kejadian ini memiliki TransferEventArgs yang berisi objek panggilan dari panggilan transfer baru antara penerima transfer dan target transfer.

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

Transferor dapat berlangganan peristiwa untuk perubahan status transfer. Jika panggilan ke penerima transfer berhasil terhubung dengan target Transfer, transferor dapat menutup panggilan asli dengan transferee.

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

Transfer ke pesan suara:

  1. Ada panggilan terhubung antara transferor dan penerima transfer.
  2. Pengidentifikasi Pengguna Teams dari pesan suara peserta target diketahui.
  3. Transferor memutuskan untuk mentransfer panggilan dengan penerima transfer ke pesan suara peserta target menggunakan Pengidentifikasi Pengguna Teams peserta target.
  4. transferor memanggil transfer API.
  5. Penerima transfer menerima permintaan transfer.

Untuk mentransfer panggilan saat ini, Anda dapat menggunakan 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 });

transfer API memungkinkan Anda untuk berlangganan stateChanged. Ini juga dilengkapi dengan transfer state dan error properti

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

Penerima transfer dapat mendengarkan transferAccepted acara. Pendengar untuk kejadian ini memiliki TransferEventArgs yang berisi objek panggilan panggilan panggilan baru antara penerima transfer dan pesan suara peserta target.

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

Transferor dapat berlangganan peristiwa untuk perubahan status transfer. Jika panggilan ke penerima transfer berhasil tersambung dengan pesan suara peserta target, transferor dapat menutup panggilan asli dengan transferee.

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

Langkah berikutnya