Mentransfer panggilan

Penting

Fungsionalitas yang dijelaskan dalam dokumen ini saat ini berada dalam pratinjau publik. Versi pratinjau ini disediakan tanpa perjanjian tingkat layanan, dan tidak disarankan untuk beban kerja produksi. Fitur tertentu mungkin tidak didukung atau mungkin memiliki kemampuan terbatas. Untuk mengetahui informasi selengkapnya, lihat Ketentuan Penggunaan Tambahan untuk Pratinjau Microsoft Azure.

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

Prasyarat

Memasang SDK

Menggunakan perintah npm install untuk memasang panggilan Azure Communication Services dan SDK umum untuk JavaScript.

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

Menginisialisasi objek yang diperlukan

CallClient, instans diperlukan untuk sebagian besar operasi panggilan. Mari buat CallClient instans baru. Anda dapat mengonfigurasinya dengan opsi khusus seperti Pencatat instans.

Bila Anda memiliki instans CallClient, Anda dapat membuat instans CallAgent dengan memanggil metode createCallAgent pada instans CallClient. 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 wherever desired. To console, file, buffer, REST API, etc...
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()

Catatan

API ini disediakan sebagai pratinjau untuk pengembang dan dapat berubah menurut umpan balik yang kami terima. Jangan gunakan API ini dalam lingkungan produksi. Untuk menggunakan api ini, silakan gunakan rilis 'beta' dari Azure Communication Services Calling Web SDK

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. transferee memutuskan apakah akan accept atau reject permintaan transfer ke target transfer dengan menggunakan peristiwa transferRequested.
  4. 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 terhubung antara transferor dan target transfer.
  3. Transferor memutuskan untuk mentransfer panggilan dengan transferee ke panggilan dengan target transfer.
  4. transferor memanggil transfer API.
  5. transferee memutuskan apakah akan accept atau reject permintaan transfer ke target transfer dengan menggunakan peristiwa transferRequested.
  6. 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 berlangganan acara transferStateChanged dan transferRequested. Peristiwa transferRequested berasal dari instans call; peristiwa transferStateChanged dan transfer state dan error berasal dari instans transfer.

// 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 menerima atau menolak permintaan transfer yang dimulai oleh penerima transfer dalam peristiwa transferRequested dengan menggunakan accept() atau reject() di transferRequestedEventArgs. Anda dapat mengakses targetParticipant informasi dan accept atau reject metode di transferRequestedEventArgs.

// Transferee to accept the transfer request
callTransferApi.on('transferRequested', args => {
    args.accept();
});

// Transferee to reject the transfer request
callTransferApi.on('transferRequested', args => {
    args.reject();
});

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

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

Langkah berikutnya