Partager via


Journaux d’enregistrement des appels Azure Communication Services

Azure Communication Services offre des fonctionnalités de journalisation que vous pouvez utiliser pour superviser et déboguer votre solution Communication Services. Vous pouvez configurer ces fonctionnalités dans le portail Azure.

Le contenu de cet article fait référence aux journaux activés par le biais d’Azure Monitor (voir aussi le FAQ). Pour activer ces journaux pour Communication Services, consultez Activer la journalisation dans les paramètres de diagnostic.

Catégories de journaux de ressources

Communication Services propose les types de journaux suivants que vous pouvez activer :

  • Journaux d’utilisation : Ils fournissent des données d’utilisation associées à chaque offre de service facturée.
  • Journaux de synthèse des enregistrements d’appels: Ils fournissent des informations récapitulatives sur les enregistrements d’appels, comme par exemple :
    • La durée des appels.
    • Les contenus multimédias (par exemple, l’audio/vidéo, non mélangé, ou la transcription).
    • Le type de format utilisé pour l’enregistrement (par exemple, WAV ou MP4).
    • La raison de l’arrêt de l’enregistrement.
  • Journaux des opérations d’enregistrement entrantes : Ils fournissent des informations sur les requêtes entrantes pour les opérations d’enregistrement d’appels. Chaque entrée correspond au résultat d’un appel aux API d’enregistrement des appels, telles que StartRecording, StopRecording, PauseRecording et ResumeRecording.

Un fichier d’enregistrement est généré à la fin d’un appel ou d’une réunion. Un utilisateur ou une application (bot) peut démarrer et arrêter l’enregistrement. L’enregistrement peut également être interrompu en raison d’une défaillance du système.

Les journaux de synthèse sont publiés lorsqu’un enregistrement est prêt à être téléchargé. Les journaux sont publiés dans le temps de latence standard pour les journaux de ressources Azure Monitor. Consultez Temps d’ingestion des données du journal dans Azure Monitor.

Schéma du journal d’utilisation

Propriété Description
timestamp Horodatage (UTC) de la génération du journal.
operationName Opération associée à l’enregistrement de journal.
operationVersion Valeur api-version associée à l’opération, si l’opération operationName a été effectuée via une API. Si aucune API ne correspond à cette opération, la version représente la version de l’opération si les propriétés associées à l’opération viennent à changer.
category Catégorie de journal de l’événement. La catégorie est la précision avec laquelle vous pouvez activer ou désactiver les journaux sur une ressource. Les propriétés qui apparaissent dans le blob properties d’un événement sont les mêmes au sein d’une catégorie de journal et d’un type de ressource.
correlationID ID des événements corrélés. Vous pouvez l’utiliser pour identifier les événements corrélés entre plusieurs tables.
Properties Autres données qui sont applicables aux différents modes de Communication Services.
recordID ID unique d’un enregistrement d’utilisation.
usageType Mode d’utilisation (par exemple, Conversation, RTC ou NAT).
unitType Type d’unité sur lequel l’utilisation est basée pour un mode d’utilisation (par exemple, minutes, mégaoctets ou messages).
quantity Nombre d’unités utilisées ou consommées pour cet enregistrement.

Schéma du journal de synthèse de l’enregistrement des appels

Nom de la propriété Type de données Description
timeGenerated Date/Heure Horodatage (UTC) de la génération du journal.
operationName Chaîne Opération associée à l’enregistrement du journal.
correlationId Chaîne ID utilisé pour corréler les événements entre les tables.
recordingID Chaîne ID de l’enregistrement auquel ce journal fait référence.
category Chaîne Catégorie de journal de l’événement. Les enregistrements avec la même catégorie d’enregistrement et le même type de ressource ont des champs de propriétés identiques.
resultType Chaîne L’état de l’opération.
level Chaîne Le niveau de gravité de l’opération.
chunkCount Integer Nombre total de blocs créés pour l’enregistrement.
channelType Chaîne Type de canal de l’enregistrement, tel que mixte ou non mélangé.
recordingStartTime Date/Heure Heure à laquelle l’enregistrement a commencé.
contentType Chaîne Contenu de l’enregistrement, par exemple audio uniquement, audio/vidéo ou transcription.
formatType Chaîne Format de fichier de l’enregistrement.
recordingLength Double Durée de l’enregistrement en secondes.
audioChannelsCount Integer Nombre total de canaux audio dans l’enregistrement.
recordingEndReason Chaîne Raison de l’arrêt de l’enregistrement.

Enregistrement des appels et exemples de données

"operationName":            "Call Recording Summary",
"operationVersion":         "1.0",
"category":                 "RecordingSummary",

Un appel peut avoir un ou plusieurs enregistrements, selon le nombre de fois qu’un événement d’enregistrement est déclenché.

Par exemple, si un agent commence un appel sortant sur une ligne enregistrée et que l’appel est interrompu en raison d’un mauvais signal réseau, callID aura une valeur recordingID. Si l’agent rappelle le client, le système génère une nouvelle instance callID ainsi qu’une nouvelle valeur recordingID.

Exemple : Enregistrement d’un appel pour un enregistrement

"properties"
{  
  "TimeGenerated":"2022-08-17T23:18:26.4332392Z",
    "OperationName": "RecordingSummary",
    "Category": "CallRecordingSummary",
    "CorrelationId": "zzzzzz-cada-4164-be10-0000000000",
    "ResultType": "Succeeded",
    "Level": "Informational",
    "RecordingId": "eyJQbGF0Zm9ybUVuZHBvaW5xxxxxxxxFmNjkwxxxxxxxxxxxxSZXNvdXJjZVNwZWNpZmljSWQiOiJiZGU5YzE3Ni05M2Q3LTRkMWYtYmYwNS0yMTMwZTRiNWNlOTgifQ",
    "RecordingEndReason": "CallEnded",
    "RecordingStartTime": "2022-08-16T09:07:54.0000000Z",
    "RecordingLength": "73872.94",
    "ChunkCount": 6,
   "ContentType": "Audio - Video",
    "ChannelType": "mixed",
    "FormatType": "mp4",
    "AudioChannelsCount": 1
}

Si l’agent démarre un enregistrement, puis l’arrête et le redémarre plusieurs fois alors que l’appel est toujours en cours, callID aura de nombreuses valeurs recordingID. Le nombre de valeurs dépend du nombre de fois où les événements d’enregistrement ont été déclenchés.

Exemple : Enregistrement d’un appel vers plusieurs enregistrements


{   
 "TimeGenerated": "2022-08-17T23:55:46.6304762Z",
    "OperationName": "RecordingSummary",
    "Category": "CallRecordingSummary",
    "CorrelationId": "xxxxxxx-cf78-4156-zzzz-0000000fa29cc",
    "ResultType": "Succeeded",
    "Level": "Informational",
    "RecordingId": "eyJQbGF0Zm9ybUVuZHBxxxxxxxxxxxxjkwMC05MmEwLTRlZDYtOTcxYS1kYzZlZTkzNjU0NzciLCJSxxxxxNwZWNpZmljSWQiOiI5ZmY2ZTY2Ny04YmQyLTQ0NzAtYmRkYy00ZTVhMmUwYmNmOTYifQ",
    "RecordingEndReason": "CallEnded",
    "RecordingStartTime": "2022-08-17T23:55:43.3304762Z",
    "RecordingLength": 3.34,
    "ChunkCount": 1,
    "ContentType": "Audio - Video",
    "ChannelType": "mixed",
    "FormatType": "mp4",
    "AudioChannelsCount": 1
}
{
    "TimeGenerated": "2022-08-17T23:55:56.7664976Z",
    "OperationName": "RecordingSummary",
    "Category": "CallRecordingSummary",
    "CorrelationId": "xxxxxxx-cf78-4156-zzzz-0000000fa29cc",
    "ResultType": "Succeeded",
    "Level": "Informational",
    "RecordingId": "eyJQbGF0Zm9ybUVuxxxxxxiOiI4NDFmNjkwMC1mMjBiLTQzNmQtYTg0Mi1hODY2YzE4M2Y0YTEiLCJSZXNvdXJjZVNwZWNpZmljSWQiOiI2YzRlZDI4NC0wOGQ1LTQxNjEtOTExMy1jYWIxNTc3YjM1ODYifQ",
    "RecordingEndReason": "CallEnded",
    "RecordingStartTime": "2022-08-17T23:55:54.0664976Z",
    "RecordingLength": 2.7,
    "ChunkCount": 1,
    "ContentType": "Audio - Video",
    "ChannelType": "mixed",
    "FormatType": "mp4",
    "AudioChannelsCount": 1
}

Journaux ACSCallRecordingIncomingOperations

Voici les propriétés :

Propriété Description
timeGenerated Horodatage (UTC) de la génération du journal.
callConnectionId L’ID de la connexion ou du segment d’appel, le cas échéant.
callerIpAddress L’adresse IP de l’appelant, si l’opération correspond à un appel API provenant d’une entité dont l’adresse IP est disponible publiquement.
correlationId ID des événements corrélés. Vous pouvez l’utiliser pour identifier les événements corrélés entre plusieurs tables.
durationMs Durée de l’opération en millisecondes.
level Le niveau de gravité de l’opération.
operationName L’opération associée aux enregistrements du journal.
operationVersion La version de l’API associée à l’opération ou la version de l’opération (s’il n’y a pas de version d’API).
resourceId Un identificateur unique de la ressource à laquelle l’enregistrement est associé.
resultSignature Le sous-état de l’opération. Si cette opération correspond à un appel d’API REST, ce champ est le code d’état HTTP de l’appel REST correspondant.
resultType État de l'opération.
sdkType Type de SDK utilisé dans la demande.
sdkVersion Version du Kit de développement logiciel (SDK).
serverCallId L’ID d’appel du serveur.
URI URI de la requête.

Voici un exemple :

"properties"
{  "TimeGenerated": "2023-05-09T15:58:30.100Z",
    "Level": "Informational",
    "CorrelationId": "aaaa0000-bb11-2222-33cc-444444dddddd",
    "OperationName": "ResumeCallRecording",
    "OperationVersion": "2023-03-06",
    "URI": "https://acsresouce.communication.azure.com/calling/recordings/   eyJQbGF0Zm9ybUVuZHBviI0MjFmMTIwMC04MjhiLTRmZGItOTZjYi0...:resume?api-version=2023-03-06",
    "ResultType": "Succeeded",
    "ResultSignature": 202,
    "DurationMs": 130,
    "CallerIpAddress": "127.0.0.1",
    "CallConnectionId": "d5596715-ab0b-test-8eee-575c250e4234",
    "ServerCallId": "aHR0cHM6Ly9hcGk0vjCCCCCCQd2pRP2k9OTMmZT02Mzc5OTQ3xMDAzNDUwMzg...",
    "SdkVersion": "1.0.0-alpha.20220829.1",
    "SdkType": "dotnet"
}

Étapes suivantes