Aracılığıyla paylaş


Çağrı kaydına hızlı başlama kılavuzu

Bu makalede, sesli ve görüntülü aramalar için arama kaydı açıklanmaktadır. Arama Kaydı API'lerini kullanmaya başlamak için mevcut olan bir aramanız olmalıdır. Son kullanıcı arama deneyimini oluşturmak için İstemci SDK'sını çağırma ve Çağrı Otomasyonu hakkında bilgi sahibi olduğunuzdan emin olun.

Örnek Kod

Örnek uygulamayı GitHub'dan indirebilirsiniz

Önkoşullar

  • Etkin aboneliği olan bir Azure hesabına ihtiyacınız vardır.
  • İletişim Hizmeti kaynağını dağıtın. Kaynak bağlantı dizesini kaydedin.
  • Azure Event Grid aracılığıyla olaylara abone olun.
  • .NET SDK'sını indirme

Başlamadan önce

Çağrı Kaydı API'leri kaydı başlatmak için yalnızca öğesini serverCallIdkullanır. Durumunuza bağlı olarak serverCallId öğesini getirmek için kullanabileceğiniz birkaç yöntem vardır.

Çağrı Otomasyonu senaryoları

Çağrı Otomasyonunu kullanırken, serverCallId almak için iki seçeneğiniz vardır.

  1. Bir çağrı kurduğunuzda, çağrının kurulmasından sonra serverCallId olayının bir özelliği olarak CallConnected döner. Çağrı Otomasyonu SDK'sından CallConnected olayını alma hakkında bilgi edinin.

  2. Aramayı yanıtladığınızda veya bir çağrı oluşturulduğunda, serverCallId, sırasıyla AnswerCallResult veya CreateCallResult API yanıtlarının bir özelliği olarak döndürülür.

SDK senaryolarını çağırma

Calling Client SDK kullanırken, çağrı üzerinde serverCallId yöntemini kullanarak getServerCallId öğesini alabilirsiniz. Çağrı İstemcisi SDK'sından serverCallId almak için bu örneği kullanın.

Birkaç basit adımla başlayalım.

1. Çağrı Otomasyonu istemcisi oluşturma

Çağrı Kaydı API'leri Azure İletişim Hizmetleri Çağrı Otomasyonu kitaplıklarının bir parçasıdır. Bu nedenle bir Çağrı Otomasyonu istemcisi oluşturmanız gerekir.

Çağrı otomasyonu istemcisi oluşturmak için İletişim Hizmetleri bağlantı dizesi kullanın ve bunu nesneye CallAutomationClient geçirin.

CallAutomationClient callAutomationClient = new CallAutomationClient("<ACSConnectionString>");

2. 'StartAsync' API'sini kullanarak StartRecordingOptions ile oturum kaydetmeye başlayın

Çağrı başlatılırken alınan serverCallId öğesini kullanın.

  • Kayıt içerik türünü geçmek için RecordingContent kullanın. AUDIO adresini kullanın.
  • Kayıt kanalı türünü geçirmek için kullanın RecordingChannel . MIXED veya UNMIXED kullanın.
  • Kaydın biçimini geçirmek için RecordingFormat kullanın. WAV adresini kullanın.
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. Kaydı Başlat - Kendi Azure Blob Depo'nuzu Kullanın

Kayıt tamamlandıktan sonra kaydedilen dosyayı depolamak için belirlenen Azure Blob Depolama kullanarak kaydetmeye başlayın.

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. 'StartAsync' API'siyle Duraklatma modu etkinken oturumu kaydetmeye başlama

Not

Kayıt dosyasının oluşturulması için kayıtların sürdürül etmesi gerekir.

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. Yalnızca Karıştırılmamış için - Kanal 0'da bir kullanıcı belirtin

Karışmamış ses kayıt dosyaları oluşturmak için, AudioChannelParticipantOrdering işlevini kullanarak kanal 0'da hangi kullanıcıyı kaydetmek istediğinizi belirtebilirsiniz. Diğer katılımcılar, konuşmaları sırasında bir kanala atanır. Eğer RecordingChannel.Unmixed kullanıyorsanız fakat AudioChannelParticipantOrdering kullanmıyorsanız, Arama Kaydı ilk konuşan katılımcıya kanal 0 atar.

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. Yalnızca Karışık Olmayanlar için - Kanal benzişimini belirtin

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 API yanıtı, kayıt oturumunun recordingId kısmını içerir.

3. StopAsync API kullanarak oturum kaydını durdurma

recordingId öğesine yanıt olarak alınan StartAsync öğesini kullanın.

var stopRecording = await callAutomationClient.GetCallRecording().StopAsync(recordingId);

4. API kullanarak kayıt oturumunu duraklatma

recordingId öğesine yanıt olarak alınan StartAsync öğesini kullanın.

var pauseRecording = await callAutomationClient.GetCallRecording ().PauseAsync(recordingId);

5. API kullanarak ResumeAsync kayıt oturumlarını sürdürme

recordingId öğesine yanıt olarak alınan StartAsync öğesini kullanın.

var resumeRecording = await callAutomationClient.GetCallRecording().ResumeAsync(recordingId);

6. API kullanarak DownloadToAsync kayıt dosyasını indirme

Kaydedilen medya indirilmeye hazır olduğunda hizmetlerinizi bilgilendirmek için bir Azure Event Grid web kancası veya başka bir tetiklenen eylem kullanın.

Bir kayıt alınmaya hazır olduğunda, genellikle kaydın işlenmesi tamamlandıktan birkaç dakika sonra (toplantının sona ermesi veya kaydın durması gibi) Event Grid bildirimi Microsoft.Communication.RecordingFileStatusUpdated yayımlanır. Kayıt olayı bildirimleri, hem kayıtlı medyayı hem de bir kayıt meta veri dosyasını almak için kullanabileceğiniz contentLocation ve metadataLocation gibi öğeleri içerir.

Olay şeması örneği:

{
    "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
}

Kaydedilen medyayı indirmek için API'yi kullanın DownloadToAsync .

var recordingDownloadUri = new Uri(contentLocation);
var response = await callAutomationClient.GetCallRecording().DownloadToAsync(recordingDownloadUri, fileName);

Kaydı almak için downloadLocation'nin contentLocation özniteliğini recordingChunk olarak getirin. DownloadToAsync yöntemini, içerği verilen bir dosya adına indirmek için kullanın.

7. API kullanarak DeleteAsync kayıt içeriğini silme

Kayıt içeriğini (kayıtlı medya ve meta veriler gibi) silmek için API kullanın DeleteAsync .

var recordingDeleteUri = new Uri(deleteLocation);
var response = await callAutomationClient.GetCallRecording().DeleteAsync(recordingDeleteUri);

Örnek Kod

Örnek uygulamayı GitHub'dan indirebilirsiniz

Önkoşullar

  • Etkin aboneliği olan bir Azure hesabına ihtiyacınız vardır.
  • İletişim Hizmeti kaynağını dağıtın. Kaynak bağlantı dizesini kaydedin.
  • Azure Event Grid aracılığıyla olaylara abone olun.
  • Java SDK'sını indirme

Başlamadan önce

Arama Kaydı API'leri, kaydı yalnızca başlatmak için serverCallId öğesini kullanır. Durumunuza bağlı olarak serverCallId öğesini getirmek için kullanabileceğiniz birkaç yöntem vardır.

Çağrı Otomasyonu senaryoları

Çağrı Otomasyonunu kullanırken, serverCallId almak için iki seçeneğiniz vardır.

  1. Bir çağrı kurulduktan sonra serverCallId, CallConnected olayının bir özelliği olarak döndürülür. Çağrı Otomasyonu SDK'sından CallConnected olayını alma hakkında bilgi edinin.

  2. Aramayı yanıtladığınızda veya bir çağrı oluşturulduğunda, serverCallId sırasıyla AnswerCallResult veya CreateCallResult API yanıtlarının bir özelliği olarak döndürülür.

SDK senaryolarını çağırma

Calling Client SDK kullanırken, çağrı üzerinde serverCallId yöntemini kullanarak getServerCallId öğesini alabilirsiniz.

Çağrı İstemcisi SDK'sından serverCallId almak için bu örneği kullanın.

Birkaç basit adımla başlayalım.

1. Çağrı Otomasyonu istemcisi oluşturma

Çağrı Kaydı API'leri Azure İletişim Hizmetleri Çağrı Otomasyonu kitaplıklarının bir parçasıdır. Bu nedenle bir Çağrı Otomasyonu istemcisi oluşturmanız gerekir.

Çağrı otomasyonu istemcisi oluşturmak için İletişim Hizmetleri bağlantı dizesi kullanın ve bunu nesneye CallAutomationClient geçirin.

CallAutomationClient callAutomationClient = new CallAutomationClientBuilder()
            .connectionString("<acsConnectionString>")
            .buildClient();

2. StartRecordingOptions kullanarak startWithResponse API ile kayıt oturumunu başlatma

Çağrı başlatılırken alınan serverCallId öğesini kullanın.

  • Kayıt içerik türünü geçmek için RecordingContent kullanın. AUDIO adresini kullanın.
  • Kayıt kanalı türünü geçirmek için kullanın RecordingChannel . MIXED veya UNMIXED kullanın.
  • Kaydın biçimini geçirmek için RecordingFormat kullanın. WAV adresini kullanın.
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. Kayda Başlayın - Kendi Azure Blob Deponuzu Getirin

Kayıt tamamlandıktan sonra kaydedilen dosyayı depolamak için belirlenen Azure Blob Depolama kullanarak kaydetmeye başlayın.

        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. API kullanarak StartAsync Duraklatma modu etkinken oturumu kaydetmeyi başlatma

Not

Kayıt dosyasının oluşturulması için kayıtlar sürdürülmelidir.

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. Yalnızca Karıştırılmamış için - Kanal 0'da bir kullanıcı belirtin

Karışmamış ses kayıt dosyaları oluşturmak için, AudioChannelParticipantOrdering işlevini kullanarak kanal 0'da hangi kullanıcıyı kaydetmek istediğinizi belirtebilirsiniz. Diğer katılımcılar, konuşmaları sırasında bir kanala atanır. Eğer RecordingChannel.Unmixed kullanıyor ancak AudioChannelParticipantOrdering kullanmıyorsanız, Arama Kaydı ilk konuşan katılımcıya kanal 0'ı atar.

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. Yalnızca Karışık Olmayanlar için - Kanal benzişimini belirtin

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 API yanıtı, kayıt oturumunun recordingId kısmını içerir.

3. stopWithResponse API kullanarak oturum kaydını durdurma

recordingId öğesine yanıt olarak alınan startWithResponse öğesini kullanın.

Response<Void> response = callAutomationClient.getCallRecording()
               .stopWithResponse(response.getValue().getRecordingId(), null);

4. API kullanarak kayıt oturumunu duraklatma

recordingId öğesine yanıt olarak alınan startWithResponse öğesini kullanın.

Response<Void> response = callAutomationClient.getCallRecording()
              .pauseWithResponse(response.getValue().getRecordingId(), null);

5. API kullanarak resumeWithResponse kayıt oturumlarını sürdürme

recordingId öğesine yanıt olarak alınan startWithResponse öğesini kullanın.

Response<Void> response = callAutomationClient.getCallRecording()
               .resumeWithResponse(response.getValue().getRecordingId(), null);

6. API kullanarak downloadToWithResponse kayıt dosyasını indirme

Kaydedilen medya indirilmeye hazır olduğunda hizmetlerinizi bilgilendirmek için Azure Event Grid web kancası veya tetiklenen başka bir eylem kullanılmalıdır.

Bir kayıt, genellikle kayıt işlemi tamamlandıktan birkaç dakika sonra (toplantı sonları veya kayıt durakları gibi) alınmaya hazır olduğunda Event Grid bildirimi Microsoft.Communication.RecordingFileStatusUpdated yayımlanır. Kayıt olayı bildirimleri, hem kayıtlı medyayı hem de bir kayıt meta veri dosyasını almak için kullanabileceğiniz contentLocation ve metadataLocation gibi öğeleri içerir.

Aşağıdaki kod, olay şemasının bir örneğidir.

{
    "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
}

Kaydedilen medyayı indirmek için downloadToWithResponse sınıfının CallRecording yöntemini kullanın. downloadToWithResponse yöntemi için desteklenen parametreler şunlardır:

  • contentLocation: İçeriğin bulunduğu Azure İletişim Hizmetleri URL'si.
  • destinationPath : Dosya konumu.
  • parallelDownloadOptions: Paralel indirmenin çalışma şeklini değiştirmek için isteğe bağlı ParallelDownloadOptions bir nesne.
  • overwrite: Dosya varsa üzerine yazmak için true kullanın.
  • context: İstek durumunu temsil eden bir bağlam.
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);

Kayıt dosyalarının içerik konumu ve belge kimlikleri, her contentLocation için documentId ve recordingChunk alanlarından sırasıyla elde edilebilir.

7. API kullanarak deleteWithResponse kayıt içeriğini silme

Kaydedilen medyayı silmek için deleteWithResponse sınıfının CallRecording yöntemini kullanın. Yöntem için deleteWithResponse desteklenen parametreler:

  • deleteLocation: Silinecek içeriğin bulunduğu Azure İletişim Hizmetleri URL'si.
  • context: İstek durumunu temsil eden bir bağlam.
Response<Void> deleteResponse = callAutomationClient.getCallRecording().deleteWithResponse(deleteLocation, context);

Kaydın silme konumu Event Grid olayının deleteLocation alanından getirilebilir.

Örnek Kod

Örnek uygulamayı GitHub'dan indirebilirsiniz

Önkoşullar

  • Etkin aboneliği olan bir Azure hesabına ihtiyacınız vardır.
  • İletişim Hizmeti kaynağını dağıtın. Kaynak bağlantı dizesini kaydedin.
  • Azure Event Grid aracılığıyla olaylara abone olun.
  • Python 3.7+.

Başlamadan önce

Çağrı Kaydı API'leri kaydı başlatmak için yalnızca öğesini serverCallIdkullanır. Durumunuza bağlı olarak serverCallId öğesini getirmek için kullanabileceğiniz birkaç yöntem vardır.

Çağrı Otomasyonu senaryoları

  • Çağrı Otomasyonu kullanırken serverCallId almak için iki seçeneğiniz vardır:
    1. Bir çağrı oluşturulduktan sonra, çağrı kurulduğunda serverCallId, CallConnected olayının bir özelliği olarak döndürülür. Çağrı Otomasyonu SDK'sından CallConnected olayını alma hakkında bilgi edinin.
    2. Aramayı yanıtladığınızda veya bir çağrı oluşturulduğunda, sırasıyla serverCallId veya AnswerCallResult API yanıtlarının bir özelliği olarak CreateCallResult döndürülür.

SDK senaryolarını çağırma

  • Çağrı İstemcisi SDK'sını kullanırken, çağrıdaki serverCallId değişkenini kullanarak server_call_id öğesini alabilirsiniz. Çağrı İstemcisi SDK'sından serverCallId almak için bu örneği kullanın.

Birkaç basit adımla başlayalım!

1. Çağrı Otomasyonu istemcisi oluşturma

Çağrı Kaydı API'leri Azure İletişim Hizmetleri Çağrı Otomasyonu kitaplıklarının bir parçasıdır. Bu nedenle, bir Çağrı Otomasyonu istemcisi oluşturmak gerekir.

Çağrı otomasyonu istemcisi oluşturmak için İletişim Hizmetleri bağlantı dizesi kullanın ve bunu nesneye CallAutomationClient geçirin.

call_automation_client = CallAutomationClient.from_connection_string("<ACSConnectionString>")

2. Oturumu kaydetme oturumunu başlatan start_recording API'si

Çağrı başlatılırken alınan serverCallId öğesini kullanın.

  • Kayıt içerik türünü geçmek için RecordingContent kullanın. AUDIO adresini kullanın.
  • Kayıt kanalı türünü geçirmek için kullanın RecordingChannel . MIXED veya UNMIXED kullanın.
  • Kaydın biçimini geçirmek için RecordingFormat kullanın. WAV adresini kullanın.
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. Kaydı Başlat - Kendi Azure Blob Deponuzu Getirin

Kendi Azure Blob Depolama hesabınızı tanımlayarak, kayıt tamamlandıktan sonra kayıt dosyasını depolamak için kaydı başlatın.

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. 'StartAsync' API'siyle Duraklatma modu etkinken oturumu kaydetmeye başlama

Not

Kayıt dosyasının oluşturulması için kayıtların sürdürül etmesi gerekir.

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. Yalnızca Karıştırılmamış için - Kanal 0'da bir kullanıcı belirtin

Karışmamış ses kayıt dosyaları oluşturmak için, AudioChannelParticipantOrdering işlevini kullanarak kanal 0'da hangi kullanıcıyı kaydetmek istediğinizi belirtebilirsiniz. Diğer katılımcılar, konuşmaları sırasında bir kanala atanır. Eğer RecordingChannel.Unmixed kullanıyorsanız ancak AudioChannelParticipantOrdering kullanmıyorsanız, Arama Kaydı ilk katılımcının konuşmasına kanal 0 atar.

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. Yalnızca Karışık Olmayanlar için - Kanal benzişimini belirtin

_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 API yanıtı, kayıt oturumunun recordingId kısmını içerir.

3. 'stop_recording' API kullanarak oturumu kaydetmeyi durdurma

recording_id öğesine yanıt olarak alınan start_recording öğesini kullanın.

stop_recording = call_automation_client.stop_recording(recording_id = recording_id)

4. 'pause_recording' API kullanarak kaydı duraklatma

recording_id öğesine yanıt olarak alınan start_recording öğesini kullanın.

pause_recording = call_automation_client.pause_recording(recording_id = recording_id)

5. 'resume_recording' API'lerini kullanarak kayıt oturumlarını sürdürme

recording_id öğesine yanıt olarak alınan start_recording öğesini kullanın.

resume_recording = call_automation_client.resume_recording(recording_id = recording_id)

6. 'download_recording' API'sini kullanarak kayıt dosyasını indirin

Kaydedilen medya indirilmeye hazır olduğunda hizmetlerinizi bilgilendirmek için Azure Event Grid web kancası veya tetiklenen başka bir eylem kullanılmalıdır.

Bir kayıt alınmaya hazır olduğunda, genellikle kayıt işlemi tamamlandıktan birkaç dakika sonra (toplantının sona ermesi veya kaydın durdurulması gibi) Event Grid bildirimi Microsoft.Communication.RecordingFileStatusUpdated yayımlanır. Kayıt etkinliği bildirimleri, hem kaydedilen medyayı hem de bir kayıt meta veri dosyasını almak için kullanılan contentLocation ve metadataLocation içerir.

Aşağıdaki kod, olay şemasının bir örneğidir.

{
    "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
}

Kaydedilen medyayı indirmek için API'yi kullanın download_recording .

response = recording_data = call_automation_client.download_recording(content_location)

with open("<file_name>", "wb") as binary_file:
    binary_file.write(recording_data.read())

Kayıt için downloadLocation, contentLocation içindeki recordingChunk özniteliğinden getirilebilir. İçeriği baytlara indirmek için download_recording yöntemini kullanın.

7. 'delete_recording' API kullanarak kayıt içeriğini silme

Kayıtlı medya ve meta veriler gibi kayıt içeriğini silmek için API kullanın delete_recording .

response = call_automation_client.delete_recording(delete_location);

Örnek Kod

Örnek uygulamayı GitHub'dan indirebilirsiniz

Önkoşullar

  • Etkin aboneliği olan bir Azure hesabına ihtiyacınız vardır.
  • İletişim Hizmeti kaynağını dağıtın. Kaynak bağlantı dizesini kaydedin.
  • Azure Event Grid aracılığıyla olaylara abone olun.
  • Node.js Etkin LTS ve Bakım LTS sürümleri (8.11.1 ve 10.14.1 önerilir)

Başlamadan önce

Çağrı Kaydı API'leri kaydı başlatmak için yalnızca öğesini serverCallIdkullanır. Durumunuza bağlı olarak serverCallId öğesini getirmek için kullanabileceğiniz birkaç yöntem vardır.

Çağrı Otomasyonu senaryoları

  • Çağrı Otomasyonu kullanırken serverCallId almak için iki seçeneğiniz vardır:
    1. Bir çağrı oluşturulduktan sonra, çağrı kurulduktan sonra serverCallId, CallConnected olayının bir özelliği olarak döndürülür. Çağrı Otomasyonu SDK'sından CallConnected olayı almayı öğrenin.
    2. Aramayı yanıtladığınızda veya bir çağrı oluşturulduğunda, sırasıyla serverCallId veya AnswerCallResult API yanıtlarının bir özelliği olarak CreateCallResult döndürülür.

SDK senaryolarını çağırma

Calling Client SDK kullanırken, çağrı üzerinde serverCallId yöntemini kullanarak getServerCallId öğesini alabilirsiniz.

Calling İstemci SDK'sından serverCallId alma nasıl yapılır öğrenmek için bu örneği kullanın.

Birkaç basit adımla başlayalım!

1. Çağrı Otomasyonu istemcisi oluşturma

Çağrı Kaydı API'leri Azure İletişim Hizmetleri Çağrı Otomasyonu kitaplıklarının bir parçasıdır. Bu nedenle, bir Çağrı Otomasyonu istemcisi oluşturmak gerekir.

Çağrı otomasyonu istemcisi oluşturmak için İletişim Hizmetleri bağlantı dizesi kullanın ve bunu nesneye CallAutomationClient geçirin.

const callAutomationClient = new CallAutomationClient.CallAutomationClient("<ACSConnectionString>");

2. 'StartAsync' API'sini kullanarak StartRecordingOptions ile oturum kaydetmeye başlayın

Çağrı başlatılırken alınan serverCallId öğesini kullanın.

  • Kayıt içerik türünü geçmek için RecordingContent kullanın. AUDIO adresini kullanın.
  • Kayıt kanalı türünü geçirmek için kullanın RecordingChannel . MIXED veya UNMIXED kullanın.
  • Kaydın biçimini geçirmek için RecordingFormat kullanın. WAV adresini kullanın.
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. Kaydı Başlat - Kendi Azure Blob Deponuzu Getirin

Kayıt tamamlandıktan sonra kaydedilen dosyayı depolamak için belirlenen Azure Blob Depolama kullanarak kaydetmeye başlayın.

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. 'StartAsync' API'siyle Duraklatma modu etkinken oturumu kaydetmeye başlama

Not

Kayıt dosyasının oluşturulması için kayıtların sürdürül etmesi gerekir.

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. Yalnızca Karıştırılmamış için - Kanal 0'da bir kullanıcı belirtin

Karışmamış ses kayıt dosyaları oluşturmak için, AudioChannelParticipantOrdering işlevini kullanarak kanal 0'da hangi kullanıcıyı kaydetmek istediğinizi belirtebilirsiniz. Diğer katılımcılar, konuşmaları sırasında bir kanala atanır. Eğer RecordingChannel.Unmixed kullanıyorsanız ancak AudioChannelParticipantOrdering kullanmıyorsanız, Arama Kaydı, ilk konuşan katılımcıya kanal 0 atar.

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. Yalnızca Karışık Olmayanlar için - Kanal benzişimini belirtin

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 API yanıtı, kayıt oturumunun recordingId kısmını içerir.

3. 'stop' API kullanarak oturumu kaydetmeyi durdurma

recordingId öğesine yanıt olarak alınan start öğesini kullanın.

var stopRecording = await callAutomationClient.getCallRecording().stop(recordingId);

4. 'pause' API kullanarak kayıt oturumunu duraklatma

recordingId öğesine yanıt olarak alınan start öğesini kullanın.

var pauseRecording = await callAutomationClient.getCallRecording().pause(recordingId);

5. 'ResumeAsync' API'lerini kullanarak kayıt oturumlarını sürdürme

recordingId öğesine yanıt olarak alınan start öğesini kullanın.

var resumeRecording = await callAutomationClient.getCallRecording().resume(recordingId);

6. 'DownloadToAsync' API'sini kullanarak kayıt dosyasını indirin

Kaydedilen medya indirilmeye hazır olduğunda hizmetlerinizi bilgilendirmek için Azure Event Grid web kancası veya tetiklenen başka bir eylem kullanılmalıdır.

Bir kayıt alınmaya hazır olduğunda, genellikle kayıt işlemi tamamlandıktan birkaç dakika sonra (toplantının sona ermesi veya kaydın durdurulması gibi) Event Grid bildirimi Microsoft.Communication.RecordingFileStatusUpdated yayımlanır. Kayıt etkinliği bildirimleri, hem kaydedilen medyayı hem de bir kayıt meta veri dosyasını almak için kullanılan contentLocation ve metadataLocation içerir.

Aşağıdaki kod, olay şemasının bir örneğidir.

{
    "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
}

Kaydedilen medyayı indirmek için API'yi kullanın downloadToPath .

var response = await callAutomationClient.getCallRecording().downloadToPath(contentLocation, fileName);

Kayıt için downloadLocation, contentLocation içindeki recordingChunk özniteliğinden getirilebilir. DownloadToAsync yöntemini, içerği verilen bir dosya adına indirmek için kullanın.

7. 'DeleteAsync' API'lerini kullanarak kayıt içeriğini silme

Kayıt içeriğini silmek için API kullanma delete (örneğin, kaydedilen medya, meta veriler)

var response = await callAutomationClient.getCallRecording().delete(deleteLocation);

Kaynakları temizleme

İletişim Hizmetleri aboneliğini temizlemek ve kaldırmak istiyorsanız, kaynağı veya kaynak grubunu silebilirsiniz. Kaynak grubunun silinmesi, kaynak grubuyla ilişkili diğer tüm kaynakları da siler. Kaynakları temizleme hakkında daha fazla bilgi edinin.

Sonraki adımlar

Daha fazla bilgi için aşağıdaki makaleleri inceleyin: