Diagnostics accessibles à l’utilisateur

Lorsque vous passez des appels dans Azure Communication Services, vous pouvez rencontrer des problèmes qui affectent vos clients. Pour vous aider à y remédier, Azure Communication Services fournit une fonctionnalité appelée « Diagnostics accessibles par l’utilisateur » (UFD) qui peut être utilisée pour examiner différentes propriétés d’un appel pour déterminer ce que le problème peut être. Les Diagnostics accessibles par l’utilisateur sont des événements déclenchés qui peuvent indiquer qu’un utilisateur peut avoir une expérience médiocre en raison d’un problème sous-jacent (réseau médiocre, l’utilisateur a son microphone désactivé). Lorsqu’un Diagnostic accessible par l’utilisateur est déclenché, vous devez envisager d’envoyer des commentaires à un utilisateur final susceptible d’avoir un problème sous-jacent. Toutefois, la sortie Diagnostic accessible par l’utilisateur est à titre informatif uniquement et la pile appelante n’apporte aucune modification en fonction du déclenchement d’un Diagnostic accessible par l’utilisateur.

Valeurs des diagnostics

Les diagnostics accessibles à l’utilisateur sont les suivants :

Valeurs concernant le réseau

Nom Description Valeurs possibles Cas d’utilisation Étapes de correction
noNetwork Aucun réseau n’est disponible. - Défini sur True lorsqu’un appel ne peut pas démarrer, car aucun réseau n’est disponible.
- Défini sur False en cas de présence de candidats ICE.
L’appareil n’est pas connecté à un réseau. Assurez-vous que l’appel dispose d’une connexion Internet fiable qui peut supporter un appel vocal. Pour plus d’informations, consultez la section Optimisation du réseau.
networkRelaysNotReachable Problèmes avec un réseau. - Défini sur True lorsque le réseau comporte une contrainte qui ne vous permet pas d’atteindre les relais Azure Communication Services.
- Défini sur False lors de la réalisation d’un nouvel appel.
Pendant un appel lorsque le signal WiFi s’active et se désactive. Assurez-vous que les règles de pare-feu et le routage réseau autorisent le client à atteindre les serveurs Microsoft. Pour plus d’informations, consultez la section Configuration du pare-feu.
networkReconnect La connexion a été perdue et nous nous reconnectons au réseau. - Défini sur Bad lorsque le réseau est déconnecté
- Défini sur Poor quand la connectivité de transport de média est interrompue
- Défini sur Good lorsqu’une nouvelle session est connectée.
Faible bande passante, pas d’Internet Assurez-vous que l’appel dispose d’une connexion Internet fiable qui peut supporter un appel vocal. Pour plus d’informations, consultez la section Exigences en matière de bande passante réseau.
networkReceiveQuality Indicateur concernant la qualité du flux entrant. - Défini sur Bad en cas de problème grave de réception du flux.
- Défini sur Poor en cas de problème modéré de réception du flux.
- Défini sur Good lorsqu’il n’y a pas de problème de réception du flux.
Bande passante faible Assurez-vous que l’appel dispose d’une connexion Internet fiable qui peut supporter un appel vocal. Pour plus d’informations, consultez la section Exigences en matière de bande passante réseau. Suggérez que l’utilisateur final désactive sa caméra pour conserver la bande passante Internet disponible.
networkSendQuality Indicateur concernant la qualité du flux sortant. - Défini sur Bad en cas de problème grave d’envoi du flux.
- Défini sur Poor en cas de problème modéré d’envoi du flux.
- Défini sur Good lorsqu’il n’y a pas de problème d’envoi du flux.
Bande passante faible Assurez-vous que l’appel dispose d’une connexion Internet fiable qui peut supporter un appel vocal. Pour plus d’informations, consultez la section Exigences en matière de bande passante réseau. Suggérez également que l’utilisateur final désactive sa caméra pour conserver la bande passante Internet disponible.

Valeurs concernant l’audio

Nom Description Valeurs possibles Cas d’utilisation Étapes de correction
noSpeakerDevicesEnumerated Il n’y a aucun appareil de sortie audio (haut-parleur) sur le système de l’utilisateur. - Défini sur True lorsque le système ne comporte pas d’appareil haut-parleur, et que la sélection de haut-parleur est prise en charge.
- Défini sur False lorsque le système comporte au moins un appareil haut-parleur, et que la sélection de haut-parleur n’est pas prise en charge.
Tous les haut-parleurs sont débranchés Lorsque la valeur est définie sur True, envisagez d’envoyer une notification visuelle à l’utilisateur final expliquant que la session d’appel en cours n’a aucun haut-parleur disponible.
speakingWhileMicrophoneIsMuted Parler avec le micro désactivé. - Défini sur True lorsque le micro local est désactivé et que l’utilisateur local est en train de parler.
- Défini sur False lorsque l’utilisateur local cesse de parler ou réactive le micro.
* Remarque : Actuellement, cette option n’est pas prise en charge sur Safari, car les exemples de niveau audio sont extraits des statistiques WebRTC.
Pendant un appel, désactivez votre micro et parlez dedans. Lorsque la valeur est définie sur True, envisagez d’envoyer une notification visuelle à l’utilisateur final expliquant qu’il est peut-être en train de parler sans se rendre compte que son micro est coupé.
noMicrophoneDevicesEnumerated Le système de l’utilisateur ne comporte aucun appareil de capture audio (micro) - Défini sur True lorsque le système ne comporte pas de micro.
- Défini sur False lorsque le système comporte au moins un micro.
Tous les micros sont débranchés pendant l’appel. Lorsque la valeur est définie sur True, envisagez d’envoyer une notification visuelle à l’utilisateur final, expliquant que la session d’appel en cours n’a pas de micro. Pour plus d’informations, consultez la section Activer le microphone à partir du gestionnaire d’appareils.
microphoneNotFunctioning Le micro ne fonctionne pas. - Défini sur True en cas d’échec de l’envoi du flux audio local parce que le micro a peut-être été désactivé dans le système ou qu’il est utilisé par un autre processus. Il faut environ 10 secondes pour déclencher ce périphérique.
- Défini sur False lorsque le micro recommence à envoyer correctement le flux audio.
Aucun micro disponible, accès au micro désactivé dans un système Lorsque la valeur est définie sur True, envisagez d’envoyer une notification visuelle à l’utilisateur final expliquant qu’il y a un problème avec son micro.
microphoneMuteUnexpectedly Le micro est désactivé - Défini sur True lorsque le micro est désactivé de manière inattendue.
- Défini sur False lorsque le micro commence à envoyer correctement le flux audio.
Le micro est désactivé dans le système. La plupart des cas se produisent lorsque l’utilisateur passe un appel Azure Communication Services sur un appareil mobile et qu’un appel téléphonique arrive. Dans la plupart des cas, le système d’exploitation désactive l’appel Azure Communication Services pour que l’utilisateur puisse répondre à l’appel. Lorsque la valeur est définie sur True, envisagez d’envoyer une notification visuelle à l’utilisateur final expliquant que le son de son appel a été coupé en raison d’un appel téléphonique entrant. Pour plus d’informations, consultez Gérer la désactivation d’un appel Azure Communication Services par le système d'exploitation.
microphonePermissionDenied Le volume de l’appareil est faible ou presque silencieux sous macOS. - Défini sur True lorsque l’autorisation audio est refusée par les paramètres système (audio).
- Défini sur False en cas de réussite d’acquisition de flux.
Remarque : ce diagnostic fonctionne uniquement sous macOS.
Les autorisations de micro sont désactivées dans les Paramètres. Lorsque la valeur est définie sur True, envoyez une notification visuelle à l’utilisateur final expliquant qu’il n’est pas autorisé à utiliser le micro pour un appel Azure Communication Services.

Valeurs concernant la caméra

Nom Description Valeurs possibles Cas d’utilisation Étapes de correction
cameraFreeze La caméra cesse de produire des images pendant plus de 5 secondes. - Défini sur True lorsque le flux de vidéo local est figé. Ce diagnostic signifie que le côté distant voit votre vidéo figée sur son écran ou que les participants distants ne reçoivent pas votre vidéo sur leur écran.
- Défini sur False lorsque le blocage se termine et que les utilisateurs peuvent voir votre vidéo normalement.
La caméra a été perdue pendant l’appel ou un mauvais réseau a entraîné le blocage de la caméra. Lorsque la valeur est définie sur True, envisagez d’envoyer une notification visuelle à l’utilisateur final expliquant que le réseau du participant n’est peut-être pas de bonne qualité et lui suggérer de désactiver sa caméra pour économiser la bande passante. Pour plus d’informations, consultez la section relative à la bande passante réseau sur les capacités Internet nécessaires pour un appel Azure Communication Services.
cameraStartFailed Échec générique de la caméra. - Défini sur True en cas d’échec de l’envoi de vidéo locale parce que la caméra a peut-être été désactivée dans le système ou qu’elle est utilisée par un autre processus.
- Défini sur False lorsque la caméra sélectionnée parvient à nouveau à envoyer la vidéo locale.
Défaillances de caméra Lorsque la valeur est définie sur True, envoyez une notification visuelle à l’utilisateur final que sa caméra n’a pas réussi à démarrer.
cameraStartTimedOut Scénario courant où la caméra est dans un mauvais état de fonctionnement. - Défini sur True en cas d’expiration du délai d’attente d’envoi du flux vidéo de la caméra.
- Défini sur False lorsque la caméra sélectionnée parvient à nouveau à envoyer la vidéo locale.
Défaillances de caméra Lorsque la valeur est définie sur True, envoyez une notification visuelle à l’utilisateur final que sa caméra rencontre peut-être des problèmes. (Lorsque la valeur est définie sur False, supprimer la notification).
cameraPermissionDenied Les autorisations de caméra ont été refusées dans les paramètres. - Défini sur True lorsque l’autorisation de caméra est refusée dans les paramètres système (vidéo).
- Défini sur False en cas de réussite d’acquisition de flux.
Remarque : ce diagnostic fonctionne uniquement sous macOS Chrome.
Les autorisations de caméra sont désactivées dans les paramètres. Lorsque la valeur est définie sur True, envoyez une notification visuelle à l’utilisateur final expliquant qu’il n’est pas autorisé à utiliser la caméra pour un appel Azure Communication Services.
cameraStoppedUnexpectedly Dysfonctionnement de la caméra - Défini sur True lorsque la caméra bascule dans un état d’arrêt de manière inattendue.
- Défini sur False lorsque la caméra recommence à envoyer correctement le flux vidéo.
Vérifier que la caméra fonctionne correctement. Lorsque la valeur est définie sur True, envoyez une notification visuelle à l’utilisateur final que sa caméra rencontre peut-être des problèmes. (Lorsque la valeur est définie sur False, supprimer la notification).

Valeurs concernant d’autres aspects

Nom Description Valeurs possibles Cas d’utilisation Procédure d’atténuation
screenshareRecordingDisabled Le partage d’écran du système a été refusé en raison des préférences définies dans Paramètres. - Défini sur True lorsque l’autorisation de partage d’écran est refusée par les paramètres système (partage).
- Défini sur False en cas de réussite d’acquisition de flux.
Remarque : ce diagnostic fonctionne uniquement sous macOS.Chrome.
L’enregistrement d’écran est désactivé dans les Paramètres. Lorsque la valeur est définie sur True, envoyez une notification visuelle à l’utilisateur final expliquant qu’il n’est pas autorisé à partager son écran pour un appel Azure Communication Services.
capturerStartFailed Échec du partage de l’écran système. - Défini sur True lorsque le démarrage de la capture de l’écran échoue.
- Défini sur False lorsque la capture de l’écran peut débuter correctement.
Lorsque la valeur est définie sur True, envisagez d’envoyer une notification visuelle à l’utilisateur final expliquant que sa caméra rencontre peut-être un problème pour partager l’écran. (Lorsque la valeur est définie sur False, supprimez la notification).
capturerStoppedUnexpectedly Dysfonctionnement du partage d’écran système - Défini sur True lorsque la capture de l’écran bascule dans un état d’arrêt de manière inattendue.
- Défini sur False lorsque la capture de l’écran recommence à fonctionner.
Vérifier que le partage d’écran fonctionne correctement Lorsque la valeur est définie sur True, envisagez d’envoyer une notification visuelle à l’utilisateur final expliquant qu’il y a peut-être un problème qui a mis fin au partage de l’écran. (Lorsque la valeur est définie sur False, supprimer la notification).

Accès aux diagnostics

Les diagnostics accessibles à l’utilisateur constituent une fonctionnalité étendue de l’API Call de base et vous permettent de diagnostiquer un appel actif.

const userFacingDiagnostics = call.feature(Features.UserFacingDiagnostics);

Événements de diagnostics accessibles à l’utilisateur

  • Abonnez-vous à l’événement diagnosticChanged pour superviser tout changement de diagnostic accessible à l’utilisateur.
/**
 *  Each diagnostic has the following data:
 * - diagnostic is the type of diagnostic, e.g. NetworkSendQuality, DeviceSpeakWhileMuted, etc...
 * - value is DiagnosticQuality or DiagnosticFlag:
 *     - DiagnosticQuality = enum { Good = 1, Poor = 2, Bad = 3 }.
 *     - DiagnosticFlag = true | false.
 * - valueType = 'DiagnosticQuality' | 'DiagnosticFlag'
 */
const diagnosticChangedListener = (diagnosticInfo: NetworkDiagnosticChangedEventArgs | MediaDiagnosticChangedEventArgs) => {
    console.log(`Diagnostic changed: ` +
        `Diagnostic: ${diagnosticInfo.diagnostic}` +
        `Value: ${diagnosticInfo.value}` +
        `Value type: ${diagnosticInfo.valueType}`);

    if (diagnosticInfo.valueType === 'DiagnosticQuality') {
        if (diagnosticInfo.value === DiagnosticQuality.Bad) {
            console.error(`${diagnosticInfo.diagnostic} is bad quality`);

        } else if (diagnosticInfo.value === DiagnosticQuality.Poor) {
            console.error(`${diagnosticInfo.diagnostic} is poor quality`);
        }

    } else if (diagnosticInfo.valueType === 'DiagnosticFlag') {
        if (diagnosticInfo.value === true) {
            console.error(`${diagnosticInfo.diagnostic}`);
        }
    }
};

userFacingDiagnostics.network.on('diagnosticChanged', diagnosticChangedListener);
userFacingDiagnostics.media.on('diagnosticChanged', diagnosticChangedListener);

Obtenir les derniers diagnostics accessibles à l’utilisateur

  • Obtenez les dernières valeurs de diagnostic qui ont été générées. Un diagnostic n’est pas défini s’il n’a jamais été déclenché.
const latestNetworkDiagnostics = userFacingDiagnostics.network.getLatest();

console.log(
  `noNetwork: ${latestNetworkDiagnostics.noNetwork.value}, ` +
    `value type = ${latestNetworkDiagnostics.noNetwork.valueType}`
);

console.log(
  `networkReconnect: ${latestNetworkDiagnostics.networkReconnect.value}, ` +
    `value type = ${latestNetworkDiagnostics.networkReconnect.valueType}`
);

console.log(
  `networkReceiveQuality: ${latestNetworkDiagnostics.networkReceiveQuality.value}, ` +
    `value type = ${latestNetworkDiagnostics.networkReceiveQuality.valueType}`
);

const latestMediaDiagnostics = userFacingDiagnostics.media.getLatest();

console.log(
  `speakingWhileMicrophoneIsMuted: ${latestMediaDiagnostics.speakingWhileMicrophoneIsMuted.value}, ` +
    `value type = ${latestMediaDiagnostics.speakingWhileMicrophoneIsMuted.valueType}`
);

console.log(
  `cameraStartFailed: ${latestMediaDiagnostics.cameraStartFailed.value}, ` +
    `value type = ${latestMediaDiagnostics.cameraStartFailed.valueType}`
);

console.log(
  `microphoneNotFunctioning: ${latestMediaDiagnostics.microphoneNotFunctioning.value}, ` +
    `value type = ${latestMediaDiagnostics.microphoneNotFunctioning.valueType}`
);

Valeurs des diagnostics

Les diagnostics accessibles à l’utilisateur sont les suivants :

Valeurs concernant le réseau

Nom Description Valeurs possibles Cas d’utilisation Étapes de correction
networkUnavailable Aucun réseau n’est disponible. - Défini sur True lorsqu’un appel ne peut pas démarrer, car aucun réseau n’est disponible.
- Défini sur False en cas de présence de candidats ICE.
L’appareil n’est pas connecté à un réseau. Assurez-vous que l’appel dispose d’une connexion Internet fiable qui peut supporter un appel vocal. Pour plus d’informations, consultez la section Optimisation du réseau.
networkRelaysUnreachable Problèmes avec un réseau. - Défini sur True lorsque le réseau comporte une contrainte qui ne vous permet pas d’atteindre les relais Azure Communication Services.
- Défini sur False lors de la réalisation d’un nouvel appel.
Pendant un appel lorsque le signal WiFi s’active et se désactive. Assurez-vous que les règles de pare-feu et le routage réseau autorisent le client à atteindre les serveurs Microsoft. Pour plus d’informations, consultez la section Configuration du pare-feu.
networkReconnectionQuality La connexion a été perdue et nous nous reconnectons au réseau. - Défini sur Bad lorsque le réseau est déconnecté
- Défini sur Poor quand la connectivité de transport de média est interrompue
- Défini sur Good lorsqu’une nouvelle session est connectée.
Faible bande passante, pas d’Internet Assurez-vous que l’appel dispose d’une connexion Internet fiable qui peut supporter un appel vocal. Pour plus d’informations, consultez la section Exigences en matière de bande passante réseau.
networkReceiveQuality Indicateur concernant la qualité du flux entrant. - Défini sur Bad en cas de problème grave de réception du flux.
- Défini sur Poor en cas de problème modéré de réception du flux.
- Défini sur Good lorsqu’il n’y a pas de problème de réception du flux.
- Il n’est visible que s’il existe un flux audio actif dans l’appel, ce qui signifie qu’un participant parle activement pendant une période donnée.
Bande passante faible Assurez-vous que l’appel dispose d’une connexion Internet fiable qui peut supporter un appel vocal. Pour plus d’informations, consultez la section Exigences en matière de bande passante réseau. Suggérez que l’utilisateur final désactive sa caméra pour conserver la bande passante Internet disponible.
networkSendQuality Indicateur concernant la qualité du flux sortant. - Défini sur Bad en cas de problème grave d’envoi du flux.
- Défini sur Poor en cas de problème modéré d’envoi du flux.
- Défini sur Good lorsqu’il n’y a pas de problème d’envoi du flux.
- Comme pour recevoir un diagnostic de qualité, il n’est visible que s’il existe un flux audio actif dans l’appel, ce qui signifie qu’un participant parle activement pendant une période. Mais il fonctionne uniquement dans un appel individuel, car il s’appuie sur des informations provenant de l’autre côté afin de vérifier la qualité. Où l’autre côté doit signaler les données reçues.
Bande passante faible Assurez-vous que l’appel dispose d’une connexion Internet fiable qui peut supporter un appel vocal. Pour plus d’informations, consultez la section Exigences en matière de bande passante réseau. Suggérez également que l’utilisateur final désactive sa caméra pour conserver la bande passante Internet disponible.

Valeurs concernant l’audio

Nom Description Valeurs possibles Cas d’utilisation Étapes de correction
noSpeakerDevicesAvailable Il n’y a aucun appareil de sortie audio (haut-parleur) sur le système de l’utilisateur. - Défini sur True lorsque le système ne comporte pas d’appareil haut-parleur, et que la sélection de haut-parleur est prise en charge.
- Défini sur False lorsque le système comporte au moins un appareil haut-parleur, et que la sélection de haut-parleur n’est pas prise en charge.
Tous les haut-parleurs sont débranchés Lorsque la valeur est définie sur True, envisagez d’envoyer une notification visuelle à l’utilisateur final expliquant que la session d’appel en cours n’a aucun haut-parleur disponible.
speakingWhileMicrophoneIsMuted Parler avec le micro désactivé. - Défini sur True lorsque le micro local est désactivé et que l’utilisateur local est en train de parler.
- Défini sur False lorsque l’utilisateur local cesse de parler ou réactive le micro.
- Cet événement de diagnostic peut être automatiquement désactivé s’il est déclenché un certain nombre de fois sans aucune action de l’utilisateur pour éviter le bruit et offrir une meilleure expérience utilisateur. Il sera réactivé lorsqu’une nouvelle action de désactivation du son se produit.
Pendant un appel, désactivez votre micro et parlez dedans. Lorsque la valeur est définie sur True, envisagez d’envoyer une notification visuelle à l’utilisateur final expliquant qu’il est peut-être en train de parler sans se rendre compte que son micro est coupé.
noMicrophoneDevicesAvailable Le système de l’utilisateur ne comporte aucun appareil de capture audio (micro) - Défini sur True lorsque le système ne comporte pas de micro.
- Défini sur False lorsque le système comporte au moins un micro.
Tous les micros sont débranchés pendant l’appel. Lorsque la valeur est définie sur True, envisagez d’envoyer une notification visuelle à l’utilisateur final, expliquant que la session d’appel en cours n’a pas de micro. Pour plus d’informations, consultez la section Activer le microphone à partir du gestionnaire d’appareils.
microphoneNotFunctioning Le micro ne fonctionne pas. - Défini sur True en cas d’échec de l’envoi du flux audio local parce que le micro a peut-être été désactivé dans le système ou qu’il est utilisé par un autre processus. Il faut environ 10 secondes pour déclencher ce périphérique.
- Défini sur False lorsque le micro recommence à envoyer correctement le flux audio.
Aucun micro disponible, accès au micro désactivé dans un système Lorsque la valeur est définie sur True, envisagez d’envoyer une notification visuelle à l’utilisateur final expliquant qu’il y a un problème avec son micro.
microphoneMuteUnexpectedly Le micro est désactivé - Défini sur True lorsque le micro est désactivé de manière inattendue.
- Défini sur False lorsque le micro commence à envoyer correctement le flux audio.
Le micro est désactivé dans le système. La plupart des cas se produisent lorsque l’utilisateur passe un appel Azure Communication Services sur un appareil mobile et qu’un appel téléphonique arrive. Dans la plupart des cas, le système d’exploitation désactive l’appel Azure Communication Services pour que l’utilisateur puisse répondre à l’appel. Lorsque la valeur est définie sur True, envisagez d’envoyer une notification visuelle à l’utilisateur final expliquant que le son de son appel a été coupé en raison d’un appel téléphonique entrant. Pour plus d’informations, consultez Gérer la désactivation d’un appel Azure Communication Services par le système d'exploitation.
microphonePermissionDenied Le volume de l’appareil est faible ou presque silencieux sous macOS. - Défini sur True lorsque l’autorisation audio est refusée par les paramètres système (audio).
- Défini sur False en cas de réussite d’acquisition de flux.
Remarque : ce diagnostic fonctionne uniquement sous macOS.
Les autorisations de micro sont désactivées dans les Paramètres. Lorsque la valeur est définie sur True, envoyez une notification visuelle à l’utilisateur final expliquant qu’il n’est pas autorisé à utiliser le micro pour un appel Azure Communication Services.

Valeurs concernant la caméra

Nom Description Valeurs possibles Cas d’utilisation Étapes de correction
cameraFrozen La caméra cesse de produire des images pendant plus de 5 secondes. - Défini sur True lorsque le flux de vidéo local est figé. Cela signifie que le côté distant voit votre vidéo figée sur son écran ou que les participants distants ne reçoivent pas votre vidéo sur leur écran.
- Défini sur False lorsque le blocage se termine et que les utilisateurs peuvent voir votre vidéo normalement.
La caméra a été perdue pendant l’appel ou un mauvais réseau a entraîné le blocage de la caméra. Lorsque la valeur est définie sur True, envisagez d’envoyer une notification visuelle à l’utilisateur final expliquant que le réseau du participant n’est peut-être pas de bonne qualité et lui suggérer de désactiver sa caméra pour économiser la bande passante. Pour plus d’informations, consultez la section relative à la bande passante réseau sur les capacités Internet nécessaires pour un appel Azure Communication Services.
cameraStartFailed Échec générique de la caméra. - Défini sur True en cas d’échec de l’envoi de vidéo locale parce que la caméra a peut-être été désactivée dans le système ou qu’elle est utilisée par un autre processus.
- Défini sur False lorsque la caméra sélectionnée parvient à nouveau à envoyer la vidéo locale.
Défaillances de caméra Lorsque la valeur est définie sur True, envoyez une notification visuelle à l’utilisateur final que sa caméra n’a pas réussi à démarrer.
cameraStartTimedOut Scénario courant où la caméra est dans un mauvais état de fonctionnement. - Défini sur True en cas d’expiration du délai d’attente d’envoi du flux vidéo de la caméra.
- Défini sur False lorsque la caméra sélectionnée parvient à nouveau à envoyer la vidéo locale.
Défaillances de caméra Lorsque la valeur est définie sur True, envoyez une notification visuelle à l’utilisateur final que sa caméra rencontre peut-être des problèmes. (Lorsque la valeur est définie sur False, supprimer la notification).
cameraPermissionDenied Les autorisations de caméra ont été refusées dans les paramètres. - Défini sur True lorsque l’autorisation de caméra est refusée dans les paramètres système (vidéo).
- Défini sur False en cas de réussite d’acquisition de flux.
Remarque : ce diagnostic fonctionne uniquement sous macOS Chrome.
Les autorisations de caméra sont désactivées dans les paramètres. Lorsque la valeur est définie sur True, envoyez une notification visuelle à l’utilisateur final expliquant qu’il n’est pas autorisé à utiliser la caméra pour un appel Azure Communication Services.
cameraStoppedUnexpectedly Dysfonctionnement de la caméra - Défini sur True lorsque la caméra bascule dans un état d’arrêt de manière inattendue.
- Défini sur False lorsque la caméra recommence à envoyer correctement le flux vidéo.
Vérifier que la caméra fonctionne correctement. Lorsque la valeur est définie sur True, envoyez une notification visuelle à l’utilisateur final que sa caméra rencontre peut-être des problèmes. (Lorsque la valeur est définie sur False, supprimer la notification).

Natif uniquement

Nom Description Valeurs possibles Cas d’utilisation Procédure d’atténuation
speakerVolumeIsZero Volume à zéro sur un appareil (haut-parleur). - Défini sur True lorsque le volume du haut-parleur est à zéro.
- Défini sur False lorsque le volume du haut-parleur n’est pas à zéro.
Impossible d’entendre l’audio des participants à l’appel. Lorsque la valeur est définie sur True, vous pouvez avoir accidentellement le volume au plus bas (zéro).
speakerMuted L’appareil haut-parleur est désactivé. - Défini sur True lorsque l’appareil haut-parleur est désactivé.
- Défini sur False lorsque l’appareil haut-parleur n’est pas désactivé.
Impossible d’entendre l’audio des participants à l’appel. Lorsque la valeur est définie sur True, vous avez peut-être désactivé accidentellement le haut-parleur.
speakerBusy Le haut-parleur est déjà utilisé. Soit l’appareil est utilisé en mode exclusif, soit l’appareil est utilisé en mode partagé et l’appelant a demandé à utiliser l’appareil en mode exclusif. - Défini sur True lorsque le délai d’acquisition du flux de l’appareil haut-parleur expire (audio).
- Défini sur False lorsque l’acquisition de l’appareil haut-parleur réussit.
Impossible d’entendre l’audio des participants à l’appel par le biais du haut-parleur. Lorsque la valeur est définie sur True, envoyez une notification visuelle à l’utilisateur final afin qu’il puisse vérifier si une autre application utilise le haut-parleur et essayer de la fermer.
speakerNotFunctioning Le haut-parleur ne fonctionne pas (échec de l’initialisation du client de l’appareil audio ou l’appareil est devenu inactif pendant plus de 5 secondes) - Défini sur True lorsque le haut-parleur n’est pas disponible ou si l’acquisition de flux de l’appareil expire (audio).
- Défini sur False lorsque l’acquisition de l’appareil haut-parleur réussit.
Impossible d’entendre l’audio des participants à l’appel par le biais du haut-parleur. Essayez de vérifier l’état de l’appareil haut-parleur.
microphoneBusy Le microphone est déjà utilisé. Soit l’appareil est utilisé en mode exclusif, soit l’appareil est utilisé en mode partagé et l’appelant a demandé à utiliser l’appareil en mode exclusif. - Défini sur True lorsque le délai d’acquisition du flux de l’appareil micro expire (audio).
- Défini sur False lorsque l’acquisition du micro réussit.
Votre audio n’atteint pas d’autres participants dans l’appel. Lorsque la valeur est définie sur True, envoyez une notification visuelle à l’utilisateur final afin qu’il puisse vérifier si une autre application utilise le micro et essayer de la fermer.

Accès aux diagnostics

Les diagnostics accessibles à l’utilisateur constituent une fonctionnalité étendue de l’API Call de base et vous permettent de diagnostiquer un appel actif.

DiagnosticsCallFeature diagnosticsCallFeature = call.feature(Features.LOCAL_USER_DIAGNOSTICS);

Événements de diagnostics accessibles à l’utilisateur

  • Obtenez l’objet de fonctionnalité et ajoutez des écouteurs aux événements de diagnostic.
DiagnosticsCallFeature diagnosticsCallFeature = call.feature(Features.LOCAL_USER_DIAGNOSTICS);

/* NetworkDiagnostic */
FlagDiagnosticChangedListener listener = (FlagDiagnosticChangedEvent args) -> {
  Boolean mediaValue = args.getValue();
  // Handle new value for no network diagnostic.
};

NetworkDiagnostics networkDiagnostics = diagnosticsCallFeature.getNetworkDiagnostics();
networkDiagnostics.addOnNetworkUnreachableChangedListener(listener);

// To remove listener for network quality event
networkDiagnostics.removeOnNetworkUnreachableChangedListener(listener);

// Quality Diagnostics
DiagnosticsCallFeature diagnosticsCallFeature = call.feature(Features.LOCAL_USER_DIAGNOSTICS);
QualityDiagnosticChangedListener listener = (QualityDiagnosticChangedEvent args) -> {
  DiagnosticQuality diagnosticQuality = args.getValue();
  // Handle new value for network reconnect diagnostic.
};

NetworkDiagnostics networkDiagnostics = diagnosticsCallFeature.getNetworkDiagnostics();
networkDiagnostics.addOnNetworkReconnectionQualityChangedListener(listener);

// To remove listener for media flag event
networkDiagnostics.removeOnNetworkReconnectionQualityChangedListener(listener);

/* MediaDiagnostic */
DiagnosticsCallFeature diagnosticsCallFeature = call.feature(Features.LOCAL_USER_DIAGNOSTICS);
FlagDiagnosticChangedListener listener = (FlagDiagnosticChangedEvent args) -> {
  Boolean mediaValue = args.getValue();
  // Handle new value for speaker not functioning diagnostic.
};

MediaDiagnostics mediaDiagnostics = diagnosticsCallFeature.getMedia();
mediaDiagnostics.addOnIsSpeakerNotFunctioningChangedListener(listener);

// To remove listener for media flag event
mediaDiagnostics.removeOnIsSpeakerNotFunctioningChangedListener(listener);

Obtenir les derniers diagnostics accessibles à l’utilisateur

  • Obtenez les dernières valeurs de diagnostic qui ont été générées dans l’appel en cours. Si nous n’avons toujours pas reçu de valeur pour le diagnostic, une exception est levée.
DiagnosticsCallFeature diagnosticsCallFeature = call.feature(Features.LOCAL_USER_DIAGNOSTICS);
NetworkDiagnostics networkDiagnostics = diagnosticsCallFeature.getNetwork();
MediaDiagnostics mediaDiagnostics = diagnosticsCallFeature.getMedia();

NetworkDiagnosticValues latestNetwork = networkDiagnostics.getLatestDiagnostics();
Boolean lastNetworkValue = latestNetwork.isNetworkUnavailable(); // null if there isn't a value for this diagnostic.
DiagnosticQuality lastReceiveQualityValue = latestNetwork.getNetworkReceiveQuality(); //  UNKNOWN if there isn't a value for this diagnostic.

MediaDiagnosticValues latestMedia = networkDiagnostics.getLatestDiagnostics();
Boolean lastSpeakerNotFunctionValue = latestMedia.isSpeakerNotFunctioning(); // null if there isn't a value for this diagnostic.

// Use the last values ...

Valeurs des diagnostics

Les diagnostics accessibles à l’utilisateur sont les suivants :

Valeurs concernant le réseau

Nom Description Valeurs possibles Cas d’utilisation Étapes de correction
networkUnavailable Aucun réseau n’est disponible. - Défini sur True lorsqu’un appel ne peut pas démarrer, car aucun réseau n’est disponible.
- Défini sur False en cas de présence de candidats ICE.
L’appareil n’est pas connecté à un réseau. Assurez-vous que l’appel dispose d’une connexion Internet fiable qui peut supporter un appel vocal. Pour plus d’informations, consultez la section Optimisation du réseau.
networkRelaysUnreachable Problèmes avec un réseau. - Défini sur True lorsque le réseau comporte une contrainte qui ne vous permet pas d’atteindre les relais Azure Communication Services.
- Défini sur False lors de la réalisation d’un nouvel appel.
Pendant un appel lorsque le signal WiFi s’active et se désactive. Assurez-vous que les règles de pare-feu et le routage réseau autorisent le client à atteindre les serveurs Microsoft. Pour plus d’informations, consultez la section Configuration du pare-feu.
networkReconnectionQuality La connexion a été perdue et nous nous reconnectons au réseau. - Défini sur Bad lorsque le réseau est déconnecté
- Défini sur Poor quand la connectivité de transport de média est interrompue
- Défini sur Good lorsqu’une nouvelle session est connectée.
Faible bande passante, pas d’Internet Assurez-vous que l’appel dispose d’une connexion Internet fiable qui peut supporter un appel vocal. Pour plus d’informations, consultez la section Exigences en matière de bande passante réseau.
networkReceiveQuality Indicateur concernant la qualité du flux entrant. - Défini sur Bad en cas de problème grave de réception du flux.
- Défini sur Poor en cas de problème modéré de réception du flux.
- Défini sur Good lorsqu’il n’y a pas de problème de réception du flux.
- Il n’est visible que s’il existe un flux audio actif dans l’appel, ce qui signifie qu’un participant parle activement pendant une période donnée.
Bande passante faible Assurez-vous que l’appel dispose d’une connexion Internet fiable qui peut supporter un appel vocal. Pour plus d’informations, consultez la section Exigences en matière de bande passante réseau. Suggérez que l’utilisateur final désactive sa caméra pour conserver la bande passante Internet disponible.
networkSendQuality Indicateur concernant la qualité du flux sortant. - Défini sur Bad en cas de problème grave d’envoi du flux.
- Défini sur Poor en cas de problème modéré d’envoi du flux.
- Défini sur Good lorsqu’il n’y a pas de problème d’envoi du flux.
- Comme pour recevoir un diagnostic de qualité, il n’est visible que s’il existe un flux audio actif dans l’appel, ce qui signifie qu’un participant parle activement pendant une période. Mais il fonctionne uniquement dans un appel individuel, car il s’appuie sur des informations provenant de l’autre côté afin de vérifier la qualité. Où l’autre côté doit signaler les données reçues.
Bande passante faible Assurez-vous que l’appel dispose d’une connexion Internet fiable qui peut supporter un appel vocal. Pour plus d’informations, consultez la section Exigences en matière de bande passante réseau. Suggérez également que l’utilisateur final désactive sa caméra pour conserver la bande passante Internet disponible.

Valeurs concernant l’audio

Nom Description Valeurs possibles Cas d’utilisation Étapes de correction
noSpeakerDevicesAvailable Il n’y a aucun appareil de sortie audio (haut-parleur) sur le système de l’utilisateur. - Défini sur True lorsque le système ne comporte pas d’appareil haut-parleur, et que la sélection de haut-parleur est prise en charge.
- Défini sur False lorsque le système comporte au moins un appareil haut-parleur, et que la sélection de haut-parleur n’est pas prise en charge.
Tous les haut-parleurs sont débranchés Lorsque la valeur est définie sur True, envisagez d’envoyer une notification visuelle à l’utilisateur final expliquant que la session d’appel en cours n’a aucun haut-parleur disponible.
speakingWhileMicrophoneIsMuted Parler avec le micro désactivé. - Défini sur True lorsque le micro local est désactivé et que l’utilisateur local est en train de parler.
- Défini sur False lorsque l’utilisateur local cesse de parler ou réactive le micro.
- Cet événement de diagnostic peut être automatiquement désactivé s’il est déclenché un certain nombre de fois sans aucune action de l’utilisateur pour éviter le bruit et offrir une meilleure expérience utilisateur. Il sera réactivé lorsqu’une nouvelle action de désactivation du son se produit.
Pendant un appel, désactivez votre micro et parlez dedans. Lorsque la valeur est définie sur True, envisagez d’envoyer une notification visuelle à l’utilisateur final expliquant qu’il est peut-être en train de parler sans se rendre compte que son micro est coupé.
noMicrophoneDevicesAvailable Le système de l’utilisateur ne comporte aucun appareil de capture audio (micro) - Défini sur True lorsque le système ne comporte pas de micro.
- Défini sur False lorsque le système comporte au moins un micro.
Tous les micros sont débranchés pendant l’appel. Lorsque la valeur est définie sur True, envisagez d’envoyer une notification visuelle à l’utilisateur final, expliquant que la session d’appel en cours n’a pas de micro. Pour plus d’informations, consultez la section Activer le microphone à partir du gestionnaire d’appareils.
microphoneNotFunctioning Le micro ne fonctionne pas. - Défini sur True en cas d’échec de l’envoi du flux audio local parce que le micro a peut-être été désactivé dans le système ou qu’il est utilisé par un autre processus. Il faut environ 10 secondes pour déclencher ce périphérique.
- Défini sur False lorsque le micro recommence à envoyer correctement le flux audio.
Aucun micro disponible, accès au micro désactivé dans un système Lorsque la valeur est définie sur True, envisagez d’envoyer une notification visuelle à l’utilisateur final expliquant qu’il y a un problème avec son micro.
microphoneMuteUnexpectedly Le micro est désactivé - Défini sur True lorsque le micro est désactivé de manière inattendue.
- Défini sur False lorsque le micro commence à envoyer correctement le flux audio.
Le micro est désactivé dans le système. La plupart des cas se produisent lorsque l’utilisateur passe un appel Azure Communication Services sur un appareil mobile et qu’un appel téléphonique arrive. Dans la plupart des cas, le système d’exploitation désactive l’appel Azure Communication Services pour que l’utilisateur puisse répondre à l’appel. Lorsque la valeur est définie sur True, envisagez d’envoyer une notification visuelle à l’utilisateur final expliquant que le son de son appel a été coupé en raison d’un appel téléphonique entrant. Pour plus d’informations, consultez Gérer la désactivation d’un appel Azure Communication Services par le système d'exploitation.
microphonePermissionDenied Le volume de l’appareil est faible ou presque silencieux sous macOS. - Défini sur True lorsque l’autorisation audio est refusée par les paramètres système (audio).
- Défini sur False en cas de réussite d’acquisition de flux.
Remarque : ce diagnostic fonctionne uniquement sous macOS.
Les autorisations de micro sont désactivées dans les Paramètres. Lorsque la valeur est définie sur True, envoyez une notification visuelle à l’utilisateur final expliquant qu’il n’est pas autorisé à utiliser le micro pour un appel Azure Communication Services.

Valeurs concernant la caméra

Nom Description Valeurs possibles Cas d’utilisation Étapes de correction
cameraFrozen La caméra cesse de produire des images pendant plus de 5 secondes. - Défini sur True lorsque le flux de vidéo local est figé. Cela signifie que le côté distant voit votre vidéo figée sur son écran ou que les participants distants ne reçoivent pas votre vidéo sur leur écran.
- Défini sur False lorsque le blocage se termine et que les utilisateurs peuvent voir votre vidéo normalement.
La caméra a été perdue pendant l’appel ou un mauvais réseau a entraîné le blocage de la caméra. Lorsque la valeur est définie sur True, envisagez d’envoyer une notification visuelle à l’utilisateur final expliquant que le réseau du participant n’est peut-être pas de bonne qualité et lui suggérer de désactiver sa caméra pour économiser la bande passante. Pour plus d’informations, consultez la section relative à la bande passante réseau sur les capacités Internet nécessaires pour un appel Azure Communication Services.
cameraStartFailed Échec générique de la caméra. - Défini sur True en cas d’échec de l’envoi de vidéo locale parce que la caméra a peut-être été désactivée dans le système ou qu’elle est utilisée par un autre processus.
- Défini sur False lorsque la caméra sélectionnée parvient à nouveau à envoyer la vidéo locale.
Défaillances de caméra Lorsque la valeur est définie sur True, envoyez une notification visuelle à l’utilisateur final que sa caméra n’a pas réussi à démarrer.
cameraStartTimedOut Scénario courant où la caméra est dans un mauvais état de fonctionnement. - Défini sur True en cas d’expiration du délai d’attente d’envoi du flux vidéo de la caméra.
- Défini sur False lorsque la caméra sélectionnée parvient à nouveau à envoyer la vidéo locale.
Défaillances de caméra Lorsque la valeur est définie sur True, envoyez une notification visuelle à l’utilisateur final que sa caméra rencontre peut-être des problèmes. (Lorsque la valeur est définie sur False, supprimer la notification).
cameraPermissionDenied Les autorisations de caméra ont été refusées dans les paramètres. - Défini sur True lorsque l’autorisation de caméra est refusée dans les paramètres système (vidéo).
- Défini sur False en cas de réussite d’acquisition de flux.
Remarque : ce diagnostic fonctionne uniquement sous macOS Chrome.
Les autorisations de caméra sont désactivées dans les paramètres. Lorsque la valeur est définie sur True, envoyez une notification visuelle à l’utilisateur final expliquant qu’il n’est pas autorisé à utiliser la caméra pour un appel Azure Communication Services.
cameraStoppedUnexpectedly Dysfonctionnement de la caméra - Défini sur True lorsque la caméra bascule dans un état d’arrêt de manière inattendue.
- Défini sur False lorsque la caméra recommence à envoyer correctement le flux vidéo.
Vérifier que la caméra fonctionne correctement. Lorsque la valeur est définie sur True, envoyez une notification visuelle à l’utilisateur final que sa caméra rencontre peut-être des problèmes. (Lorsque la valeur est définie sur False, supprimer la notification).

Natif uniquement

Nom Description Valeurs possibles Cas d’utilisation Procédure d’atténuation
speakerVolumeIsZero Volume à zéro sur un appareil (haut-parleur). - Défini sur True lorsque le volume du haut-parleur est à zéro.
- Défini sur False lorsque le volume du haut-parleur n’est pas à zéro.
Impossible d’entendre l’audio des participants à l’appel. Lorsque la valeur est définie sur True, vous pouvez avoir accidentellement le volume au plus bas (zéro).
speakerMuted L’appareil haut-parleur est désactivé. - Défini sur True lorsque l’appareil haut-parleur est désactivé.
- Défini sur False lorsque l’appareil haut-parleur n’est pas désactivé.
Impossible d’entendre l’audio des participants à l’appel. Lorsque la valeur est définie sur True, vous avez peut-être désactivé accidentellement le haut-parleur.
speakerBusy Le haut-parleur est déjà utilisé. Soit l’appareil est utilisé en mode exclusif, soit l’appareil est utilisé en mode partagé et l’appelant a demandé à utiliser l’appareil en mode exclusif. - Défini sur True lorsque le délai d’acquisition du flux de l’appareil haut-parleur expire (audio).
- Défini sur False lorsque l’acquisition de l’appareil haut-parleur réussit.
Impossible d’entendre l’audio des participants à l’appel par le biais du haut-parleur. Lorsque la valeur est définie sur True, envoyez une notification visuelle à l’utilisateur final afin qu’il puisse vérifier si une autre application utilise le haut-parleur et essayer de la fermer.
speakerNotFunctioning Le haut-parleur ne fonctionne pas (échec de l’initialisation du client de l’appareil audio ou l’appareil est devenu inactif pendant plus de 5 secondes) - Défini sur True lorsque le haut-parleur n’est pas disponible ou si l’acquisition de flux de l’appareil expire (audio).
- Défini sur False lorsque l’acquisition de l’appareil haut-parleur réussit.
Impossible d’entendre l’audio des participants à l’appel par le biais du haut-parleur. Essayez de vérifier l’état de l’appareil haut-parleur.
microphoneBusy Le microphone est déjà utilisé. Soit l’appareil est utilisé en mode exclusif, soit l’appareil est utilisé en mode partagé et l’appelant a demandé à utiliser l’appareil en mode exclusif. - Défini sur True lorsque le délai d’acquisition du flux de l’appareil micro expire (audio).
- Défini sur False lorsque l’acquisition du micro réussit.
Votre audio n’atteint pas d’autres participants dans l’appel. Lorsque la valeur est définie sur True, envoyez une notification visuelle à l’utilisateur final afin qu’il puisse vérifier si une autre application utilise le micro et essayer de la fermer.

Accès aux diagnostics

Les diagnostics accessibles à l’utilisateur constituent une fonctionnalité étendue de l’API Call de base et vous permettent de diagnostiquer un appel actif.

let userFacingDiagnostics = self.call?.feature(Features.localUserDiagnostics)

Événements de diagnostics accessibles à l’utilisateur

  • Implémentez les délégués pour les sources de diagnostic media et network. MediaDiagnosticsDelegate et NetworkDiagnosticsDelegate.
extension CallObserver: MediaDiagnosticsDelegate {
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsCameraFrozen args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsSpeakerMuted args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsCameraStartFailed args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsSpeakerVolumeZero args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsSpeakerNotFunctioning args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsCameraPermissionDenied args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsMicrophoneNotFunctioning args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsCameraStartTimedOut args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsMicrophoneMutedUnexpectedly args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsZeroSpeakerDevicesAvailable args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...                            
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsZeroMicrophoneDevicesAvailable args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsSpeakingWhileMicrophoneIsMuted args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsSpeakerBusy args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsMicrophoneBusy args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
}

extension CallObserver: NetworkDiagnosticsDelegate {
  func networkDiagnostics(_ networkDiagnostics: NetworkDiagnostics,
                          didChangeIsNetworkRelaysUnreachable args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func networkDiagnostics(_ networkDiagnostics: NetworkDiagnostics,
                          didChangeNetworkReconnectionQuality args: DiagnosticQualityChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func networkDiagnostics(_ networkDiagnostics: NetworkDiagnostics,
                          didChangeNetworkSendQuality args: DiagnosticQualityChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func networkDiagnostics(_ networkDiagnostics: NetworkDiagnostics,
                          didChangeIsNetworkUnavailable args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func networkDiagnostics(_ networkDiagnostics: NetworkDiagnostics,
                          didChangeNetworkReceiveQuality args: DiagnosticQualityChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
}
  • Maintenez une référence aux diagnostics media et network, et définissez un objet délégué pour écouter les événements.
self.mediaDiagnostics = userFacingDiagnostics?.media
self.networkDiagnostics = userFacingDiagnostics?.network
self.mediaDiagnostics?.delegate = self.callObserver
self.networkDiagnostics?.delegate = self.callObserver

Remarque

Si vous avez CallKit activé via le kit de développement logiciel (SDK) ou implémentez l’intégration de CallKit dans votre application, la création de rapports sur l’état de désactivation de CallKit peut entraîner le relâchement du système d’exploitation pour des raisons de confidentialité qui entraîneraient le non-fonctionnement de l’événement didIsSpeakingWhileMicrophoneIsMuted comme prévu, car nous ne pouvons pas capturer l’entrée de l’appareil micro pour détecter que l’utilisateur parle.

Obtenir les derniers diagnostics accessibles à l’utilisateur

  • Obtenez les dernières valeurs de diagnostic qui ont été générées. Si nous n’avons toujours pas reçu de valeur pour le diagnostic, nil ou .unknown est retourné.
let lastSpeakerNotFunctionValue = self.mediaDiagnostics.latest.isSpeakerNotFunctioning // Boolean?
let lastNetworkRelayNotReachableValue = self.networkDiagnostics.latest.networkRelaysUnreachable // Boolean?
let lastReceiveQualityValue = self.networkDiagnostics.latest.networkReceiveQuality // DiagnosticQuality (.good, .poor, .bad)
// or .unknown if there isn't a diagnostic for this.

Valeurs des diagnostics

Les diagnostics accessibles à l’utilisateur sont les suivants :

Valeurs concernant le réseau

Nom Description Valeurs possibles Cas d’utilisation Étapes de correction
networkUnavailable Aucun réseau n’est disponible. - Défini sur True lorsqu’un appel ne peut pas démarrer, car aucun réseau n’est disponible.
- Défini sur False en cas de présence de candidats ICE.
L’appareil n’est pas connecté à un réseau. Assurez-vous que l’appel dispose d’une connexion Internet fiable qui peut supporter un appel vocal. Pour plus d’informations, consultez la section Optimisation du réseau.
networkRelaysUnreachable Problèmes avec un réseau. - Défini sur True lorsque le réseau comporte une contrainte qui ne vous permet pas d’atteindre les relais Azure Communication Services.
- Défini sur False lors de la réalisation d’un nouvel appel.
Pendant un appel lorsque le signal WiFi s’active et se désactive. Assurez-vous que les règles de pare-feu et le routage réseau autorisent le client à atteindre les serveurs Microsoft. Pour plus d’informations, consultez la section Configuration du pare-feu.
networkReconnectionQuality La connexion a été perdue et nous nous reconnectons au réseau. - Défini sur Bad lorsque le réseau est déconnecté
- Défini sur Poor quand la connectivité de transport de média est interrompue
- Défini sur Good lorsqu’une nouvelle session est connectée.
Faible bande passante, pas d’Internet Assurez-vous que l’appel dispose d’une connexion Internet fiable qui peut supporter un appel vocal. Pour plus d’informations, consultez la section Exigences en matière de bande passante réseau.
networkReceiveQuality Indicateur concernant la qualité du flux entrant. - Défini sur Bad en cas de problème grave de réception du flux.
- Défini sur Poor en cas de problème modéré de réception du flux.
- Défini sur Good lorsqu’il n’y a pas de problème de réception du flux.
- Il n’est visible que s’il existe un flux audio actif dans l’appel, ce qui signifie qu’un participant parle activement pendant une période donnée.
Bande passante faible Assurez-vous que l’appel dispose d’une connexion Internet fiable qui peut supporter un appel vocal. Pour plus d’informations, consultez la section Exigences en matière de bande passante réseau. Suggérez que l’utilisateur final désactive sa caméra pour conserver la bande passante Internet disponible.
networkSendQuality Indicateur concernant la qualité du flux sortant. - Défini sur Bad en cas de problème grave d’envoi du flux.
- Défini sur Poor en cas de problème modéré d’envoi du flux.
- Défini sur Good lorsqu’il n’y a pas de problème d’envoi du flux.
- Comme pour recevoir un diagnostic de qualité, il n’est visible que s’il existe un flux audio actif dans l’appel, ce qui signifie qu’un participant parle activement pendant une période. Mais il fonctionne uniquement dans un appel individuel, car il s’appuie sur des informations provenant de l’autre côté afin de vérifier la qualité. Où l’autre côté doit signaler les données reçues.
Bande passante faible Assurez-vous que l’appel dispose d’une connexion Internet fiable qui peut supporter un appel vocal. Pour plus d’informations, consultez la section Exigences en matière de bande passante réseau. Suggérez également que l’utilisateur final désactive sa caméra pour conserver la bande passante Internet disponible.

Valeurs concernant l’audio

Nom Description Valeurs possibles Cas d’utilisation Étapes de correction
noSpeakerDevicesAvailable Il n’y a aucun appareil de sortie audio (haut-parleur) sur le système de l’utilisateur. - Défini sur True lorsque le système ne comporte pas d’appareil haut-parleur, et que la sélection de haut-parleur est prise en charge.
- Défini sur False lorsque le système comporte au moins un appareil haut-parleur, et que la sélection de haut-parleur n’est pas prise en charge.
Tous les haut-parleurs sont débranchés Lorsque la valeur est définie sur True, envisagez d’envoyer une notification visuelle à l’utilisateur final expliquant que la session d’appel en cours n’a aucun haut-parleur disponible.
speakingWhileMicrophoneIsMuted Parler avec le micro désactivé. - Défini sur True lorsque le micro local est désactivé et que l’utilisateur local est en train de parler.
- Défini sur False lorsque l’utilisateur local cesse de parler ou réactive le micro.
- Cet événement de diagnostic peut être automatiquement désactivé s’il est déclenché un certain nombre de fois sans aucune action de l’utilisateur pour éviter le bruit et offrir une meilleure expérience utilisateur. Il sera réactivé lorsqu’une nouvelle action de désactivation du son se produit.
Pendant un appel, désactivez votre micro et parlez dedans. Lorsque la valeur est définie sur True, envisagez d’envoyer une notification visuelle à l’utilisateur final expliquant qu’il est peut-être en train de parler sans se rendre compte que son micro est coupé.
noMicrophoneDevicesAvailable Le système de l’utilisateur ne comporte aucun appareil de capture audio (micro) - Défini sur True lorsque le système ne comporte pas de micro.
- Défini sur False lorsque le système comporte au moins un micro.
Tous les micros sont débranchés pendant l’appel. Lorsque la valeur est définie sur True, envisagez d’envoyer une notification visuelle à l’utilisateur final, expliquant que la session d’appel en cours n’a pas de micro. Pour plus d’informations, consultez la section Activer le microphone à partir du gestionnaire d’appareils.
microphoneNotFunctioning Le micro ne fonctionne pas. - Défini sur True en cas d’échec de l’envoi du flux audio local parce que le micro a peut-être été désactivé dans le système ou qu’il est utilisé par un autre processus. Il faut environ 10 secondes pour déclencher ce périphérique.
- Défini sur False lorsque le micro recommence à envoyer correctement le flux audio.
Aucun micro disponible, accès au micro désactivé dans un système Lorsque la valeur est définie sur True, envisagez d’envoyer une notification visuelle à l’utilisateur final expliquant qu’il y a un problème avec son micro.
microphoneMuteUnexpectedly Le micro est désactivé - Défini sur True lorsque le micro est désactivé de manière inattendue.
- Défini sur False lorsque le micro commence à envoyer correctement le flux audio.
Le micro est désactivé dans le système. La plupart des cas se produisent lorsque l’utilisateur passe un appel Azure Communication Services sur un appareil mobile et qu’un appel téléphonique arrive. Dans la plupart des cas, le système d’exploitation désactive l’appel Azure Communication Services pour que l’utilisateur puisse répondre à l’appel. Lorsque la valeur est définie sur True, envisagez d’envoyer une notification visuelle à l’utilisateur final expliquant que le son de son appel a été coupé en raison d’un appel téléphonique entrant. Pour plus d’informations, consultez Gérer la désactivation d’un appel Azure Communication Services par le système d'exploitation.
microphonePermissionDenied Le volume de l’appareil est faible ou presque silencieux sous macOS. - Défini sur True lorsque l’autorisation audio est refusée par les paramètres système (audio).
- Défini sur False en cas de réussite d’acquisition de flux.
Remarque : ce diagnostic fonctionne uniquement sous macOS.
Les autorisations de micro sont désactivées dans les Paramètres. Lorsque la valeur est définie sur True, envoyez une notification visuelle à l’utilisateur final expliquant qu’il n’est pas autorisé à utiliser le micro pour un appel Azure Communication Services.

Valeurs concernant la caméra

Nom Description Valeurs possibles Cas d’utilisation Étapes de correction
cameraFrozen La caméra cesse de produire des images pendant plus de 5 secondes. - Défini sur True lorsque le flux de vidéo local est figé. Cela signifie que le côté distant voit votre vidéo figée sur son écran ou que les participants distants ne reçoivent pas votre vidéo sur leur écran.
- Défini sur False lorsque le blocage se termine et que les utilisateurs peuvent voir votre vidéo normalement.
La caméra a été perdue pendant l’appel ou un mauvais réseau a entraîné le blocage de la caméra. Lorsque la valeur est définie sur True, envisagez d’envoyer une notification visuelle à l’utilisateur final expliquant que le réseau du participant n’est peut-être pas de bonne qualité et lui suggérer de désactiver sa caméra pour économiser la bande passante. Pour plus d’informations, consultez la section relative à la bande passante réseau sur les capacités Internet nécessaires pour un appel Azure Communication Services.
cameraStartFailed Échec générique de la caméra. - Défini sur True en cas d’échec de l’envoi de vidéo locale parce que la caméra a peut-être été désactivée dans le système ou qu’elle est utilisée par un autre processus.
- Défini sur False lorsque la caméra sélectionnée parvient à nouveau à envoyer la vidéo locale.
Défaillances de caméra Lorsque la valeur est définie sur True, envoyez une notification visuelle à l’utilisateur final que sa caméra n’a pas réussi à démarrer.
cameraStartTimedOut Scénario courant où la caméra est dans un mauvais état de fonctionnement. - Défini sur True en cas d’expiration du délai d’attente d’envoi du flux vidéo de la caméra.
- Défini sur False lorsque la caméra sélectionnée parvient à nouveau à envoyer la vidéo locale.
Défaillances de caméra Lorsque la valeur est définie sur True, envoyez une notification visuelle à l’utilisateur final que sa caméra rencontre peut-être des problèmes. (Lorsque la valeur est définie sur False, supprimer la notification).
cameraPermissionDenied Les autorisations de caméra ont été refusées dans les paramètres. - Défini sur True lorsque l’autorisation de caméra est refusée dans les paramètres système (vidéo).
- Défini sur False en cas de réussite d’acquisition de flux.
Remarque : ce diagnostic fonctionne uniquement sous macOS Chrome.
Les autorisations de caméra sont désactivées dans les paramètres. Lorsque la valeur est définie sur True, envoyez une notification visuelle à l’utilisateur final expliquant qu’il n’est pas autorisé à utiliser la caméra pour un appel Azure Communication Services.
cameraStoppedUnexpectedly Dysfonctionnement de la caméra - Défini sur True lorsque la caméra bascule dans un état d’arrêt de manière inattendue.
- Défini sur False lorsque la caméra recommence à envoyer correctement le flux vidéo.
Vérifier que la caméra fonctionne correctement. Lorsque la valeur est définie sur True, envoyez une notification visuelle à l’utilisateur final que sa caméra rencontre peut-être des problèmes. (Lorsque la valeur est définie sur False, supprimer la notification).

Natif uniquement

Nom Description Valeurs possibles Cas d’utilisation Procédure d’atténuation
speakerVolumeIsZero Volume à zéro sur un appareil (haut-parleur). - Défini sur True lorsque le volume du haut-parleur est à zéro.
- Défini sur False lorsque le volume du haut-parleur n’est pas à zéro.
Impossible d’entendre l’audio des participants à l’appel. Lorsque la valeur est définie sur True, vous pouvez avoir accidentellement le volume au plus bas (zéro).
speakerMuted L’appareil haut-parleur est désactivé. - Défini sur True lorsque l’appareil haut-parleur est désactivé.
- Défini sur False lorsque l’appareil haut-parleur n’est pas désactivé.
Impossible d’entendre l’audio des participants à l’appel. Lorsque la valeur est définie sur True, vous avez peut-être désactivé accidentellement le haut-parleur.
speakerBusy Le haut-parleur est déjà utilisé. Soit l’appareil est utilisé en mode exclusif, soit l’appareil est utilisé en mode partagé et l’appelant a demandé à utiliser l’appareil en mode exclusif. - Défini sur True lorsque le délai d’acquisition du flux de l’appareil haut-parleur expire (audio).
- Défini sur False lorsque l’acquisition de l’appareil haut-parleur réussit.
Impossible d’entendre l’audio des participants à l’appel par le biais du haut-parleur. Lorsque la valeur est définie sur True, envoyez une notification visuelle à l’utilisateur final afin qu’il puisse vérifier si une autre application utilise le haut-parleur et essayer de la fermer.
speakerNotFunctioning Le haut-parleur ne fonctionne pas (échec de l’initialisation du client de l’appareil audio ou l’appareil est devenu inactif pendant plus de 5 secondes) - Défini sur True lorsque le haut-parleur n’est pas disponible ou si l’acquisition de flux de l’appareil expire (audio).
- Défini sur False lorsque l’acquisition de l’appareil haut-parleur réussit.
Impossible d’entendre l’audio des participants à l’appel par le biais du haut-parleur. Essayez de vérifier l’état de l’appareil haut-parleur.
microphoneBusy Le microphone est déjà utilisé. Soit l’appareil est utilisé en mode exclusif, soit l’appareil est utilisé en mode partagé et l’appelant a demandé à utiliser l’appareil en mode exclusif. - Défini sur True lorsque le délai d’acquisition du flux de l’appareil micro expire (audio).
- Défini sur False lorsque l’acquisition du micro réussit.
Votre audio n’atteint pas d’autres participants dans l’appel. Lorsque la valeur est définie sur True, envoyez une notification visuelle à l’utilisateur final afin qu’il puisse vérifier si une autre application utilise le micro et essayer de la fermer.

Accès aux diagnostics

Les diagnostics accessibles à l’utilisateur constituent une fonctionnalité étendue de l’API Call de base et vous permettent de diagnostiquer un appel actif.

this.diagnosticsCallFeature = call.Features.LocalUserDiagnostics;

Événements de diagnostics accessibles à l’utilisateur

  • Implémentez des écouteurs pour les événements de diagnostic.
private async void Call__OnNetworkUnavailableChanged(object sender, FlagDiagnosticChangedEventArgs args)
{
  var value = args.Value;
  // Handle the diagnostic event value changed...
}

// Listen to other network diagnostics

private async void Call__OnMediaSpeakerNotFunctioningChanged(object sender, FlagDiagnosticChangedEventArgs args)
{
  var value = args.Value;
  // Handle the diagnostic event value changed...
}

// Listen to other media diagnostics
  • Définissez les méthodes d’événement pour écouter les événements.
this.diagnosticsCallFeature = call.Features.LocalUserDiagnostics;
this.networkDiagnostics = diagnosticsCallFeature.Network;
this.mediaDiagnostics = diagnosticsCallFeature.Media;

this.networkDiagnostics.NetworkUnavailableChanged += Call__OnNetworkUnavailableChanged;
// Listen to other network events as well ... 

this.mediaDiagnostics.SpeakerNotFunctioningChanged += Call__OnMediaSpeakerNotFunctioningChanged;
// Listen to other media events as well ... 

// Removing listeners

this.networkDiagnostics.NetworkUnavailable -= Call__NetworkUnavailableChanged;
// Remove the other listeners as well ... 

this.mediaDiagnostics.SpeakerNotFunctioningChanged -= Call__OnMediaSpeakerNotFunctioningChanged;
// Remove the other listeners as well ... 

Obtenir les derniers diagnostics accessibles à l’utilisateur

  • Obtenez les dernières valeurs de diagnostic qui ont été générées dans l’appel en cours. Si nous n’avons toujours pas reçu de valeur pour le diagnostic, null ou .unknown est retourné.
this.diagnosticsCallFeature = call.Features.LocalUserDiagnostics;
this.networkDiagnostics = diagnosticsCallFeature.Network;
this.mediaDiagnostics = diagnosticsCallFeature.Media;

bool? lastSpeakerNotFunctionValue = this.mediaDiagnostics.GetLatestDiagnostics().IsSpeakerNotFunctioning; // Boolean?
bool? lastNetworkRelayNotReachableValue = this.networkDiagnostics.GetLatestDiagnostics().IsNetworkRelaysUnreachable; // Boolean?
DiagnosticQuality lastReceiveQualityValue = this.networkDiagnostics.GetLatestDiagnostics().NetworkReceiveQuality; // DiagnosticQuality (.good, .poor, .bad)
// or .unknown if there isn't a diagnostic for this.