Mentransfer panggilan
Selama panggilan aktif, Anda mungkin ingin mentransfer panggilan ke orang lain, nomor, atau ke pesan suara. Mari kita belajar bagaimana.
Prasyarat
- Akun Azure dengan langganan aktif. Buat akun secara gratis.
- Sumber daya Communication Services yang disebarkan. Buat sumber daya Azure Communication Services.
- Token akses pengguna untuk mengaktifkan klien panggilan. Untuk informasi selengkapnya, lihat Membuat dan mengelola token akses.
- Opsional: Selesaikan panduan memulai cepat untuk menambahkan panggilan suara ke aplikasi Anda
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 validCall Agent
terputus dengan kesalahan ini.connectionIssue
: Jika ada masalah dengan klien yang terhubung ke microsoft infrascture, setelah banyak percobaanCall Agent
ulang mengeksposconnectionIssue
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:
- Sudah ada panggilan yang tersambung antara penerima transfer dan transferee. transferor memutuskan untuk mentransfer panggilan dari transferee ke target transfer.
- transferor memanggil
transfer
API. - 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:
- Sudah ada panggilan yang tersambung antara penerima transfer dan transferee.
- Sudah ada panggilan yang terhubung antara transferor dan target transfer.
- Transferor memutuskan untuk mentransfer panggilan dengan penerima transfer ke panggilan dengan target transfer.
- transferor memanggil
transfer
API. - 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:
- Ada panggilan terhubung antara transferor dan penerima transfer.
- Pengidentifikasi Pengguna Teams dari pesan suara peserta target diketahui.
- Transferor memutuskan untuk mentransfer panggilan dengan penerima transfer ke pesan suara peserta target menggunakan Pengidentifikasi Pengguna Teams peserta target.
- transferor memanggil
transfer
API. - 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();
}
});