Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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
Kayıt API'lerini kullanarak kaydı başlatmak için callConnectionId veya serverCallId kullanın. Senaryonuza bağlı olarak bu kimlikleri getirmek için kullanabileceğiniz birkaç yöntem vardır:
callConnectionId'yi getirme
Çağrı Otomasyonu'nu kullanırken, çağrıyı başlattığınızda yanıt olayından bir createCall, answer veya connect isteği alırsınız.
serverCallId nasıl alınır
Çağrı Otomasyonunu kullanırken, serverCallId almak için iki seçeneğiniz vardır.
Bir çağrı kurduğunuzda, çağrının kurulmasından sonra
serverCallIdolayının bir özelliği olarakCallConnecteddöner. Çağrı Otomasyonu SDK'sından CallConnected olayını alma hakkında bilgi edinin.Aramayı yanıtladığınızda veya bir çağrı oluşturulduğunda,
serverCallId, sırasıylaAnswerCallResultveyaCreateCallResultAPI yanıtlarının bir özelliği olarak döndürülür.
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ının başlatılması sırasında alınan callConnectionId veya serverCallId'i kullanın.
- Kayıt içerik türünü geçmek için
RecordingContentkullanın.AUDIOadresini kullanın. - Kayıt kanalı türünü geçirmek için kullanın
RecordingChannel.MIXEDveyaUNMIXEDkullanın. - Kaydın biçimini geçirmek için
RecordingFormatkullanın.WAVadresini kullanın.
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<callConnectionId> or <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("<CallConnectionId> or <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("<CallConnectionId> or <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("<CallConnectionId> or <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("<CallConnectionId> or <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
Kayıt API'lerini kullanarak kaydı başlatabilir veya callConnectionId kullanabilirsinizserverCallId. Senaryonuza bağlı olarak bu kimlikleri getirmek için kullanabileceğiniz birkaç yöntem vardır:
callConnectionId'yi nasıl getirme
Çağrı Otomasyonu kullanırken, çağrı başlatılırken bir callConnectionId, createCall, answer veya connect isteğinden gelen yanıt olayından alırsınız.
serverCallId'yi alma
Çağrı Otomasyonunu kullanırken, serverCallId almak için iki seçeneğiniz vardır.
Bir çağrı kurduğunuzda, çağrının kurulmasından sonra
serverCallIdolayının bir özelliği olarakCallConnecteddöner. Çağrı Otomasyonu SDK'sından CallConnected olayını alma hakkında bilgi edinin.Aramayı yanıtladığınızda veya bir çağrı oluşturulduğunda,
serverCallId, sırasıylaAnswerCallResultveyaCreateCallResultAPI yanıtlarının bir özelliği olarak döndürülür.
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 callConnectionId alınan veya serverCallId kullanın.
- Kayıt içerik türünü geçmek için
RecordingContentkullanın.AUDIOadresini kullanın. - Kayıt kanalı türünü geçirmek için kullanın
RecordingChannel.MIXEDveyaUNMIXEDkullanın. - Kaydın biçimini geçirmek için
RecordingFormatkullanın.WAVadresini kullanın.
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<callConnectionId> or <serverCallId>"))
.setRecordingChannel(RecordingChannel.UNMIXED)
.setRecordingFormat(RecordingFormat.WAV)
.setRecordingContent(RecordingContent.AUDIO)
.setRecordingStateCallbackUrl("<recordingStateCallbackUrl>");
Response<RecordingStateResult> response = callAutomationClient.getCallRecording()
.startWithResponse(recordingOptions, null);
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(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("<<callConnectionId> or 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ı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("<<callConnectionId> or 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ıParallelDownloadOptionsbir 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
Kayıt API'leri callConnectionId veya serverCallId kullanılarak kayıt başlatmak için çağrılır. Senaryonuza bağlı olarak bu kimlikleri getirmek için kullanabileceğiniz birkaç yöntem vardır:
callConnectionId nasıl alınır
Çağrı Otomasyonu'nı kullanırken, çağrıyı callConnectionId başlatırken yanıt olayından bir createCall, answerveya connect isteklerinden alırsınız.
serverCallId nasıl getirilir
Çağrı Otomasyonunu kullanırken, serverCallId almak için iki seçeneğiniz vardır.
Bir çağrı kurduğunuzda, çağrının kurulmasından sonra
serverCallIdolayının bir özelliği olarakCallConnecteddöner. Çağrı Otomasyonu SDK'sından CallConnected olayını alma hakkında bilgi edinin.Aramayı yanıtladığınızda veya bir çağrı oluşturulduğunda,
serverCallId, sırasıylaAnswerCallResultveyaCreateCallResultAPI yanıtlarının bir özelliği olarak döndürülür.
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ş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 callConnectionId veya serverCallId kullanın.
- Kayıt içerik türünü geçmek için
RecordingContentkullanın.AUDIOadresini kullanın. - Kayıt kanalı türünü geçirmek için kullanın
RecordingChannel.MIXEDveyaUNMIXEDkullanın. - Kaydın biçimini geçirmek için
RecordingFormatkullanın.WAVadresini kullanın.
response = call_automation_client.start_recording(call_locator=ServerCallLocator(callConnectionId or 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 Depo'nuzu Kullanın
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(callConnectionId or 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(callConnectionId or 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 fakat AudioChannelParticipantOrdering kullanmıyorsanız, Arama Kaydı ilk konuşan katılımcıya kanal 0 atar.
response = call_automation_client.start_recording(call_locator=ServerCallLocator(callConnectionId or 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(callConnectionId or 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
Kayıt API'leri callConnectionId veya serverCallId kullanarak kaydı başlatır. Senaryonuza bağlı olarak bu kimlikleri getirmek için kullanabileceğiniz birkaç yöntem vardır:
callConnectionId'yi getirme
Çağrı Otomasyonu'nı kullanırken, çağrıyı callConnectionId başlatırken yanıt olayından bir createCall, answerveya connect isteklerinden alırsınız.
serverCallId nasıl çekilir?
Çağrı Otomasyonunu kullanırken, serverCallId almak için iki seçeneğiniz vardır.
Bir çağrı kurduğunuzda, çağrının kurulmasından sonra
serverCallIdolayının bir özelliği olarakCallConnecteddöner. Çağrı Otomasyonu SDK'sından CallConnected olayını alma hakkında bilgi edinin.Aramayı yanıtladığınızda veya bir çağrı oluşturulduğunda,
serverCallId, sırasıylaAnswerCallResultveyaCreateCallResultAPI yanıtlarının bir özelliği olarak döndürülür.
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ş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
Başlatma sırasında alınan callConnectionId veya serverCallId kullanın.
- Kayıt içerik türünü geçmek için
RecordingContentkullanın.AUDIOadresini kullanın. - Kayıt kanalı türünü geçirmek için kullanın
RecordingChannel.MIXEDveyaUNMIXEDkullanın. - Kaydın biçimini geçirmek için
RecordingFormatkullanın.WAVadresini kullanın.
var locator: CallLocator = { id: "<callConnectionId> or <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 Depo'nuzu Kullanın
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: "<callConnectionId> or <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 fakat AudioChannelParticipantOrdering kullanmıyorsanız, Arama Kaydı ilk konuşan katılımcıya kanal 0 atar.
var locator: CallLocator = { id: "<callConnectionId> or <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:
- Java, Python ve JavaScript çağrı kaydı örnek uygulamalarımızı indirin.
- Arama Kaydı hakkında daha fazla bilgi edinin.
- Çağrı Otomasyonu hakkında daha fazla bilgi edinin.