Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo descrive la registrazione delle chiamate per chiamate vocali e videochiamate. Per iniziare a usare le API di registrazione delle chiamate, è necessario disporre di una chiamata sul posto. Per creare l'esperienza di chiamata dell'utente finale, assicurarsi di avere familiarità con l'SDK del client di chiamata e Call Automation.
Codice di esempio
È possibile scaricare l'app di esempio da GitHub
Prerequisiti
- È necessario un account Azure con una sottoscrizione attiva.
- Distribuire una risorsa del servizio di comunicazione. Registrare la stringa di connessione della risorsa.
- Sottoscrivere eventi tramite Griglia di eventi di Azure.
- Scarica il .NET SDK
Prima di iniziare
Le API di registrazione delle chiamate utilizzano callConnectionId o serverCallId per avviare la registrazione. Esistono due metodi che è possibile usare per recuperare gli ID seguenti a seconda dello scenario:
Come recuperare callConnectionId
Quando si usa l'automazione delle chiamate, si riceverà l'evento di risposta callConnectionId da una richiesta createCall, answer o connect quando si avvia la chiamata.
Come recuperare serverCallId
Quando si utilizza Call Automation, sono disponibili due opzioni per ottenere il serverCallId.
Dopo che è stata stabilita, una chiamata restituisce un elemento
serverCallIdcome proprietà dell'eventoCallConnected. Scopri come ottenere l'evento CallConnected da Call Automation SDK.Quando si risponde alla chiamata o viene creata una chiamata, restituisce
serverCallIdrispettivamente come proprietà delle risposte APIAnswerCallResultoCreateCallResult.
Quando si utilizza Calling Client SDK, è possibile recuperare serverCallId utilizzando il metodo getServerCallId sulla chiamata.
Usare questo esempio per informazioni su come ottenere serverCallId da Calling Client SDK.
Si inizierà con alcuni semplici passaggi.
1. Creare un client di automazione delle chiamate
Le API di registrazione delle chiamate fanno parte delle librerie di Automazione delle Chiamate dei Servizi di Comunicazione di Azure. È quindi necessario creare un client di Automazione chiamate.
Per creare un client di automazione delle chiamate, usare la stringa di connessione dei Servizi di comunicazione e passarla all'oggetto CallAutomationClient.
CallAutomationClient callAutomationClient = new CallAutomationClient("<ACSConnectionString>");
2. Avviare la sessione di registrazione con StartRecordingOptions usando l'API 'StartAsync'
Usare il callConnectionId o il serverCallId ricevuto durante l'avvio della chiamata.
- Usare
RecordingContentper passare il tipo di contenuto di registrazione. Utilizzare ilAUDIO. - Usare
RecordingChannelper passare il tipo di canale di registrazione. UsareMIXEDoUNMIXED. - Usare
RecordingFormatper passare il formato della registrazione. Utilizzare ilWAV.
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<callConnectionId> or <ServerCallId>"))
{
RecordingContent = RecordingContent.Audio,
RecordingChannel = RecordingChannel.Unmixed,
RecordingFormat = RecordingFormat.Wav,
RecordingStateCallbackUri = new Uri("<CallbackUri>");
};
Response<RecordingStateResult> response = await callAutomationClient.GetCallRecording()
.StartAsync(recordingOptions);
2.1. Avviare la registrazione - Bring Your Own Azure Blob Store
Avviare la registrazione utilizzando l'istanza di Archiviazione BLOB di Azure designata per archiviare il file registrato una volta completata la registrazione.
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<CallConnectionId> or <ServerCallId>"))
{
RecordingContent = RecordingContent.Audio,
RecordingChannel = RecordingChannel.Unmixed,
RecordingFormat = RecordingFormat.Wav,
RecordingStateCallbackUri = new Uri("<CallbackUri>"),
RecordingStorage = RecordingStorage.CreateAzureBlobContainerRecordingStorage(new Uri("<YOUR_STORAGE_CONTAINER_URL>"))
};
Response<RecordingStateResult> response = await callAutomationClient.GetCallRecording()
.StartAsync(recordingOptions);
2.2. Avviare la sessione di registrazione con la modalità pausa abilitata usando l'API 'StartAsync'
Nota
Le registrazioni dovranno essere riprese per generare il file di registrazione.
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<CallConnectionId> or <ServerCallId>"))
{
RecordingContent = RecordingContent.Audio,
RecordingChannel = RecordingChannel.Unmixed,
RecordingFormat = RecordingFormat.Wav,
PauseOnStart = true,
RecordingStateCallbackUri = new Uri("<CallbackUri>");
};
Response<RecordingStateResult> response = await callAutomationClient.GetCallRecording()
.StartAsync(recordingOptions);
2.3. Solo per Unmixed - Specificare un utente nel canale 0
Per produrre file di registrazione audio non mescolati, è possibile usare la AudioChannelParticipantOrdering funzionalità per specificare l'utente da registrare sul canale 0. Il resto dei partecipanti viene assegnato a un canale mentre parlano. Se si utilizza RecordingChannel.Unmixed ma non si utilizza AudioChannelParticipantOrdering, la registrazione delle chiamate assegna il canale 0 al primo partecipante che parla.
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<CallConnectionId> or <ServerCallId>"))
{
RecordingContent = RecordingContent.Audio,
RecordingChannel = RecordingChannel.Unmixed,
RecordingFormat = RecordingFormat.Wav,
RecordingStateCallbackUri = new Uri("<CallbackUri>"),
AudioChannelParticipantOrdering = { new CommunicationUserIdentifier("<ACS_USER_MRI>") }
};
Response<RecordingStateResult> response = await callAutomationClient.GetCallRecording().StartAsync(recordingOptions);
2.4. Solo per Unmixed - Specificare l'affinità del canale
var channelAffinity = new ChannelAffinity(new CommunicationUserIdentifier("<ACS_USER_MRI>")) { Channel = 0};
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<CallConnectionId> or <ServerCallId>"))
{
RecordingContent = RecordingContent.Audio,
RecordingChannel = RecordingChannel.Unmixed,
RecordingFormat = RecordingFormat.Wav,
RecordingStateCallbackUri = new Uri("<CallbackUri>"),
ChannelAffinity = new List<ChannelAffinity>{ channelAffinity }
};
Response<RecordingStateResult> response = await callAutomationClient.GetCallRecording().StartAsync(recordingOptions);
La risposta dell'API StartAsync contiene il recordingId della sessione di registrazione.
3. Interrompere la registrazione della sessione usando l'API StopAsync
Usare l'oggetto recordingId ricevuto in risposta a StartAsync.
var stopRecording = await callAutomationClient.GetCallRecording().StopAsync(recordingId);
4. Sospendere la sessione di registrazione con l'API PauseAsync
Utilizzare l'oggetto recordingId ricevuto in risposta a StartAsync.
var pauseRecording = await callAutomationClient.GetCallRecording ().PauseAsync(recordingId);
5. Riprendere la registrazione della sessione con l'API ResumeAsync
Usare l'oggetto recordingId ricevuto in risposta a StartAsync.
var resumeRecording = await callAutomationClient.GetCallRecording().ResumeAsync(recordingId);
6. Scaricare il file di registrazione usando l'API DownloadToAsync
Usare un webhook Griglia di eventi di Azure o un'altra azione attivata per comunicare ai servizi quando il supporto registrato è pronto per il download.
Una notifica Microsoft.Communication.RecordingFileStatusUpdated di Griglia di eventi viene pubblicata quando una registrazione è pronta per il recupero, in genere alcuni minuti dopo il completamento dell'elaborazione della registrazione, ad esempio quando la riunione termina o si arresta una registrazione. Le notifiche degli eventi di registrazione includono contentLocation e metadataLocation, che è possibile usare per recuperare i supporti registrati e un file di metadati di registrazione.
Esempio dello schema di eventi:
{
"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
}
Usare l'API DownloadToAsync per scaricare i supporti registrati.
var recordingDownloadUri = new Uri(contentLocation);
var response = await callAutomationClient.GetCallRecording().DownloadToAsync(recordingDownloadUri, fileName);
Recuperare l'elemento downloadLocation per la registrazione dell'attributo contentLocation dell'elemento recordingChunk. Usare il DownloadToAsync metodo per scaricare il contenuto in un nome file specificato.
7. Eliminare il contenuto di registrazione con l'API DeleteAsync
Usare l'API DeleteAsync per eliminare il contenuto della registrazione, ad esempio i file multimediali registrati e i metadati.
var recordingDeleteUri = new Uri(deleteLocation);
var response = await callAutomationClient.GetCallRecording().DeleteAsync(recordingDeleteUri);
Codice di esempio
È possibile scaricare l'app di esempio da GitHub
Prerequisiti
- È necessario un account Azure con una sottoscrizione attiva.
- Distribuire una risorsa del servizio di comunicazione. Registrare la stringa di connessione della risorsa.
- Sottoscrivere eventi tramite Griglia di eventi di Azure.
- Scarica il Java SDK
Prima di iniziare
Le API di registrazione delle chiamate utilizzano callConnectionId o serverCallId per avviare la registrazione. Esistono due metodi che è possibile usare per recuperare gli ID seguenti a seconda dello scenario:
Come recuperare callConnectionId
Quando si usa l'automazione delle chiamate, si riceverà l'evento di risposta callConnectionId da una richiesta createCall, answer o connect quando si avvia la chiamata.
Come recuperare serverCallId
Quando si utilizza Call Automation, sono disponibili due opzioni per ottenere il serverCallId.
Dopo che è stata stabilita, una chiamata restituisce un elemento
serverCallIdcome proprietà dell'eventoCallConnected. Scopri come ottenere l'evento CallConnected da Call Automation SDK.Quando si risponde alla chiamata o viene creata una chiamata, restituisce
serverCallIdrispettivamente come proprietà delle risposte APIAnswerCallResultoCreateCallResult.
Quando si utilizza Calling Client SDK, è possibile recuperare serverCallId utilizzando il metodo getServerCallId sulla chiamata.
Usare questo esempio per informazioni su come ottenere serverCallId da Calling Client SDK.
Si inizierà con alcuni semplici passaggi.
1. Creare un client di automazione delle chiamate
Le API di registrazione delle chiamate fanno parte delle librerie di Automazione delle Chiamate dei Servizi di Comunicazione di Azure. È quindi necessario creare un client di Automazione chiamate.
Per creare un client di automazione delle chiamate, usare la stringa di connessione dei Servizi di comunicazione e passarla all'oggetto CallAutomationClient.
CallAutomationClient callAutomationClient = new CallAutomationClientBuilder()
.connectionString("<acsConnectionString>")
.buildClient();
2. Avviare la sessione di registrazione con StartRecordingOptions usando l'API startWithResponse
Usare il callConnectionId o il serverCallId ricevuto durante l'avvio della chiamata.
- Usare
RecordingContentper passare il tipo di contenuto di registrazione. Utilizzare ilAUDIO. - Usare
RecordingChannelper passare il tipo di canale di registrazione. UsareMIXEDoUNMIXED. - Usare
RecordingFormatper passare il formato della registrazione. Utilizzare ilWAV.
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<callConnectionId> or <serverCallId>"))
.setRecordingChannel(RecordingChannel.UNMIXED)
.setRecordingFormat(RecordingFormat.WAV)
.setRecordingContent(RecordingContent.AUDIO)
.setRecordingStateCallbackUrl("<recordingStateCallbackUrl>");
Response<RecordingStateResult> response = callAutomationClient.getCallRecording()
.startWithResponse(recordingOptions, null);
2.1. Avviare la registrazione - Bring Your Own Azure Blob Store
Avviare la registrazione utilizzando l'istanza di Archiviazione BLOB di Azure designata per archiviare il file registrato una volta completata la registrazione.
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. Avviare la sessione di registrazione con la modalità pausa abilitata con l'API StartAsync
Nota
Le registrazioni devono essere riprese per generare il file di registrazione.
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<<callConnectionId> or serverCallId>"))
.setRecordingChannel(RecordingChannel.UNMIXED)
.setRecordingFormat(RecordingFormat.WAV)
.setRecordingContent(RecordingContent.AUDIO)
.setRecordingStateCallbackUrl("<recordingStateCallbackUrl>")
.setPauseOnStart(true)
.setAudioChannelParticipantOrdering(List.of(new CommunicationUserIdentifier("<participantMri>")));
Response<RecordingStateResult> response = callAutomationClient.getCallRecording()
.startWithResponse(recordingOptions, null);
2.3. Solo per Unmixed - Specificare un utente nel canale 0
Per produrre file di registrazione audio non mescolati, è possibile usare la AudioChannelParticipantOrdering funzionalità per specificare l'utente da registrare sul canale 0. Il resto dei partecipanti viene assegnato a un canale mentre parlano. Se si utilizza RecordingChannel.Unmixed ma non si utilizza AudioChannelParticipantOrdering, la registrazione delle chiamate assegna il canale 0 al primo partecipante che parla.
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<<callConnectionId> or serverCallId>"))
.setRecordingChannel(RecordingChannel.UNMIXED)
.setRecordingFormat(RecordingFormat.WAV)
.setRecordingContent(RecordingContent.AUDIO)
.setRecordingStateCallbackUrl("<recordingStateCallbackUrl>")
.setAudioChannelParticipantOrdering(List.of(new CommunicationUserIdentifier("<participantMri>")));
Response<RecordingStateResult> response = callAutomationClient.getCallRecording()
.startWithResponse(recordingOptions, null);
2.4. Solo per Unmixed - Specificare l'affinità del canale
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);
La risposta dell'API startWithResponse contiene il recordingId della sessione di registrazione.
3. Interrompere la registrazione della sessione usando l'API stopWithResponse
Usare l'oggetto recordingId ricevuto in risposta a startWithResponse.
Response<Void> response = callAutomationClient.getCallRecording()
.stopWithResponse(response.getValue().getRecordingId(), null);
4. Sospendere la sessione di registrazione con l'API pauseWithResponse
Usare l'oggetto recordingId ricevuto in risposta a startWithResponse.
Response<Void> response = callAutomationClient.getCallRecording()
.pauseWithResponse(response.getValue().getRecordingId(), null);
5. Riprendere la registrazione della sessione con l'API resumeWithResponse
Usare l'oggetto recordingId ricevuto in risposta a startWithResponse.
Response<Void> response = callAutomationClient.getCallRecording()
.resumeWithResponse(response.getValue().getRecordingId(), null);
6. Scaricare il file di registrazione usando l'API downloadToWithResponse
Usare un webhook Griglia di eventi di Azure o un'altra azione attivata da usare per comunicare ai servizi quando il supporto registrato è pronto per il download.
Una notifica Microsoft.Communication.RecordingFileStatusUpdated di Griglia di eventi viene pubblicata quando una registrazione è pronta per il recupero, in genere alcuni minuti dopo il completamento del processo di registrazione, ad esempio la fine della riunione o l'arresto della registrazione. Le notifiche degli eventi di registrazione includono contentLocation e metadataLocation, che è possibile usare per recuperare i supporti registrati e un file di metadati di registrazione.
Il codice seguente è un esempio dello schema di eventi.
{
"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
}
Usare il metodo downloadToWithResponse della classe CallRecording per scaricare il supporto registrato. Di seguito sono riportati i parametri supportati per downloadToWithResponse il metodo :
-
contentLocation: URL dei Servizi di comunicazione di Azure dove si trova il contenuto. -
destinationPath: percorso del file. -
parallelDownloadOptions: oggetto facoltativoParallelDownloadOptionsper modificare il funzionamento del download parallelo. -
overwrite: true per sovrascrivere il file, se esistente. -
context: contesto che rappresenta il contesto della richiesta.
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);
Il percorso del contenuto e gli ID documento per i file di registrazione possono essere recuperati dai campi contentLocation e documentId rispettivamente, per ogni elemento recordingChunk.
7. Eliminare il contenuto di registrazione con l'API deleteWithResponse
Utilizzare il deleteWithResponse metodo della CallRecording classe per eliminare i supporti registrati. Parametri supportati per il metodo deleteWithResponse
-
deleteLocation: URL dei Servizi di Comunicazione di Azure in cui si trova il contenuto da eliminare. -
context: contesto che rappresenta il contesto della richiesta.
Response<Void> deleteResponse = callAutomationClient.getCallRecording().deleteWithResponse(deleteLocation, context);
Il percorso di eliminazione per la registrazione può essere recuperato dal campo deleteLocation dell'evento di Griglia eventi.
Codice di esempio
È possibile scaricare l'app di esempio da GitHub
Prerequisiti
- È necessario un account Azure con una sottoscrizione attiva.
- Distribuire una risorsa del servizio di comunicazione. Registrare la stringa di connessione della risorsa.
- Sottoscrivere eventi tramite Griglia di eventi di Azure.
- Python 3.7+.
Prima di iniziare
Le API di registrazione delle chiamate utilizzano callConnectionId o serverCallId per avviare la registrazione. Esistono due metodi che è possibile usare per recuperare gli ID seguenti a seconda dello scenario:
Come recuperare callConnectionId
Quando si usa l'automazione delle chiamate, si riceverà l'evento di risposta callConnectionId da una richiesta createCall, answer o connect quando si avvia la chiamata.
Come recuperare serverCallId
Quando si utilizza Call Automation, sono disponibili due opzioni per ottenere il serverCallId.
Dopo che è stata stabilita, una chiamata restituisce un elemento
serverCallIdcome proprietà dell'eventoCallConnected. Scopri come ottenere l'evento CallConnected da Call Automation SDK.Quando si risponde alla chiamata o viene creata una chiamata, restituisce
serverCallIdrispettivamente come proprietà delle risposte APIAnswerCallResultoCreateCallResult.
Quando si utilizza Calling Client SDK, è possibile recuperare serverCallId utilizzando il metodo getServerCallId sulla chiamata.
Usare questo esempio per informazioni su come ottenere serverCallId da Calling Client SDK.
Si inizierà con alcuni semplici passaggi.
1. Creare un client di automazione delle chiamate
Le API di registrazione delle chiamate fanno parte delle librerie di Automazione delle Chiamate dei Servizi di Comunicazione di Azure. È quindi necessario creare un client di automazione delle chiamate.
Per creare un client di automazione delle chiamate, usare la stringa di connessione dei Servizi di comunicazione e passarla all'oggetto CallAutomationClient.
call_automation_client = CallAutomationClient.from_connection_string("<ACSConnectionString>")
2. Avviare la registrazione della sessione start_recording API
Usare il callConnectionId o il serverCallId ricevuto durante l'avvio della chiamata.
- Usare
RecordingContentper passare il tipo di contenuto di registrazione. Utilizzare ilAUDIO. - Usare
RecordingChannelper passare il tipo di canale di registrazione. UsareMIXEDoUNMIXED. - Usare
RecordingFormatper passare il formato della registrazione. Utilizzare ilWAV.
response = call_automation_client.start_recording(call_locator=ServerCallLocator(callConnectionId or server_call_id),
recording_content_type = RecordingContent.Audio,
recording_channel_type = RecordingChannel.Unmixed,
recording_format_type = RecordingFormat.Wav,
recording_state_callback_url = "<CallbackUri>")
2.1. Avviare la registrazione - Bring Your Own Azure Blob Store
Avvia la registrazione con il tuo Azure Blob Storage definito per archiviare il file di registrazione una volta completata la registrazione.
response = call_automation_client.start_recording(call_locator=ServerCallLocator(callConnectionId or server_call_id),
recording_content_type = RecordingContent.Audio,
recording_channel_type = RecordingChannel.Unmixed,
recording_format_type = RecordingFormat.Wav,
recording_state_callback_url = "<CallbackUri>",
recording_storage = AzureBlobContainerRecordingStorage(container_url="<YOUR_STORAGE_CONTAINER_URL>"))
2.2. Avviare la sessione di registrazione con la modalità pausa abilitata usando l'API 'StartAsync'
Nota
Le registrazioni dovranno essere riprese per generare il file di registrazione.
response = call_automation_client.start_recording(call_locator=ServerCallLocator(callConnectionId or server_call_id),
recording_content_type = RecordingContent.Audio,
recording_channel_type = RecordingChannel.Unmixed,
recording_format_type = RecordingFormat.Wav,
pause_on_start = true,
recording_state_callback_url = "<CallbackUri>")
2.3. Solo per Unmixed - Specificare un utente nel canale 0
Per produrre file di registrazione audio non mescolati, è possibile usare la AudioChannelParticipantOrdering funzionalità per specificare l'utente da registrare sul canale 0. Il resto dei partecipanti viene assegnato a un canale mentre parlano. Se si utilizza RecordingChannel.Unmixed ma non si utilizza AudioChannelParticipantOrdering, la registrazione delle chiamate assegna il canale 0 al primo partecipante che parla.
response = call_automation_client.start_recording(call_locator=ServerCallLocator(callConnectionId or server_call_id),
recording_content_type = RecordingContent.Audio,
recording_channel_type = RecordingChannel.Unmixed,
recording_format_type = RecordingFormat.Wav,
recording_state_callback_url = "<CallbackUri>",
audio_channel_participant_ordering=[CommunicationUserIdentifier(id="<ACS_USER_MRI>")])
2.4. Solo per Unmixed - Specificare l'affinità del canale
_channel_affinity = ChannelAffinity(target_participant=CommunicationUserIdentifier("<ACS_USER_MRI>"), channel=0)
response = call_automation_client.start_recording(call_locator=ServerCallLocator(callConnectionId or server_call_id),
recording_content_type = RecordingContent.Audio,
recording_channel_type = RecordingChannel.Unmixed,
recording_format_type = RecordingFormat.Wav,
recording_state_callback_url = "<CallbackUri>",
channel_affinity=[_channel_affinity])
La risposta dell'API StartAsync contiene il recordingId della sessione di registrazione.
3. Arrestare la sessione di registrazione usando l'API 'stop_recording'
Usare l'oggetto recording_id ricevuto in risposta a start_recording.
stop_recording = call_automation_client.stop_recording(recording_id = recording_id)
4. Sospendere la sessione di registrazione usando l'API 'pause_recording'
Usare l'oggetto recording_id ricevuto in risposta a start_recording.
pause_recording = call_automation_client.pause_recording(recording_id = recording_id)
5. Riprendere la sessione di registrazione con l'API 'resume_recording'
Usare l'oggetto recording_id ricevuto in risposta a start_recording.
resume_recording = call_automation_client.resume_recording(recording_id = recording_id)
6. Scaricare il file di registrazione usando l'API 'download_recording'
Usare un webhook Griglia di eventi di Azure o un'altra azione attivata da usare per comunicare ai servizi quando il supporto registrato è pronto per il download.
Una notifica Microsoft.Communication.RecordingFileStatusUpdated di Griglia di eventi viene pubblicata quando una registrazione è pronta per il recupero, in genere alcuni minuti dopo il completamento del processo di registrazione( ad esempio la riunione è terminata o la registrazione è stata arrestata). Le notifiche degli eventi di registrazione includono contentLocation e metadataLocation, che vengono usate per recuperare sia i supporti registrati che un file di metadati di registrazione.
Il codice seguente è un esempio dello schema di eventi.
{
"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
}
Usare l'API download_recording per scaricare i supporti registrati.
response = recording_data = call_automation_client.download_recording(content_location)
with open("<file_name>", "wb") as binary_file:
binary_file.write(recording_data.read())
L'oggetto downloadLocation per la registrazione può essere recuperato dall'attributo contentLocation dell'oggetto recordingChunk. Usare il download_recording metodo per scaricare il contenuto in byte.
7. Eliminare il contenuto di registrazione con l'API "delete_recording"
Usare l'API delete_recording per eliminare il contenuto di registrazione, ad esempio i file multimediali registrati e i metadati.
response = call_automation_client.delete_recording(delete_location);
Codice di esempio
È possibile scaricare l'app di esempio da GitHub
Prerequisiti
- È necessario un account Azure con una sottoscrizione attiva.
- Distribuire una risorsa del servizio di comunicazione. Registrare la stringa di connessione della risorsa.
- Sottoscrivere eventi tramite Griglia di eventi di Azure.
- Node.js versioni di Active LTS e Maintenance LTS (consigliate 8.11.1 e 10.14.1)
Prima di iniziare
Le API di registrazione delle chiamate utilizzano callConnectionId o serverCallId per avviare la registrazione. Esistono due metodi che è possibile usare per recuperare gli ID seguenti a seconda dello scenario:
Come recuperare callConnectionId
Quando si usa l'automazione delle chiamate, si riceverà l'evento di risposta callConnectionId da una richiesta createCall, answer o connect quando si avvia la chiamata.
Come recuperare serverCallId
Quando si utilizza Call Automation, sono disponibili due opzioni per ottenere il serverCallId.
Dopo che è stata stabilita, una chiamata restituisce un elemento
serverCallIdcome proprietà dell'eventoCallConnected. Scopri come ottenere l'evento CallConnected da Call Automation SDK.Quando si risponde alla chiamata o viene creata una chiamata, restituisce
serverCallIdrispettivamente come proprietà delle risposte APIAnswerCallResultoCreateCallResult.
Quando si utilizza Calling Client SDK, è possibile recuperare serverCallId utilizzando il metodo getServerCallId sulla chiamata.
Usare questo esempio per informazioni su come ottenere serverCallId da Calling Client SDK.
Si inizierà con alcuni semplici passaggi.
1. Creare un client di automazione delle chiamate
Le API di registrazione delle chiamate fanno parte delle librerie di Automazione delle Chiamate dei Servizi di Comunicazione di Azure. È quindi necessario creare un client di automazione delle chiamate.
Per creare un client di automazione delle chiamate, usare la stringa di connessione dei Servizi di comunicazione e passarla all'oggetto CallAutomationClient.
const callAutomationClient = new CallAutomationClient.CallAutomationClient("<ACSConnectionString>");
2. Avviare la sessione di registrazione con StartRecordingOptions usando l'API 'StartAsync'
Usare il callConnectionId o il serverCallId ricevuto durante l'avvio della chiamata.
- Usare
RecordingContentper passare il tipo di contenuto di registrazione. Utilizzare ilAUDIO. - Usare
RecordingChannelper passare il tipo di canale di registrazione. UsareMIXEDoUNMIXED. - Usare
RecordingFormatper passare il formato della registrazione. Utilizzare ilWAV.
var locator: CallLocator = { id: "<callConnectionId> or <ServerCallId>", kind: "serverCallLocator" };
var options: StartRecordingOptions =
{
callLocator: locator,
recordingContent: "audio",
recordingChannel:"unmixed",
recordingFormat: "wav",
recordingStateCallbackEndpointUrl: "<CallbackUri>"
};
var response = await callAutomationClient.getCallRecording().start(options);
2.1. Avviare la registrazione - Bring Your Own Azure Blob Store
Avviare la registrazione utilizzando l'istanza di Archiviazione BLOB di Azure designata per archiviare il file registrato una volta completata la registrazione.
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. Avviare la sessione di registrazione con la modalità pausa abilitata usando l'API 'StartAsync'
Nota
Le registrazioni dovranno essere riprese per generare il file di registrazione.
var locator: CallLocator = { id: "<callConnectionId> or <ServerCallId>", kind: "serverCallLocator" };
var options: StartRecordingOptions =
{
callLocator: locator,
recordingContent: "audio",
recordingChannel:"unmixed",
recordingFormat: "wav",
pauseOnStart: true
recordingStateCallbackEndpointUrl: "<CallbackUri>",
audioChannelParticipantOrdering:[{communicationUserId: "<ACS_USER_MRI>"}]
};
var response = await callAutomationClient.getCallRecording().start(options);
2.3. Solo per Unmixed - Specificare un utente nel canale 0
Per produrre file di registrazione audio non mescolati, è possibile usare la AudioChannelParticipantOrdering funzionalità per specificare l'utente da registrare sul canale 0. Il resto dei partecipanti viene assegnato a un canale mentre parlano. Se si utilizza RecordingChannel.Unmixed ma non si utilizza AudioChannelParticipantOrdering, la registrazione delle chiamate assegna il canale 0 al primo partecipante che parla.
var locator: CallLocator = { id: "<callConnectionId> or <ServerCallId>", kind: "serverCallLocator" };
var options: StartRecordingOptions =
{
callLocator: locator,
recordingContent: "audio",
recordingChannel:"unmixed",
recordingFormat: "wav",
recordingStateCallbackEndpointUrl: "<CallbackUri>",
audioChannelParticipantOrdering:[{communicationUserId: "<ACS_USER_MRI>"}]
};
var response = await callAutomationClient.getCallRecording().start(options);
2.4. Solo per Unmixed - Specificare l'affinità del canale
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);
La risposta dell'API StartAsync contiene il recordingId della sessione di registrazione.
3. Arrestare la sessione di registrazione usando l'API 'stop'
Usare l'oggetto recordingId ricevuto in risposta a start.
var stopRecording = await callAutomationClient.getCallRecording().stop(recordingId);
4. Sospendere la sessione di registrazione usando l'API 'pause'
Usare l'oggetto recordingId ricevuto in risposta a start.
var pauseRecording = await callAutomationClient.getCallRecording().pause(recordingId);
5. Riprendere la sessione di registrazione con l'API 'ResumeAsync'
Usare l'oggetto recordingId ricevuto in risposta a start.
var resumeRecording = await callAutomationClient.getCallRecording().resume(recordingId);
6. Scaricare il file di registrazione usando l'API 'DownloadToAsync'
Usare un webhook Griglia di eventi di Azure o un'altra azione attivata da usare per comunicare ai servizi quando il supporto registrato è pronto per il download.
Una notifica Microsoft.Communication.RecordingFileStatusUpdated di Griglia di eventi viene pubblicata quando una registrazione è pronta per il recupero, in genere alcuni minuti dopo il completamento del processo di registrazione( ad esempio la riunione è terminata o la registrazione è stata arrestata). Le notifiche degli eventi di registrazione includono contentLocation e metadataLocation, che vengono usate per recuperare sia i supporti registrati che un file di metadati di registrazione.
Il codice seguente è un esempio dello schema di eventi.
{
"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
}
Usare l'API downloadToPath per scaricare i supporti registrati.
var response = await callAutomationClient.getCallRecording().downloadToPath(contentLocation, fileName);
L'oggetto downloadLocation per la registrazione può essere recuperato dall'attributo contentLocation dell'oggetto recordingChunk. Usare il DownloadToAsync metodo per scaricare il contenuto in un nome file specificato.
7. Eliminare il contenuto di registrazione con l'API 'DeleteAsync'
Usare l'API delete per eliminare il contenuto di registrazione (ad esempio, supporti registrati, metadati)
var response = await callAutomationClient.getCallRecording().delete(deleteLocation);
Pulire le risorse
Se si vuole pulire e rimuovere una sottoscrizione a Servizi di comunicazione, è possibile eliminare la risorsa o il gruppo di risorse. L'eliminazione del gruppo di risorse comporta anche l'eliminazione di tutte le altre risorse associate. Altre informazioni sulla pulizia delle risorse.
Passaggi successivi
Per altre informazioni, vedere gli articoli seguenti:
- Scaricare le app di esempio di registrazione di chiamate Java, Python e JavaScript .
- Altre informazioni sulla registrazione delle chiamate.
- Altre informazioni su Automazione chiamate.