Bagikan melalui


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 serverCallIdeksklusif 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:
    1. Setelah panggilan dibuat, serverCallId dikembalikan sebagai properti CallConnected peristiwa setelah panggilan dibuat. Pelajari cara Mendapatkan peristiwa Panggilan Koneksi dari Call Automation SDK.
    2. Setelah Anda menjawab panggilan atau panggilan dibuat serverCallId , dikembalikan sebagai properti AnswerCallResult respons atau CreateCallResult 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 . 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 serverCallIdeksklusif 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:
    1. Setelah panggilan dibuat, serverCallId dikembalikan sebagai properti CallConnected peristiwa setelah panggilan dibuat. Pelajari cara Mendapatkan peristiwa Panggilan Koneksi dari Call Automation SDK.
    2. Setelah Anda menjawab panggilan atau panggilan dibuat serverCallId , dikembalikan sebagai properti AnswerCallResult respons atau CreateCallResult 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 . 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 serverCallIdeksklusif 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:
    1. Setelah panggilan dibuat, serverCallId dikembalikan sebagai properti CallConnected peristiwa setelah panggilan dibuat. Pelajari cara Mendapatkan peristiwa Panggilan Koneksi dari Call Automation SDK.
    2. Setelah Anda menjawab panggilan atau panggilan dibuat serverCallId , dikembalikan sebagai properti AnswerCallResult respons atau CreateCallResult API masing-masing.

Memanggil skenario SDK

  • Saat menggunakan SDK Klien Panggilan, Anda dapat mengambil serverCallId dengan menggunakan server_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 serverCallIdeksklusif 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:
    1. Setelah panggilan dibuat, serverCallId dikembalikan sebagai properti CallConnected peristiwa setelah panggilan dibuat. Pelajari cara Mendapatkan peristiwa Panggilan Koneksi dari Call Automation SDK.
    2. Setelah Anda menjawab panggilan atau panggilan dibuat serverCallId , dikembalikan sebagai properti AnswerCallResult respons atau CreateCallResult 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 . 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: