Démarrage rapide de l’enregistrement d’appel
Cet article décrit l’enregistrement d’appel pour les appels vocaux et vidéo. Pour commencer à utiliser les API d’enregistrement des appels, vous devez avoir un appel en place. Pour générer l’expérience d’appel de l’utilisateur final, assurez-vous de bien connaître le Kit de développement logiciel (SDK) du client appelant et l’Automatisation des appels.
Exemple de code
Vous pouvez télécharger l’exemple d’application à partir de GitHub.
Prérequis
- Vous devez avoir un compte Azure avec un abonnement actif.
- Déployez une ressource Azure Communication Services. Enregistrez la chaîne de connexion de votre ressource.
- Vous abonner aux événements via Azure Event Grid.
- Télécharger le SDK .NET
Avant de commencer
Les API d’enregistrement d’appel utilisent exclusivement le serverCallId
pour lancer l’enregistrement. Il existe quelques méthodes que vous pouvez utiliser pour extraire le serverCallId
en fonction de votre scénario :
Scénarios relatifs à l’automatisation des appels
Lorsque vous utilisez l’automatisation des appels, vous avez deux options pour obtenir le serverCallId
:
Lorsque vous établissez un appel, il retourne un
serverCallId
comme propriété de l’événementCallConnected
après l’établissement d’un appel. Découvrez comment Obtenir l’événement CallConnected à partir du SDK Automatisation des appels.Lorsque vous répondez à l’appel ou qu’un appel est créé, il retourne le
serverCallId
comme propriété des réponses d’APIAnswerCallResult
ouCreateCallResult
, respectivement.
Scénarios du kit SDK appelant
Lors de l’utilisation du kit SDK de client appelant, vous pouvez récupérer le serverCallId
à l’aide de la méthode getServerCallId
sur l’appel.
Utilisez cet exemple pour découvrir comment obtenir le serverCallId à partir du SDK de client appelant.
Commençons par quelques étapes faciles.
1. Créer un client d’automatisation des appels
Les API d’enregistrement des appels font partie des bibliothèques d’automatisation des appels Azure Communication Services. Vous devez créer un client d’automatisation des appels.
Pour créer un client d’automatisation des appels, utilisez votre chaîne de connexion Communication Services et passez-la à l’objet CallAutomationClient
.
CallAutomationClient callAutomationClient = new CallAutomationClient("<ACSConnectionString>");
2. Démarrer l’enregistrement d’une session avec StartRecordingOptions en utilisant l’API « StartAsync »
Utilisez le serverCallId
reçu lors du lancement de l’appel.
- Utilisez
RecordingContent
pour passer le type de contenu d’enregistrement. UtiliserAUDIO
. - Utilisez
RecordingChannel
pour passer le type de chaîne d’enregistrement. UtilisezMIXED
ouUNMIXED
. - Utilisez
RecordingFormat
pour passer le format de l’enregistrement. UtiliserWAV
.
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. Démarrer l’enregistrement – Apporter votre propre Stockage Blob Azure
Démarrez l’enregistrement avec votre Stockage Blob Azure désigné pour stocker le fichier enregistré une fois l’enregistrement terminé.
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<ServerCallId>"))
{
RecordingContent = RecordingContent.Audio,
RecordingChannel = RecordingChannel.Unmixed,
RecordingFormat = RecordingFormat.Wav,
RecordingStateCallbackUri = new Uri("<CallbackUri>"),
RecordingStorage = RecordingStorage.CreateAzureBlobContainerRecordingStorage(new Uri("<YOUR_STORAGE_CONTAINER_URL>"))
ExternalStorage = new BlobStorage(new Uri("<Insert Container / Blob Uri>"))
};
Response<RecordingStateResult> response = await callAutomationClient.GetCallRecording()
.StartAsync(recordingOptions);
2.2. Démarrer l’enregistrement d’une session avec le mode Pause activé en utilisant l’API « StartAsync »
Remarque
Vous devez reprendre les enregistrements pour le fichier d’enregistrement à générer.
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. Uniquement pour Séparé - Spécifiez un utilisateur sur un canal 0
Pour produire des fichiers d’enregistrement audio non mixés, vous pouvez utiliser la fonctionnalité AudioChannelParticipantOrdering
pour spécifier l’utilisateur que vous souhaitez enregistrer sur le canal 0. Les autres participants sont affectés à un canal à mesure qu’ils parlent. Si vous utilisez RecordingChannel.Unmixed
, mais pas AudioChannelParticipantOrdering
, l’enregistrement des appels attribue le canal 0 au premier participant qui parle.
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. Uniquement pour Séparé : spécifier une affinité 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);
La réponse de l’API StartAsync
contient le recordingId
de la session d’enregistrement.
3. Arrêter la session d’enregistrement avec l’API StopAsync
Utilisez le recordingId
reçu en réponse à StartAsync
.
var stopRecording = await callAutomationClient.GetCallRecording().StopAsync(recordingId);
4. Interrompre la session d’enregistrement avec l’API PauseAsync
Utilisez le recordingId
reçu en réponse à StartAsync
.
var pauseRecording = await callAutomationClient.GetCallRecording ().PauseAsync(recordingId);
5. Reprendre la session d’enregistrement avec l’API ResumeAsync
Utilisez le recordingId
reçu en réponse à StartAsync
.
var resumeRecording = await callAutomationClient.GetCallRecording().ResumeAsync(recordingId);
6. Télécharger le fichier d’enregistrement avec l’API DownloadToAsync
Utilisez un webhook Azure Event Grid ou une autre action déclenchée pour informer vos services lorsque le média enregistré est prêt à être téléchargé.
Une notification Event Grid Microsoft.Communication.RecordingFileStatusUpdated
est publiée lorsqu’un enregistrement est prêt pour la récupération, en général quelques minutes après la fin du traitement de l’enregistrement (telle que la fin d’une réunion ou l’arrêt d’un enregistrement). Les notifications d’événements d’enregistrement incluent des éléments contentLocation
et metadataLocation
, que vous pouvez utiliser pour récupérer les médias enregistrés et un fichier de métadonnées d’enregistrement.
Exemple de schéma d’événement :
{
"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
}
Utilisez l’API DownloadToAsync
pour télécharger les médias enregistrés.
var recordingDownloadUri = new Uri(contentLocation);
var response = await callAutomationClient.GetCallRecording().DownloadToAsync(recordingDownloadUri, fileName);
Récupérez le downloadLocation
de l’enregistrement à partir de l’attribut contentLocation
du recordingChunk
. Utilisez la méthode DownloadToAsync
pour télécharger le contenu vers un nom de fichier indiqué.
7. Supprimer le contenu d’enregistrement en utilisant l’API DeleteAsync
Utilisez l’API DeleteAsync
pour supprimer le contenu d’enregistrement (dont les médias enregistrés et les métadonnées).
var recordingDeleteUri = new Uri(deleteLocation);
var response = await callAutomationClient.GetCallRecording().DeleteAsync(recordingDeleteUri);
Exemple de code
Vous pouvez télécharger l’exemple d’application à partir de GitHub.
Prérequis
- Vous devez avoir un compte Azure avec un abonnement actif.
- Déployez une ressource Azure Communication Services. Enregistrez la chaîne de connexion de votre ressource.
- Vous abonner aux événements via Azure Event Grid.
- Téléchargez le SDK Java
Avant de commencer
Les API d’enregistrement d’appel utilisent exclusivement le serverCallId
pour lancer l’enregistrement. Il existe quelques méthodes que vous pouvez utiliser pour extraire le serverCallId
en fonction de votre scénario :
Scénarios relatifs à l’automatisation des appels
Lorsque vous utilisez l’automatisation des appels, vous avez deux options pour obtenir le serverCallId
:
Une fois un appel créé, un
serverCallId
est renvoyé comme propriété de l’événementCallConnected
une fois l’appel établi. Découvrez comment Obtenir l’événement CallConnected à partir du SDK Automatisation des appels.Une fois que vous avez répondu à l’appel ou qu’un appel est créé, le
serverCallId
est retourné en tant que propriété des réponses d’APIAnswerCallResult
ouCreateCallResult
, respectivement.
Scénarios du kit SDK appelant
Lors de l’utilisation du kit SDK de client appelant, vous pouvez récupérer le serverCallId
à l’aide de la méthode getServerCallId
sur l’appel.
Utilisez cet exemple pour découvrir comment obtenir le serverCallId à partir du SDK de client appelant.
Commençons par quelques étapes faciles.
1. Créer un client d’automatisation des appels
Les API d’enregistrement des appels font partie des bibliothèques d’automatisation des appels Azure Communication Services. Vous devez créer un client d’automatisation des appels.
Pour créer un client d’automatisation des appels, utilisez votre chaîne de connexion Communication Services et passez-la à l’objet CallAutomationClient
.
CallAutomationClient callAutomationClient = new CallAutomationClientBuilder()
.connectionString("<acsConnectionString>")
.buildClient();
2. Démarrer la session d’enregistrement avec StartRecordingOptions en utilisant l’API startWithResponse
Utilisez le serverCallId
reçu lors du lancement de l’appel.
- Utilisez
RecordingContent
pour passer le type de contenu d’enregistrement. UtiliserAUDIO
. - Utilisez
RecordingChannel
pour passer le type de chaîne d’enregistrement. UtilisezMIXED
ouUNMIXED
. - Utilisez
RecordingFormat
pour passer le format de l’enregistrement. UtiliserWAV
.
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. Démarrer l’enregistrement – Apporter votre propre Stockage Blob Azure
Démarrez l’enregistrement avec votre Stockage Blob Azure désigné pour stocker le fichier enregistré une fois l’enregistrement terminé.
StartRecordingOptions recordingOptions = new StartRecordingOptions(callLocator)
.setRecordingChannel(RecordingChannel.MIXED)
.setRecordingContent(RecordingContent.AUDIO_VIDEO)
.setRecordingFormat(RecordingFormat.MP4)
.setRecordingStorage(new AzureBlobContainerRecordingStorage("<YOUR_STORAGE_CONTAINER_URL>"))
.setExternalStorage(new BlobStorage("<Insert Container / Blob Uri>"));
// //start recording
RecordingStateResult result = callRecording.start(recordingOptions);
2.2. Démarrer la session d’enregistrement avec le mode Pause activé en utilisant l’API StartAsync
Remarque
Vous devez reprendre les enregistrements pour que le fichier d’enregistrement soit généré.
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. Uniquement pour Séparé - Spécifiez un utilisateur sur un canal 0
Pour produire des fichiers d’enregistrement audio non mixés, vous pouvez utiliser la fonctionnalité AudioChannelParticipantOrdering
pour spécifier l’utilisateur que vous souhaitez enregistrer sur le canal 0. Les autres participants sont affectés à un canal à mesure qu’ils parlent. Si vous utilisez RecordingChannel.Unmixed
, mais pas AudioChannelParticipantOrdering
, l’enregistrement des appels attribue le canal 0 au premier participant qui parle.
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. Uniquement pour Séparé : spécifier une affinité 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);
La réponse de l’API startWithResponse
contient le recordingId
de la session d’enregistrement.
3. Arrêter la session d’enregistrement avec l’API stopWithResponse
Utilisez le recordingId
reçu en réponse à startWithResponse
.
Response<Void> response = callAutomationClient.getCallRecording()
.stopWithResponse(response.getValue().getRecordingId(), null);
4. Interrompre la session d’enregistrement avec l’API pauseWithResponse
Utilisez le recordingId
reçu en réponse à startWithResponse
.
Response<Void> response = callAutomationClient.getCallRecording()
.pauseWithResponse(response.getValue().getRecordingId(), null);
5. Reprendre la session d’enregistrement avec l’API resumeWithResponse
Utilisez le recordingId
reçu en réponse à startWithResponse
.
Response<Void> response = callAutomationClient.getCallRecording()
.resumeWithResponse(response.getValue().getRecordingId(), null);
6. Télécharger le fichier d’enregistrement avec l’API downloadToWithResponse
Utilisez un Webhook Azure Event Grid ou une autre action déclenchée pour informer vos services lorsque le média enregistré est prêt à être téléchargé.
Une notification Event Grid Microsoft.Communication.RecordingFileStatusUpdated
est publiée lorsqu’un enregistrement est prêt pour la récupération. Cela se passe en général quelques minutes après la fin du processus d’enregistrement (telle que la fin d’une réunion ou l’arrêt d’un enregistrement). Les notifications d’événements d’enregistrement incluent des éléments contentLocation
et metadataLocation
, que vous pouvez utiliser pour récupérer les médias enregistrés et un fichier de métadonnées d’enregistrement.
Le code suivant est un exemple de schéma d’événement.
{
"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
}
Utilisez la méthode downloadToWithResponse
de la classe CallRecording
pour télécharger le média enregistré. Les paramètres suivants sont pris en charge pour la méthode downloadToWithResponse
:
-
contentLocation
: URL d’Azure Communication Services où se trouve le contenu. -
destinationPath
: emplacement du fichier. -
parallelDownloadOptions
: objetParallelDownloadOptions
facultatif pour modifier le fonctionnement du téléchargement parallèle. -
overwrite
: valeur True pour remplacer le fichier s’il existe. -
context
: contexte représentant le contexte de la requête.
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);
L’emplacement du contenu et les ID de document pour les fichiers d’enregistrement peuvent être récupérés respectivement dans les champs contentLocation
et documentId
pour chaque recordingChunk
.
7. Supprimer le contenu d’enregistrement en utilisant l’API deleteWithResponse
Utilisez la méthode deleteWithResponse
de la classe CallRecording
pour supprimer le média enregistré. Paramètres pris en charge pour la méthode deleteWithResponse
:
-
deleteLocation
: URL d’Azure Communication Services où se trouve le contenu à supprimer. -
context
: contexte représentant le contexte de la requête.
Response<Void> deleteResponse = callAutomationClient.getCallRecording().deleteWithResponse(deleteLocation, context);
L’emplacement de suppression de l’enregistrement peut être extrait du champ deleteLocation
de l’événement Event Grid.
Exemple de code
Vous pouvez télécharger l’exemple d’application à partir de GitHub.
Prérequis
- Vous devez avoir un compte Azure avec un abonnement actif.
- Déployez une ressource Azure Communication Services. Enregistrez la chaîne de connexion de votre ressource.
- Vous abonner aux événements via Azure Event Grid.
- Python 3.7+.
Avant de commencer
Les API d’enregistrement d’appel utilisent exclusivement le serverCallId
pour lancer l’enregistrement. Il existe quelques méthodes que vous pouvez utiliser pour extraire le serverCallId
en fonction de votre scénario :
Scénarios relatifs à l’automatisation des appels
- Lorsque vous utilisez l’automatisation des appels, vous avez deux options pour obtenir le
serverCallId
:- Une fois un appel créé, un
serverCallId
est renvoyé comme propriété de l’événementCallConnected
une fois l’appel établi. Découvrez comment Obtenir l’événement CallConnected à partir du SDK Automatisation des appels. - Une fois que vous répondez à l’appel ou qu’un appel est créé, il retourne le
serverCallId
comme propriété des réponses d’APIAnswerCallResult
ouCreateCallResult
, respectivement.
- Une fois un appel créé, un
Scénarios du kit SDK appelant
- Lors de l’utilisation du Kit de développement logiciel (SDK) de client appelant, vous pouvez récupérer le
serverCallId
en utilisant la variableserver_call_id
lors de l’appel. Utilisez cet exemple pour découvrir comment obtenir le serverCallId à partir du SDK de client appelant.
Commençons par quelques étapes simples !
1. Créer un client d’automatisation des appels
Les API d’enregistrement des appels font partie des bibliothèques d’automatisation des appels Azure Communication Services. Par conséquent, il est nécessaire de créer un client d’automatisation d’appels.
Pour créer un client d’automatisation des appels, utilisez votre chaîne de connexion Communication Services et passez-la à l’objet CallAutomationClient
.
call_automation_client = CallAutomationClient.from_connection_string("<ACSConnectionString>")
2. Démarrer l’API start_recording d’enregistrement de session
Utilisez le serverCallId
reçu lors du lancement de l’appel.
- Utilisez
RecordingContent
pour passer le type de contenu d’enregistrement. UtiliserAUDIO
. - Utilisez
RecordingChannel
pour passer le type de chaîne d’enregistrement. UtilisezMIXED
ouUNMIXED
. - Utilisez
RecordingFormat
pour passer le format de l’enregistrement. UtiliserWAV
.
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. Démarrer l’enregistrement – Apporter votre propre Stockage Blob Azure
Démarrez l’enregistrement avec votre propre Stockage Blob Azure défini pour stocker le fichier d’enregistrement une fois ce dernier terminé.
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. Démarrer l’enregistrement d’une session avec le mode Pause activé en utilisant l’API « StartAsync »
Remarque
Vous devez reprendre les enregistrements pour le fichier d’enregistrement à générer.
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. Uniquement pour Séparé - Spécifiez un utilisateur sur un canal 0
Pour produire des fichiers d’enregistrement audio non mixés, vous pouvez utiliser la fonctionnalité AudioChannelParticipantOrdering
pour spécifier l’utilisateur que vous souhaitez enregistrer sur le canal 0. Les autres participants sont affectés à un canal à mesure qu’ils parlent. Si vous utilisez RecordingChannel.Unmixed
, mais pas AudioChannelParticipantOrdering
, l’enregistrement des appels attribue le canal 0 au premier participant qui parle.
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. Uniquement pour Séparé : spécifier une affinité 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])
La réponse de l’API StartAsync
contient le recordingId
de la session d’enregistrement.
3. Arrêter l’enregistrement de session à l’aide de l’API « stop_recording »
Utilisez le recording_id
reçu en réponse à start_recording
.
stop_recording = call_automation_client.stop_recording(recording_id = recording_id)
4. Suspendre la session d’enregistrement à l’aide de l’API « pause_recording »
Utilisez le recording_id
reçu en réponse à start_recording
.
pause_recording = call_automation_client.pause_recording(recording_id = recording_id)
5. Reprendre la session d’enregistrement à l’aide de l’API « resume_recording »
Utilisez le recording_id
reçu en réponse à start_recording
.
resume_recording = call_automation_client.resume_recording(recording_id = recording_id)
6. Télécharger le fichier d’enregistrement avec l’API « download_recording »
Utilisez un Webhook Azure Event Grid ou une autre action déclenchée pour informer vos services lorsque le média enregistré est prêt à être téléchargé.
Une notification Event Grid Microsoft.Communication.RecordingFileStatusUpdated
est publiée lorsqu’un enregistrement est prêt pour la récupération. Cela se passe en général quelques minutes après la fin du processus d’enregistrement (telle que la fin d’une réunion ou l’arrêt d’un enregistrement). Les notifications d’événements d’enregistrement incluent des éléments contentLocation
et metadataLocation
utilisés pour récupérer les informations multimédias enregistrées et un fichier de métadonnées d’enregistrement.
Le code suivant est un exemple de schéma d’événement.
{
"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
}
Utilisez l’API download_recording
pour télécharger les médias enregistrés.
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’emplacement de téléchargement (downloadLocation
) de l’enregistrement peut être récupéré à partir de l’attribut contentLocation
de recordingChunk
. Utilisez la méthode download_recording
pour télécharger le contenu en octets.
7. Supprimer le contenu d’enregistrement avec l’API « delete_recording »
Utilisez l’API delete_recording
pour supprimer le contenu d’enregistrement, dont les médias enregistrés et les métadonnées.
response = call_automation_client.delete_recording(delete_location);
Exemple de code
Vous pouvez télécharger l’exemple d’application à partir de GitHub.
Prérequis
- Vous devez avoir un compte Azure avec un abonnement actif.
- Déployez une ressource Azure Communication Services. Enregistrez la chaîne de connexion de votre ressource.
- Vous abonner aux événements via Azure Event Grid.
- Versions Node.js Active LTS et Maintenance LTS (8.11.1 et 10.14.1 recommandées)
Avant de commencer
Les API d’enregistrement d’appel utilisent exclusivement le serverCallId
pour lancer l’enregistrement. Il existe quelques méthodes que vous pouvez utiliser pour extraire le serverCallId
en fonction de votre scénario :
Scénarios relatifs à l’automatisation des appels
- Lorsque vous utilisez l’automatisation des appels, vous avez deux options pour obtenir le
serverCallId
:- Une fois un appel créé, un
serverCallId
est renvoyé comme propriété de l’événementCallConnected
une fois l’appel établi. Découvrez comment Obtenir un événement CallConnected à partir du Kit de développement logiciel (SDK) d’automatisation des appels. - Une fois que vous répondez à l’appel ou qu’un appel est créé, il retourne le
serverCallId
comme propriété des réponses d’APIAnswerCallResult
ouCreateCallResult
, respectivement.
- Une fois un appel créé, un
Scénarios du kit SDK appelant
Lors de l’utilisation du kit SDK de client appelant, vous pouvez récupérer le serverCallId
à l’aide de la méthode getServerCallId
sur l’appel.
Utilisez cet exemple pour découvrir comment Obtenir un serverCallId à partir du Kit de développement logiciel (SDK) du client appelant.
Commençons par quelques étapes simples !
1. Créer un client d’automatisation des appels
Les API d’enregistrement des appels font partie des bibliothèques d’automatisation des appels Azure Communication Services. Par conséquent, il est nécessaire de créer un client d’automatisation d’appels.
Pour créer un client d’automatisation des appels, utilisez votre chaîne de connexion Communication Services et passez-la à l’objet CallAutomationClient
.
const callAutomationClient = new CallAutomationClient.CallAutomationClient("<ACSConnectionString>");
2. Démarrer l’enregistrement d’une session avec StartRecordingOptions en utilisant l’API « StartAsync »
Utilisez le serverCallId
reçu lors du lancement de l’appel.
- Utilisez
RecordingContent
pour passer le type de contenu d’enregistrement. UtiliserAUDIO
. - Utilisez
RecordingChannel
pour passer le type de chaîne d’enregistrement. UtilisezMIXED
ouUNMIXED
. - Utilisez
RecordingFormat
pour passer le format de l’enregistrement. UtiliserWAV
.
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. Démarrer l’enregistrement – Apporter votre propre Stockage Blob Azure
Démarrez l’enregistrement avec votre Stockage Blob Azure désigné pour stocker le fichier enregistré une fois l’enregistrement terminé.
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. Démarrer l’enregistrement d’une session avec le mode Pause activé en utilisant l’API « StartAsync »
Remarque
Vous devez reprendre les enregistrements pour le fichier d’enregistrement à générer.
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. Uniquement pour Séparé - Spécifiez un utilisateur sur un canal 0
Pour produire des fichiers d’enregistrement audio non mixés, vous pouvez utiliser la fonctionnalité AudioChannelParticipantOrdering
pour spécifier l’utilisateur que vous souhaitez enregistrer sur le canal 0. Les autres participants sont affectés à un canal à mesure qu’ils parlent. Si vous utilisez RecordingChannel.Unmixed
, mais pas AudioChannelParticipantOrdering
, l’enregistrement des appels attribue le canal 0 au premier participant qui parle.
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. Uniquement pour Séparé : spécifier une affinité 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);
La réponse de l’API StartAsync
contient le recordingId
de la session d’enregistrement.
3. Arrêter l’enregistrement d’une session en utilisant l’API « stop »
Utilisez le recordingId
reçu en réponse à start
.
var stopRecording = await callAutomationClient.getCallRecording().stop(recordingId);
4. Suspendre l’enregistrement d’une session en utilisant l’API « pause »
Utilisez le recordingId
reçu en réponse à start
.
var pauseRecording = await callAutomationClient.getCallRecording().pause(recordingId);
5. Reprendre l’enregistrement d’une session en utilisant l’API « ResumeAsync »
Utilisez le recordingId
reçu en réponse à start
.
var resumeRecording = await callAutomationClient.getCallRecording().resume(recordingId);
6. Télécharger le fichier d’enregistrement avec l’API « DownloadToAsync »
Utilisez un Webhook Azure Event Grid ou une autre action déclenchée pour informer vos services lorsque le média enregistré est prêt à être téléchargé.
Une notification Event Grid Microsoft.Communication.RecordingFileStatusUpdated
est publiée lorsqu’un enregistrement est prêt pour la récupération. Cela se passe en général quelques minutes après la fin du processus d’enregistrement (telle que la fin d’une réunion ou l’arrêt d’un enregistrement). Les notifications d’événements d’enregistrement incluent des éléments contentLocation
et metadataLocation
utilisés pour récupérer les informations multimédias enregistrées et un fichier de métadonnées d’enregistrement.
Le code suivant est un exemple de schéma d’événement.
{
"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
}
Utilisez l’API downloadToPath
pour télécharger les médias enregistrés.
var response = await callAutomationClient.getCallRecording().downloadToPath(contentLocation, fileName);
L’emplacement de téléchargement (downloadLocation
) de l’enregistrement peut être récupéré à partir de l’attribut contentLocation
de recordingChunk
. Utilisez la méthode DownloadToAsync
pour télécharger le contenu vers un nom de fichier indiqué.
7. Supprimer le contenu d’enregistrement en utilisant l’API « DeleteAsync »
Utilisez l’API delete
pour supprimer le contenu d’enregistrement (par exemple, média et métadonnées enregistrés)
var response = await callAutomationClient.getCallRecording().delete(deleteLocation);
Nettoyer les ressources
Si vous voulez nettoyer et supprimer un abonnement Communication Services, vous pouvez supprimer la ressource ou le groupe de ressources. La suppression du groupe de ressources efface également les autres ressources qui y sont associées. Apprenez-en davantage sur le nettoyage des ressources.
Étapes suivantes
Pour plus d’informations, consultez les articles suivants :
- Téléchargez nos échantillons d’applications d’enregistrement d’appels Java, Python et JavaScript.
- En savoir plus sur l’Enregistrement des appels.
- En savoir plus sur l’automatisation des appels.