Integrer tredjepartsoppringinger med samtaleintelligens i Dynamics 365 (forhåndsversjon)
[Denne artikkelen inneholder dokumentasjon for forhåndsversjonen og kan bli endret.]
Med denne integrasjonen kan Dynamics 365-brukere bruke oppringinger fra tredjeparts telefonselskaper, for eksempel Twilio Flex, til å foreta og motta telefonanrop i Dynamics 365, og få KI-generert innsikt i sanntid og omfattende analyse av telefonsamtalene. Finn ut mer om samtaleintelligens i Dynamics 365
Viktig
- Dette er forhåndsversjonsfunksjon.
- Forhåndsversjonsfunksjonene er ikke ment for produksjonsbruk og kan ha begrenset funksjonalitet. Disse funksjonene er underlagt tilleggsvilkår for bruk og er tilgjengelige før en offisielle utgivelse, slik at kunder kan få tidlig tilgang og gi tilbakemeldinger.
Slik fungerer integreringen
Integreringen på et høyere nivå består av tre deler:
Registrer leverandøren: Registrer leverandørdetaljene, og hent listen over brukere som skal registreres, ved å bruke for API-en for samtaleintelligens.
Forgren mediene: Forgren lydstrømmen til samtaleintelligensopptakerne ved å bruke en SIPREC-protokoll.
Sende hendelser i sanntid: Hvis du vil aktivere sanntidsavskrift og opplevelse av anropsinnsikt, sender du grensesnitthendelser fra leverandørens klientgrensesnitt til Dynamics 365-samtaleintelligens.
Hvis du vil ha et eksempel på integrering mellom samtaleintelligens i Dynamics 365 og en tredjeparts telefonileverandør, Twilio Flex, kan du se Integrer Twilio Flex med samtaleintelligens i Dynamics 365.
Diagrammet nedenfor viser hvordan integreringen fungerer:
Trinn 1: Registrer leverandøren
Legg til API-tillatelse for medieopptak:
I Microsoft Entra ID-programmet du opprettet, går du til API-tillatelser.
Velg Legg til en tillatelse.
Under API-er organisasjonen min bruker søker du etter Medieopptak for Dynamics 365 Sales og velger det:
Legg til tillatelsen Users.Read.All, og velg Legg til tillatelse
Merk
Sørg for å få administratorsamtykke for tillatelsen, slik at det går an å kalle opp API-en for samtaleintelligens i appkontekst. Finn ut mer om tillatelser og samtykke.
Hent tokenet for å kjøre API-ene for samtaleintelligens ved hjelp av appen du opprettet i forrige del:
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
angir program-ID-en for appen Samtaleintelligens. Ikke endre denne verdien.Hvis du vil ha mer informasjon om kommandoen curl, kan du se Hent Microsoft Entra-ID-tokener for tjenestekontohavere.
Kall opp følgende API for samtaleintelligens for å registrere tredjeparts tjenesteleverandør:
POST /api/v1.0/providers/tenants
Angi følgende parametere i forespørselsteksten:
orgID: Angi organisasjons-ID-en for Dynamics 365.
Type: Angi «egendefinert» for tredjepartsoppringinger.
hosting: Angi vertstypen for telefonileverandøren. Eksempel: «sky» eller «lokalt».
AccountId: Angi konto-ID-en for telefonileverandøren.
CerfificateSubjectName og CertificateIssuer: Angi sertifikatdetaljene for telefonileverandøren.
SourceIPNetwork: Angi IP-adressen til SIPREC-klienten. Angi «0.0.0.0» hvis du ikke vil begrense IP-adressen.
Snutten nedenfor er et eksempel på forespørselsteksten:{ "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" } }
Hvis du vil ha mer informasjon om API-en, kan du se dokumentasjonen for Swagger.
Kall opp følgende API for samtaleintelligens for å hente listen over brukere som skal tas opp:
GET /api/v1.0/providers/users
Etter at administratoren for Dynamics 365 Sales har opprettet opptakspolicyen, kan leverandøren bruke dette endepunktet til å filtrere mediene som blir forgrenet til samtaleintelligensopptakere.
Trinn 2: Forgren mediene (SIPREC-integrering)
Samtaleintelligensopptakere implementerer standard SIPREC-protokoll.
Kommunikasjonen sikres ved hjelp av protokollene SIPS (port 5061) og SRTP. Godkjenningen utføres ved hjelp av mTLS i SIPS-meldingstilkoblingen og er basert på sertifikatet som gis til API-et. Dette betyr at leverandøren må være registrert for en leier for å opprette SIPS-tilkobling.
Følgende skjermbilde illustrerer kommunikasjonen mellom SIPREC-klienten og SIPREC-serveren:
Følgende metadata kreves for samtaleintelligens:
Hoder:
Hodenavn | Beskrivelse | Verdieksempel |
---|---|---|
Samtale-ID | Unik identifikator for samtalen. Denne IDen brukes til å relatere SIP-signaler og brukerhandlinger, for eksempel start/stopp innspilling. | efxxxxxxxxxxxxx |
X-AccountId | Unik identifikator for kontoen som samtalen tilhører. Denne IDen brukes til godkjenning og autorisasjon. Dette er den samme konto-ID-en som er registrert i API-en for leieren. | ACxxxxxxxxxxxxxxxxxxxxxxx |
Metadata
Nøkkelnavn for metadata | Beskrivelse | Verdieksempel |
---|---|---|
Rolle | Angir om det er en inngående eller utgående samtale for selgeren. | ["inbound", "outbound"] |
CallerDisplayName | Visningsnavn for anroper. Telefonnummeret vises hvis navnet ikke er tilgjengelig. | Kenny Smith |
CalleeDisplayName | Mottakerens visningsnavn. Telefonnummeret vises hvis navnet ikke er tilgjengelig. | Alex Baker |
Her er eksempler på invitasjons- og avskjedsmeldinger med de nødvendige hodene og metadataene:
INVITE-melding:
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-melding:
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
Endepunkter og områder støttes for opptaker
Tabellen nedenfor viser støttede endepunkter for opptaker og områdene deres. Du kan konfigurere opptakerne du vil bruke, i innstillingene for telefonileverandør. Hvis du vil vite mer om hvordan dette gjøres for Twilio Flex, kan du se Trinn 2: Installer SIPREC-koblingen og rut samtalene til Dynamics 365.
Endepunkt | Område |
---|---|
media.recording.dynamics.com | Globalt (nærmeste område) |
southeastasia.media.recording.dynamics.com | Asia, sørøst |
australiaeast.media.recording.dynamics.com | Australia |
sam.media.recording.dynamics.com | Sør-Amerika |
canadacentral.media.recording.dynamics.com | Canada |
switzerlandnorth.media.recording.dynamics.com | Sveits |
eastus.media.recording.dynamics.com | – USA |
francecentral.media.recording.dynamics.com | Frankrike |
centralindia.media.recording.dynamics.com | India |
japaneast.media.recording.dynamics.com | Japan |
uae.media.recording.dynamics.com | UAE |
uksouth.media.recording.dynamics.com | Storbritannia |
westeurope.media.recording.dynamics.com | Europa, vest |
zaf.media.recording.dynamics.com | Sør-Afrika |
Trinn 3: Send hendelser i sanntid (oppringingens klientintegrering)
For å tillate at samtaleintelligens kan gi sanntidstranskripsjon og -innsikt, kan tredjepartsoppringingen bruke to hendelser til å varsle når en samtale starter eller slutter.
Samtale startet-hendelse: Når samtaleintelligens får hendelsen «samtale startet», vises opptaksknappen og sanntidstranskripsjonen og -innsikten.
Samtale avsluttet-hendelse: Når samtaleintelligens får hendelsen «samtale avsluttet», avsluttes samtalen og knappen Fullstendig sammendrag vises for å hente KI-generert samtalesammendrag og -innsikt.
Du kan sende hendelsen ved å bruke API-en raiseEvent i Dynamics 365 Channel Integration Framework (CIF).
Her er et eksempel på kodesnutt for sending av hendelsene:
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);
});
Test integreringen
Etter at du har registrert den nye leverandøren med leieren og konfigurert hendelsene for SIPREC-forgrening og klientoppringing, kan du teste integreringen ved å opprette en ny opptakspolicy med den nye leverandøren.
Logg deg på som en systemansvarlig i Salgssenter-appen.
I Endre område velger du Sales Insights-innstillinger.
Gå til Globale innstillinger>Samtaleintelligens. I delen Samtaleleverandører vises tredjepartsleverandøren du har registrert.
Opprett en opptakspolicy for den nye leverandøren. Hvis du vil ha mer informasjon, kan du se Konfigurer Microsoft Teams for samtaleintelligens
Følgende skjermbilde er et eksempel på en opptakspolicy for Twilio.
Ring nå en bruker som er en del av den valgte sikkerhetsrollen (i vårt eksempel er policyen aktivert for alle sikkerhetsroller).
Når Dynamics 365 mottar callStarted-hendelsen fra oppringingen, kan du starte opptaket:
Etter at du har valgt Ta opp, kan du se sanntidstranskripsjon under samtalen, og et fullstendig sammendrag og anropsinnsikt på slutten av samtalen.