Integrera uppringningsprogram från tredje part med Dynamics 365 konversationsintelligens (förhandsversion)
[Denna artikel är en förhandsversion av dokumentationen och kan komma att ändras.]
Med den här integreringen kan Dynamics 365-användare använda uppringningsprogram från tredje part, t.ex Twilio Flex, för att ringa och ta emot telefonsamtal i Dynamics 365 och få AI-genererad insikter och få detaljerade analyser efter samtal. Läs mer om konfiguration av Dynamics 365 konversationsintelligens
Viktigt!
- Detta är en förhandsversion.
- Förhandsversionsfunktioner ska inte användas i produktion och funktionerna kan vara begränsade. Funktionerna är föremål för kompletterande användningsvillkor så att kunder kan få tidig tillgång och ge feedback.
Så här fungerar integrationen
Integreringen på hög nivå består av tre delar:
Registrera leverantören: Registrera information om leverantören och se till att användarlistan registreras med hjälp av API:et för konversationsintelligens.
Förgrena media: Förgrena ljudströmmen till inspelare för konversationsintelligens med hjälp av SIPREC-protokollet.
Skicka händelser i realtid: För att möjliggöra transkription i realtid och samtalsinsikter, skicka användargränssnittshändelser från leverantörens klientgränssnitt till Dynamics 365-konversationsintelligens.
Ett exempel på integrering mellan Dynamics 365 konversationsintelligens och en tredjepartsleverantör av telefoni, Twilio Flex, se Integrera Twilio Flex med Dynamics 365 konversationsintelligens.
I följande diagram illustreras hur integrationen fungerar:
Steg 1: Registrera leverantören
Lägg till API-behörighet för medieinspelning:
I den Microsoft Entra ID-app du skapade, gå till API-behörigheter.
Välj Lägg till behörighet.
Under API:er som min organisation använder, sök efter Mediainspelning för Dynamics 365 Sales och välj den:
Lägg till behörigheter Users.Read.All och välj Lägg till behörighet
Kommentar
Se till att du får administratörsmedgivande för behörigheten för att kunna anropa konversationsintelligens-API:t i appkontext. Läs mer om behörigheter och samtycke.
Hämta tokens för att köra API:er för konversationsintelligens med appen som skapades i föregående avsnitt:
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>'
Parametern
scope
anger program-ID för appen Konversationsintelligens. Ändra inte detta värde.Mer information om curl-kommandot finns i Hämta Microsoft Entra ID-token för tjänsternas huvudnamn.
Anropa följande API för konversationsintelligens om du vill registrera tredjepartsleverantören:
POST /api/v1.0/providers/tenants
Ange följande parametrar i begärandetext:
orgID: Ange organisations-ID för Dynamics 365.
Typ: Ange "anpassad" för uppringningsprogram från tredje part.
hosting: Ange värdtyp för telefoniprovidern. Till exempel "moln" eller "lokal".
AccountId: Ange konto-ID för telefoniprovidern.
CerfificateSubjectName och CertificateIssuer: Ange certifikatinformationen för telefoniprovidern.
SourceIPNetwork: Ange IP-adressen för SIPREC-klienten. Ange "0.0.0.0" om du inte vill begränsa IP-adressen.
Följande kodavsnitt är ett exempel på begärandetexten.{ "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" } }
Mer information om API finns i Swagger-dokumentation.
Anropa följande API för konversationsintelligens om du vill visa listan över användare att registrera:
GET /api/v1.0/providers/users
När Dynamics 365 Sales-administratören skapar registreringspolicyn kan leverantören använda den slutpunkt för att filtrera media som ska förgrenas till konversationsintelligens.
Steg 2: Öka media (SIPREC-integrering)
Konversationsintelligens inspelare implementerar standard SIPREC-protokoll.
Kommunikationen säkras med SIPS (port 5061) och SRTP-protokoll. Autentiseringen sker med mTLS i SIPS-meddelandeanslutningen och baseras på det certifikat som tillhandahålls till API:t – vilket innebär att leverantören måste vara registrerad för att en hyresgäst ska kunna upprätta SIPS-anslutning.
I följande skärmbild illustreras kommunikationen mellan SIPREC-klienten och SIPREC-servern:
Följande metadata krävs för konversationsintelligens:
Rubriker:
Rubriknamn | Description | Värdeexempel |
---|---|---|
Samtals-ID | Unik identifierare för samtalet. Detta ID används för att korrelera SIP-signaler och användaråtgärder som att starta/stoppa inspelning. | efxxxxxxxxxxxxx |
X-AccountId | Unik identifierare för kontot som samtalet tillhör. Detta ID används för autentisering och auktorisering. Detta är samma konto-ID som är registrerat i API för klientorganisationen. | ACxxxxxxxxxxxxxxxxxxxxxxx |
Metadata
Namn på metadatanyckel | Description | Värdeexempel |
---|---|---|
Roll | Anger om det är ett inkommande eller utgående samtal för säljaren. | ["inkommande", "utgående"] |
CallerDisplayName | Uppringarens visningsnamn Om det inte finns tillgängligt visas telefonnummer. | Kenny Smith |
CalleeDisplayName | Mottagarens visningsnamn. Om det inte finns tillgängligt visas telefonnummer. | Alex Baker |
Här är exempel på inbjudan- och hej då-meddelanden med de obligatoriska rubrikerna och metadata:
INBJUDAN-meddelande:
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--
HEJ DÅ-meddelande:
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
Slutpunkter och regioner som stöds
I följande tabell visas de slutpunkter som stöds och deras regioner. Du kan konfigurera de inspelare som ska användas i telefonileverantörens inställningar. Mer information om hur du gör detta för Twilio Flex finns i Steg 2: Installera SIPREC-anslutningsprogrammet och dirigera samtalen till Dynamics 365.
Slutpunkt | Region |
---|---|
media.recording.dynamics.com | Global (närmaste region) |
southeastasia.media.recording.dynamics.com | Sydostasien |
australiaeast.media.recording.dynamics.com | Australien |
sam.media.recording.dynamics.com | Sydamerika |
canadacentral.media.recording.dynamics.com | Kanada |
switzerlandnorth.media.recording.dynamics.com | Schweiz |
eastus.media.recording.dynamics.com | US |
francecentral.media.recording.dynamics.com | Frankrike |
centralindia.media.recording.dynamics.com | Indien |
japaneast.media.recording.dynamics.com | Japan |
uae.media.recording.dynamics.com | UAE |
uksouth.media.recording.dynamics.com | Storbritannien |
westeurope.media.recording.dynamics.com | Västeuropa |
zaf.media.recording.dynamics.com | Sydafrika |
Steg 3: Skicka händelser i realtid (klientintegrering för uppringningsprogram)
Om du vill tillåta konversationsintelligens som ger inspelning med realtidstranskription och insikter kan uppringningsprogram från tredje part använda två händelser för att meddela när ett samtal startar eller slutar.
Samtal startade händelse: När konversationsintelligens får händelsen "samtal startat" visas knappen för inspelning med transkription och insikter i realtid.
Samtal avslutade händelse: När konversationsintelligens får händelsen samtal avslutat kommer det att avsluta samtalet och visa knappen fullständig sammanfattning för att få den AI-generade samtalssammanfattningen och insikter.
Om du vill skicka händelser använder du API:n raiseEvent i Dynamics 365 ramverk för kanalintegration (CIF).
Här är ett exempelkodavsnitt som kan skickas till händelserna:
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);
});
Testa integreringen
När du har registrerat den nya leverantören hos klientorganisationen och ställt in SIPREC-förgrening och händelserna för klientuppringning, kan du testa integrationen genom att skapa en ny registreringspolicy med den nya leverantören.
Logga in som systemadministratör i appen Försäljningsnav.
Från ändringsområdet väljer du Inställningar för Sales Insights.
Gå till Globala inställningar>Konversationsintelligens. I avsnittet Samtalsleverantörer visas den tredjepartsleverantör som du har registrerat.
Skapa en registreringspolicy för den nya leverantören. Mer information finns i Konfigurera Microsoft Teams för konversationsintelligens
Följande skärmbild är ett exempel på en inspelningspolicy för Twilio:
Ring nu en användare som är en del av säkerhetsroll (i vårt exempel är principen aktiverad för alla säkerhetsroller).
När Dynamics 365 tar emot callStarted-händelsen från uppringaren har du möjlighet att starta registreringen:
När du har valt spela in, kan du se transkriptionen i realtid under samtalet och en fullständig sammanfattning och samtalsinsikter i slutet av samtalet.