Mulai cepat rekaman panggilan
Artikel ini menjelaskan perekaman panggilan untuk panggilan suara dan video. Untuk mulai menggunakan API Perekaman Panggilan, Anda harus melakukan panggilan. Untuk membangun pengalaman panggilan pengguna akhir, pastikan Anda terbiasa dengan SDK klien Panggilan dan Automasi Panggilan.
Kode Sampel
Anda dapat mengunduh aplikasi contoh dari GitHub
Prasyarat
- Anda memerlukan akun Azure dengan langganan aktif.
- Menyebarkan sumber daya Communication Service. Catat string koneksi sumber daya Anda.
- Berlangganan peristiwa melalui Azure Event Grid.
- Unduh .NET SDK
Sebelum memulai
API Perekaman Panggilan menggunakan secara serverCallId
eksklusif untuk memulai perekaman. Ada beberapa metode yang dapat Anda gunakan untuk mengambil serverCallId
tergantung pada skenario Anda:
Skenario Automasi Panggilan
Saat menggunakan Automation Panggilan, Anda memiliki dua opsi untuk mendapatkan serverCallId
:
Saat Anda membuat panggilan, panggilan mengembalikan
serverCallId
sebagai propertiCallConnected
peristiwa setelah panggilan dibuat. Pelajari cara Mendapatkan peristiwa CallConnected dari Call Automation SDK.Saat Anda menjawab panggilan atau panggilan dibuat, panggilan mengembalikan
serverCallId
sebagai propertiAnswerCallResult
respons api atauCreateCallResult
masing-masing.
Memanggil skenario SDK
Saat menggunakan SDK Klien Panggilan, Anda dapat mengambil serverCallId
dengan menggunakan getServerCallId
metode pada panggilan.
Gunakan contoh ini untuk mempelajari cara Mendapatkan serverCallId dari SDK Klien Panggilan.
Mari kita mulai dengan beberapa langkah sederhana.
1. Buat klien Automation Panggilan
API Perekaman Panggilan adalah bagian dari pustaka Azure Communication Services Call Automation . Jadi Anda perlu membuat klien Automation Panggilan.
Untuk membuat klien otomatisasi panggilan, gunakan string koneksi Communication Services Anda dan teruskan ke CallAutomationClient
objek.
CallAutomationClient callAutomationClient = new CallAutomationClient("<ACSConnectionString>");
2. Mulai sesi perekaman dengan StartRecordingOptions menggunakan API 'StartAsync'
Gunakan yang serverCallId
diterima selama inisiasi panggilan.
- Gunakan
RecordingContent
untuk meneruskan tipe konten perekaman. GunakanAUDIO
. - Gunakan
RecordingChannel
untuk meneruskan jenis saluran perekaman. GunakanMIXED
atauUNMIXED
. - Gunakan
RecordingFormat
untuk meneruskan format rekaman. GunakanWAV
.
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<ServerCallId>"))
{
RecordingContent = RecordingContent.Audio,
RecordingChannel = RecordingChannel.Unmixed,
RecordingFormat = RecordingFormat.Wav,
RecordingStateCallbackUri = new Uri("<CallbackUri>");
};
Response<RecordingStateResult> response = await callAutomationClient.GetCallRecording()
.StartAsync(recordingOptions);
2.1. Mulai Perekaman - Bawa Penyimpanan Blob Azure Anda Sendiri
Mulai perekaman menggunakan Azure Blob Storage yang anda tentukan untuk menyimpan file yang direkam setelah rekaman selesai.
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<ServerCallId>"))
{
RecordingContent = RecordingContent.Audio,
RecordingChannel = RecordingChannel.Unmixed,
RecordingFormat = RecordingFormat.Wav,
RecordingStateCallbackUri = new Uri("<CallbackUri>"),
RecordingStorage = RecordingStorage.CreateAzureBlobContainerRecordingStorage(new Uri("<YOUR_STORAGE_CONTAINER_URL>"))
ExternalStorage = new BlobStorage(new Uri("<Insert Container / Blob Uri>"))
};
Response<RecordingStateResult> response = await callAutomationClient.GetCallRecording()
.StartAsync(recordingOptions);
2.2. Mulai perekaman sesi dengan mode Jeda diaktifkan menggunakan API 'StartAsync'
Catatan
Rekaman perlu dilanjutkan agar file rekaman dibuat.
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<ServerCallId>"))
{
RecordingContent = RecordingContent.Audio,
RecordingChannel = RecordingChannel.Unmixed,
RecordingFormat = RecordingFormat.Wav,
PauseOnStart = true,
RecordingStateCallbackUri = new Uri("<CallbackUri>");
};
Response<RecordingStateResult> response = await callAutomationClient.GetCallRecording()
.StartAsync(recordingOptions);
2.3. Hanya untuk Unmixed - Tentukan pengguna di saluran 0
Untuk menghasilkan file rekaman audio yang tidak dimix, Anda dapat menggunakan AudioChannelParticipantOrdering
fungsionalitas untuk menentukan pengguna mana yang ingin Anda rekam di saluran 0. Peserta lainnya ditugaskan ke saluran saat mereka berbicara. Jika Anda menggunakan RecordingChannel.Unmixed
tetapi tidak menggunakan AudioChannelParticipantOrdering
, Rekaman Panggilan menetapkan saluran 0 ke peserta pertama yang berbicara.
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<ServerCallId>"))
{
RecordingContent = RecordingContent.Audio,
RecordingChannel = RecordingChannel.Unmixed,
RecordingFormat = RecordingFormat.Wav,
RecordingStateCallbackUri = new Uri("<CallbackUri>"),
AudioChannelParticipantOrdering = { new CommunicationUserIdentifier("<ACS_USER_MRI>") }
};
Response<RecordingStateResult> response = await callAutomationClient.GetCallRecording().StartAsync(recordingOptions);
2.4. Hanya untuk Unmixed - Tentukan afinitas saluran
var channelAffinity = new ChannelAffinity(new CommunicationUserIdentifier("<ACS_USER_MRI>")) { Channel = 0};
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<ServerCallId>"))
{
RecordingContent = RecordingContent.Audio,
RecordingChannel = RecordingChannel.Unmixed,
RecordingFormat = RecordingFormat.Wav,
RecordingStateCallbackUri = new Uri("<CallbackUri>"),
ChannelAffinity = new List<ChannelAffinity>{ channelAffinity }
};
Response<RecordingStateResult> response = await callAutomationClient.GetCallRecording().StartAsync(recordingOptions);
StartAsync
Respons API berisi recordingId
sesi perekaman.
3. Hentikan sesi perekaman menggunakan StopAsync
API
Gunakan yang recordingId
diterima sebagai respons terhadap StartAsync
.
var stopRecording = await callAutomationClient.GetCallRecording().StopAsync(recordingId);
4. Jeda sesi perekaman menggunakan PauseAsync
API
Gunakan yang recordingId
diterima sebagai respons terhadap StartAsync
.
var pauseRecording = await callAutomationClient.GetCallRecording ().PauseAsync(recordingId);
5. Lanjutkan sesi perekaman menggunakan ResumeAsync
API
Gunakan yang recordingId
diterima sebagai respons terhadap StartAsync
.
var resumeRecording = await callAutomationClient.GetCallRecording().ResumeAsync(recordingId);
6. Unduh file rekaman menggunakan DownloadToAsync
API
Gunakan web hook Azure Event Grid atau tindakan lain yang dipicu untuk memberi tahu layanan Anda saat media yang direkam siap diunduh.
Pemberitahuan Microsoft.Communication.RecordingFileStatusUpdated
Event Grid diterbitkan saat rekaman siap diambil, biasanya beberapa menit setelah rekaman selesai diproses (seperti saat rapat berakhir atau rekaman berhenti). Pemberitahuan peristiwa perekaman mencakup contentLocation
dan metadataLocation
, yang dapat Anda gunakan untuk mengambil media yang direkam dan file metadata rekaman.
Contoh skema peristiwa:
{
"id": string, // Unique guid for event
"topic": string, // /subscriptions/{subscription-id}/resourceGroups/{group-name}/providers/Microsoft.Communication/communicationServices/{communication-services-resource-name}
"subject": string, // /recording/call/{call-id}/serverCallId/{serverCallId}
"data": {
"recordingStorageInfo": {
"recordingChunks": [
{
"documentId": string, // Document id for the recording chunk
"contentLocation": string, //Azure Communication Services URL where the content is located
"metadataLocation": string, // Azure Communication Services URL where the metadata for this chunk is located
"deleteLocation": string, // Azure Communication Services URL to use to delete all content, including recording and metadata.
"index": int, // Index providing ordering for this chunk in the entire recording
"endReason": string, // Reason for chunk ending: "SessionEnded", "ChunkMaximumSizeExceeded”, etc.
}
]
},
"recordingStartTime": string, // ISO 8601 date time for the start of the recording
"recordingDurationMs": int, // Duration of recording in milliseconds
"sessionEndReason": string // Reason for call ending: "CallEnded", "InitiatorLeft”, etc.
},
"eventType": string, // "Microsoft.Communication.RecordingFileStatusUpdated"
"dataVersion": string, // "1.0"
"metadataVersion": string, // "1"
"eventTime": string // ISO 8601 date time for when the event was created
}
Gunakan DownloadToAsync
API untuk mengunduh media yang direkam.
var recordingDownloadUri = new Uri(contentLocation);
var response = await callAutomationClient.GetCallRecording().DownloadToAsync(recordingDownloadUri, fileName);
downloadLocation
Ambil untuk rekaman dari contentLocation
atribut recordingChunk
.
DownloadToAsync
Gunakan metode untuk mengunduh konten ke dalam nama file yang disediakan.
7. Hapus konten perekaman menggunakan DeleteAsync
API
Gunakan DeleteAsync
API untuk menghapus konten rekaman (seperti media dan metadata yang direkam).
var recordingDeleteUri = new Uri(deleteLocation);
var response = await callAutomationClient.GetCallRecording().DeleteAsync(recordingDeleteUri);
Kode Sampel
Anda dapat mengunduh aplikasi contoh dari GitHub
Prasyarat
- Anda memerlukan akun Azure dengan langganan aktif.
- Menyebarkan sumber daya Communication Service. Catat string koneksi sumber daya Anda.
- Berlangganan peristiwa melalui Azure Event Grid.
- Mengunduh Java SDK
Sebelum memulai
API Perekaman Panggilan secara eksklusif menggunakan serverCallId
untuk memulai perekaman. Ada beberapa metode yang dapat Anda gunakan untuk mengambil serverCallId
tergantung pada skenario Anda:
Skenario Automasi Panggilan
Saat menggunakan Automation Panggilan, Anda memiliki dua opsi untuk mendapatkan serverCallId
:
Setelah panggilan dibuat,
serverCallId
dikembalikan sebagai propertiCallConnected
peristiwa setelah panggilan dibuat. Pelajari cara Mendapatkan peristiwa CallConnected dari Call Automation SDK.Setelah Anda menjawab panggilan atau panggilan dibuat
serverCallId
, dikembalikan sebagai propertiAnswerCallResult
respons atauCreateCallResult
API masing-masing.
Memanggil skenario SDK
Saat menggunakan SDK Klien Panggilan, Anda dapat mengambil serverCallId
dengan menggunakan getServerCallId
metode pada panggilan.
Gunakan contoh ini untuk mempelajari cara Mendapatkan serverCallId dari SDK Klien Panggilan.
Mari kita mulai dengan beberapa langkah sederhana.
1. Buat klien Automation Panggilan
API Perekaman Panggilan adalah bagian dari pustaka Azure Communication Services Call Automation . Jadi Anda perlu membuat klien Automation Panggilan.
Untuk membuat klien otomatisasi panggilan, gunakan string koneksi Communication Services Anda dan teruskan ke CallAutomationClient
objek.
CallAutomationClient callAutomationClient = new CallAutomationClientBuilder()
.connectionString("<acsConnectionString>")
.buildClient();
2. Mulai merekam sesi dengan StartRecordingOptions menggunakan startWithResponse
API
Gunakan yang serverCallId
diterima selama inisiasi panggilan.
- Gunakan
RecordingContent
untuk meneruskan tipe konten perekaman. GunakanAUDIO
. - Gunakan
RecordingChannel
untuk meneruskan jenis saluran perekaman. GunakanMIXED
atauUNMIXED
. - Gunakan
RecordingFormat
untuk meneruskan format rekaman. GunakanWAV
.
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<serverCallId>"))
.setRecordingChannel(RecordingChannel.UNMIXED)
.setRecordingFormat(RecordingFormat.WAV)
.setRecordingContent(RecordingContent.AUDIO)
.setRecordingStateCallbackUrl("<recordingStateCallbackUrl>");
Response<RecordingStateResult> response = callAutomationClient.getCallRecording()
.startWithResponse(recordingOptions, null);
2.1. Mulai Perekaman - Bawa Penyimpanan Blob Azure Anda Sendiri
Mulai perekaman menggunakan Azure Blob Storage yang anda tentukan untuk menyimpan file yang direkam setelah rekaman selesai.
StartRecordingOptions recordingOptions = new StartRecordingOptions(callLocator)
.setRecordingChannel(RecordingChannel.MIXED)
.setRecordingContent(RecordingContent.AUDIO_VIDEO)
.setRecordingFormat(RecordingFormat.MP4)
.setRecordingStorage(new AzureBlobContainerRecordingStorage("<YOUR_STORAGE_CONTAINER_URL>"))
.setExternalStorage(new BlobStorage("<Insert Container / Blob Uri>"));
// //start recording
RecordingStateResult result = callRecording.start(recordingOptions);
2.2. Mulai merekam sesi dengan mode Jeda diaktifkan menggunakan StartAsync
API
Catatan
Rekaman harus dilanjutkan agar file rekaman dibuat.
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<serverCallId>"))
.setRecordingChannel(RecordingChannel.UNMIXED)
.setRecordingFormat(RecordingFormat.WAV)
.setRecordingContent(RecordingContent.AUDIO)
.setRecordingStateCallbackUrl("<recordingStateCallbackUrl>")
.setPauseOnStart(true)
.setAudioChannelParticipantOrdering(List.of(new CommunicationUserIdentifier("<participantMri>")));
Response<RecordingStateResult> response = callAutomationClient.getCallRecording()
.startWithResponse(recordingOptions, null);
2.3. Hanya untuk Unmixed - Tentukan pengguna di saluran 0
Untuk menghasilkan file rekaman audio yang tidak dimix, Anda dapat menggunakan AudioChannelParticipantOrdering
fungsionalitas untuk menentukan pengguna mana yang ingin Anda rekam di saluran 0. Peserta lainnya ditugaskan ke saluran saat mereka berbicara. Jika Anda menggunakan RecordingChannel.Unmixed
tetapi tidak menggunakan AudioChannelParticipantOrdering
, Rekaman Panggilan menetapkan saluran 0 ke peserta pertama yang berbicara.
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<serverCallId>"))
.setRecordingChannel(RecordingChannel.UNMIXED)
.setRecordingFormat(RecordingFormat.WAV)
.setRecordingContent(RecordingContent.AUDIO)
.setRecordingStateCallbackUrl("<recordingStateCallbackUrl>")
.setAudioChannelParticipantOrdering(List.of(new CommunicationUserIdentifier("<participantMri>")));
Response<RecordingStateResult> response = callAutomationClient.getCallRecording()
.startWithResponse(recordingOptions, null);
2.4. Hanya untuk Unmixed - Tentukan afinitas saluran
ChannelAffinity channelAffinity = new ChannelAffinity()
.setParticipant(new PhoneNumberIdentifier("RECORDING_ID"))
.setChannel(0);
List<ChannelAffinity> channelAffinities = Arrays.asList(channelAffinity);
StartRecordingOptions startRecordingOptions = new StartRecordingOptions(new ServerCallLocator(SERVER_CALL_ID))
.setRecordingChannel(RecordingChannel.UNMIXED)
.setRecordingFormat(RecordingFormat.WAV)
.setRecordingContent(RecordingContent.AUDIO)
.setRecordingStateCallbackUrl("<recordingStateCallbackUrl>")
.setChannelAffinity(channelAffinities);
Response<RecordingStateResult> response = callAutomationClient.getCallRecording()
.startRecordingWithResponse(recordingOptions, null);
startWithResponse
Respons API berisi recordingId
sesi perekaman.
3. Hentikan sesi perekaman menggunakan stopWithResponse
API
Gunakan yang recordingId
diterima sebagai respons terhadap startWithResponse
.
Response<Void> response = callAutomationClient.getCallRecording()
.stopWithResponse(response.getValue().getRecordingId(), null);
4. Jeda sesi perekaman menggunakan pauseWithResponse
API
Gunakan yang recordingId
diterima sebagai respons terhadap startWithResponse
.
Response<Void> response = callAutomationClient.getCallRecording()
.pauseWithResponse(response.getValue().getRecordingId(), null);
5. Lanjutkan sesi perekaman menggunakan resumeWithResponse
API
Gunakan yang recordingId
diterima sebagai respons terhadap startWithResponse
.
Response<Void> response = callAutomationClient.getCallRecording()
.resumeWithResponse(response.getValue().getRecordingId(), null);
6. Unduh file rekaman menggunakan downloadToWithResponse
API
Gunakan webhook Azure Event Grid atau tindakan lain yang dipicu harus digunakan untuk memberi tahu layanan Anda ketika media yang direkam siap diunduh.
Pemberitahuan Microsoft.Communication.RecordingFileStatusUpdated
Event Grid diterbitkan saat rekaman siap diambil, biasanya beberapa menit setelah proses perekaman selesai (seperti rapat berakhir atau rekaman berhenti). Pemberitahuan peristiwa perekaman mencakup contentLocation
dan metadataLocation
, yang dapat Anda gunakan untuk mengambil media yang direkam dan file metadata rekaman.
Kode berikut adalah contoh skema peristiwa.
{
"id": string, // Unique guid for event
"topic": string, // /subscriptions/{subscription-id}/resourceGroups/{group-name}/providers/Microsoft.Communication/communicationServices/{communication-services-resource-name}
"subject": string, // /recording/call/{call-id}/serverCallId/{serverCallId}
"data": {
"recordingStorageInfo": {
"recordingChunks": [
{
"documentId": string, // Document id for the recording chunk
"contentLocation": string, //Azure Communication Services URL where the content is located
"metadataLocation": string, // Azure Communication Services URL where the metadata for this chunk is located
"deleteLocation": string, // Azure Communication Services URL to use to delete all content, including recording and metadata.
"index": int, // Index providing ordering for this chunk in the entire recording
"endReason": string, // Reason for chunk ending: "SessionEnded", "ChunkMaximumSizeExceeded”, etc.
}
]
},
"recordingStartTime": string, // ISO 8601 date time for the start of the recording
"recordingDurationMs": int, // Duration of recording in milliseconds
"sessionEndReason": string // Reason for call ending: "CallEnded", "InitiatorLeft”, etc.
},
"eventType": string, // "Microsoft.Communication.RecordingFileStatusUpdated"
"dataVersion": string, // "1.0"
"metadataVersion": string, // "1"
"eventTime": string // ISO 8601 date time for when the event was created
}
Gunakan downloadToWithResponse
metode CallRecording
kelas untuk mengunduh media yang direkam. Berikut ini adalah parameter yang didukung untuk metode downloadToWithResponse
:
-
contentLocation
: URL Azure Communication Services tempat konten berada. -
destinationPath
: Lokasi file. -
parallelDownloadOptions
: Objek opsionalParallelDownloadOptions
untuk memodifikasi cara kerja unduhan paralel. -
overwrite
: Benar untuk menimpa file jika ada. -
context
: Konteks yang mewakili konteks permintaan.
Boolean overwrite = true;
ParallelDownloadOptions parallelDownloadOptions = null;
Context context = null;
String filePath = String.format(".\\%s.%s", documentId, fileType);
Path destinationPath = Paths.get(filePath);
Response<Void> downloadResponse = callAutomationClient.getCallRecording().downloadToWithResponse(contentLocation, destinationPath, parallelDownloadOptions, overwrite, context);
Lokasi konten dan ID dokumen untuk file rekaman dapat diambil dari bidang contentLocation
dan documentId
secara berurutan, untuk setiap recordingChunk
.
7. Hapus konten perekaman menggunakan deleteWithResponse
API
Gunakan deleteWithResponse
metode CallRecording
kelas untuk menghapus media yang direkam. Parameter yang didukung untuk deleteWithResponse
metode:
-
deleteLocation
: URL Azure Communication Services tempat konten yang akan dihapus berada. -
context
: Konteks yang mewakili konteks permintaan.
Response<Void> deleteResponse = callAutomationClient.getCallRecording().deleteWithResponse(deleteLocation, context);
Lokasi penghapusan untuk rekaman dapat diambil dari deleteLocation
bidang peristiwa Event Grid.
Kode Sampel
Anda dapat mengunduh aplikasi contoh dari GitHub
Prasyarat
- Anda memerlukan akun Azure dengan langganan aktif.
- Menyebarkan sumber daya Communication Service. Catat string koneksi sumber daya Anda.
- Berlangganan peristiwa melalui Azure Event Grid.
- Python 3.7+.
Sebelum memulai
API Perekaman Panggilan menggunakan secara serverCallId
eksklusif untuk memulai perekaman. Ada beberapa metode yang dapat Anda gunakan untuk mengambil serverCallId
tergantung pada skenario Anda:
Skenario Automasi Panggilan
- Saat menggunakan Automation Panggilan, Anda memiliki dua opsi untuk mendapatkan
serverCallId
:- Setelah panggilan dibuat,
serverCallId
dikembalikan sebagai propertiCallConnected
peristiwa setelah panggilan dibuat. Pelajari cara Mendapatkan peristiwa CallConnected dari Call Automation SDK. - Setelah Anda menjawab panggilan atau panggilan dibuat, panggilan mengembalikan
serverCallId
sebagai properti responsAnswerCallResult
atauCreateCallResult
API masing-masing.
- Setelah panggilan dibuat,
Memanggil skenario SDK
- Saat menggunakan SDK Klien Panggilan, Anda dapat mengambil
serverCallId
dengan menggunakanserver_call_id
variabel pada panggilan. Gunakan contoh ini untuk mempelajari cara Mendapatkan serverCallId dari SDK Klien Panggilan.
Mari kita mulai dengan beberapa langkah sederhana!
1. Buat klien Automation Panggilan
API Perekaman Panggilan adalah bagian dari pustaka Azure Communication Services Call Automation . Dengan demikian, perlu untuk membuat klien Automation Panggilan.
Untuk membuat klien otomatisasi panggilan, gunakan string koneksi Communication Services Anda dan teruskan ke CallAutomationClient
objek.
call_automation_client = CallAutomationClient.from_connection_string("<ACSConnectionString>")
2. Mulai rekam sesi start_recording API
Gunakan yang serverCallId
diterima selama inisiasi panggilan.
- Gunakan
RecordingContent
untuk meneruskan tipe konten perekaman. GunakanAUDIO
. - Gunakan
RecordingChannel
untuk meneruskan jenis saluran perekaman. GunakanMIXED
atauUNMIXED
. - Gunakan
RecordingFormat
untuk meneruskan format rekaman. GunakanWAV
.
response = call_automation_client.start_recording(call_locator=ServerCallLocator(server_call_id),
recording_content_type = RecordingContent.Audio,
recording_channel_type = RecordingChannel.Unmixed,
recording_format_type = RecordingFormat.Wav,
recording_state_callback_url = "<CallbackUri>")
2.1. Mulai Perekaman - Bawa Penyimpanan Blob Azure Anda Sendiri
Mulai Perekaman dengan Azure Blob Storage Anda sendiri yang ditentukan untuk menyimpan file rekaman setelah perekaman selesai.
response = call_automation_client.start_recording(call_locator=ServerCallLocator(server_call_id),
recording_content_type = RecordingContent.Audio,
recording_channel_type = RecordingChannel.Unmixed,
recording_format_type = RecordingFormat.Wav,
recording_state_callback_url = "<CallbackUri>",
recording_storage = AzureBlobContainerRecordingStorage(container_url="<YOUR_STORAGE_CONTAINER_URL>"))
2.2. Mulai perekaman sesi dengan mode Jeda diaktifkan menggunakan API 'StartAsync'
Catatan
Rekaman perlu dilanjutkan agar file rekaman dibuat.
response = call_automation_client.start_recording(call_locator=ServerCallLocator(server_call_id),
recording_content_type = RecordingContent.Audio,
recording_channel_type = RecordingChannel.Unmixed,
recording_format_type = RecordingFormat.Wav,
pause_on_start = true,
recording_state_callback_url = "<CallbackUri>")
2.3. Hanya untuk Unmixed - Tentukan pengguna di saluran 0
Untuk menghasilkan file rekaman audio yang tidak dimix, Anda dapat menggunakan AudioChannelParticipantOrdering
fungsionalitas untuk menentukan pengguna mana yang ingin Anda rekam di saluran 0. Peserta lainnya ditugaskan ke saluran saat mereka berbicara. Jika Anda menggunakan RecordingChannel.Unmixed
tetapi tidak menggunakan AudioChannelParticipantOrdering
, Rekaman Panggilan menetapkan saluran 0 ke peserta pertama yang berbicara.
response = call_automation_client.start_recording(call_locator=ServerCallLocator(server_call_id),
recording_content_type = RecordingContent.Audio,
recording_channel_type = RecordingChannel.Unmixed,
recording_format_type = RecordingFormat.Wav,
recording_state_callback_url = "<CallbackUri>",
audio_channel_participant_ordering=[CommunicationUserIdentifier(id="<ACS_USER_MRI>")])
2.4. Hanya untuk Unmixed - Tentukan afinitas saluran
_channel_affinity = ChannelAffinity(target_participant=CommunicationUserIdentifier("<ACS_USER_MRI>"), channel=0)
response = call_automation_client.start_recording(call_locator=ServerCallLocator(server_call_id),
recording_content_type = RecordingContent.Audio,
recording_channel_type = RecordingChannel.Unmixed,
recording_format_type = RecordingFormat.Wav,
recording_state_callback_url = "<CallbackUri>",
channel_affinity=[_channel_affinity])
StartAsync
Respons API berisi recordingId
sesi perekaman.
3. Hentikan sesi perekaman menggunakan API 'stop_recording'
Gunakan yang recording_id
diterima sebagai respons terhadap start_recording
.
stop_recording = call_automation_client.stop_recording(recording_id = recording_id)
4. Jeda sesi perekaman menggunakan API 'pause_recording'
Gunakan yang recording_id
diterima sebagai respons terhadap start_recording
.
pause_recording = call_automation_client.pause_recording(recording_id = recording_id)
5. Lanjutkan sesi perekaman menggunakan API 'resume_recording'
Gunakan yang recording_id
diterima sebagai respons terhadap start_recording
.
resume_recording = call_automation_client.resume_recording(recording_id = recording_id)
6. Unduh File rekaman menggunakan API 'download_recording'
Gunakan webhook Azure Event Grid atau tindakan lain yang dipicu harus digunakan untuk memberi tahu layanan Anda ketika media yang direkam siap diunduh.
Pemberitahuan Microsoft.Communication.RecordingFileStatusUpdated
Event Grid diterbitkan saat rekaman siap diambil, biasanya beberapa menit setelah proses perekaman selesai (seperti rapat berakhir atau rekaman berhenti). Pemberitahuan peristiwa rekaman menyertakan contentLocation
dan metadataLocation
, yang dapat digunakan untuk mengambil media yang direkam dan file metadata rekaman.
Kode berikut adalah contoh skema peristiwa.
{
"id": string, // Unique guid for event
"topic": string, // /subscriptions/{subscription-id}/resourceGroups/{group-name}/providers/Microsoft.Communication/communicationServices/{communication-services-resource-name}
"subject": string, // /recording/call/{call-id}/serverCallId/{serverCallId}
"data": {
"recordingStorageInfo": {
"recordingChunks": [
{
"documentId": string, // Document id for the recording chunk
"contentLocation": string, //Azure Communication Services URL where the content is located
"metadataLocation": string, // Azure Communication Services URL where the metadata for this chunk is located
"deleteLocation": string, // Azure Communication Services URL to use to delete all content, including recording and metadata.
"index": int, // Index providing ordering for this chunk in the entire recording
"endReason": string, // Reason for chunk ending: "SessionEnded", "ChunkMaximumSizeExceeded”, etc.
}
]
},
"recordingStartTime": string, // ISO 8601 date time for the start of the recording
"recordingDurationMs": int, // Duration of recording in milliseconds
"sessionEndReason": string // Reason for call ending: "CallEnded", "InitiatorLeft”, etc.
},
"eventType": string, // "Microsoft.Communication.RecordingFileStatusUpdated"
"dataVersion": string, // "1.0"
"metadataVersion": string, // "1"
"eventTime": string // ISO 8601 date time for when the event was created
}
Gunakan download_recording
API untuk mengunduh media yang direkam.
response = recording_data = call_automation_client.download_recording(content_location)
with open("<file_name>", "wb") as binary_file:
binary_file.write(recording_data.read())
downloadLocation
untuk rekaman dapat diambil dari contentLocation
atribut recordingChunk
.
download_recording
Gunakan metode untuk mengunduh konten ke dalam byte.
7. Hapus konten perekaman menggunakan API 'delete_recording'
Gunakan delete_recording
API untuk menghapus konten rekaman seperti media dan metadata yang direkam.
response = call_automation_client.delete_recording(delete_location);
Kode Sampel
Anda dapat mengunduh aplikasi contoh dari GitHub
Prasyarat
- Anda memerlukan akun Azure dengan langganan aktif.
- Menyebarkan sumber daya Communication Service. Catat string koneksi sumber daya Anda.
- Berlangganan peristiwa melalui Azure Event Grid.
- Node.js versi LTS Aktif dan Pemeliharaan LTS (8.11.1 dan 10.14.1 direkomendasikan)
Sebelum memulai
API Perekaman Panggilan menggunakan secara serverCallId
eksklusif untuk memulai perekaman. Ada beberapa metode yang dapat Anda gunakan untuk mengambil serverCallId
tergantung pada skenario Anda:
Skenario Automasi Panggilan
- Saat menggunakan Automation Panggilan, Anda memiliki dua opsi untuk mendapatkan
serverCallId
:- Setelah panggilan dibuat,
serverCallId
dikembalikan sebagai propertiCallConnected
peristiwa setelah panggilan dibuat. Pelajari cara Mendapatkan peristiwa CallConnected dari Call Automation SDK. - Setelah Anda menjawab panggilan atau panggilan dibuat, panggilan mengembalikan
serverCallId
sebagai properti responsAnswerCallResult
atauCreateCallResult
API masing-masing.
- Setelah panggilan dibuat,
Memanggil skenario SDK
Saat menggunakan SDK Klien Panggilan, Anda dapat mengambil serverCallId
dengan menggunakan getServerCallId
metode pada panggilan.
Gunakan contoh ini untuk mempelajari cara Mendapatkan serverCallId dari SDK Klien Panggilan.
Mari kita mulai dengan beberapa langkah sederhana!
1. Buat klien Automation Panggilan
API Perekaman Panggilan adalah bagian dari pustaka Azure Communication Services Call Automation . Dengan demikian, perlu untuk membuat klien Automation Panggilan.
Untuk membuat klien otomatisasi panggilan, gunakan string koneksi Communication Services Anda dan teruskan ke CallAutomationClient
objek.
const callAutomationClient = new CallAutomationClient.CallAutomationClient("<ACSConnectionString>");
2. Mulai sesi perekaman dengan StartRecordingOptions menggunakan API 'StartAsync'
Gunakan yang serverCallId
diterima selama inisiasi panggilan.
- Gunakan
RecordingContent
untuk meneruskan tipe konten perekaman. GunakanAUDIO
. - Gunakan
RecordingChannel
untuk meneruskan jenis saluran perekaman. GunakanMIXED
atauUNMIXED
. - Gunakan
RecordingFormat
untuk meneruskan format rekaman. GunakanWAV
.
var locator: CallLocator = { id: "<ServerCallId>", kind: "serverCallLocator" };
var options: StartRecordingOptions =
{
callLocator: locator,
recordingContent: "audio",
recordingChannel:"unmixed",
recordingFormat: "wav",
recordingStateCallbackEndpointUrl: "<CallbackUri>"
};
var response = await callAutomationClient.getCallRecording().start(options);
2.1. Mulai Perekaman - Bawa Penyimpanan Blob Azure Anda Sendiri
Mulai perekaman menggunakan Azure Blob Storage yang anda tentukan untuk menyimpan file yang direkam setelah rekaman selesai.
const recordingStorageKind: RecordingStorageKind = "azureBlobStorage"
const recordingStorage: RecordingStorage = {
recordingStorageKind: recordingStorageKind,
recordingDestinationContainerUrl: "<YOUR_STORAGE_CONTAINER_URL>"
}
var options: StartRecordingOptions = {
callLocator: callLocator,
recordingContent: "audio",
recordingChannel:"unmixed",
recordingFormat: "wav",
recordingStateCallbackEndpointUrl: "<CallbackUri>",
recordingStorage: recordingStorage
};
var response = await callAutomationClient.getCallRecording().start(options);
2.2. Mulai perekaman sesi dengan mode Jeda diaktifkan menggunakan API 'StartAsync'
Catatan
Rekaman perlu dilanjutkan agar file rekaman dibuat.
var locator: CallLocator = { id: "<ServerCallId>", kind: "serverCallLocator" };
var options: StartRecordingOptions =
{
callLocator: locator,
recordingContent: "audio",
recordingChannel:"unmixed",
recordingFormat: "wav",
pauseOnStart: true
recordingStateCallbackEndpointUrl: "<CallbackUri>",
audioChannelParticipantOrdering:[{communicationUserId: "<ACS_USER_MRI>"}]
};
var response = await callAutomationClient.getCallRecording().start(options);
2.3. Hanya untuk Unmixed - Tentukan pengguna di saluran 0
Untuk menghasilkan file rekaman audio yang tidak dimix, Anda dapat menggunakan AudioChannelParticipantOrdering
fungsionalitas untuk menentukan pengguna mana yang ingin Anda rekam di saluran 0. Peserta lainnya ditugaskan ke saluran saat mereka berbicara. Jika Anda menggunakan RecordingChannel.Unmixed
tetapi tidak menggunakan AudioChannelParticipantOrdering
, Rekaman Panggilan menetapkan saluran 0 ke peserta pertama yang berbicara.
var locator: CallLocator = { id: "<ServerCallId>", kind: "serverCallLocator" };
var options: StartRecordingOptions =
{
callLocator: locator,
recordingContent: "audio",
recordingChannel:"unmixed",
recordingFormat: "wav",
recordingStateCallbackEndpointUrl: "<CallbackUri>",
audioChannelParticipantOrdering:[{communicationUserId: "<ACS_USER_MRI>"}]
};
var response = await callAutomationClient.getCallRecording().start(options);
2.4. Hanya untuk Unmixed - Tentukan afinitas saluran
var options: StartRecordingOptions =
{
callLocator: locator,
recordingContent: "audio",
recordingChannel:"unmixed",
recordingFormat: "wav",
recordingStateCallbackEndpointUrl: "<CallbackUri>",
ChannelAffinity:
[
{
channel:0,
targetParticipant:{communicationUserId: "<ACS_USER_MRI>"}
}
]
};
var response = await callAutomationClient.getCallRecording().start(options);
StartAsync
Respons API berisi recordingId
sesi perekaman.
3. Hentikan sesi perekaman menggunakan API 'stop'
Gunakan yang recordingId
diterima sebagai respons terhadap start
.
var stopRecording = await callAutomationClient.getCallRecording().stop(recordingId);
4. Jeda sesi perekaman menggunakan API 'jeda'
Gunakan yang recordingId
diterima sebagai respons terhadap start
.
var pauseRecording = await callAutomationClient.getCallRecording().pause(recordingId);
5. Lanjutkan sesi perekaman menggunakan API 'ResumeAsync'
Gunakan yang recordingId
diterima sebagai respons terhadap start
.
var resumeRecording = await callAutomationClient.getCallRecording().resume(recordingId);
6. Unduh file rekaman menggunakan API 'DownloadToAsync'
Gunakan webhook Azure Event Grid atau tindakan lain yang dipicu harus digunakan untuk memberi tahu layanan Anda ketika media yang direkam siap diunduh.
Pemberitahuan Microsoft.Communication.RecordingFileStatusUpdated
Event Grid diterbitkan saat rekaman siap diambil, biasanya beberapa menit setelah proses perekaman selesai (seperti rapat berakhir atau rekaman berhenti). Pemberitahuan peristiwa rekaman menyertakan contentLocation
dan metadataLocation
, yang dapat digunakan untuk mengambil media yang direkam dan file metadata rekaman.
Kode berikut adalah contoh skema peristiwa.
{
"id": string, // Unique guid for event
"topic": string, // /subscriptions/{subscription-id}/resourceGroups/{group-name}/providers/Microsoft.Communication/communicationServices/{communication-services-resource-name}
"subject": string, // /recording/call/{call-id}/serverCallId/{serverCallId}
"data": {
"recordingStorageInfo": {
"recordingChunks": [
{
"documentId": string, // Document id for the recording chunk
"contentLocation": string, //Azure Communication Services URL where the content is located
"metadataLocation": string, // Azure Communication Services URL where the metadata for this chunk is located
"deleteLocation": string, // Azure Communication Services URL to use to delete all content, including recording and metadata.
"index": int, // Index providing ordering for this chunk in the entire recording
"endReason": string, // Reason for chunk ending: "SessionEnded", "ChunkMaximumSizeExceeded”, etc.
}
]
},
"recordingStartTime": string, // ISO 8601 date time for the start of the recording
"recordingDurationMs": int, // Duration of recording in milliseconds
"sessionEndReason": string // Reason for call ending: "CallEnded", "InitiatorLeft”, etc.
},
"eventType": string, // "Microsoft.Communication.RecordingFileStatusUpdated"
"dataVersion": string, // "1.0"
"metadataVersion": string, // "1"
"eventTime": string // ISO 8601 date time for when the event was created
}
Gunakan downloadToPath
API untuk mengunduh media yang direkam.
var response = await callAutomationClient.getCallRecording().downloadToPath(contentLocation, fileName);
downloadLocation
untuk rekaman dapat diambil dari contentLocation
atribut recordingChunk
.
DownloadToAsync
Gunakan metode untuk mengunduh konten ke dalam nama file yang disediakan.
7. Hapus konten perekaman menggunakan API 'DeleteAsync'
Gunakan delete
API untuk menghapus konten rekaman (misalnya, media yang direkam, metadata)
var response = await callAutomationClient.getCallRecording().delete(deleteLocation);
Membersihkan sumber daya
Jika ingin membersihkan dan menghapus langganan Azure Communication Services, Anda bisa menghapus sumber daya atau grup sumber daya. Menghapus grup sumber daya juga menghapus sumber daya apa pun yang terkait dengannya. Pelajari selengkapnya tentang membersihkan sumber daya.
Langkah berikutnya
Untuk informasi lebih lanjut, baca artikel berikut:
- Unduh aplikasi sampel perekaman panggilan Java, Python, dan JavaScript kami.
- Pelajari selengkapnya tentang Perekaman Panggilan.
- Pelajari selengkapnya tentang Automasi Panggilan.