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:
De provider registreren: registreer de providergegevens en laat de gebruikerslijst vastleggen met behulp van de API voor gespreksinformatie.
De media vorken: Vork de audiostream naar de recorders voor gespreksinformatie met behulp van een SIPREC-protocol.
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:
Stap 1: De provider registreren
API-toestemming voor opname van media toevoegen:
Ga in de Microsoft Entra ID-toepassing die u hebt gemaakt naar API-machtigingen.
Selecteer Een machtiging toevoegen.
Zoek onder API's die mijn organisatie gebruikt naar Mediaopname voor Dynamics 365 Sales en selecteer deze optie:
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.
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.
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.
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:
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.
Meld u als systeembeheerder aan in de Verkoophub-app.
Selecteer Instellingen voor Sales Insights in het wijzigingsgebied.
Ga naar Algemene instellingen>Gespreksinformatie. In het gedeelte Oproepproviders ziet u de externe provider die u hebt geregistreerd.
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.
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:
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.