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
Çağrı Kaydı API'leri kaydı başlatmak için yalnızca öğesini serverCallId
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.
Bir çağrı kurduğunuzda, çağrının kurulmasından sonra
serverCallId
olayının bir özelliği olarakCallConnected
dö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ıylaAnswerCallResult
veyaCreateCallResult
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
veyaUNMIXED
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.
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.Aramayı yanıtladığınızda veya bir çağrı oluşturulduğunda,
serverCallId
sırasıylaAnswerCallResult
veyaCreateCallResult
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
veyaUNMIXED
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 serverCallId
kullanı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:- 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. - Aramayı yanıtladığınızda veya bir çağrı oluşturulduğunda, sırasıyla
serverCallId
veyaAnswerCallResult
API yanıtlarının bir özelliği olarakCreateCallResult
döndürülür.
- Bir çağrı oluşturulduktan sonra, çağrı kurulduğunda
SDK senaryolarını çağırma
- Çağrı İstemcisi SDK'sını kullanırken, çağrıdaki
serverCallId
değişkenini kullanarakserver_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
veyaUNMIXED
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 serverCallId
kullanı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:- 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. - Aramayı yanıtladığınızda veya bir çağrı oluşturulduğunda, sırasıyla
serverCallId
veyaAnswerCallResult
API yanıtlarının bir özelliği olarakCreateCallResult
döndürülür.
- Bir çağrı oluşturulduktan sonra, çağrı kurulduktan sonra
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
veyaUNMIXED
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:
- 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.