Share via


Kiezers van derden integreren met Dynamics 365-gespreksinformatie (preview)

[Dit artikel maakt deel uit van de voorlopige documentatie en kan nog veranderen.]

Met deze integratie kunnen Dynamics 365-gebruikers kiezers gebruiken die worden geleverd door externe telefoniebedrijven, zoals Twilio Flex, voor het maken en ontvangen van telefoongesprekken in Dynamics 365 en voor het in realtime ophalen van door AI gegenereerde inzichten en uitgebreide analyse van hun gesprekken. Meer informatie over de configuratie van Dynamics 365-gespreksinformatie

Belangrijk

  • Dit is een preview-functie.
  • Preview-functies zijn niet bedoeld voor productiegebruik en bieden mogelijk beperkte functionaliteit. Voor deze functies gelden aanvullende gebruiksvoorwaarden. Bovendien zijn ze beschikbaar vóór een officiële release zodat klanten vroeg toegang kunnen krijgen en feedback kunnen geven.

Hoe de integratie werkt

Op hoog niveau bestaat de integratie uit drie delen:

  1. De provider registreren: registreer de providergegevens en laat de gebruikerslijst vastleggen met behulp van de API voor gespreksinformatie.

  2. De media vorken: Vork de audiostream naar de recorders voor gespreksinformatie met behulp van een SIPREC-protocol.

  3. Realtime gebeurtenissen verzenden: om de ervaring voor realtime transcriptie en gespreksinzichten mogelijk te maken, verzendt u UI-gebeurtenissen van de client-UI van de provider naar Dynamics 365-gespreksinformatie.

Zie Twilio Flex integreren met Dynamics 365-gespreksinformatie voor een voorbeeldintegratie tussen Dynamics 365-gespreksinformatie en een externe telefonieprovider, Twilio Flex.

In het volgende diagram wordt geïllustreerd hoe de integratie werkt:

Diagram dat de integratiestroom weergeeft

Stap 1: De provider registreren

  1. Een Microsoft Entra ID-toepassing maken.

  2. API-toestemming voor opname van media toevoegen:

    1. Ga in de Microsoft Entra ID-toepassing die u hebt gemaakt naar API-machtigingen.

    2. Selecteer Een machtiging toevoegen.

    3. Zoek onder API's die mijn organisatie gebruikt naar Mediaopname voor Dynamics 365 Sales en selecteer deze optie: Schermopname van de knop voor mediaopname

    4. Machtiging Users.Read.All toevoegen Machtiging toevoegen selecteren

    Opmerking

    Zorg ervoor dat u toestemming van de beheerder krijgt om de API voor gespreksinformatie in de app-context te kunnen aanroepen. Meer informatie over machtigingen en toestemming.

  3. Haal het token op voor het uitvoeren van API's voor gespreksinformatie met behulp van de app die in de vorige sectie is gemaakt:

    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=f448d7e5-e313-4f90-a3eb-5dbb3277e4b3/.default' -d 'client_secret=<your app secret>'

    De parameter scope specificeert de toepassings-id van de Gespreksinformatie-app. Wijzig deze waarde niet.

    Zie Microsoft Entra ID-tokens ophalen voor service-principals voor meer informatie over de curl-opdracht.

  4. Roep de volgende API voor gespreksinformatie aan om de externe serviceprovider te registreren:
    POST /api/v1.0/providers/tenants

    Geef de volgende parameters op in de aanvraagbody:

    • orgID: geef de id van de Dynamics 365-organisatie op.

    • Type: geef "aangepast" op voor kiezers van derden.

    • hosting: geef het hostingtype van de telefonieprovider op. Bijvoorbeeld 'cloud' of 'on-premises'.

    • AccountId geef de account-id van de telefonieprovider op.

    • CerfificateSubjectName en CertificateIssuer: geef de certificaatgegevens van de telefonieprovider op.

    • SourceIPNetwork: geef het IP-adres van de SIPREC-client op. Geef '0.0.0.0' op als u het IP-adres niet wilt beperken.
      In het volgende fragment ziet u een voorbeeld van de aanvraagbody:

      
      {
         "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"
         }
      }
      

    Zie de Swagger-documentatie voor meer informatie over de API.

  5. Roep de volgende API voor gespreksinformatie aan om de lijst met op te nemen gebruikers op te halen:
    GET /api/v1.0/providers/users

Nadat de Dynamics 365 Sales-beheerder het opnamebeleid heeft gemaakt, kan de provider dit eindpunt gebruiken om de media te filteren die worden gesplitst naar recorders voor gespreksinformatie.

Stap 2: De media vorken (SIPREC-integratie)

Recorders voor gespreksinformatie implementeren het standaard SIPREC-protocol.

De communicatie is beveiligd met behulp van SIPS (poort 5061) en SRTP-protocollen. De verificatie wordt uitgevoerd met behulp van mTLS in de SIPS-berichtverbinding en wordt gebaseerd op het certificaat dat aan de API is verstrekt. Dit betekent dat de provider voor een tenant moet zijn geregistreerd om een SIPS-verbinding tot stand te brengen.

De volgende schermopname illustreert de communicatie tussen de SIPREC-client en de SIPREC-server:

Schermopname van een voorbeeld van de communicatie tussen de SIPREC-client en de SIPREC-server.

De volgende metagegevens zijn vereist voor gespreksinformatie:

Kopteksten:

Koptekstnaam Beschrijving Voorbeeld van waarde
Oproep-id Unieke id van de oproep. Deze id wordt gebruikt om SIP-signalen en gebruikersacties, zoals het starten/stoppen van de opname, te correleren. efxxxxxxxxxxxxx
X-AccountId Unieke id van het account waartoe de oproep behoort. Deze id wordt gebruikt voor verificatie en autorisatie. Dit is dezelfde account-id die is geregistreerd in de API voor de tenant. ACxxxxxxxxxxxxxxxxxxxxxxx

Metagegevens

Sleutelnaam van metagegevens Beschrijving Voorbeeld van waarde
- Rol Geeft aan of het een inkomend of uitgaand gesprek voor de verkoper is. ["inkomend", "uitgaand"]
CallerDisplayName Weergavenaam van beller. Indien niet beschikbaar, wordt het telefoonnummer weergegeven. Kenny Smith
CalleeDisplayName Weergavenaam van ontvanger. Indien niet beschikbaar, wordt het telefoonnummer weergegeven. Alex Baker

Hier zijn voorbeelden van uitnodigings- en afscheidsberichten met de vereiste kopteksten en metagegevens:

UITNODIGINGS-bericht:

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

AFSCHEIDS-bericht:

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 

Ondersteunde recordereindpunten en -regio's

De volgende tabel geeft een overzicht van de ondersteunde recordereindpunten en hun regio's. In de instellingen van uw telefonieprovider kunt u instellen welke recorders u wilt gebruiken. Zie Stap 2: De SIPREC-connector installeren en de oproepen doorsturen naar Dynamics 365 voor meer informatie over hoe dit wordt gedaan voor Twilio Flex.

Eindpunt Regio
media.recording.dynamics.com Wereldwijd (dichtstbijzijnde regio)
southeastasia.media.recording.dynamics.com Azië - zuidoost
australiaeast.media.recording.dynamics.com Australië
sam.media.recording.dynamics.com Zuid-Amerika
canadacentral.media.recording.dynamics.com Canada
switzerlandnorth.media.recording.dynamics.com Zwitserland
eastus.media.recording.dynamics.com VS
francecentral.media.recording.dynamics.com Frankrijk
centralindia.media.recording.dynamics.com India
japaneast.media.recording.dynamics.com Japan
uae.media.recording.dynamics.com VAE
uksouth.media.recording.dynamics.com VK
westeurope.media.recording.dynamics.com Europa - west
zaf.media.recording.dynamics.com Zuid-Afrika

Stap 3: Realtime gebeurtenissen verzenden (clientintegratie van kiezer)

Om gespreksinformatie in staat te stellen realtime transcriptie en inzichten te bieden, kan de externe kiezer twee gebeurtenissen gebruiken om te melden wanneer een gesprek begint of eindigt.

  • Gebeurtenis Oproep gestart: wanneer gespreksinformatie de gebeurtenis "oproep gestart" ontvangt, worden de opnameknop en de realtime transcriptie en inzichten weergegeven.

  • Gebeurtenis Gesprek beëindigd: wanneer gespreksinformatie de gebeurtenis "gesprek beëindigd" krijgt, wordt het gesprek afgerond en wordt de knop Volledige samenvatting weergegeven om de door AI gegenereerde gesprekssamenvatting en inzichten op te halen.

Gebruik de raiseEvent API in Dynamics 365 Channel Integration Framework (CIF) om de gebeurtenissen te verzenden.

Hier is een voorbeeld van een codefragment om de gebeurtenissen te verzenden:

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

De integratie testen

Na het registreren van de nieuwe provider bij de tenant en het instellen van de SIPREC-forking en de clientkiezergebeurtenissen, kunt u de integratie testen door een nieuw opnamebeleid te maken bij de nieuwe provider.

  1. Meld u als systeembeheerder aan in de Verkoophub-app.

  2. Selecteer Instellingen voor Sales Insights in het wijzigingsgebied.

  3. Ga naar Algemene instellingen>Gespreksinformatie. In het gedeelte Oproepproviders ziet u de externe provider die u hebt geregistreerd.

  4. Maak een opnamebeleid voor de nieuwe provider. Zie Microsoft Teams instellen voor gespreksinformatie voor meer informatie

De volgende schermopname is een voorbeeld van een opnamebeleid voor Twilio.

schermopname van een opnamebeleid voor Twilio

Bel nu een gebruiker die deel uitmaakt van de geselecteerde beveiligingsrol (in ons voorbeeld is het beleid ingeschakeld voor alle beveiligingsrollen).

Wanneer Dynamics 365 de gebeurtenis callStarted van de kiezer ontvangt, hebt u de mogelijkheid om de opname te starten:

Schermopname van de melding om gesprekken op te nemen

Nadat u Opnemen hebt geselecteerd, kunt u de realtime transcriptie bekijken tijdens het gesprek en een volledige samenvatting en gespreksinzichten aan het einde van het gesprek.

De pagina met het gespreksoverzicht bekijken en begrijpen