Partager via


Intégrer des numéroteurs tiers à l’intelligence conversationnelle de Dynamics 365 (version préliminaire)

[Cet article fait partie de la documentation en version préliminaire et peut faire l’objet de modifications.]

Grâce à cette intégration, les utilisateurs de Dynamics 365 peuvent utiliser des numéroteurs fournis par des sociétés de téléphonie tierces telles que Twilio Flex, pour passer et recevoir des appels téléphoniques dans Dynamics 365, et obtenir des informations en temps réel générées par l’IA et une analyse post-appel enrichie de leurs appels. En savoir plus sur l’intelligence conversationnelle de Dynamics 365

Important

  • Cette fonctionnalité est en version préliminaire.
  • Les fonctionnalités en version préliminaire ne sont pas destinées à une utilisation en production et peuvent être restreintes. Ces fonctionnalités sont soumises à des conditions d’utilisation supplémentaires, et sont disponibles avant une version officielle de telle sorte que les clients puissent tirer parti d’un accès anticipé et fournir leurs commentaires.

Fonctionnement de l’intégration

À un niveau supérieur, l’intégration se compose de trois parties :

  1. Enregistrer le fournisseur : enregistrez les détails du fournisseur et obtenez la liste des utilisateurs à enregistrer à l’aide de l’API de l’intelligence conversationnelle.

  2. Dupliquer les médias : dupliquez le flux audio vers les enregistreurs de l’intelligence conversationnelle à l’aide d’un protocole SIPREC.

  3. Envoyez des événements en temps réel : Pour activer la transcription en temps réel et l’expérience d’informations sur les appels, envoyez les événements de l’interface utilisateur de l’interface utilisateur client du fournisseur vers l’intelligence conversationnelle Dynamics 365.

Pour un exemple d’intégration entre l’intelligence conversationnelle Dynamics 365 et un fournisseur de téléphonie tiers, Twilio Flex, voir Intégrer Twilio Flex avec l’intelligence conversationnelle Dynamics 365.

Le diagramme suivant illustre le fonctionnement de l’intégration :

Diagramme illustrant le flux d’intégration

Étape 1 : Enregistrer le fournisseur

  1. créer une application Microsoft Entra ID.

  2. Ajouter une autorisation API pour l’enregistrement média :

    1. Dans l’application Microsoft Entra ID que vous avez créée, accédez à Autorisations API.

    2. Sélectionnez Ajouter une autorisation.

    3. Sous API utilisées par mon organisation, recherchez Enregistrement média pour Dynamics 365 Sales et sélectionnez-le : Capture d’écran de l’option d’enregistrement média

    4. Ajouter l’autorisation Users.Read.All et sélectionner Ajouter une autorisation

    Remarque

    Veillez à bien obtenir le consentement de l’administrateur pour pouvoir appeler l’API de l’intelligence conversationnelle dans le contexte de l’application. En savoir plus sur les autorisations et le consentement.

  3. Obtenez le jeton pour exécuter les API de l’intelligence conversationnelle à l’aide de l’application créée dans la section précédente :

    curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/token -d 'client_id=<your app id>' -d 'grant_type=client_credentials' -d 'scope=00001111-aaaa-2222-bbbb-3333cccc4444/.default' -d 'client_secret=<your app secret>'

    Le paramètre scope spécifie l’ID d’application de l’application d’intelligence conversationnelle. Ne changez pas cette valeur.

    Pour plus d’informations sur la commande Curl, voir Obtenir des ID de jetons Microsoft Entra pour les principaux de service.

  4. Appelez l’API de l’intelligence conversationnelle pour enregistrer le fournisseur de services tiers :
    POST /api/v1.0/providers/tenants

    Spécifiez les paramètres suivants dans le corps de la demande :

    • orgID : spécifiez l’ID d’organisation Dynamics 365.

    • Type : spécifiez « personnalisé » pour les numéroteurs tiers.

    • hébergement : spécifiez le type d’hébergement du fournisseur de téléphonie. Par exemple, « cloud » ou « local ».

    • AccountId : spécifiez l’ID de compte du fournisseur de téléphonie.

    • CerfificateSubjectName et CertificateIssuer : spécifiez les détails du certificat du fournisseur de téléphonie.

    • SourceIPNetwork : indiquez l’adresse IP du client SIPREC. Spécifiez « 0.0.0.0 » si vous ne souhaitez pas limiter l’adresse IP.
      L’extrait suivant est un exemple du corps de la demande :

      
      {
         "orgId": "ad3dca46-962a-4895-9f85-d25f3828781f",
         "Type": "custom",
         "hosting": "cloud",
         "displayName": "Test Custom Provider",
         "AuthenticationDetails": 
         {
             "AccountId":"adxxxxx-xxxx-xxxx-xxxx-xxxxxxxx",
             "CertificateSubjectName": "certSubject",
             "CertificateIssuer": "issuer",
             "SourceIPNetwork": "0.0.0.0"
         }
      }
      

    Pour plus d’informations sur l’API, consultez la Documentation Swagger.

  5. Appelez l’API de l’intelligence conversationnelle suivante pour obtenir la liste des utilisateurs à enregistrer :
    GET /api/v1.0/providers/users

Une fois que l’administrateur Dynamics 365 Sales a créé la stratégie d’enregistrement, le fournisseur peut utiliser ce point de terminaison pour filtrer les médias qui seront transmis aux enregistreurs de l’intelligence conversationnelle.

Etape 2 : Dupliquer le média (intégration SIPREC)

Les enregistreurs de l’intelligence conversationnelle implémentent la norme Protocole SIPREC.

La communication est sécurisée à l’aide des protocoles SIPS (port 5061) et SRTP. L’authentification se fait à l’aide de mTLS dans la connexion du message SIPS et est basée sur le certificat fourni à l’API, ce qui signifie que le fournisseur doit être enregistré auprès d’un client pour établir une connexion SIPS.

La capture d’écran suivante illustre la communication entre le client SIPREC et le serveur SIPREC :

Capture d’écran d’un exemple de communication entre le client SIPREC et le serveur SIPREC.

Les métadonnées suivantes sont requises pour l’intelligence conversationnelle :

En-têtes :

Nom de l’en-tête Description Exemple de valeur
Identification d’appel Identificateur unique de l’appel. Cet identifiant est utilisé pour corréler les signaux SIP et les actions de l’utilisateur telles que démarrer/arrêter l’enregistrement. efxxxxxxxxxxxx
X-AccountId Identificateur unique du compte auquel l’appel appartient. Cet identifiant est utilisé pour l’authentification et l’autorisation. Il s’agit du même ID de compte enregistré dans l’API pour le client. ACxxxxxxxxxxxxxxxxxxxxxxx

Metadata

Nom de la clé des métadonnées Description Exemple de valeur
Rôle Indique s’il s’agit d’un appel entrant ou sortant pour le vendeur. ["inbound", "outbound"]
CallerDisplayName Nom d’affichage de l’appelant. S’il n’est pas disponible, le numéro de téléphone s’affiche. Antoine Dupont
CalleeDisplayName Nom complet du destinataire. S’il n’est pas disponible, le numéro de téléphone s’affiche. Alex Boulanger

Voici des exemples de messages d’invitation et d’au revoir avec les en-têtes et métadonnées requis :

Message INVITATION :

INVITE sip:SRS@media.recording.dynamics.com:5061;transport=tls SIP/2.0 
Via: SIP/2.0/TLS 84.172.x.x:5061;branch=z9hG4bK4fa2.cdabfe83d76d3c41987802096d3b342a.0;received=172.16.x.x;rport=40334 
Via: SIP/2.0/UDP 172.25.x.x:5060;rport=5060;branch=z9hG4bK917ce574-0345-4c3d-9b63-d98c2c57dbe6_c3356d0b_599-10236398515455707148 
To: <sip:SRS@media.recording.dynamics.com:5061;transport=tls> 
From: <sip:SRC@sip.provider.com>;tag=66790678_c3356d0b_917ce574-0345-4c3d-9b63-d98c2c57dbe6 
Call-ID: efab0870bc597cb3fb56010921e2f57f 
CSeq: 1 INVITE 
Contact: <sip:SRC@172.25.x.x:5060;transport=udp>;+sip.src 
Max-Forwards: 67 
Record-Route: <sip:84.172.x.x:5061;transport=tls;r2=on;lr>,<sip:84.172.x.x;r2=on;lr> 
User-Agent: provider Gateway 
Allow: INVITE,ACK,CANCEL,OPTIONS,BYE,REFER,NOTIFY 
Require: siprec 
Content-Length: 3194 
Content-Type: multipart/mixed;boundary=\"----=_Part_1253_283419664.1674116473425\" 
Min-SE: 35 
X-AccountId: ACxxxxxxxxxxxxxxxxxxxx 
------=_Part_1253_283419664.1674116473425 

Content-Type: application/sdp 
v=0 
o=root 1176539620 1176539620 IN IP4 172.18.x.x 
s=provider Media Gateway 
c=IN IP4 84.172.x.x 
t=0 0 
m=audio 15352 RTP/SAVP 0 8 101 
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:<Encryption_key>
a=rtpmap:0 PCMU/8000 
a=rtpmap:8 PCMA/8000 
a=rtpmap:101 telephone-event/8000 
a=fmtp:101 0-16 
a=ptime:20 
a=maxptime:20 
a=sendonly 
a=label:inbound 
m=audio 16022 RTP/SAVP 0 8 101 
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:<Encryption_key> 
a=rtpmap:0 PCMU/8000 
a=rtpmap:8 PCMA/8000 
a=rtpmap:101 telephone-event/8000 
a=fmtp:101 0-16 
a=ptime:20 
a=maxptime:20 
a=sendonly 
a=label:outbound 
------=_Part_1253_283419664.1674116473425 

Content-Type: application/rs-metadata+xml 
Content-Disposition: recording-session 
<?xml version=\"1.0\" encoding=\"UTF-8\"?> 
<recording xmlns='urn:ietf:params:xml:ns:recording:1'> 
    <datamode>complete</datamode> 
    <session session_id=\"Wd/putWgTWCW2z1lI5Db9w==\"> 
            <ExtensionParameters  xmlns=\"http://provider.com/siprec\"> 
                    <Parameter name=\"Role\" value=\"inbound\"/> 
                    <Parameter name=\"CallerDisplayName\" value=\"Kiana Anderson\"/> 
                    <Parameter name=\"CalleeDisplayName\" value=\"Tomas Richardson\"/> 
            </ExtensionParameters> 
    </session> 
        <participant participant_id=\"bXCloPcETS6P/kfeeJtiow==\"> 
            <nameID aor=\"EE5C7EF0\"/> 
        </participant> 
        <participant participant_id=\"3nPi8XzBSzWrtSLlkU8Gjw==\"> 
            <nameID aor=\"230908\"/> 
        </participant> 
        <stream stream_id=\"9xff8FcdRUaJCSTxWFbV9g==\" session_id=\"Wd/putWgTWCW2z1lI5Db9w==\"><label>inbound</label></stream> 
        <stream stream_id=\"f/Qezx4jTMqiWSB1vW7oJA==\" session_id=\"Wd/putWgTWCW2z1lI5Db9w==\"><label>outbound</label></stream> 
    <sessionrecordingassoc session_id=\"Wd/putWgTWCW2z1lI5Db9w==\"> 
        <associate-time>2023-01-19T08:21:13.382512Z</associate-time> 
    </sessionrecordingassoc> 
        <participantsessionassoc participant_id=\"bXCloPcETS6P/kfeeJtiow==\" session_id=\"Wd/putWgTWCW2z1lI5Db9w==\"> 
            <associate-time>2023-01-19T08:21:13.382512Z</associate-time> 
        </participantsessionassoc> 
        <participantsessionassoc participant_id=\"3nPi8XzBSzWrtSLlkU8Gjw==\" session_id=\"Wd/putWgTWCW2z1lI5Db9w==\"> 
            <associate-time>2023-01-19T08:21:13.382512Z</associate-time> 
        </participantsessionassoc> 
        <participantstreamassoc participant_id=\"bXCloPcETS6P/kfeeJtiow==\"> 
                <send>9xff8FcdRUaJCSTxWFbV9g==</send> 
                <recv>f/Qezx4jTMqiWSB1vW7oJA==</recv> 
        </participantstreamassoc> 
        <participantstreamassoc participant_id=\"3nPi8XzBSzWrtSLlkU8Gjw==\"> 
                <send>f/Qezx4jTMqiWSB1vW7oJA==</send> 
                <recv>9xff8FcdRUaJCSTxWFbV9g==</recv> 
        </participantstreamassoc> 
</recording> 
------=_Part_1253_283419664.1674116473425--

Message AU REVOIR :

BYE sip:SRS@media.recording.dynamics.com:5061;transport=tls SIP/2.0 
Via: SIP/2.0/TLS 84.172.x.x:5061;branch=z9hG4bK1fa2.d03c36b567136fcfae84281e926cda62.0;received=172.16.x.x;rport=40334 
Via: SIP/2.0/UDP 172.25.x.x:5060;rport=5060;received=84.144.x.x;branch=z9hG4bK917ce574-0345-4c3d-9b63-d98c2c57dbe6_c3356d0b_600-2513288074170844985 
To: <sip:SRS@media.recording.dynamics.com:5061;transport=tls>;tag=OXFWHPJQTL 
From: <sip:SRC@sip.provider.com>;tag=66790678_c3356d0b_917ce574-0345-4c3d-9b63-d98c2c57dbe6 
Call-ID: efab0870bc597cb3fb56010921e2f57f 
CSeq: 2 BYE 
Max-Forwards: 68 
User-Agent: provider Gateway 
Require: siprec 
Content-Length: 901 
Content-Type: multipart/mixed;boundary=\"----=_Part_29418_1017575873.1674116842924\" 
X-AccountId: ACxxxxxxxxxxxxx 

Points de terminaison et régions d’enregistrement pris en charge

Le tableau suivant répertorie les terminaux d’enregistrement pris en charge et leurs régions. Vous pouvez configurer les enregistreurs que vous souhaitez utiliser dans les paramètres de votre fournisseur de téléphonie. Pour en savoir plus sur la procédure à suivre pour Twilio Flex, consultez Étape 2 : Installer le connecteur SIPREC et acheminer les appels vers Dynamics 365.

Point de terminaison Région
media.recording.dynamics.com Global (région la plus proche)
southeastasia.media.recording.dynamics.com Asie du Sud-Est
australiaeast.media.recording.dynamics.com Australie
sam.media.recording.dynamics.com Amérique du Sud
canadacentral.media.recording.dynamics.com Canada
switzerlandnorth.media.recording.dynamics.com Suisse
eastus.media.recording.dynamics.com États-Unis
francecentral.media.recording.dynamics.com France
centralindia.media.recording.dynamics.com Inde
japaneast.media.recording.dynamics.com Japon
uae.media.recording.dynamics.com Émirats arabes unis
uksouth.media.recording.dynamics.com Royaume-Uni
westeurope.media.recording.dynamics.com Europe Ouest
zaf.media.recording.dynamics.com Afrique du Sud

Étape 3 : Envoyer des événements en temps réel (intégration du client du numéroteur)

Pour permettre à l’intelligence conversationnelle de fournir une transcription et des informations en temps réel, le numéroteur tiers peut utiliser deux événements pour notifier le début ou la fin d’un appel.

  • Événement d’appel démarré : lorsque l’intelligence conversationnelle reçoit l’événement « appel démarré », elle affiche le bouton d’enregistrement, ainsi que la transcription et les informations en temps réel.

  • Événement de fin d’appel : lorsque l’intelligence conversationnelle reçoit l’événement « Appel terminé », elle conclut l’appel et affiche le bouton Résumé complet pour obtenir le résumé de l’appel généré par l’IA et des informations.

Pour envoyer les événements, utilisez l’API raiseEvent dans l’environnement d’intégration du canal de Dynamics 365.

Voici un exemple d’extrait de code pour envoyer les événements :

export interface CallStartedEvent { 
  callId: string; 
  startTime: Date; 
  isIncomingCall: boolean; 
  contactNumber: string; 
  contactName: string; 
} 

export interface CallEndedEvent { 
  callId: string; 
  callDurationInSeconds: number; 
  callTerminationReason: string; // ['success', 'error'] 
  callEndTime: Date; 
  isCallStarted: boolean; 
} 

dialer.Actions.addListener('onCallStarted', (payload: any) => { 
  const callStartedEvent : CallStartedEvent = { 
    callId: payload.call_sid, 
    startTime: new Date(), 
    isIncomingCall: payload.attributes.is_incoming_call, 
    contactName: payload.attributes.caller_name, 
    contactNumber: payload.attributes.caller_phone_number 
  }; 

  // @ts-ignore 
  Microsoft.CIFramework.raiseEvent('WIDGET_CALL_STARTED', callStartedEvent); 
}); 

dialer.Actions.addListener('onCallEnded', (payload: any) => { 
  const callEndedEvent : CallEndedEvent = { 
    callId: payload.call_sid, 
    callEndTime: new Date(), 
    callTerminationReason: 'success', 
    isCallStarted: true, 
    callDurationInSeconds: payload.attributes.call_length 
  }; 

  // @ts-ignore 
  Microsoft.CIFramework.raiseEvent('WIDGET_CALL_ENDED', callEndedEvent); 
});

Tester l’intégration

Après avoir enregistré le nouveau fournisseur auprès du locataire et configuré la duplication SIPREC et les événements du numéroteur client, vous pouvez tester l’intégration en créant une stratégie d’enregistrement avec le nouveau fournisseur.

  1. Connectez-vous en tant qu’administrateur système dans l’application Centre des ventes.

  2. Dans la zone de modification, sélectionnez Paramètres de Sales Insights.

  3. Accédez à Paramètres globaux>Intelligence conversationnelle. Dans la section Fournisseurs d’appels, vous voyez le fournisseur tiers que vous avez enregistré.

  4. Créez une stratégie d’enregistrement pour le nouveau fournisseur. Pour plus d’informations, voir Configurer Microsoft Teams pour l’intelligence conversationnelle

La capture d’écran suivante est un exemple de stratégie d’enregistrement pour Twilio.

capture d’écran d’une stratégie d’enregistrement pour Twilio

Maintenant, appelez un utilisateur qui fait partie du rôle de sécurité sélectionné (dans notre exemple, la stratégie est activée pour tous les rôles de sécurité).

Lorsque Dynamics 365 reçoit l’événement callStarted du numéroteur, vous avez la possibilité de démarrer l’enregistrement :

Capture d’écran de la notification pour enregistrer les appels

Après avoir sélectionné Enregistrer, vous pouvez voir la transcription en temps réel pendant l’appel et un résumé complet et des informations sur l’appel à la fin de l’appel.

Afficher et comprendre la page de résumé des appels