Bagikan melalui


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 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. Saat Anda membuat panggilan, panggilan mengembalikan serverCallId sebagai properti CallConnected peristiwa setelah panggilan dibuat. Pelajari cara Mendapatkan peristiwa CallConnected dari Call Automation SDK.

  2. Saat Anda menjawab panggilan atau panggilan dibuat, panggilan mengembalikan serverCallId sebagai properti AnswerCallResult respons api atau CreateCallResult 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. Gunakan AUDIO.
  • Gunakan RecordingChannel untuk meneruskan jenis saluran perekaman. Gunakan MIXED atau UNMIXED.
  • Gunakan RecordingFormat 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 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:

  1. Setelah panggilan dibuat, serverCallId dikembalikan sebagai properti CallConnected peristiwa setelah panggilan dibuat. Pelajari cara Mendapatkan peristiwa CallConnected 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 . 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. Gunakan AUDIO.
  • Gunakan RecordingChannel untuk meneruskan jenis saluran perekaman. Gunakan MIXED atau UNMIXED.
  • Gunakan RecordingFormat 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 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 opsional ParallelDownloadOptions 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 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 CallConnected dari Call Automation SDK.
    2. Setelah Anda menjawab panggilan atau panggilan dibuat, panggilan mengembalikan serverCallId sebagai properti respons AnswerCallResult 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, 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. Gunakan AUDIO.
  • Gunakan RecordingChannel untuk meneruskan jenis saluran perekaman. Gunakan MIXED atau UNMIXED.
  • Gunakan RecordingFormat 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 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 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 CallConnected dari Call Automation SDK.
    2. Setelah Anda menjawab panggilan atau panggilan dibuat, panggilan mengembalikan serverCallId sebagai properti respons AnswerCallResult 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, 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. Gunakan AUDIO.
  • Gunakan RecordingChannel untuk meneruskan jenis saluran perekaman. Gunakan MIXED atau UNMIXED.
  • Gunakan RecordingFormat 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 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.