Cara mengontrol dan mengarahkan panggilan dengan Automasi Panggilan
Artikel
Automasi Panggilan menggunakan antarmuka REST API untuk menerima permintaan tindakan dan memberikan respons untuk memberi tahu apakah permintaan berhasil dikirimkan atau tidak. Karena sifat panggilan asinkron, sebagian besar tindakan memiliki peristiwa yang sesuai yang dipicu ketika tindakan berhasil diselesaikan atau gagal. Panduan ini mencakup tindakan yang tersedia untuk panggilan kemudi, seperti CreateCall, Transfer, Pengalihan, dan pengelolaan peserta. Tindakan disertai dengan kode sampel tentang cara memanggil tindakan yang dikatakan dan diagram urutan yang menjelaskan peristiwa yang diharapkan setelah memanggil tindakan. Diagram ini membantu Anda memvisualisasikan cara memprogram aplikasi layanan Anda dengan Automasi Panggilan.
Automation Panggilan mendukung berbagai tindakan lain untuk mengelola media panggilan dan perekaman yang memiliki panduan terpisah.
Sebagai prasyarat, kami sarankan Anda membaca artikel ini untuk memanfaatkan panduan ini:
Panduan konsep Call Automation yang menjelaskan model pemrograman peristiwa tindakan dan panggilan balik peristiwa.
Pelajari tentang pengidentifikasi pengguna seperti CommunicationUserIdentifier dan PhoneNumberIdentifier yang digunakan dalam panduan ini.
Untuk semua sampel kode, client adalah objek CallAutomationClient yang dapat dibuat seperti yang ditunjukkan dan callConnection merupakan objek CallConnection yang diperoleh dari respons Answer atau CreateCall. Anda juga dapat memperolehnya dari peristiwa panggilan balik yang diterima oleh aplikasi Anda.
Anda dapat melakukan panggilan 1:1 atau grup ke pengguna komunikasi atau nomor telepon (nomor publik atau milik Communication Services).
Saat memanggil titik akhir PSTN, Anda juga perlu memberikan nomor telepon yang digunakan sebagai ID pemanggil sumber dan ditampilkan dalam pemberitahuan panggilan ke titik akhir PSTN target.
Untuk melakukan panggilan ke pengguna Communication Services, Anda perlu menyediakan objek CommunicationUserIdentifier alih-alih PhoneNumberIdentifier.
Uri callbackUri = new Uri("https://<myendpoint>/Events"); //the callback endpoint where you want to receive subsequent events
var callerIdNumber = new PhoneNumberIdentifier("+16044561234"); // This is the Azure Communication Services provisioned phone number for the caller
var callThisPerson = new CallInvite(new PhoneNumberIdentifier("+16041234567"), callerIdNumber); // person to call
CreateCallResult response = await client.CreateCallAsync(callThisPerson, callbackUri);
String callbackUri = "https://<myendpoint>/Events"; //the callback endpoint where you want to receive subsequent events
PhoneNumberIdentifier callerIdNumber = new PhoneNumberIdentifier("+18001234567"); // This is the Azure Communication Services provisioned phone number for the caller
CallInvite callInvite = new CallInvite(new PhoneNumberIdentifier("+16471234567"), callerIdNumber); // person to call
CreateCallResult response = client.createCall(callInvite, callbackUri).block();
const callInvite = {
targetParticipant: { phoneNumber: "+18008008800" }, // person to call
sourceCallIdNumber: { phoneNumber: "+18888888888" } // This is the Azure Communication Services provisioned phone number for the caller
};
const callbackUri = "https://<myendpoint>/Events"; // the callback endpoint where you want to receive subsequent events
const response = await client.createCall(callInvite, callbackUri);
callback_uri = "https://<myendpoint>/Events" # the callback endpoint where you want to receive subsequent events
caller_id_number = PhoneNumberIdentifier(
"+18001234567"
) # This is the Azure Communication Services provisioned phone number for the caller
call_invite = CallInvite(
target=PhoneNumberIdentifier("+16471234567"),
source_caller_id_number=caller_id_number,
)
call_connection_properties = client.create_call(call_invite, callback_uri)
Saat melakukan panggilan grup yang menyertakan nomor telepon, Anda harus memberikan nomor telepon yang digunakan sebagai nomor ID penelepon ke titik akhir PSTN.
Uri callbackUri = new Uri("https://<myendpoint>/Events"); //the callback endpoint where you want to receive subsequent events
var pstnEndpoint = new PhoneNumberIdentifier("+16041234567");
var voipEndpoint = new CommunicationUserIdentifier("<user_id_of_target>"); //user id looks like 8:a1b1c1-...
var groupCallOptions = new CreateGroupCallOptions(new List<CommunicationIdentifier>{ pstnEndpoint, voipEndpoint }, callbackUri)
{
SourceCallerIdNumber = new PhoneNumberIdentifier("+16044561234"), // This is the Azure Communication Services provisioned phone number for the caller
};
CreateCallResult response = await client.CreateGroupCallAsync(groupCallOptions);
String callbackUri = "https://<myendpoint>/Events"; //the callback endpoint where you want to receive subsequent events
PhoneNumberIdentifier callerIdNumber = new PhoneNumberIdentifier("+18001234567"); // This is the Azure Communication Services provisioned phone number for the caller
List<CommunicationIdentifier> targets = new ArrayList<>(Arrays.asList(new PhoneNumberIdentifier("+16471234567"), new CommunicationUserIdentifier("<user_id_of_target>")));
CreateGroupCallOptions groupCallOptions = new CreateGroupCallOptions(targets, callbackUri);
groupCallOptions.setSourceCallIdNumber(callerIdNumber);
Response<CreateCallResult> response = client.createGroupCallWithResponse(createGroupCallOptions).block();
const callbackUri = "https://<myendpoint>/Events"; // the callback endpoint where you want to receive subsequent events
const participants = [
{ phoneNumber: "+18008008800" },
{ communicationUserId: "<user_id_of_target>" }, //user id looks like 8:a1b1c1-...
];
const createCallOptions = {
sourceCallIdNumber: { phoneNumber: "+18888888888" }, // This is the Azure Communication Services provisioned phone number for the caller
};
const response = await client.createGroupCall(participants, callbackUri, createCallOptions);
callback_uri = "https://<myendpoint>/Events" # the callback endpoint where you want to receive subsequent events
caller_id_number = PhoneNumberIdentifier(
"+18888888888"
) # This is the Azure Communication Services provisioned phone number for the caller
pstn_endpoint = PhoneNumberIdentifier("+18008008800")
voip_endpoint = CommunicationUserIdentifier(
"<user_id_of_target>"
) # user id looks like 8:a1b1c1-...
call_connection_properties = client.create_group_call(
target_participants=[voip_endpoint, pstn_endpoint],
callback_url=callback_uri,
source_caller_id_number=caller_id_number,
)
Respons memberi Anda objek CallConnection yang dapat Anda gunakan untuk mengambil tindakan lebih lanjut pada panggilan ini setelah tersambung. Setelah panggilan dijawab, dua peristiwa dipublikasikan ke titik akhir panggilan balik yang Anda berikan sebelumnya:
CallConnected peristiwa yang memberi tahu bahwa panggilan telah dibuat dengan penerima panggilan.
ParticipantsUpdated acara yang berisi daftar peserta terbaru dalam panggilan.
Jika panggilan gagal, Anda akan menerima CallDisconnected peristiwa dan CreateCallFailed dengan kode kesalahan untuk pemecahan masalah lebih lanjut (lihat halaman ini untuk informasi selengkapnya tentang kode kesalahan Automation Panggilan).
Menyambungkan ke panggilan (dalam pratinjau)
Tindakan sambungkan memungkinkan layanan Anda membuat koneksi dengan panggilan yang sedang berlangsung dan mengambil tindakan di atasnya. Ini berguna untuk mengelola panggilan Rooms atau ketika aplikasi klien memulai panggilan 1:1 atau grup yang memanggil otomatisasi bukan bagian darinya. Koneksi dibuat menggunakan properti CallLocator dan dapat berupa jenis: ServerCallLocator, GroupCallLocator, dan RoomCallLocator. ID ini dapat ditemukan ketika panggilan awalnya dibuat atau Ruangan dibuat, dan juga diterbitkan sebagai bagian dari peristiwa CallStarted .
Untuk menyambungkan ke panggilan 1:1 atau grup apa pun, gunakan ServerCallLocator. Jika Anda memulai panggilan menggunakan GroupCallId, Anda juga dapat menggunakan GroupCallLocator.
Uri callbackUri = new Uri("https://<myendpoint>/Events"); //the callback endpoint where you want to receive subsequent events
CallLocator serverCallLocator = new ServerCallLocator("<ServerCallId>");
ConnectCallResult response = await client.ConnectCallAsync(serverCallLocator, callbackUri);
String callbackUri = "https://<myendpoint>/Events"; //the callback endpoint where you want to receive subsequent events
CallLocator serverCallLocator = new ServerCallLocator("<ServerCallId>");
ConnectCallResult response = client.connectCall(serverCallLocator, callbackUri).block();
const callbackUri = "https://<myendpoint>/Events"; // the callback endpoint where you want to receive subsequent events
const serverCallLocator = { kind: "serverCallLocator", id: "<serverCallId>" };
const response = await client.connectCall(serverCallLocator, callbackUri);
callback_uri = "https://<myendpoint>/Events" # the callback endpoint where you want to receive subsequent events
server_call_locator = ServerCallLocator("<server_call_id>")
call_connection_properties = client.connect_call(call_locator=server_call_locator, callback_url=callback_uri)
Untuk menyambungkan ke panggilan Rooms, gunakan RoomCallLocator yang mengambil RoomId. Pelajari selengkapnya tentang Ruang dan bagaimana API Automasi Panggilan dapat digunakan untuk mengelola panggilan Kamar yang sedang berlangsung.
Uri callbackUri = new Uri("https://<myendpoint>/Events"); //the callback endpoint where you want to receive subsequent events
CallLocator roomCallLocator = new RoomCallLocator("<RoomId>");
ConnectCallResult response = await client.ConnectCallAsync(roomCallLocator, callbackUri);
String callbackUri = "https://<myendpoint>/Events"; //the callback endpoint where you want to receive subsequent events
CallLocator roomCallLocator = new RoomCallLocator("<RoomId>");
ConnectCallResult response = client.connectCall(roomCallLocator, callbackUri).block();
const roomCallLocator = { kind: "roomCallLocator", id: "<RoomId>" };
const callbackUri = "https://<myendpoint>/Events"; // the callback endpoint where you want to receive subsequent events
const response = await client.connectCall(roomCallLocator, callbackUri);
callback_uri = "https://<myendpoint>/Events" # the callback endpoint where you want to receive subsequent events
room_call_locator = RoomCallLocator("<room_id>")
call_connection_properties = client.connect_call(call_locator=room_call_locator, callback_url=callback_uri)
Respons yang berhasil memberi Anda objek CallConnection yang dapat Anda gunakan untuk mengambil tindakan lebih lanjut pada panggilan ini. Dua peristiwa diterbitkan ke titik akhir panggilan balik yang Anda berikan sebelumnya:
CallConnected peristiwa yang memberi tahu bahwa Anda berhasil tersambung ke panggilan.
ParticipantsUpdated acara yang berisi daftar peserta terbaru dalam panggilan.
Kapan saja setelah koneksi berhasil, jika layanan Anda terputus dari panggilan ini, Anda akan diberi tahu melalui peristiwa CallDisconected. Kegagalan untuk menyambungkan ke panggilan di tempat pertama menghasilkan peristiwa ConnectFailed.
Menjawab panggilan masuk
Setelah berlangganan untuk menerima pemberitahuan panggilan masuk ke sumber daya, Anda akan menjawab panggilan masuk. Saat menjawab panggilan, Anda perlu memberikan url panggilan balik. Communication Services memposting semua peristiwa berikutnya tentang panggilan ini ke url tersebut.
incoming_call_context = "<IncomingCallContext_From_IncomingCall_Event>"
callback_uri = "https://<myendpoint>/Events" # the callback endpoint where you want to receive subsequent events
call_connection_properties = client.answer_call(
incoming_call_context=incoming_call_context, callback_url=callback_uri
)
Respons memberi Anda objek CallConnection yang dapat Anda gunakan untuk mengambil tindakan lebih lanjut pada panggilan ini setelah tersambung. Setelah panggilan dijawab, dua peristiwa dipublikasikan ke titik akhir panggilan balik yang Anda berikan sebelumnya:
CallConnected peristiwa yang memberi tahu bahwa panggilan telah dibuat dengan pemanggil.
ParticipantsUpdated acara yang berisi daftar peserta terbaru dalam panggilan.
Menolak panggilan
Anda dapat memilih untuk menolak panggilan masuk seperti yang ditunjukkan di bawah ini. Anda dapat memberikan alasan penolakan: tidak ada, sibuk, atau terlarang. Jika tidak ada yang disediakan, tidak ada yang dipilih secara default.
Tidak ada peristiwa yang diterbitkan untuk tindakan penolakan.
Mengalihkan panggilan
Anda dapat memilih untuk mengalihkan panggilan masuk ke titik akhir lain tanpa menjawabnya. Mengalihkan panggilan akan menghapus kemampuan aplikasi Anda untuk mengontrol panggilan menggunakan Automasi Panggilan.
string incomingCallContext = "<IncomingCallContext_From_IncomingCall_Event>";
var target = new CallInvite(new CommunicationUserIdentifier("<user_id_of_target>")); //user id looks like 8:a1b1c1-...
_ = await client.RedirectCallAsync(incomingCallContext, target);
String incomingCallContext = "<IncomingCallContext_From_IncomingCall_Event>";
CallInvite target = new CallInvite(new CommunicationUserIdentifier("<user_id_of_target>")); //user id looks like 8:a1b1c1-...
RedirectCallOptions redirectCallOptions = new RedirectCallOptions(incomingCallContext, target);
Response<Void> response = client.redirectCallWithResponse(redirectCallOptions).block();
var callerIdNumber = new PhoneNumberIdentifier("+16044561234"); // This is the Azure Communication Services provisioned phone number for the caller
var target = new CallInvite(new PhoneNumberIdentifier("+16041234567"), callerIdNumber);
PhoneNumberIdentifier callerIdNumber = new PhoneNumberIdentifier("+16044561234"); // This is the Azure Communication Services provisioned phone number for the caller
CallInvite target = new CallInvite(new PhoneNumberIdentifier("+18001234567"), callerIdNumber);
caller_id_number = PhoneNumberIdentifier(
"+18888888888"
) # This is the Azure Communication Services provisioned phone number for the caller
call_invite = CallInvite(
target=PhoneNumberIdentifier("+16471234567"),
source_caller_id_number=caller_id_number,
)
Tidak ada peristiwa yang diterbitkan untuk pengalihan. Jika target adalah pengguna Communication Services atau nomor telepon yang dimiliki oleh sumber daya Anda, target tersebut menghasilkan peristiwa IncomingCall baru dengan bidang 'ke' yang diatur ke target yang Anda tentukan.
Mentransfer peserta dalam panggilan
Saat aplikasi Anda menjawab panggilan atau melakukan panggilan keluar ke titik akhir, titik akhir tersebut dapat ditransfer ke titik akhir tujuan lain. Mentransfer panggilan 1:1 menghapus aplikasi Anda dari panggilan dan karenanya menghapus kemampuannya untuk mengontrol panggilan menggunakan Automation Panggilan. Undangan panggilan ke target akan menampilkan ID pemanggil titik akhir yang sedang ditransfer. Menyediakan ID pemanggil kustom tidak didukung.
var transferDestination = new CommunicationUserIdentifier("<user_id>");
var transferOption = new TransferToParticipantOptions(transferDestination) {
OperationContext = "<Your_context>",
OperationCallbackUri = new Uri("<uri_endpoint>") // Sending event to a non-default endpoint.
};
// adding customCallingContext
transferOption.CustomCallingContext.AddVoip("customVoipHeader1", "customVoipHeaderValue1");
transferOption.CustomCallingContext.AddVoip("customVoipHeader2", "customVoipHeaderValue2");
TransferCallToParticipantResult result = await callConnection.TransferCallToParticipantAsync(transferOption);
CommunicationIdentifier transferDestination = new CommunicationUserIdentifier("<user_id>");
TransferCallToParticipantOptions options = new TransferCallToParticipantOptions(transferDestination)
.setOperationContext("<operation_context>")
.setOperationCallbackUrl("<url_endpoint>"); // Sending event to a non-default endpoint.
// set customCallingContext
options.getCustomCallingContext().addVoip("voipHeaderName", "voipHeaderValue");
Response<TransferCallResult> transferResponse = callConnectionAsync.transferToParticipantCallWithResponse(options).block();
Saat aplikasi Anda menjawab panggilan grup atau melakukan panggilan grup keluar ke titik akhir atau menambahkan peserta ke panggilan 1:1, titik akhir dapat ditransfer dari panggilan ke titik akhir tujuan lain, kecuali titik akhir otomatisasi panggilan. Mentransfer peserta dalam panggilan grup akan menghapus titik akhir yang sedang ditransfer dari panggilan. Undangan panggilan ke target akan menampilkan ID pemanggil titik akhir yang sedang ditransfer. Menyediakan ID pemanggil kustom tidak didukung.
// Transfer User
var transferDestination = new CommunicationUserIdentifier("<user_id>");
var transferee = new CommunicationUserIdentifier("<transferee_user_id>");
var transferOption = new TransferToParticipantOptions(transferDestination);
transferOption.Transferee = transferee;
// adding customCallingContext
transferOption.CustomCallingContext.AddVoip("customVoipHeader1", "customVoipHeaderValue1");
transferOption.CustomCallingContext.AddVoip("customVoipHeader2", "customVoipHeaderValue2");
transferOption.OperationContext = "<Your_context>";
transferOption.OperationCallbackUri = new Uri("<uri_endpoint>");
TransferCallToParticipantResult result = await callConnection.TransferCallToParticipantAsync(transferOption);
// Transfer PSTN User
var transferDestination = new PhoneNumberIdentifier("<target_phoneNumber>");
var transferee = new PhoneNumberIdentifier("<transferee_phoneNumber>");
var transferOption = new TransferToParticipantOptions(transferDestination);
transferOption.Transferee = transferee;
// adding customCallingContext
transferOption.CustomCallingContext.AddSipUui("uuivalue");
transferOption.CustomCallingContext.AddSipX("header1", "headerValue");
transferOption.OperationContext = "<Your_context>";
// Sending event to a non-default endpoint.
transferOption.OperationCallbackUri = new Uri("<uri_endpoint>");
TransferCallToParticipantResult result = await callConnection.TransferCallToParticipantAsync(transferOption);
// Transfer User
CommunicationIdentifier transferDestination = new CommunicationUserIdentifier("<user_id>");
CommunicationIdentifier transferee = new CommunicationUserIdentifier("<transferee_user_id>");
TransferCallToParticipantOptions options = new TransferCallToParticipantOptions(transferDestination);
options.setTransferee(transferee);
options.setOperationContext("<Your_context>");
options.setOperationCallbackUrl("<url_endpoint>");
// set customCallingContext
options.getCustomCallingContext().addVoip("voipHeaderName", "voipHeaderValue");
Response<TransferCallResult> transferResponse = callConnectionAsync.transferToParticipantCallWithResponse(options).block();
// Transfer Pstn User
CommunicationIdentifier transferDestination = new PhoneNumberIdentifier("<taget_phoneNumber>");
CommunicationIdentifier transferee = new PhoneNumberIdentifier("<transferee_phoneNumber>");
TransferCallToParticipantOptions options = new TransferCallToParticipantOptions(transferDestination);
options.setTransferee(transferee);
options.setOperationContext("<Your_context>");
options.setOperationCallbackUrl("<url_endpoint>");
// set customCallingContext
options.getCustomCallingContext().addSipUui("UUIvalue");
options.getCustomCallingContext().addSipX("sipHeaderName", "value");
Response<TransferCallResult> transferResponse = callConnectionAsync.transferToParticipantCallWithResponse(options).block();
# Transfer to user
transfer_destination = CommunicationUserIdentifier("<user_id>")
transferee = CommnunicationUserIdentifer("transferee_user_id")
call_connection_client = call_automation_client.get_call_connection("<call_connection_id_from_ongoing_call>")
# create custom context
voip_headers = {"customVoipHeader1", "customVoipHeaderValue1"}
result = call_connection_client.transfer_call_to_participant(
target_participant=transfer_destination,
transferee=transferee,
voip_headers=voip_headers,
opration_context="Your context",
operationCallbackUrl="<url_endpoint>"
)
# Transfer to PSTN user
transfer_destination = PhoneNumberIdentifer("<target_phoneNumber>")
transferee = PhoneNumberIdentifer("transferee_phoneNumber")
# create custom context
sip_headers={}
sip_headers.add("X-MS-Custom-headerName", "headerValue")
sip_headers.add("User-To-User","uuivale")
call_connection_client = call_automation_client.get_call_connection("<call_connection_id_from_ongoing_call>")
result = call_connection_client.transfer_call_to_participant(
target_participant=transfer_destination,
transferee=transferee,
sip_headers=sip_headers,
opration_context="Your context",
operationCallbackUrl="<url_endpoint>"
)
Diagram urutan menunjukkan alur yang diharapkan saat aplikasi Anda melakukan panggilan keluar lalu mentransfernya ke titik akhir lain.
Menambahkan peserta ke panggilan
Anda dapat menambahkan peserta (pengguna Communication Services atau nomor telepon) ke panggilan yang sudah ada. Saat menambahkan nomor telepon, anda harus memberikan ID penelepon. ID penelepon ini ditampilkan pada pemberitahuan panggilan kepada peserta yang ditambahkan.
// Add user
var addThisPerson = new CallInvite(new CommunicationUserIdentifier("<user_id>"));
// add custom calling context
addThisPerson.CustomCallingContext.AddVoip("myHeader", "myValue");
AddParticipantsResult result = await callConnection.AddParticipantAsync(addThisPerson);
// Add PSTN user
var callerIdNumber = new PhoneNumberIdentifier("+16044561234"); // This is the Azure Communication Services provisioned phone number for the caller
var addThisPerson = new CallInvite(new PhoneNumberIdentifier("+16041234567"), callerIdNumber);
// add custom calling context
addThisPerson.CustomCallingContext.AddSipUui("value");
addThisPerson.CustomCallingContext.AddSipX("header1", "customSipHeaderValue1");
// Use option bag to set optional parameters
var addParticipantOptions = new AddParticipantOptions(new CallInvite(addThisPerson))
{
InvitationTimeoutInSeconds = 60,
OperationContext = "operationContext",
OperationCallbackUri = new Uri("uri_endpoint"); // Sending event to a non-default endpoint.
};
AddParticipantsResult result = await callConnection.AddParticipantAsync(addParticipantOptions);
// Add user
CallInvite callInvite = new CallInvite(new CommunicationUserIdentifier("<user_id>"));
// add custom calling context
callInvite.getCustomCallingContext().addVoip("voipHeaderName", "voipHeaderValue");
AddParticipantOptions addParticipantOptions = new AddParticipantOptions(callInvite)
.setOperationContext("<operation_context>")
.setOperationCallbackUrl("<url_endpoint>");
Response<AddParticipantResult> addParticipantResultResponse = callConnectionAsync.addParticipantWithResponse(addParticipantOptions).block();
// Add PSTN user
PhoneNumberIdentifier callerIdNumber = new PhoneNumberIdentifier("+16044561234"); // This is the Azure Communication Services provisioned phone number for the caller
CallInvite callInvite = new CallInvite(new PhoneNumberIdentifier("+16041234567"), callerIdNumber);
// add custom calling context
callInvite.getCustomCallingContext().addSipUui("value");
callInvite.getCustomCallingContext().addSipX("header1", "customSipHeaderValue1");
AddParticipantOptions addParticipantOptions = new AddParticipantOptions(callInvite)
.setOperationContext("<operation_context>")
.setOperationCallbackUrl("<url_endpoint>");
Response<AddParticipantResult> addParticipantResultResponse = callConnectionAsync.addParticipantWithResponse(addParticipantOptions).block();
# Add user
voip_headers = {"voipHeaderName", "voipHeaderValue"}
target = CommunicationUserIdentifier("<acs_user_id>")
call_connection_client = call_automation_client.get_call_connection(
"<call_connection_id_from_ongoing_call>"
)
result = call_connection_client.add_participant(
target,
voip_headers=voip_headers,
opration_context="Your context",
operationCallbackUrl="<url_endpoint>"
)
# Add PSTN user
caller_id_number = PhoneNumberIdentifier(
"+18888888888"
) # This is the Azure Communication Services provisioned phone number for the caller
sip_headers = {}
sip_headers["User-To-User"] = "value"
sip_headers["X-MS-Custom-headerName"] = "headerValue"
target = PhoneNumberIdentifier("+18008008800"),
call_connection_client = call_automation_client.get_call_connection(
"<call_connection_id_from_ongoing_call>"
)
result = call_connection_client.add_participant(
target,
sip_headers=sip_headers,
opration_context="Your context",
operationCallbackUrl="<url_endpoint>",
source_caller_id_number=caller_id_number
)
Untuk menambahkan pengguna Communication Services, berikan CommunicationUserIdentifier alih-alih PhoneNumberIdentifier. ID pemanggil tidak wajib dalam hal ini.
AddParticipant menerbitkan atau AddParticipantSucceededAddParticipantFailed acara, bersama dengan ParticipantUpdated menyediakan daftar peserta terbaru dalam panggilan.
// add a participant
var addThisPerson = new CallInvite(new CommunicationUserIdentifier("<user_id>"));
var addParticipantResponse = await callConnection.AddParticipantAsync(addThisPerson);
// cancel the request with optional parameters
var cancelAddParticipantOperationOptions = new CancelAddParticipantOperationOptions(addParticipantResponse.Value.InvitationId)
{
OperationContext = "operationContext",
OperationCallbackUri = new Uri("uri_endpoint"); // Sending event to a non-default endpoint.
}
await callConnection.CancelAddParticipantOperationAsync(cancelAddParticipantOperationOptions);
// Add user
CallInvite callInvite = new CallInvite(new CommunicationUserIdentifier("<user_id>"));
AddParticipantOperationOptions addParticipantOperationOptions = new AddParticipantOptions(callInvite);
Response<AddParticipantResult> addParticipantOperationResultResponse = callConnectionAsync.addParticipantWithResponse(addParticipantOptions).block();
// cancel the request
CancelAddParticipantOperationOptions cancelAddParticipantOperationOptions = new CancelAddParticipantOperationOptions(addParticipantResultResponse.invitationId)
.setOperationContext("<operation_context>")
.setOperationCallbackUrl("<url_endpoint>");
callConnectionAsync.cancelAddParticipantOperationWithResponse(cancelAddParticipantOperationOptions).block();
var removeThisUser = new CommunicationUserIdentifier("<user_id>");
// remove a participant from the call with optional parameters
var removeParticipantOptions = new RemoveParticipantOptions(removeThisUser)
{
OperationContext = "operationContext",
OperationCallbackUri = new Uri("uri_endpoint"); // Sending event to a non-default endpoint.
}
RemoveParticipantsResult result = await callConnection.RemoveParticipantAsync(removeParticipantOptions);
CommunicationIdentifier removeThisUser = new CommunicationUserIdentifier("<user_id>");
RemoveParticipantOptions removeParticipantOptions = new RemoveParticipantOptions(removeThisUser)
.setOperationContext("<operation_context>")
.setOperationCallbackUrl("<url_endpoint>");
Response<RemoveParticipantResult> removeParticipantResultResponse = callConnectionAsync.removeParticipantWithResponse(removeParticipantOptions).block();
RemoveParticipant akan menerbitkan atau RemoveParticipantSucceededRemoveParticipantFailed acara, bersama dengan acara yang ParticipantUpdated menyediakan daftar peserta terbaru dalam panggilan. Peserta yang dihapus dihilangkan dari daftar.
Menutup panggilan
Tindakan Hang Up dapat digunakan untuk menghapus aplikasi Anda dari panggilan atau untuk mengakhiri panggilan grup dengan mengatur parameter forEveryone ke true. Untuk panggilan 1:1, menutup panggilan dengan peserta lain secara default.