Integrere opkaldsprogrammer fra tredjepart med Dynamics 365-samtaleintelligens (forhåndsversion)
[Denne artikel er til dokumentationen til den foreløbige udgivelse. Der kan forekomme ændringer.]
Med denne integration kan Dynamics 365-brugere bruge opkaldsprogrammer, der leveres af tredjepartstelefonifirmaer, f.eks. Twilio Flex, til at foretage og modtage telefonopkald i Dynamics 365 og få AI-genereret indsigt i realtid og omfattende analyse af opkald. Få mere at vide om Dynamics 365-samtaleintelligens
Vigtigt
- Dette er en forhåndsversion af funktionen.
- Forhåndsversionsfunktionerne er ikke beregnet til produktionsformål og kan have begrænset funktionalitet. Disse funktioner er underlagt supplerende vilkår for anvendelse, og er tilgængelige før en officiel udgivelse, så kunderne kan få tidlig adgang og give feedback.
Sådan fungerer integrationen
På et højt niveau består integrationen af tre dele:
Registrer udbyderen: Registrer udbyderoplysningerne, og få listen over brugere registreret ved hjælp af API'en med samtaleintelligens.
Forgren medierne: Forgren lydstrømmen til samtaleintelligensoptagerne ved hjælp af en SIPREC-protokol.
Send hændelser i realtid: Du kan aktivere oplevelse af indsigt i realtid ved at sende hændelser i brugergrænsefladen fra udbyderens brugergrænseflade til Dynamics 365-samtaleintelligens.
Hvis du vil have et eksempel på integration mellem Dynamics 365-samtaleintelligens og en tredjepartstelefoniudbyder, Twilio Flex, skal du se Integrere Twilio Flex med Dynamics 365-samtaleintelligens.
I følgende diagram illustreres denne integration:
Trin 1: Registrer udbyderen
Tilføj API-tilladelse til medieoptagelse:
Gå til API-tilladelser i det Microsoft Entra ID-program, du har oprettet.
Vælg Tilføj en tilladelse.
Under API'er, som min organisation bruger skal du søge efter Medieoptagelse til Dynamics 365 Sales og vælge den:
Tilføj Users.Read.All som tilladelse, og vælg Tilføj tilladelse
Bemærk
Sørg for at få administratorens samtykke til tilladelsen for at kunne kalde samtaleintelligens-API'en i appkonteksten. Få mere at vide om tilladelser og samtykke.
Hent tokenet til at køre Samtaleintelligens-API'er ved hjælp af den app, der blev oprettet i forrige afsnit:
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>'
Parameteren
scope
angiver program-id'et for appen Samtaleintelligens. Ret ikke denne værdi.Du kan finde flere oplysninger om kommandoen curl under Hent Microsoft Entra ID-tokens til tjenesteprincipaler.
Kald følgende API til samtaleintelligens for at registrere tredjepartstjenesteudbyderen:
POST /api/v1.0/providers/tenants
Angiv følgende parametre i anmodningens brødtekst:
orgID: Angiv Dynamics 365-organisationens id.
Type: Angiv "custom" for tredjeparts opkaldsprogrammer.
hosting: Angiv værtstypen af telefoniudbyderen. F.eks. "cloud" eller "on-premises".
AccountId: Angiv konto-id'et for telefoniudbyderen.
CerfificateSubjectName og CertificateIssuer: Angiv certifikatoplysningerne for telefoniudbyderen.
SourceIPNetwork: Angiv IP-adressen til SIPREC-klienten. Angiv "0.0.0.0", hvis du ikke vil begrænse IP-adressen.
Følgende kodestykke viser et eksempel på anmodningens brødtekst:{ "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" } }
Du kan finde flere oplysninger om API i Swagger-dokumentationen.
Kald følgende API til samtaleintelligens for at hente listen over brugere, der skal registreres:
GET /api/v1.0/providers/users
Når Dynamics 365 Sales-administratoren opretter en registreringspolitik, kan udbyderen bruge dette slutpunkt til at filtrere det medie, der skal forgrenes til samtaleintelligensens optagere.
Trin 2: Forgren mediet (SIPREC-integration)
Samtaleintelligensoptagere implementerer standardprotokollen SIPREC.
Kommunikationen sikres ved hjælp af SIPS- (port 5061) og SRTP-protokoller. Godkendelsen udføres ved hjælp af mTLS i forbindelse med SIPS-meddelelsesforbindelse, og den er baseret på det certifikat, der leveres til API'en – hvilket betyder, at udbyderen skal registreres for en lejer for at etablere SIPS-forbindelse.
I følgende skærmbillede illustreres kommunikationen mellem SIPREC-klienten og SIPREC-serveren:
Følgende metadata kræves for at kunne bruge samtaleintelligens:
Overskrifter:
Navn på overskrift | Beskrivelse | Eksempelværdi |
---|---|---|
Call-ID | Entydigt id for opkaldet. Dette id bruges til at korrelere SIP-signaler og brugerhandlinger, f.eks. start/stop-optagelse. | efxxxxxxxxxxxxx |
X-AccountId | Entydigt id for den konto, som opkaldet tilhører. Dette id bruges til godkendelse og autorisation. Det er det samme konto-id, der er registreret i API'en for lejeren. | ACxxxxxxxxxxxxxxxxxxxxxxx |
Metadata
Navn på metadatanøgle | Beskrivelse | Eksempelværdi |
---|---|---|
Rolle | Angiver, om det er et indgående eller udgående opkald til sælgeren. | ["inbound", "outbound"] |
CallerDisplayName | Opkalders viste navn. Hvis det ikke er tilgængeligt, vises telefonnummeret. | Kenny Smith |
CalleeDisplayName | Vist navn på modtager. Hvis det ikke er tilgængeligt, vises telefonnummeret. | Alex Baker |
Her er eksempler på invitationer og afskedsmeddelelser med de påkrævede overskrifter og metadata:
INVITE-meddelelse:
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--
BYE-meddelelse:
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
Optagerslutpunkter og områder understøttes
I følgende tabel vises de understøttede optagerslutpunkter og deres områder. Du kan konfigurere de optagere, du vil bruge, i indstillingerne for telefoniudbyderen. Du kan få mere at vide om, hvordan du gør det for Twilio Flex, i Trin 2: Installer SIPREC connector, og send opkaldene til Dynamics 365.
Slutpunkt | Land/område |
---|---|
media.recording.dynamics.com | Global (nærmeste område) |
southeastasia.media.recording.dynamics.com | Det sydøstlige Asien |
australiaeast.media.recording.dynamics.com | Australien |
sam.media.recording.dynamics.com | Sydamerika |
canadacentral.media.recording.dynamics.com | Canada |
switzerlandnorth.media.recording.dynamics.com | Schweiz |
eastus.media.recording.dynamics.com | US |
francecentral.media.recording.dynamics.com | Frankrig |
centralindia.media.recording.dynamics.com | Indien |
japaneast.media.recording.dynamics.com | Japan |
uae.media.recording.dynamics.com | Forenede Arabiske Emirater |
uksouth.media.recording.dynamics.com | Storbritannien |
westeurope.media.recording.dynamics.com | Det vestlige Europa |
zaf.media.recording.dynamics.com | Sydafrika |
Trin 3: Send hændelser i realtid (opkaldsprogrammets klientintegration)
For at give samtaleintelligens mulighed for at levere transskription og indsigt i realtid kan tredjepartens opkaldsprogram bruge to hændelser til at give besked, når et opkald starter eller slutter.
Hændelse, der starter opkald: Når samtaleintelligens får hændelsen "opkald startet", vises optagelsesknappen og transskription og indsigt i realtid.
Hændelse, der afslutter opkald: Når samtaleintelligensen får hændelsen "opkald afsluttet", afsluttes opkaldet, og knappen Komplet oversigt vises for at få AI-genereret opkaldsoversigt og indsigt.
Hvis du vil sende hændelserne, skal du bruge raiseEvent API i Dynamics 365-kanalintegrationsstruktur (CIF).
Her er et eksempel på kodestykke til afsendelse af hændelserne:
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);
});
Teste integrationen
Når du har registreret den nye udbyder hos lejeren og konfigureret SIPREC-forgrenings- og klientopkaldshændelser, kan du teste integrationen ved at oprette en ny optagelsespolitik med den nye udbyder.
Log på som systemadministrator i appen Salgshub.
Vælg Indstillinger for Sales Insights i ændringsområdet.
Gå til Globale indstillinger>Samtaleintelligens. I sektionen Opkaldsudbydere kan du se den tredjepartsudbyder, du har registreret.
Opret en optagelsespolitik for den nye udbyder. Der er flere oplysninger under Konfigurere Microsoft Teams til samtaleintelligens
Følgende skærmbillede er et eksempel på en optagelsespolitik for Twilio:
Kald nu en bruger, der er en del af den valgte sikkerhedsrolle (i eksemplet er politikken aktiveret for alle sikkerhedsroller).
Når Dynamics 365 modtager hændelsen callStarted fra opkaldsprogrammet, har du mulighed for at starte optagelsen:
Når du har valgt Optag, kan du se transskription i realtid under opkaldet samt en fuldstændig oversigt og opkaldsindsigt efter opkaldet.