Przewodnik Szybki start dotyczący nagrywania połączeń
Ten przewodnik Szybki start ułatwia rozpoczęcie pracy z rejestrowaniem połączeń głosowych i wideo. Aby rozpocząć korzystanie z interfejsów API nagrywania połączeń, musisz mieć wywołanie. Upewnij się, że znasz wywoływanie zestawu SDK klienta i/lub Wywołanie automatyzacji w celu utworzenia środowiska wywoływania przez użytkownika końcowego.
Przykładowy kod
Przykładową aplikację można pobrać z usługi GitHub
Wymagania wstępne
- Potrzebujesz konta platformy Azure z aktywną subskrypcją.
- Wdróż zasób usługi komunikacji. Zarejestruj parametry połączenia zasobu.
- Subskrybowanie zdarzeń za pośrednictwem usługi Azure Event Grid.
- Pobieranie zestawu .NET SDK
Przed rozpoczęciem
Interfejsy API rejestrowania wywołań używają wyłącznie elementu do inicjowania nagrywania serverCallId
. Istnieje kilka metod, których można użyć do pobrania serverCallId
w zależności od scenariusza:
Scenariusze automatyzacji wywołań
- W przypadku korzystania z automatyzacji wywołań dostępne są dwie opcje pobierania elementu
serverCallId
:- Po utworzeniu
serverCallId
wywołania element jest zwracany jako właściwośćCallConnected
zdarzenia po nawiązaniu wywołania. Dowiedz się, jak pobrać połączenie Połączenie ed zdarzenie z zestawu Call Automation SDK. - Po udzieleniu odpowiedzi na wywołanie lub wywołaniu
serverCallId
element jest zwracany odpowiednio jako właściwość odpowiedzi interfejsuAnswerCallResult
API lubCreateCallResult
.
- Po utworzeniu
Scenariusze wywoływania zestawu SDK
- W przypadku używania zestawu SDK klienta wywołującego można pobrać
serverCallId
metodęgetServerCallId
przy użyciu metody wywołania . Skorzystaj z tego przykładu, aby dowiedzieć się, jak uzyskać identyfikator serverCallId z zestawu SDK wywołującego klienta.
Zacznijmy od kilku prostych kroków.
1. Tworzenie klienta usługi Call Automation
Interfejsy API rejestrowania wywołań są częścią bibliotek usługi Azure Communication Services Call Automation . W związku z tym należy utworzyć klienta usługi Call Automation.
Aby utworzyć klienta automatyzacji wywołań, należy użyć usług komunikacyjnych parametry połączenia i przekazać go do CallAutomationClient
obiektu.
CallAutomationClient callAutomationClient = new CallAutomationClient("<ACSConnectionString>");
2. Rozpocznij sesję nagrywania za pomocą polecenia StartRecordingOptions przy użyciu interfejsu API "StartAsync"
Użyj odebranego serverCallId
podczas inicjowania połączenia.
- Funkcja RecordingContent służy do przekazywania typu zawartości nagrywania. Używanie dźwięku
- Funkcja RecordingChannel służy do przekazywania typu kanału nagrywania. Użyj mieszanych lub nie mieszanych.
- Format RecordingFormat służy do przekazywania formatu nagrania. Użyj wav.
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<ServerCallId>"))
{
RecordingContent = RecordingContent.Audio,
RecordingChannel = RecordingChannel.Unmixed,
RecordingFormat = RecordingFormat.Wav,
RecordingStateCallbackUri = new Uri("<CallbackUri>");
};
Response<RecordingStateResult> response = await callAutomationClient.GetCallRecording()
.StartAsync(recordingOptions);
2.1. Rozpoczynanie nagrywania — Bring Your Own Azure Blob Store
Rozpocznij nagrywanie przy użyciu własnej usługi Azure Blob Storage zdefiniowanej w celu przechowywania pliku nagrywania po zakończeniu nagrywania.
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. Rozpocznij sesję nagrywania z włączonym trybem wstrzymania przy użyciu interfejsu API "StartAsync"
Uwaga
Nagrania należy wznowić w celu wygenerowania pliku nagrywania.
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. Tylko w przypadku opcji Unmixed — określ użytkownika w kanale 0
Aby utworzyć niemieszone pliki nagrywania dźwięku, możesz użyć AudioChannelParticipantOrdering
funkcji , aby określić, który użytkownik ma być nagrywany w kanale 0. Reszta uczestników jest przypisywana do kanału, gdy mówią. Jeśli używasz funkcji RecordingChannel.Unmixed
, ale nie używasz AudioChannelParticipantOrdering
funkcji , funkcja Call Recording przypisuje kanał 0 do pierwszego uczestnika mówiącego.
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. Tylko dla opcji Unmixed — Określ koligację kanału
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
Odpowiedź interfejsu API zawiera recordingId
sesję nagrywania.
3. Zatrzymaj sesję nagrywania przy użyciu interfejsu API "StopAsync"
Użyj odebranego recordingId
elementu w odpowiedzi na .StartAsync
var stopRecording = await callAutomationClient.GetCallRecording().StopAsync(recordingId);
4. Wstrzymaj sesję nagrywania przy użyciu interfejsu API "PauseAsync"
Użyj odebranego recordingId
elementu w odpowiedzi na .StartAsync
var pauseRecording = await callAutomationClient.GetCallRecording ().PauseAsync(recordingId);
5. Wznów sesję nagrywania przy użyciu interfejsu API "ResumeAsync"
Użyj odebranego recordingId
elementu w odpowiedzi na .StartAsync
var resumeRecording = await callAutomationClient.GetCallRecording().ResumeAsync(recordingId);
6. Pobieranie pliku nagrywania przy użyciu interfejsu API "DownloadToAsync"
Użyj elementu webhook usługi Azure Event Grid lub innej wyzwolonej akcji, aby powiadomić usługi, gdy zarejestrowane nośniki są gotowe do pobrania.
Powiadomienie Microsoft.Communication.RecordingFileStatusUpdated
usługi Event Grid jest publikowane, gdy nagranie jest gotowe do pobrania, zazwyczaj kilka minut po zakończeniu procesu nagrywania (na przykład zakończenie spotkania, zatrzymanie nagrania). Rejestrowanie powiadomień o zdarzeniach obejmuje i contentLocation
metadataLocation
, które są używane do pobierania zarówno zarejestrowanego nośnika, jak i pliku metadanych nagrywania.
Przykład schematu zdarzeń:
{
"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
}
Użyj DownloadToAsync
interfejsu API do pobierania zarejestrowanych multimediów.
var recordingDownloadUri = new Uri(contentLocation);
var response = await callAutomationClient.GetCallRecording().DownloadToAsync(recordingDownloadUri, fileName);
Element downloadLocation
dla nagrania można pobrać z contentLocation
atrybutu recordingChunk
. DownloadToAsync
metoda pobiera zawartość do podanej nazwy pliku.
7. Usuwanie zawartości nagrywania przy użyciu interfejsu API "DeleteAsync"
Użyj DeleteAsync
interfejsu API do usuwania zawartości nagrywania (na przykład zarejestrowanego nośnika, metadanych)
var recordingDeleteUri = new Uri(deleteLocation);
var response = await callAutomationClient.GetCallRecording().DeleteAsync(recordingDeleteUri);
Przykładowy kod
Przykładową aplikację można pobrać z usługi GitHub
Wymagania wstępne
- Potrzebujesz konta platformy Azure z aktywną subskrypcją.
- Wdróż zasób usługi komunikacji. Zarejestruj parametry połączenia zasobu.
- Subskrybowanie zdarzeń za pośrednictwem usługi Azure Event Grid.
- Pobieranie zestawu Java SDK
Przed rozpoczęciem
Interfejsy API rejestrowania wywołań używają wyłącznie elementu do inicjowania nagrywania serverCallId
. Istnieje kilka metod, których można użyć do pobrania serverCallId
w zależności od scenariusza:
Scenariusze automatyzacji wywołań
- W przypadku korzystania z automatyzacji wywołań dostępne są dwie opcje pobierania elementu
serverCallId
:- Po utworzeniu
serverCallId
wywołania element jest zwracany jako właściwośćCallConnected
zdarzenia po nawiązaniu wywołania. Dowiedz się, jak pobrać połączenie Połączenie ed zdarzenie z zestawu Call Automation SDK. - Po udzieleniu odpowiedzi na wywołanie lub wywołaniu
serverCallId
element jest zwracany odpowiednio jako właściwość odpowiedzi interfejsuAnswerCallResult
API lubCreateCallResult
.
- Po utworzeniu
Scenariusze wywoływania zestawu SDK
- W przypadku używania zestawu SDK klienta wywołującego można pobrać
serverCallId
metodęgetServerCallId
przy użyciu metody wywołania . Skorzystaj z tego przykładu, aby dowiedzieć się, jak uzyskać identyfikator serverCallId z zestawu SDK wywołującego klienta.
Zacznijmy od kilku prostych kroków.
1. Tworzenie klienta usługi Call Automation
Interfejsy API rejestrowania wywołań są częścią bibliotek usługi Azure Communication Services Call Automation . W związku z tym należy utworzyć klienta usługi Call Automation.
Aby utworzyć klienta automatyzacji wywołań, użyjesz usługi Communication Services parametry połączenia i przekażesz go do CallAutomationClient
obiektu.
CallAutomationClient callAutomationClient = new CallAutomationClientBuilder()
.connectionString("<acsConnectionString>")
.buildClient();
2. Rozpocznij sesję nagrywania za pomocą polecenia StartRecordingOptions przy użyciu interfejsu API "startWithResponse"
Użyj odebranego serverCallId
podczas inicjowania połączenia.
- Funkcja RecordingContent służy do przekazywania typu zawartości nagrywania. Używanie dźwięku
- Funkcja RecordingChannel służy do przekazywania typu kanału nagrywania. Użyj MIXED lub UNMIXED.
- Format RecordingFormat służy do przekazywania formatu nagrania. Użyj programu WAV.
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<serverCallId>"))
.setRecordingChannel(RecordingChannel.UNMIXED)
.setRecordingFormat(RecordingFormat.WAV)
.setRecordingContent(RecordingContent.AUDIO)
.setRecordingStateCallbackUrl("<recordingStateCallbackUrl>");
Response<RecordingStateResult> response = callAutomationClient.getCallRecording()
.startWithResponse(recordingOptions, null);
2.1. Rozpoczynanie nagrywania — Bring Your Own Azure Blob Store
Rozpocznij sesję nagrywania z własną usługą Azure Blob Storage, aby zapisać plik nagrywania po zakończeniu nagrywania.
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. Rozpocznij sesję nagrywania z włączonym trybem wstrzymania przy użyciu interfejsu API "StartAsync"
Uwaga
Nagrania należy wznowić w celu wygenerowania pliku nagrywania.
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. Tylko w przypadku opcji Unmixed — określ użytkownika w kanale 0
Aby utworzyć niemieszone pliki nagrywania dźwięku, możesz użyć AudioChannelParticipantOrdering
funkcji , aby określić, który użytkownik ma być nagrywany w kanale 0. Reszta uczestników zostanie przypisana do kanału, gdy mówią. Jeśli używasz funkcji RecordingChannel.Unmixed
, ale nie używasz AudioChannelParticipantOrdering
funkcji , nagranie połączenia przypisze kanał 0 do pierwszego uczestnika mówiącego.
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. Tylko dla opcji Unmixed — Określ koligację kanału
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
Odpowiedź interfejsu API zawiera recordingId
sesję nagrywania.
3. Zatrzymaj sesję nagrywania przy użyciu interfejsu API "stopWithResponse"
Użyj odebranego recordingId
elementu w odpowiedzi na .startWithResponse
Response<Void> response = callAutomationClient.getCallRecording()
.stopWithResponse(response.getValue().getRecordingId(), null);
4. Wstrzymaj sesję nagrywania przy użyciu interfejsu API "pauseWithResponse"
Użyj odebranego recordingId
elementu w odpowiedzi na .startWithResponse
Response<Void> response = callAutomationClient.getCallRecording()
.pauseWithResponse(response.getValue().getRecordingId(), null);
5. Wznów sesję nagrywania przy użyciu interfejsu API "resumeWithResponse"
Użyj odebranego recordingId
elementu w odpowiedzi na .startWithResponse
Response<Void> response = callAutomationClient.getCallRecording()
.resumeWithResponse(response.getValue().getRecordingId(), null);
6. Pobieranie pliku nagrywania przy użyciu interfejsu API "downloadToWithResponse"
Użyj elementu webhook usługi Azure Event Grid lub innej wyzwolonej akcji, aby powiadomić usługi, gdy zarejestrowane nośniki są gotowe do pobrania.
Powiadomienie Microsoft.Communication.RecordingFileStatusUpdated
usługi Event Grid jest publikowane, gdy nagranie jest gotowe do pobrania, zazwyczaj kilka minut po zakończeniu procesu nagrywania (na przykład zakończenie spotkania, zatrzymanie nagrania). Rejestrowanie powiadomień o zdarzeniach obejmuje i contentLocation
metadataLocation
, które są używane do pobierania zarówno zarejestrowanego nośnika, jak i pliku metadanych nagrywania.
Poniżej przedstawiono przykład schematu zdarzeń.
{
"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
}
Użyj downloadToWithResponse
metody CallRecording
klasy do pobierania zarejestrowanych multimediów. Poniżej przedstawiono obsługiwane parametry dla downloadToWithResponse
metody:
contentLocation
: adres URL usług Azure Communication Services, pod którym znajduje się zawartość.destinationPath
: Lokalizacja pliku.parallelDownloadOptions
: opcjonalny obiekt ParallelDownloadOptions, aby zmodyfikować sposób działania pobierania równoległego.overwrite
: prawda, aby zastąpić plik, jeśli istnieje.context
: Kontekst reprezentujący kontekst żądania.
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);
Lokalizację zawartości i identyfikatory dokumentów dla plików nagrywania można pobrać odpowiednio z contentLocation
pól i documentId
dla każdego recordingChunk
elementu .
7. Usuń zawartość nagrywania przy użyciu interfejsu API "deleteWithResponse".
Użyj deleteWithResponse
metody CallRecording
klasy do usuwania nagranego nośnika. Poniżej przedstawiono obsługiwane parametry dla deleteWithResponse
metody:
deleteLocation
: adres URL usług Azure Communication Services, pod którym znajduje się zawartość do usunięcia.context
: Kontekst reprezentujący kontekst żądania.
Response<Void> deleteResponse = callAutomationClient.getCallRecording().deleteWithResponse(deleteLocation, context);
Lokalizację usuwania nagrania można pobrać z deleteLocation
pola zdarzenia usługi Event Grid.
Przykładowy kod
Przykładową aplikację można pobrać z usługi GitHub
Wymagania wstępne
- Potrzebujesz konta platformy Azure z aktywną subskrypcją.
- Wdróż zasób usługi komunikacji. Zarejestruj parametry połączenia zasobu.
- Subskrybowanie zdarzeń za pośrednictwem usługi Azure Event Grid.
- Python 3.7+.
Przed rozpoczęciem
Interfejsy API rejestrowania wywołań używają wyłącznie elementu do inicjowania nagrywania serverCallId
. Istnieje kilka metod, których można użyć do pobrania serverCallId
w zależności od scenariusza:
Scenariusze automatyzacji wywołań
- W przypadku korzystania z automatyzacji wywołań dostępne są dwie opcje pobierania elementu
serverCallId
:- Po utworzeniu
serverCallId
wywołania element jest zwracany jako właściwośćCallConnected
zdarzenia po nawiązaniu wywołania. Dowiedz się, jak pobrać połączenie Połączenie ed zdarzenie z zestawu Call Automation SDK. - Po udzieleniu odpowiedzi na wywołanie lub wywołaniu
serverCallId
element jest zwracany odpowiednio jako właściwość odpowiedzi interfejsuAnswerCallResult
API lubCreateCallResult
.
- Po utworzeniu
Scenariusze wywoływania zestawu SDK
- W przypadku używania zestawu SDK klienta wywołującego można pobrać
serverCallId
element przy użyciu zmiennejserver_call_id
w wywołaniu . Skorzystaj z tego przykładu, aby dowiedzieć się, jak uzyskać identyfikator serverCallId z zestawu SDK wywołującego klienta.
Zacznijmy od kilku prostych kroków.
1. Tworzenie klienta usługi Call Automation
Interfejsy API rejestrowania wywołań są częścią bibliotek usługi Azure Communication Services Call Automation . W związku z tym należy utworzyć klienta usługi Call Automation.
Aby utworzyć klienta automatyzacji wywołań, użyjesz usługi Communication Services parametry połączenia i przekażesz go do CallAutomationClient
obiektu.
call_automation_client = CallAutomationClient.from_connection_string("<ACSConnectionString>")
2. Rozpocznij sesję nagrywania start_recording interfejsu API
Użyj odebranego serverCallId
podczas inicjowania połączenia.
- Funkcja RecordingContent służy do przekazywania typu zawartości nagrywania. Używanie dźwięku
- Funkcja RecordingChannel służy do przekazywania typu kanału nagrywania. Użyj mieszanych lub nie mieszanych.
- Format RecordingFormat służy do przekazywania formatu nagrania. Użyj wav.
response = call_automation_client.start_recording(call_locator=ServerCallLocator(server_call_id),
recording_content_type = RecordingContent.Audio,
recording_channel_type = RecordingChannel.Unmixed,
recording_format_type = RecordingFormat.Wav,
recording_state_callback_url = "<CallbackUri>")
2.1. Rozpoczynanie nagrywania — Bring Your Own Azure Blob Store
Rozpocznij nagrywanie przy użyciu własnej usługi Azure Blob Storage zdefiniowanej w celu przechowywania pliku nagrywania po zakończeniu nagrywania.
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. Rozpocznij sesję nagrywania z włączonym trybem wstrzymania przy użyciu interfejsu API "StartAsync"
Uwaga
Nagrania należy wznowić w celu wygenerowania pliku nagrywania.
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. Tylko w przypadku opcji Unmixed — określ użytkownika w kanale 0
Aby utworzyć niemieszone pliki nagrywania dźwięku, możesz użyć AudioChannelParticipantOrdering
funkcji , aby określić, który użytkownik ma być nagrywany w kanale 0. Reszta uczestników zostanie przypisana do kanału, gdy mówią. Jeśli używasz funkcji RecordingChannel.Unmixed
, ale nie używasz AudioChannelParticipantOrdering
funkcji , nagranie połączenia przypisze kanał 0 do pierwszego uczestnika mówiącego.
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. Tylko dla opcji Unmixed — Określ koligację kanału
_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
Odpowiedź interfejsu API zawiera recordingId
sesję nagrywania.
3. Zatrzymaj sesję nagrywania przy użyciu interfejsu API "stop_recording"
Użyj odebranego recording_id
elementu w odpowiedzi na .start_recording
stop_recording = call_automation_client.stop_recording(recording_id = recording_id)
4. Wstrzymywanie sesji nagrywania przy użyciu interfejsu API "pause_recording"
Użyj odebranego recording_id
elementu w odpowiedzi na .start_recording
pause_recording = call_automation_client.pause_recording(recording_id = recording_id)
5. Wznów sesję nagrywania przy użyciu interfejsu API "resume_recording"
Użyj odebranego recording_id
elementu w odpowiedzi na .start_recording
resume_recording = call_automation_client.resume_recording(recording_id = recording_id)
6. Pobieranie pliku nagrywania przy użyciu interfejsu API "download_recording"
Użyj elementu webhook usługi Azure Event Grid lub innej wyzwolonej akcji, aby powiadomić usługi, gdy zarejestrowane nośniki są gotowe do pobrania.
Powiadomienie Microsoft.Communication.RecordingFileStatusUpdated
usługi Event Grid jest publikowane, gdy nagranie jest gotowe do pobrania, zazwyczaj kilka minut po zakończeniu procesu nagrywania (na przykład zakończenie spotkania, zatrzymanie nagrania). Rejestrowanie powiadomień o zdarzeniach obejmuje i contentLocation
metadataLocation
, które są używane do pobierania zarówno zarejestrowanego nośnika, jak i pliku metadanych nagrywania.
Poniżej przedstawiono przykład schematu zdarzeń.
{
"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
}
Użyj download_recording
interfejsu API do pobierania zarejestrowanych multimediów.
response = recording_data = call_automation_client.download_recording(content_location)
with open("<file_name>", "wb") as binary_file:
binary_file.write(recording_data.read())
Element downloadLocation
dla nagrania można pobrać z contentLocation
atrybutu recordingChunk
. download_recording
metoda pobiera zawartość do bajtów.
7. Usuwanie zawartości nagrywania przy użyciu interfejsu API "delete_recording"
Użyj delete_recording
interfejsu API do usuwania zawartości nagrywania (na przykład zarejestrowanego nośnika, metadanych)
response = call_automation_client.delete_recording(delete_location);
Przykładowy kod
Przykładową aplikację można pobrać z usługi GitHub
Wymagania wstępne
- Potrzebujesz konta platformy Azure z aktywną subskrypcją.
- Wdróż zasób usługi komunikacji. Zarejestruj parametry połączenia zasobu.
- Subskrybowanie zdarzeń za pośrednictwem usługi Azure Event Grid.
- Node.js wersji Active LTS i Maintenance LTS (zalecane wersje 8.11.1 i 10.14.1)
Przed rozpoczęciem
Interfejsy API rejestrowania wywołań używają wyłącznie elementu do inicjowania nagrywania serverCallId
. Istnieje kilka metod, których można użyć do pobrania serverCallId
w zależności od scenariusza:
Scenariusze automatyzacji wywołań
- W przypadku korzystania z automatyzacji wywołań dostępne są dwie opcje pobierania elementu
serverCallId
:- Po utworzeniu
serverCallId
wywołania element jest zwracany jako właściwośćCallConnected
zdarzenia po nawiązaniu wywołania. Dowiedz się, jak pobrać połączenie Połączenie ed zdarzenie z zestawu Call Automation SDK. - Po udzieleniu odpowiedzi na wywołanie lub wywołaniu
serverCallId
element jest zwracany odpowiednio jako właściwość odpowiedzi interfejsuAnswerCallResult
API lubCreateCallResult
.
- Po utworzeniu
Scenariusze wywoływania zestawu SDK
- W przypadku używania zestawu SDK klienta wywołującego można pobrać
serverCallId
metodęgetServerCallId
przy użyciu metody wywołania . Skorzystaj z tego przykładu, aby dowiedzieć się, jak uzyskać identyfikator serverCallId z zestawu SDK wywołującego klienta.
Zacznijmy od kilku prostych kroków.
1. Tworzenie klienta usługi Call Automation
Interfejsy API rejestrowania wywołań są częścią bibliotek usługi Azure Communication Services Call Automation . W związku z tym należy utworzyć klienta usługi Call Automation.
Aby utworzyć klienta automatyzacji wywołań, użyjesz usługi Communication Services parametry połączenia i przekażesz go do CallAutomationClient
obiektu.
const callAutomationClient = new CallAutomationClient.CallAutomationClient("<ACSConnectionString>");
2. Rozpocznij sesję nagrywania za pomocą polecenia StartRecordingOptions przy użyciu interfejsu API "StartAsync"
Użyj odebranego serverCallId
podczas inicjowania połączenia.
- Funkcja RecordingContent służy do przekazywania typu zawartości nagrywania. Używanie dźwięku
- Funkcja RecordingChannel służy do przekazywania typu kanału nagrywania. Użyj mieszanych lub nie mieszanych.
- Format RecordingFormat służy do przekazywania formatu nagrania. Użyj wav.
var locator: CallLocator = { id: "<ServerCallId>", kind: "serverCallLocator" };
var options: StartRecordingOptions =
{
callLocator: locator,
recordingContent: "audio",
recordingChannel:"unmixed",
recordingFormat: "wav",
recordingStateCallbackEndpointUrl: "<CallbackUri>"
};
var response = await callAutomationClient.getCallRecording().start(options);
2.1. Rozpoczynanie nagrywania — Bring Your Own Azure Blob Store
Rozpocznij nagrywanie przy użyciu własnej usługi Azure Blob Storage zdefiniowanej w celu przechowywania pliku nagrywania po zakończeniu nagrywania.
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. Rozpocznij sesję nagrywania z włączonym trybem wstrzymania przy użyciu interfejsu API "StartAsync"
Uwaga
Nagrania należy wznowić w celu wygenerowania pliku nagrywania.
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. Tylko w przypadku opcji Unmixed — określ użytkownika w kanale 0
Aby utworzyć niemieszone pliki nagrywania dźwięku, możesz użyć AudioChannelParticipantOrdering
funkcji , aby określić, który użytkownik ma być nagrywany w kanale 0. Reszta uczestników zostanie przypisana do kanału, gdy mówią. Jeśli używasz funkcji RecordingChannel.Unmixed
, ale nie używasz AudioChannelParticipantOrdering
funkcji , nagranie połączenia przypisze kanał 0 do pierwszego uczestnika mówiącego.
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. Tylko dla opcji Unmixed — Określ koligację kanału
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
Odpowiedź interfejsu API zawiera recordingId
sesję nagrywania.
3. Zatrzymaj sesję nagrywania przy użyciu interfejsu API "stop"
Użyj odebranego recordingId
elementu w odpowiedzi na .start
var stopRecording = await callAutomationClient.getCallRecording().stop(recordingId);
4. Wstrzymaj sesję nagrywania przy użyciu interfejsu API wstrzymania
Użyj odebranego recordingId
elementu w odpowiedzi na .start
var pauseRecording = await callAutomationClient.getCallRecording().pause(recordingId);
5. Wznów sesję nagrywania przy użyciu interfejsu API "ResumeAsync"
Użyj odebranego recordingId
elementu w odpowiedzi na .start
var resumeRecording = await callAutomationClient.getCallRecording().resume(recordingId);
6. Pobieranie pliku nagrywania przy użyciu interfejsu API "DownloadToAsync"
Użyj elementu webhook usługi Azure Event Grid lub innej wyzwolonej akcji, aby powiadomić usługi, gdy zarejestrowane nośniki są gotowe do pobrania.
Powiadomienie Microsoft.Communication.RecordingFileStatusUpdated
usługi Event Grid jest publikowane, gdy nagranie jest gotowe do pobrania, zazwyczaj kilka minut po zakończeniu procesu nagrywania (na przykład zakończenie spotkania, zatrzymanie nagrania). Rejestrowanie powiadomień o zdarzeniach obejmuje i contentLocation
metadataLocation
, które są używane do pobierania zarówno zarejestrowanego nośnika, jak i pliku metadanych nagrywania.
Poniżej przedstawiono przykład schematu zdarzeń.
{
"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
}
Użyj downloadToPath
interfejsu API do pobierania zarejestrowanych multimediów.
var response = await callAutomationClient.getCallRecording().downloadToPath(contentLocation, fileName);
Element downloadLocation
dla nagrania można pobrać z contentLocation
atrybutu recordingChunk
. DownloadToAsync
metoda pobierz zawartość do podanej nazwy pliku.
7. Usuwanie zawartości nagrywania przy użyciu interfejsu API "DeleteAsync"
Użyj delete
interfejsu API do usuwania zawartości nagrywania (na przykład zarejestrowanego nośnika, metadanych)
var response = await callAutomationClient.getCallRecording().delete(deleteLocation);
Czyszczenie zasobów
Jeśli chcesz wyczyścić i usunąć subskrypcję usług Komunikacyjnych, możesz usunąć zasób lub grupę zasobów. Usunięcie grupy zasobów powoduje również usunięcie wszelkich innych skojarzonych z nią zasobów. Dowiedz się więcej o czyszczeniu zasobów.
Następne kroki
Aby uzyskać więcej informacji, zobacz następujące artykuły:
- Pobierz nasze przykładowe aplikacje java, Python i JavaScript do nagrywania wywołań
- Dowiedz się więcej o nagrywaniu połączeń
- Dowiedz się więcej o automatyzacji wywołań