Início rápido da gravação da chamada
Este artigo descreve a gravação de chamadas para chamadas de voz e vídeo. Para começar a usar as APIs de gravação de chamadas, você deve ter uma chamada no lugar. Para criar a experiência de chamada do usuário final, certifique-se de estar familiarizado com o SDK do cliente de chamada e a automação de chamadas.
Código de Exemplo
Você pode baixar o aplicativo de exemplo do GitHub
Pré-requisitos
- Você precisa de uma conta do Azure com uma assinatura ativa.
- Implante um recurso do Serviço de Comunicação. Registre sua cadeia de conexão de recurso.
- Inscreva-se em eventos por meio da Grade de Eventos do Azure.
- Baixe o SDK do .NET
Antes de começar
As APIs de gravação de chamadas usam exclusivamente o para iniciar a serverCallId
gravação. Há alguns métodos que você pode usar para buscar o dependendo do serverCallId
seu cenário:
Cenários de automação de chamadas
Ao usar a Automação de Chamadas, você tem duas opções para obter o serverCallId
:
Quando você estabelece uma chamada, ela retorna a
serverCallId
como uma propriedade do evento depois queCallConnected
uma chamada é estabelecida. Saiba como obter o evento CallConnected do SDK de automação de chamadas.Quando você atende a chamada ou uma chamada é criada, ela retorna a
serverCallId
propriedade as das respostas daAnswerCallResult
API ouCreateCallResult
da API, respectivamente.
Chamando cenários do SDK
Ao usar o SDK do Cliente de Chamada, você pode recuperar o serverCallId
usando o getServerCallId
método na chamada.
Use este exemplo para saber como Obter serverCallId do SDK do Cliente de Chamada.
Vamos começar com alguns passos simples.
1. Crie um cliente de automação de chamadas
As APIs de Gravação de Chamadas fazem parte das bibliotecas de Automação de Chamadas dos Serviços de Comunicação do Azure. Então você precisa criar um cliente de automação de chamadas.
Para criar um cliente de automação de chamadas, use sua cadeia de conexão dos Serviços de Comunicação e passe-a para o CallAutomationClient
objeto.
CallAutomationClient callAutomationClient = new CallAutomationClient("<ACSConnectionString>");
2. Inicie a sessão de gravação com StartRecordingOptions usando a API 'StartAsync'
Use o serverCallId
recebido durante o início da chamada.
- Use
RecordingContent
para passar o tipo de conteúdo de gravação.AUDIO
Utilize. - Use
RecordingChannel
para passar o tipo de canal de gravação. UtilizarMIXED
ouUNMIXED
. - Use
RecordingFormat
para passar o formato da gravação.WAV
Utilize.
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. Comece a gravar - traga sua própria loja de Blob do Azure
Comece a gravar usando seu Armazenamento de Blob do Azure designado para armazenar o arquivo gravado assim que a gravação for concluída.
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<ServerCallId>"))
{
RecordingContent = RecordingContent.Audio,
RecordingChannel = RecordingChannel.Unmixed,
RecordingFormat = RecordingFormat.Wav,
RecordingStateCallbackUri = new Uri("<CallbackUri>"),
RecordingStorage = RecordingStorage.CreateAzureBlobContainerRecordingStorage(new Uri("<YOUR_STORAGE_CONTAINER_URL>"))
ExternalStorage = new BlobStorage(new Uri("<Insert Container / Blob Uri>"))
};
Response<RecordingStateResult> response = await callAutomationClient.GetCallRecording()
.StartAsync(recordingOptions);
2.2. Inicie a sessão de gravação com o modo de pausa ativado usando a API 'StartAsync'
Nota
As gravações precisarão ser retomadas para que o arquivo de gravação seja gerado.
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. Somente para Não misturado - Especifique um usuário no canal 0
Para produzir arquivos de gravação de áudio não misturados, você pode usar a AudioChannelParticipantOrdering
funcionalidade para especificar qual usuário deseja gravar no canal 0. Os restantes participantes são atribuídos a um canal enquanto falam. Se você usa RecordingChannel.Unmixed
, mas não usa AudioChannelParticipantOrdering
, a Gravação de Chamadas atribui o canal 0 ao primeiro participante que fala.
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. Apenas para não misturado - Especificar afinidade de canal
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);
A StartAsync
resposta da API contém o recordingId
da sessão de gravação.
3. Pare a sessão de gravação usando a StopAsync
API
Use o recordingId
recebido em resposta a StartAsync
.
var stopRecording = await callAutomationClient.GetCallRecording().StopAsync(recordingId);
4. Pausar a sessão de gravação usando PauseAsync
a API
Use o recordingId
recebido em resposta a StartAsync
.
var pauseRecording = await callAutomationClient.GetCallRecording ().PauseAsync(recordingId);
5. Retome a sessão de gravação usando a ResumeAsync
API
Use o recordingId
recebido em resposta a StartAsync
.
var resumeRecording = await callAutomationClient.GetCallRecording().ResumeAsync(recordingId);
6. Baixar arquivo de gravação usando DownloadToAsync
API
Use um gancho da Web da Grade de Eventos do Azure ou outra ação acionada para notificar seus serviços quando a mídia gravada estiver pronta para download.
Uma notificação Microsoft.Communication.RecordingFileStatusUpdated
de grade de eventos é publicada quando uma gravação está pronta para recuperação, geralmente alguns minutos após o processamento da gravação terminar (como quando a reunião termina ou uma gravação para). As notificações de eventos de gravação incluem contentLocation
e metadataLocation
, que você pode usar para recuperar mídia gravada e um arquivo de metadados de gravação.
Exemplo do esquema de eventos:
{
"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
}
Use DownloadToAsync
a API para baixar a mídia gravada.
var recordingDownloadUri = new Uri(contentLocation);
var response = await callAutomationClient.GetCallRecording().DownloadToAsync(recordingDownloadUri, fileName);
Buscar o downloadLocation
para a gravação a contentLocation
partir do recordingChunk
atributo do . Use o DownloadToAsync
método para baixar o conteúdo em um nome de arquivo fornecido.
7. Exclua o conteúdo de gravação usando a DeleteAsync
API
Use DeleteAsync
a API para excluir o conteúdo de gravação (como mídia gravada e metadados).
var recordingDeleteUri = new Uri(deleteLocation);
var response = await callAutomationClient.GetCallRecording().DeleteAsync(recordingDeleteUri);
Código de Exemplo
Você pode baixar o aplicativo de exemplo do GitHub
Pré-requisitos
- Você precisa de uma conta do Azure com uma assinatura ativa.
- Implante um recurso do Serviço de Comunicação. Registre sua cadeia de conexão de recurso.
- Inscreva-se em eventos por meio da Grade de Eventos do Azure.
- Faça o download do Java SDK
Antes de começar
As APIs de gravação de chamadas usam exclusivamente o para iniciar a serverCallId
gravação. Há alguns métodos que você pode usar para buscar o dependendo do serverCallId
seu cenário:
Cenários de automação de chamadas
Ao usar a Automação de Chamadas, você tem duas opções para obter o serverCallId
:
Depois que uma chamada é criada, a
serverCallId
é retornada como uma propriedade do evento depois queCallConnected
uma chamada é estabelecida. Saiba como obter o evento CallConnected do SDK de automação de chamadas.Depois de atender a chamada ou uma chamada é criada, o
serverCallId
é retornado como uma propriedade das respostas daAnswerCallResult
API ouCreateCallResult
respectivamente.
Chamando cenários do SDK
Ao usar o SDK do Cliente de Chamada, você pode recuperar o serverCallId
usando o getServerCallId
método na chamada.
Use este exemplo para saber como Obter serverCallId do SDK do Cliente de Chamada.
Vamos começar com alguns passos simples.
1. Crie um cliente de automação de chamadas
As APIs de Gravação de Chamadas fazem parte das bibliotecas de Automação de Chamadas dos Serviços de Comunicação do Azure. Então você precisa criar um cliente de automação de chamadas.
Para criar um cliente de automação de chamadas, use sua cadeia de conexão dos Serviços de Comunicação e passe-a para o CallAutomationClient
objeto.
CallAutomationClient callAutomationClient = new CallAutomationClientBuilder()
.connectionString("<acsConnectionString>")
.buildClient();
2. Inicie a sessão de gravação com StartRecordingOptions usando startWithResponse
API
Use o serverCallId
recebido durante o início da chamada.
- Use
RecordingContent
para passar o tipo de conteúdo de gravação.AUDIO
Utilize. - Use
RecordingChannel
para passar o tipo de canal de gravação. UtilizarMIXED
ouUNMIXED
. - Use
RecordingFormat
para passar o formato da gravação.WAV
Utilize.
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. Comece a gravar - traga sua própria loja de Blob do Azure
Comece a gravar usando seu Armazenamento de Blob do Azure designado para armazenar o arquivo gravado assim que a gravação for concluída.
StartRecordingOptions recordingOptions = new StartRecordingOptions(callLocator)
.setRecordingChannel(RecordingChannel.MIXED)
.setRecordingContent(RecordingContent.AUDIO_VIDEO)
.setRecordingFormat(RecordingFormat.MP4)
.setRecordingStorage(new AzureBlobContainerRecordingStorage("<YOUR_STORAGE_CONTAINER_URL>"))
.setExternalStorage(new BlobStorage("<Insert Container / Blob Uri>"));
// //start recording
RecordingStateResult result = callRecording.start(recordingOptions);
2.2. Inicie a sessão de gravação com o modo de pausa ativado usando a StartAsync
API
Nota
As gravações devem ser retomadas para que o arquivo de gravação seja gerado.
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. Somente para Não misturado - Especifique um usuário no canal 0
Para produzir arquivos de gravação de áudio não misturados, você pode usar a AudioChannelParticipantOrdering
funcionalidade para especificar qual usuário deseja gravar no canal 0. Os restantes participantes são atribuídos a um canal enquanto falam. Se você usa RecordingChannel.Unmixed
, mas não usa AudioChannelParticipantOrdering
, a Gravação de Chamadas atribui o canal 0 ao primeiro participante que fala.
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. Apenas para não misturado - Especificar afinidade de canal
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);
A startWithResponse
resposta da API contém o recordingId
da sessão de gravação.
3. Pare a sessão de gravação usando a stopWithResponse
API
Use o recordingId
recebido em resposta a startWithResponse
.
Response<Void> response = callAutomationClient.getCallRecording()
.stopWithResponse(response.getValue().getRecordingId(), null);
4. Pausar a sessão de gravação usando pauseWithResponse
a API
Use o recordingId
recebido em resposta a startWithResponse
.
Response<Void> response = callAutomationClient.getCallRecording()
.pauseWithResponse(response.getValue().getRecordingId(), null);
5. Retome a sessão de gravação usando a resumeWithResponse
API
Use o recordingId
recebido em resposta a startWithResponse
.
Response<Void> response = callAutomationClient.getCallRecording()
.resumeWithResponse(response.getValue().getRecordingId(), null);
6. Baixar arquivo de gravação usando downloadToWithResponse
API
Usar um gancho da Web da Grade de Eventos do Azure ou outra ação acionada deve ser usado para notificar seus serviços quando a mídia gravada estiver pronta para download.
Uma notificação Microsoft.Communication.RecordingFileStatusUpdated
de grade de eventos é publicada quando uma gravação está pronta para recuperação, geralmente alguns minutos após a conclusão do processo de gravação (como término de reunião ou paradas de gravação). As notificações de eventos de gravação incluem contentLocation
e metadataLocation
, que você pode usar para recuperar mídia gravada e um arquivo de metadados de gravação.
O código a seguir é um exemplo do esquema de eventos.
{
"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
}
Use downloadToWithResponse
o método de CallRecording
classe para baixar a mídia gravada. A seguir estão os parâmetros suportados para downloadToWithResponse
o método:
-
contentLocation
: URL dos Serviços de Comunicação do Azure onde o conteúdo está localizado. -
destinationPath
: Localização do ficheiro. -
parallelDownloadOptions
: Um objeto opcionalParallelDownloadOptions
para modificar como o download paralelo funciona. -
overwrite
: True para substituir o arquivo, se ele existir. -
context
: Um contexto que representa o contexto da solicitação.
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);
O local do conteúdo e os IDs do documento para os arquivos de gravação podem ser buscados nos contentLocation
campos e documentId
respectivamente, para cada recordingChunk
.
7. Exclua o conteúdo de gravação usando a deleteWithResponse
API
Use deleteWithResponse
o método de CallRecording
classe para excluir a mídia gravada. Parâmetros suportados para deleteWithResponse
o método:
-
deleteLocation
: URL dos Serviços de Comunicação do Azure onde o conteúdo a excluir está localizado. -
context
: Um contexto que representa o contexto da solicitação.
Response<Void> deleteResponse = callAutomationClient.getCallRecording().deleteWithResponse(deleteLocation, context);
O local de exclusão para a gravação pode ser buscado no deleteLocation
campo do evento Event Grid.
Código de Exemplo
Você pode baixar o aplicativo de exemplo do GitHub
Pré-requisitos
- Você precisa de uma conta do Azure com uma assinatura ativa.
- Implante um recurso do Serviço de Comunicação. Registre sua cadeia de conexão de recurso.
- Inscreva-se em eventos por meio da Grade de Eventos do Azure.
- Python 3.7+.
Antes de começar
As APIs de gravação de chamadas usam exclusivamente o para iniciar a serverCallId
gravação. Há alguns métodos que você pode usar para buscar o dependendo do serverCallId
seu cenário:
Cenários de automação de chamadas
- Ao usar a Automação de Chamadas, você tem duas opções para obter o
serverCallId
:- Depois que uma chamada é criada, a
serverCallId
é retornada como uma propriedade do evento depois queCallConnected
uma chamada é estabelecida. Saiba como obter o evento CallConnected do SDK de automação de chamadas. - Depois que você atender a chamada ou uma chamada for criada, ela retornará a
serverCallId
propriedade as das respostas daAnswerCallResult
API ouCreateCallResult
da API, respectivamente.
- Depois que uma chamada é criada, a
Chamando cenários do SDK
- Ao usar o SDK do Cliente de Chamada, você pode recuperar o
serverCallId
usando aserver_call_id
variável na chamada. Use este exemplo para saber como Obter serverCallId do SDK do Cliente de Chamada.
Vamos começar com alguns passos simples!
1. Crie um cliente de automação de chamadas
As APIs de Gravação de Chamadas fazem parte das bibliotecas de Automação de Chamadas dos Serviços de Comunicação do Azure. Assim, é necessário criar um cliente de Call Automation.
Para criar um cliente de automação de chamadas, use sua cadeia de conexão dos Serviços de Comunicação e passe-a para o CallAutomationClient
objeto.
call_automation_client = CallAutomationClient.from_connection_string("<ACSConnectionString>")
2. Inicie a sessão de gravação start_recording API
Use o serverCallId
recebido durante o início da chamada.
- Use
RecordingContent
para passar o tipo de conteúdo de gravação.AUDIO
Utilize. - Use
RecordingChannel
para passar o tipo de canal de gravação. UtilizarMIXED
ouUNMIXED
. - Use
RecordingFormat
para passar o formato da gravação.WAV
Utilize.
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. Comece a gravar - traga sua própria loja de Blob do Azure
Inicie a gravação com seu próprio Armazenamento de Blob do Azure definido para armazenar o arquivo de gravação assim que a gravação for concluída.
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. Inicie a sessão de gravação com o modo de pausa ativado usando a API 'StartAsync'
Nota
As gravações precisarão ser retomadas para que o arquivo de gravação seja gerado.
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. Somente para Não misturado - Especifique um usuário no canal 0
Para produzir arquivos de gravação de áudio não misturados, você pode usar a AudioChannelParticipantOrdering
funcionalidade para especificar qual usuário deseja gravar no canal 0. Os restantes participantes são atribuídos a um canal enquanto falam. Se você usa RecordingChannel.Unmixed
, mas não usa AudioChannelParticipantOrdering
, a Gravação de Chamadas atribui o canal 0 ao primeiro participante que fala.
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. Apenas para não misturado - Especificar afinidade de canal
_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])
A StartAsync
resposta da API contém o recordingId
da sessão de gravação.
3. Pare a sessão de gravação usando a API 'stop_recording'
Use o recording_id
recebido em resposta a start_recording
.
stop_recording = call_automation_client.stop_recording(recording_id = recording_id)
4. Pause a sessão de gravação usando a API 'pause_recording'
Use o recording_id
recebido em resposta a start_recording
.
pause_recording = call_automation_client.pause_recording(recording_id = recording_id)
5. Retome a sessão de gravação usando a API 'resume_recording'
Use o recording_id
recebido em resposta a start_recording
.
resume_recording = call_automation_client.resume_recording(recording_id = recording_id)
6. Faça o download do arquivo de gravação usando a API 'download_recording'
Usar um gancho da Web da Grade de Eventos do Azure ou outra ação acionada deve ser usado para notificar seus serviços quando a mídia gravada estiver pronta para download.
Uma notificação Microsoft.Communication.RecordingFileStatusUpdated
de Grade de Eventos é publicada quando uma gravação está pronta para recuperação, geralmente alguns minutos após a conclusão do processo de gravação (como o término da reunião ou a interrupção da gravação). As notificações de eventos de gravação incluem contentLocation
e metadataLocation
, que são usadas para recuperar mídia gravada e um arquivo de metadados de gravação.
O código a seguir é um exemplo do esquema de eventos.
{
"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
}
Use download_recording
a API para baixar a mídia gravada.
response = recording_data = call_automation_client.download_recording(content_location)
with open("<file_name>", "wb") as binary_file:
binary_file.write(recording_data.read())
O downloadLocation
para a gravação pode ser obtido a contentLocation
partir do recordingChunk
atributo do . Use o download_recording
método para baixar o conteúdo em bytes.
7. Exclua o conteúdo de gravação usando a API 'delete_recording'
Use delete_recording
a API para excluir o conteúdo de gravação, como mídia gravada e metadados.
response = call_automation_client.delete_recording(delete_location);
Código de Exemplo
Você pode baixar o aplicativo de exemplo do GitHub
Pré-requisitos
- Você precisa de uma conta do Azure com uma assinatura ativa.
- Implante um recurso do Serviço de Comunicação. Registre sua cadeia de conexão de recurso.
- Inscreva-se em eventos por meio da Grade de Eventos do Azure.
- Node.js versões Ative LTS e Maintenance LTS (recomenda-se 8.11.1 e 10.14.1)
Antes de começar
As APIs de gravação de chamadas usam exclusivamente o para iniciar a serverCallId
gravação. Há alguns métodos que você pode usar para buscar o dependendo do serverCallId
seu cenário:
Cenários de automação de chamadas
- Ao usar a Automação de Chamadas, você tem duas opções para obter o
serverCallId
:- Depois que uma chamada é criada, a
serverCallId
é retornada como uma propriedade do evento depois queCallConnected
uma chamada é estabelecida. Saiba como obter um evento CallConnected a partir do SDK de automação de chamadas. - Depois que você atender a chamada ou uma chamada for criada, ela retornará a
serverCallId
propriedade as das respostas daAnswerCallResult
API ouCreateCallResult
da API, respectivamente.
- Depois que uma chamada é criada, a
Chamando cenários do SDK
Ao usar o SDK do Cliente de Chamada, você pode recuperar o serverCallId
usando o getServerCallId
método na chamada.
Use este exemplo para saber como obter um serverCallId do SDK do cliente de chamada.
Vamos começar com alguns passos simples!
1. Crie um cliente de automação de chamadas
As APIs de Gravação de Chamadas fazem parte das bibliotecas de Automação de Chamadas dos Serviços de Comunicação do Azure. Assim, é necessário criar um cliente de Call Automation.
Para criar um cliente de automação de chamadas, use sua cadeia de conexão dos Serviços de Comunicação e passe-a para o CallAutomationClient
objeto.
const callAutomationClient = new CallAutomationClient.CallAutomationClient("<ACSConnectionString>");
2. Inicie a sessão de gravação com StartRecordingOptions usando a API 'StartAsync'
Use o serverCallId
recebido durante o início da chamada.
- Use
RecordingContent
para passar o tipo de conteúdo de gravação.AUDIO
Utilize. - Use
RecordingChannel
para passar o tipo de canal de gravação. UtilizarMIXED
ouUNMIXED
. - Use
RecordingFormat
para passar o formato da gravação.WAV
Utilize.
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. Comece a gravar - traga sua própria loja de Blob do Azure
Comece a gravar usando seu Armazenamento de Blob do Azure designado para armazenar o arquivo gravado assim que a gravação for concluída.
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. Inicie a sessão de gravação com o modo de pausa ativado usando a API 'StartAsync'
Nota
As gravações precisarão ser retomadas para que o arquivo de gravação seja gerado.
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. Somente para Não misturado - Especifique um usuário no canal 0
Para produzir arquivos de gravação de áudio não misturados, você pode usar a AudioChannelParticipantOrdering
funcionalidade para especificar qual usuário deseja gravar no canal 0. Os restantes participantes são atribuídos a um canal enquanto falam. Se você usa RecordingChannel.Unmixed
, mas não usa AudioChannelParticipantOrdering
, a Gravação de Chamadas atribui o canal 0 ao primeiro participante que fala.
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. Apenas para não misturado - Especificar afinidade de canal
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);
A StartAsync
resposta da API contém o recordingId
da sessão de gravação.
3. Pare a sessão de gravação usando a API 'stop'
Use o recordingId
recebido em resposta a start
.
var stopRecording = await callAutomationClient.getCallRecording().stop(recordingId);
4. Pausar a sessão de gravação usando a API 'pause'
Use o recordingId
recebido em resposta a start
.
var pauseRecording = await callAutomationClient.getCallRecording().pause(recordingId);
5. Retome a sessão de gravação usando a API 'ResumeAsync'
Use o recordingId
recebido em resposta a start
.
var resumeRecording = await callAutomationClient.getCallRecording().resume(recordingId);
6. Faça o download do arquivo de gravação usando a API 'DownloadToAsync'
Usar um gancho da Web da Grade de Eventos do Azure ou outra ação acionada deve ser usado para notificar seus serviços quando a mídia gravada estiver pronta para download.
Uma notificação Microsoft.Communication.RecordingFileStatusUpdated
de Grade de Eventos é publicada quando uma gravação está pronta para recuperação, geralmente alguns minutos após a conclusão do processo de gravação (como o término da reunião ou a interrupção da gravação). As notificações de eventos de gravação incluem contentLocation
e metadataLocation
, que são usadas para recuperar mídia gravada e um arquivo de metadados de gravação.
O código a seguir é um exemplo do esquema de eventos.
{
"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
}
Use downloadToPath
a API para baixar a mídia gravada.
var response = await callAutomationClient.getCallRecording().downloadToPath(contentLocation, fileName);
O downloadLocation
para a gravação pode ser obtido a contentLocation
partir do recordingChunk
atributo do . Use o DownloadToAsync
método para baixar o conteúdo em um nome de arquivo fornecido.
7. Exclua o conteúdo de gravação usando a API 'DeleteAsync'
Use delete
a API para excluir o conteúdo de gravação (por exemplo, mídia gravada, metadados)
var response = await callAutomationClient.getCallRecording().delete(deleteLocation);
Clean up resources (Limpar recursos)
Se quiser limpar e remover uma assinatura dos Serviços de Comunicação, você pode excluir o recurso ou grupo de recursos. A exclusão do grupo de recursos também exclui quaisquer outros recursos associados a ele. Saiba mais sobre a limpeza de recursos.
Próximos passos
Para obter mais informações, consulte os seguintes artigos:
- Faça o download de nossos aplicativos de exemplo de gravação de chamadas Java, Python e JavaScript.
- Saiba mais sobre a gravação de chamadas.
- Saiba mais sobre a automação de chamadas.