Guia de início rápido de gravação de chamadas
Este guia de início rápido ajuda você a começar com 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. Verifique se você está familiarizado com o SDK do cliente de chamada e/ou a automação de chamadas para criar a experiência de chamada do usuário final.
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
:- Depois que uma chamada é criada, a
serverCallId
é retornada como uma propriedade doCallConnected
evento após uma chamada ter sido 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.
- 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 ogetServerCallId
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. Assim, é necessário criar um cliente de Call Automation.
Para criar um cliente de automação de chamadas, use a 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.
- RecordingContent é usado para passar o tipo de conteúdo de gravação. Usar áudio
- RecordingChannel é usado para passar o tipo de canal de gravação. Utilizar misturado ou não misturado.
- RecordingFormat é usado para passar o formato da gravação. Use 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. 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.
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. 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 API 'StopAsync'
Use o recordingId
recebido em resposta de StartAsync
.
var stopRecording = await callAutomationClient.GetCallRecording().StopAsync(recordingId);
4. Pausar a sessão de gravação usando a API 'PauseAsync'
Use o recordingId
recebido em resposta de StartAsync
.
var pauseRecording = await callAutomationClient.GetCallRecording ().PauseAsync(recordingId);
5. Retome a sessão de gravação usando a API 'ResumeAsync'
Use o recordingId
recebido em resposta de StartAsync
.
var resumeRecording = await callAutomationClient.GetCallRecording().ResumeAsync(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 (por exemplo, reunião encerrada, gravação interrompida). 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.
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);
O downloadLocation
para a gravação pode ser obtido a contentLocation
partir do recordingChunk
atributo do . DownloadToAsync
O método baixa o conteúdo para o nome de arquivo fornecido.
7. Exclua o conteúdo de gravação usando a API 'DeleteAsync'
Use DeleteAsync
a API para excluir o conteúdo de gravação (por exemplo, mídia gravada, 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 doCallConnected
evento após uma chamada ter sido 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.
- 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 ogetServerCallId
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. Assim, é necessário criar um cliente de Call Automation.
Para criar um cliente de automação de chamadas, você usará sua cadeia de conexão dos Serviços de Comunicação e a passará para o CallAutomationClient
objeto.
CallAutomationClient callAutomationClient = new CallAutomationClientBuilder()
.connectionString("<acsConnectionString>")
.buildClient();
2. Inicie a sessão de gravação com StartRecordingOptions usando a API 'startWithResponse'
Use o serverCallId
recebido durante o início da chamada.
- RecordingContent é usado para passar o tipo de conteúdo de gravação. Use AUDIO
- RecordingChannel é usado para passar o tipo de canal de gravação. Use MIXED ou UNMIXED.
- RecordingFormat é usado para passar o formato da gravação. Use 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. Comece a gravar - traga sua própria loja de Blob do Azure
Inicie a sessão de gravação com seu próprio Armazenamento de Blob do Azure para armazenar o arquivo de gravação 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>"));
// //start recording
RecordingStateResult result = callRecording.start(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>"))
.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 serão atribuídos a um canal enquanto falam. Se você usar RecordingChannel.Unmixed
, mas não usar AudioChannelParticipantOrdering
, a Gravação de Chamadas atribuirá o canal 0 ao primeiro participante a falar.
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 API 'stopWithResponse'
Use o recordingId
recebido em resposta de startWithResponse
.
Response<Void> response = callAutomationClient.getCallRecording()
.stopWithResponse(response.getValue().getRecordingId(), null);
4. Pause a sessão de gravação usando a API 'pauseWithResponse'
Use o recordingId
recebido em resposta de startWithResponse
.
Response<Void> response = callAutomationClient.getCallRecording()
.pauseWithResponse(response.getValue().getRecordingId(), null);
5. Retome a sessão de gravação usando a API 'resumeWithResponse'
Use o recordingId
recebido em resposta de startWithResponse
.
Response<Void> response = callAutomationClient.getCallRecording()
.resumeWithResponse(response.getValue().getRecordingId(), null);
6. Faça o download do arquivo de gravação usando a API 'downloadToWithResponse'
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 (por exemplo, reunião encerrada, gravação interrompida). 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.
Abaixo está 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 opcional ParallelDownloadOptions para modificar como o - download paralelo funcionará.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 API 'deleteWithResponse'.
Use deleteWithResponse
o método de CallRecording
classe para excluir a mídia gravada. A seguir estão os 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 doCallConnected
evento após uma chamada ter sido 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.
- 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, você usará sua cadeia de conexão dos Serviços de Comunicação e a passará 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.
- RecordingContent é usado para passar o tipo de conteúdo de gravação. Usar áudio
- RecordingChannel é usado para passar o tipo de canal de gravação. Utilizar misturado ou não misturado.
- RecordingFormat é usado para passar o formato da gravação. Use 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. 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 serão atribuídos a um canal enquanto falam. Se você usar RecordingChannel.Unmixed
, mas não usar AudioChannelParticipantOrdering
, a Gravação de Chamadas atribuirá o canal 0 ao primeiro participante a falar.
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 de 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 de 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 de 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 (por exemplo, reunião encerrada, gravação interrompida). 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.
Abaixo está 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 . download_recording
método de download do 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 (por exemplo, mídia gravada, 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 doCallConnected
evento após uma chamada ter sido 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.
- 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 ogetServerCallId
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. Assim, é necessário criar um cliente de Call Automation.
Para criar um cliente de automação de chamadas, você usará sua cadeia de conexão dos Serviços de Comunicação e a passará 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.
- RecordingContent é usado para passar o tipo de conteúdo de gravação. Usar áudio
- RecordingChannel é usado para passar o tipo de canal de gravação. Utilizar misturado ou não misturado.
- RecordingFormat é usado para passar o formato da gravação. Use 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. 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.
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 serão atribuídos a um canal enquanto falam. Se você usar RecordingChannel.Unmixed
, mas não usar AudioChannelParticipantOrdering
, a Gravação de Chamadas atribuirá o canal 0 ao primeiro participante a falar.
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 de 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 de 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 de 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 (por exemplo, reunião encerrada, gravação interrompida). 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.
Abaixo está 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 . DownloadToAsync
método de download do conteúdo em 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 que podem estar em inglês:
- 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