Mulai Cepat Perekaman Panggilan
Mulai cepat ini membuat Anda mulai menggunakan Perekaman Panggilan untuk panggilan suara dan video. Untuk mulai menggunakan API Perekaman Panggilan, Anda harus melakukan panggilan. Pastikan Anda terbiasa dengan SDK klien Panggilan dan/atau Automasi Panggilan untuk membangun pengalaman panggilan pengguna akhir.
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
:- Setelah panggilan dibuat,
serverCallId
dikembalikan sebagai propertiCallConnected
peristiwa setelah panggilan dibuat. Pelajari cara Mendapatkan peristiwa Panggilan Koneksi dari Call Automation SDK. - Setelah Anda menjawab panggilan atau panggilan dibuat
serverCallId
, dikembalikan sebagai propertiAnswerCallResult
respons atauCreateCallResult
API masing-masing.
- Setelah panggilan dibuat,
Memanggil skenario SDK
- Saat menggunakan SDK Klien Panggilan, Anda dapat mengambil
serverCallId
dengan menggunakangetServerCallId
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, Anda menggunakan string koneksi Communication Services dan meneruskannya ke CallAutomationClient
objek.
CallAutomationClient callAutomationClient = new CallAutomationClient("<ACSConnectionString>");
2. Mulai sesi perekaman dengan StartRecordingOptions menggunakan API 'StartAsync'
Gunakan yang serverCallId
diterima selama inisiasi panggilan.
- RecordingContent digunakan untuk meneruskan jenis konten rekaman. Menggunakan audio
- RecordingChannel digunakan untuk meneruskan jenis saluran rekaman. Gunakan campuran atau tidak terkoreksi.
- RecordingFormat digunakan untuk meneruskan format rekaman. Gunakan wav.
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 dengan Azure Blob Storage Anda sendiri yang ditentukan untuk menyimpan file rekaman setelah perekaman 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>"))
};
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 API 'StopAsync'
Gunakan yang recordingId
diterima sebagai respons dari StartAsync
.
var stopRecording = await callAutomationClient.GetCallRecording().StopAsync(recordingId);
4. Jeda sesi perekaman menggunakan API 'PauseAsync'
Gunakan yang recordingId
diterima sebagai respons dari StartAsync
.
var pauseRecording = await callAutomationClient.GetCallRecording ().PauseAsync(recordingId);
5. Lanjutkan sesi perekaman menggunakan API 'ResumeAsync'
Gunakan yang recordingId
diterima sebagai respons dari StartAsync
.
var resumeRecording = await callAutomationClient.GetCallRecording().ResumeAsync(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 (misalnya, rapat berakhir, perekaman dihentikan). Pemberitahuan peristiwa rekaman menyertakan contentLocation
dan metadataLocation
, yang dapat digunakan 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 API DownloadToAsync
untuk mengunduh media yang direkam.
var recordingDownloadUri = new Uri(contentLocation);
var response = await callAutomationClient.GetCallRecording().DownloadToAsync(recordingDownloadUri, fileName);
downloadLocation
untuk rekaman dapat diambil dari contentLocation
atribut recordingChunk
. DownloadToAsync
metode mengunduh konten ke dalam nama file yang disediakan.
7. Hapus konten perekaman menggunakan API 'DeleteAsync'
Gunakan DeleteAsync
API untuk menghapus konten rekaman (misalnya, media yang direkam, metadata)
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 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 Panggilan Koneksi dari Call Automation SDK. - Setelah Anda menjawab panggilan atau panggilan dibuat
serverCallId
, dikembalikan sebagai propertiAnswerCallResult
respons atauCreateCallResult
API masing-masing.
- Setelah panggilan dibuat,
Memanggil skenario SDK
- Saat menggunakan SDK Klien Panggilan, Anda dapat mengambil
serverCallId
dengan menggunakangetServerCallId
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, Anda akan menggunakan string koneksi Communication Services dan meneruskannya ke CallAutomationClient
objek.
CallAutomationClient callAutomationClient = new CallAutomationClientBuilder()
.connectionString("<acsConnectionString>")
.buildClient();
2. Mulai sesi perekaman dengan StartRecordingOptions menggunakan API 'startWithResponse'
Gunakan yang serverCallId
diterima selama inisiasi panggilan.
- RecordingContent digunakan untuk meneruskan jenis konten rekaman. Gunakan AUDIO
- RecordingChannel digunakan untuk meneruskan jenis saluran rekaman. Gunakan MIXED atau UNMIXED.
- RecordingFormat digunakan untuk meneruskan format rekaman. Gunakan WAV.
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 Sesi perekaman dengan Azure Blob Storage Anda sendiri untuk menyimpan file rekaman setelah perekaman selesai.
StartRecordingOptions recordingOptions = new StartRecordingOptions(callLocator)
.setRecordingChannel(RecordingChannel.MIXED)
.setRecordingContent(RecordingContent.AUDIO_VIDEO)
.setRecordingFormat(RecordingFormat.MP4)
.setRecordingStorage(new AzureBlobContainerRecordingStorage("<YOUR_STORAGE_CONTAINER_URL>"));
// //start recording
RecordingStateResult result = callRecording.start(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>"))
.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 akan ditugaskan ke saluran saat mereka berbicara. Jika Anda menggunakan RecordingChannel.Unmixed
tetapi tidak menggunakan AudioChannelParticipantOrdering
, Rekaman Panggilan akan 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 API 'stopWithResponse'
Gunakan yang recordingId
diterima sebagai respons dari startWithResponse
.
Response<Void> response = callAutomationClient.getCallRecording()
.stopWithResponse(response.getValue().getRecordingId(), null);
4. Jeda sesi perekaman menggunakan API 'pauseWithResponse'
Gunakan yang recordingId
diterima sebagai respons dari startWithResponse
.
Response<Void> response = callAutomationClient.getCallRecording()
.pauseWithResponse(response.getValue().getRecordingId(), null);
5. Lanjutkan sesi perekaman menggunakan API 'resumeWithResponse'
Gunakan yang recordingId
diterima sebagai respons dari startWithResponse
.
Response<Void> response = callAutomationClient.getCallRecording()
.resumeWithResponse(response.getValue().getRecordingId(), null);
6. Unduh file rekaman menggunakan API 'downloadToWithResponse'
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 (misalnya, rapat berakhir, perekaman dihentikan). Pemberitahuan peristiwa rekaman menyertakan contentLocation
dan metadataLocation
, yang dapat digunakan untuk mengambil media yang direkam dan file metadata rekaman.
Di bawah ini 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 metode downloadToWithResponse
kelas CallRecording
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 ParallelDownloadOptions opsional untuk memodifikasi cara kerja pengunduhan 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 API 'deleteWithResponse'.
Gunakan deleteWithResponse
metode CallRecording
kelas untuk menghapus media yang direkam. Berikut ini adalah parameter yang didukung untuk metode deleteWithResponse
:
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 Panggilan Koneksi dari Call Automation SDK. - Setelah Anda menjawab panggilan atau panggilan dibuat
serverCallId
, dikembalikan sebagai propertiAnswerCallResult
respons 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, Anda akan menggunakan string koneksi Communication Services dan meneruskannya 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.
- RecordingContent digunakan untuk meneruskan jenis konten rekaman. Menggunakan audio
- RecordingChannel digunakan untuk meneruskan jenis saluran rekaman. Gunakan campuran atau tidak terkoreksi.
- RecordingFormat digunakan untuk meneruskan format rekaman. Gunakan wav.
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 akan ditugaskan ke saluran saat mereka berbicara. Jika Anda menggunakan RecordingChannel.Unmixed
tetapi tidak menggunakan AudioChannelParticipantOrdering
, Rekaman Panggilan akan 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 dari 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 dari 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 dari 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 (misalnya, rapat berakhir, perekaman dihentikan). Pemberitahuan peristiwa rekaman menyertakan contentLocation
dan metadataLocation
, yang dapat digunakan untuk mengambil media yang direkam dan file metadata rekaman.
Di bawah ini 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 API download_recording
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
metode mengunduh konten ke dalam byte.
7. Hapus konten perekaman menggunakan API 'delete_recording'
Gunakan delete_recording
API untuk menghapus konten rekaman (misalnya, media yang direkam, metadata)
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 Panggilan Koneksi dari Call Automation SDK. - Setelah Anda menjawab panggilan atau panggilan dibuat
serverCallId
, dikembalikan sebagai propertiAnswerCallResult
respons atauCreateCallResult
API masing-masing.
- Setelah panggilan dibuat,
Memanggil skenario SDK
- Saat menggunakan SDK Klien Panggilan, Anda dapat mengambil
serverCallId
dengan menggunakangetServerCallId
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, Anda akan menggunakan string koneksi Communication Services dan meneruskannya 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.
- RecordingContent digunakan untuk meneruskan jenis konten rekaman. Menggunakan audio
- RecordingChannel digunakan untuk meneruskan jenis saluran rekaman. Gunakan campuran atau tidak terkoreksi.
- RecordingFormat digunakan untuk meneruskan format rekaman. Gunakan wav.
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 dengan Azure Blob Storage Anda sendiri yang ditentukan untuk menyimpan file rekaman setelah perekaman 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 akan ditugaskan ke saluran saat mereka berbicara. Jika Anda menggunakan RecordingChannel.Unmixed
tetapi tidak menggunakan AudioChannelParticipantOrdering
, Rekaman Panggilan akan 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 dari start
.
var stopRecording = await callAutomationClient.getCallRecording().stop(recordingId);
4. Jeda sesi perekaman menggunakan API 'jeda'
Gunakan yang recordingId
diterima sebagai respons dari start
.
var pauseRecording = await callAutomationClient.getCallRecording().pause(recordingId);
5. Lanjutkan sesi perekaman menggunakan API 'ResumeAsync'
Gunakan yang recordingId
diterima sebagai respons dari 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 (misalnya, rapat berakhir, perekaman dihentikan). Pemberitahuan peristiwa rekaman menyertakan contentLocation
dan metadataLocation
, yang dapat digunakan untuk mengambil media yang direkam dan file metadata rekaman.
Di bawah ini 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 API downloadToPath
untuk mengunduh media yang direkam.
var response = await callAutomationClient.getCallRecording().downloadToPath(contentLocation, fileName);
downloadLocation
untuk rekaman dapat diambil dari contentLocation
atribut recordingChunk
. DownloadToAsync
metode 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