Guida introduttiva alla registrazione delle chiamate

Questa guida introduttiva illustra come iniziare a usare Registrazione chiamate per chiamate vocali e videochiamate. Per iniziare a usare le API di registrazione delle chiamate, è necessario disporre di una chiamata sul posto. Assicurarsi di avere familiarità con l'SDK client chiamante e/o Call Automation per creare l'esperienza di chiamata dell'utente finale.

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 il stringa di connessione della risorsa.
  • Sottoscrivere eventi tramite Griglia di eventi di Azure.
  • Scaricare .NET SDK

Prima di iniziare

Le API di registrazione delle chiamate usano esclusivamente l'oggetto per avviare la serverCallIdregistrazione. Esistono due metodi che è possibile usare per recuperare l'oggetto serverCallId a seconda dello scenario:

Scenari di automazione delle chiamate

  • Quando si usa l'automazione delle chiamate, sono disponibili due opzioni per ottenere :serverCallId
    1. Dopo la creazione di una chiamata, viene restituito un oggetto serverCallId come proprietà dell'evento CallConnected dopo che è stata stabilita una chiamata. Informazioni su come ottenere un evento Call Connessione ed da Call Automation SDK.
    2. Dopo aver risposto alla chiamata o viene creata una chiamata, l'oggetto serverCallId viene restituito rispettivamente come proprietà delle AnswerCallResult risposte api o CreateCallResult .

Scenari dell'SDK per chiamate

  • Quando si usa l'SDKserverCallId client chiamante, è possibile recuperare usando il getServerCallId metodo nella chiamata. Usare questo esempio per informazioni su come ottenere serverCallId da Calling Client SDK.

Iniziamo 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 Servizi di comunicazione di Azure. È quindi necessario creare un client di automazione delle chiamate. Per creare un client di automazione delle chiamate, usare il stringa di connessione di Servizi di comunicazione e passarlo all'oggetto CallAutomationClient .

CallAutomationClient callAutomationClient = new CallAutomationClient("<ACSConnectionString>");

2. Avviare la sessione di registrazione con StartRecordingOptions usando l'API 'StartAsync'

Usare l'oggetto ricevuto durante l'avvio serverCallId della chiamata.

  • RecordingContent viene usato per passare il tipo di contenuto di registrazione. Usare l'audio
  • RecordingChannel viene usato per passare il tipo di canale di registrazione. Usa misto o non mescolato.
  • RecordingFormat viene utilizzato per passare il formato della registrazione. Usa 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. Avviare la registrazione - Bring Your Own Azure Blob Store

Avvia registrazione con il tuo Archiviazione BLOB di Azure definito per archiviare il file di registrazione al termine della registrazione.

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. 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("<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 usa ma non si usa RecordingChannel.Unmixed AudioChannelParticipantOrdering, La registrazione chiamate assegna il canale 0 al primo partecipante che parla.

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. 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("<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 l'oggetto recordingId della sessione di registrazione.

3. Arrestare la sessione di registrazione 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'

Usare l'oggetto recordingId ricevuto in risposta a StartAsync.

var pauseRecording = await callAutomationClient.GetCallRecording ().PauseAsync(recordingId);

5. Riprendere la sessione di registrazione 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 web hook Griglia di eventi di Azure o un'altra azione attivata per notificare 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, 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.

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);

L'oggetto downloadLocation per la registrazione può essere recuperato dall'attributo contentLocation dell'oggetto recordingChunk. DownloadToAsync il metodo scarica il contenuto nel nome file specificato.

7. Eliminare il contenuto di registrazione con l'API 'DeleteAsync'

Usare l'API DeleteAsync per eliminare il contenuto di registrazione (ad esempio, supporti registrati, 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 il stringa di connessione della risorsa.
  • Sottoscrivere eventi tramite Griglia di eventi di Azure.
  • Scaricare Java SDK

Prima di iniziare

Le API di registrazione delle chiamate usano esclusivamente l'oggetto per avviare la serverCallIdregistrazione. Esistono due metodi che è possibile usare per recuperare l'oggetto serverCallId a seconda dello scenario:

Scenari di automazione delle chiamate

  • Quando si usa l'automazione delle chiamate, sono disponibili due opzioni per ottenere :serverCallId
    1. Dopo la creazione di una chiamata, viene restituito un oggetto serverCallId come proprietà dell'evento CallConnected dopo che è stata stabilita una chiamata. Informazioni su come ottenere un evento Call Connessione ed da Call Automation SDK.
    2. Dopo aver risposto alla chiamata o viene creata una chiamata, l'oggetto serverCallId viene restituito rispettivamente come proprietà delle AnswerCallResult risposte api o CreateCallResult .

Scenari dell'SDK per chiamate

  • Quando si usa l'SDKserverCallId client chiamante, è possibile recuperare usando il getServerCallId metodo nella chiamata. Usare questo esempio per informazioni su come ottenere serverCallId da Calling Client SDK.

Iniziamo 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 Servizi di comunicazione di Azure. È quindi necessario creare un client di automazione delle chiamate. Per creare un client di automazione delle chiamate, si userà il stringa di connessione di Servizi di comunicazione e lo si passerà all'oggetto CallAutomationClient .

CallAutomationClient callAutomationClient = new CallAutomationClientBuilder()
            .connectionString("<acsConnectionString>")
            .buildClient();

2. Avviare la sessione di registrazione con StartRecordingOptions usando l'API 'startWithResponse'

Usare l'oggetto ricevuto durante l'avvio serverCallId della chiamata.

  • RecordingContent viene usato per passare il tipo di contenuto di registrazione. Usare AUDIO
  • RecordingChannel viene usato per passare il tipo di canale di registrazione. Usare MIXED o UNMIXED.
  • RecordingFormat viene utilizzato per passare il formato della registrazione. Usare 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. Avviare la registrazione - Bring Your Own Azure Blob Store

Avviare la sessione di registrazione con il proprio Archiviazione BLOB di Azure per archiviare il file di registrazione al termine della 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 usando l'API 'StartAsync'

Nota

Le registrazioni dovranno essere riprese per generare il file di registrazione.

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. 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 verrà assegnato a un canale mentre parlano. Se si usa ma non si usa RecordingChannel.Unmixed AudioChannelParticipantOrdering, Registrazione chiamata assegnerà channel 0 al primo partecipante che parla.

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. 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 l'oggetto recordingId della sessione di registrazione.

3. Arrestare la sessione di registrazione 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 usando 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 sessione di registrazione 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 web hook Griglia di eventi di Azure o un'altra azione attivata per notificare 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, 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.

Di seguito è riportato 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
}

Utilizzare il downloadToWithResponse metodo della CallRecording classe per scaricare i supporti registrati. Di seguito sono riportati i parametri supportati per downloadToWithResponse il metodo :

  • contentLocation: Servizi di comunicazione di Azure URL in cui si trova il contenuto.
  • destinationPath : percorso del file.
  • parallelDownloadOptions: oggetto Facoltativo ParallelDownloadOptions per 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 rispettivamente dai contentLocation campi e documentId per ogni recordingChunkoggetto .

7. Eliminare il contenuto della registrazione usando l'API 'deleteWithResponse'.

Utilizzare il deleteWithResponse metodo della CallRecording classe per eliminare i supporti registrati. Di seguito sono riportati i parametri supportati per deleteWithResponse il metodo :

  • deleteLocation: Servizi di comunicazione di Azure URL 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 deleteLocation campo dell'evento griglia di 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 il 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 usano esclusivamente l'oggetto per avviare la serverCallIdregistrazione. Esistono due metodi che è possibile usare per recuperare l'oggetto serverCallId a seconda dello scenario:

Scenari di automazione delle chiamate

  • Quando si usa l'automazione delle chiamate, sono disponibili due opzioni per ottenere :serverCallId
    1. Dopo la creazione di una chiamata, viene restituito un oggetto serverCallId come proprietà dell'evento CallConnected dopo che è stata stabilita una chiamata. Informazioni su come ottenere un evento Call Connessione ed da Call Automation SDK.
    2. Dopo aver risposto alla chiamata o viene creata una chiamata, l'oggetto serverCallId viene restituito rispettivamente come proprietà delle AnswerCallResult risposte api o CreateCallResult .

Scenari dell'SDK per chiamate

  • Quando si usa l'SDK serverCallIdclient chiamante, è possibile recuperare usando la server_call_id variabile nella chiamata. Usare questo esempio per informazioni su come ottenere serverCallId da Calling Client SDK.

Iniziamo 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 Servizi di comunicazione di Azure. È quindi necessario creare un client di automazione delle chiamate. Per creare un client di automazione delle chiamate, si userà il stringa di connessione di Servizi di comunicazione e lo si passerà all'oggetto CallAutomationClient .

call_automation_client = CallAutomationClient.from_connection_string("<ACSConnectionString>")

2. Avviare la registrazione della sessione start_recording API

Usare l'oggetto ricevuto durante l'avvio serverCallId della chiamata.

  • RecordingContent viene usato per passare il tipo di contenuto di registrazione. Usare l'audio
  • RecordingChannel viene usato per passare il tipo di canale di registrazione. Usa misto o non mescolato.
  • RecordingFormat viene utilizzato per passare il formato della registrazione. Usa 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. Avviare la registrazione - Bring Your Own Azure Blob Store

Avvia registrazione con il tuo Archiviazione BLOB di Azure definito per archiviare il file di registrazione al termine della registrazione.

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. 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(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 verrà assegnato a un canale mentre parlano. Se si usa ma non si usa RecordingChannel.Unmixed AudioChannelParticipantOrdering, Registrazione chiamata assegnerà channel 0 al primo partecipante che parla.

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. 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(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 l'oggetto 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 web hook Griglia di eventi di Azure o un'altra azione attivata per notificare 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, 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.

Di seguito è riportato 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. download_recording il metodo scarica 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, supporti registrati, 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 il 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 usano esclusivamente l'oggetto per avviare la serverCallIdregistrazione. Esistono due metodi che è possibile usare per recuperare l'oggetto serverCallId a seconda dello scenario:

Scenari di automazione delle chiamate

  • Quando si usa l'automazione delle chiamate, sono disponibili due opzioni per ottenere :serverCallId
    1. Dopo la creazione di una chiamata, viene restituito un oggetto serverCallId come proprietà dell'evento CallConnected dopo che è stata stabilita una chiamata. Informazioni su come ottenere un evento Call Connessione ed da Call Automation SDK.
    2. Dopo aver risposto alla chiamata o viene creata una chiamata, l'oggetto serverCallId viene restituito rispettivamente come proprietà delle AnswerCallResult risposte api o CreateCallResult .

Scenari dell'SDK per chiamate

  • Quando si usa l'SDKserverCallId client chiamante, è possibile recuperare usando il getServerCallId metodo nella chiamata. Usare questo esempio per informazioni su come ottenere serverCallId da Calling Client SDK.

Iniziamo 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 Servizi di comunicazione di Azure. È quindi necessario creare un client di automazione delle chiamate. Per creare un client di automazione delle chiamate, si userà il stringa di connessione di Servizi di comunicazione e lo si passerà all'oggetto CallAutomationClient .

const callAutomationClient = new CallAutomationClient.CallAutomationClient("<ACSConnectionString>");

2. Avviare la sessione di registrazione con StartRecordingOptions usando l'API 'StartAsync'

Usare l'oggetto ricevuto durante l'avvio serverCallId della chiamata.

  • RecordingContent viene usato per passare il tipo di contenuto di registrazione. Usare l'audio
  • RecordingChannel viene usato per passare il tipo di canale di registrazione. Usa misto o non mescolato.
  • RecordingFormat viene utilizzato per passare il formato della registrazione. Usa 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. Avviare la registrazione - Bring Your Own Azure Blob Store

Avvia registrazione con il tuo Archiviazione BLOB di Azure definito per archiviare il file di registrazione al termine della 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: "<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 verrà assegnato a un canale mentre parlano. Se si usa ma non si usa RecordingChannel.Unmixed AudioChannelParticipantOrdering, Registrazione chiamata assegnerà channel 0 al primo partecipante che parla.

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. 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 l'oggetto 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 web hook Griglia di eventi di Azure o un'altra azione attivata per notificare 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, 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.

Di seguito è riportato 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. DownloadToAsync il metodo scarica il contenuto nel 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: