Integrirajte klicnike drugih proizvajalcev z Dynamics 365 obveščanje o pogovorih (predogledna različica)
[Ta članek je del predizdajne dokumentacije in se lahko spremeni.]
S to integracijo lahko uporabniki Dynamics 365 uporabljajo klicalnike, ki jih zagotavljajo druga telefonska podjetja, kot je Twilio Flex, za klicanje in sprejemanje telefonskih klicev v Dynamics 365 ter pridobijo vpoglede, ki jih ustvari umetna inteligenca v realnem času, in bogato analizo svojih klicev po klicu. . Izvedite več o pogovorni inteligenci Dynamics 365
Pomembno
- To je funkcija predogleda.
- Predogledne različice funkcij niso za komercialno uporabo in njihovo delovanje je lahko omejeno. Za te funkcije veljajo dodatni pogoji uporabe in so na voljo pred uradno izdajo, tako da lahko stranke dobijo zgodnji dostop in pošljejo povratne informacije.
Kako integracija deluje
Na visoki ravni je integracija sestavljena iz treh delov:
Registrirajte ponudnika: Registrirajte podrobnosti ponudnika in pridobite seznam uporabnikov, ki ga želite zabeležiti, z uporabo API-ja obveščanje o pogovorih.
Razcepi medije: Razcepi zvočni tok na snemalnike obveščanje o pogovorih s protokolom SIPREC.
Pošiljanje dogodkov v realnem času: Če želite omogočiti prepis v realnem času in izkušnjo vpogledi v klice, pošljite dogodke uporabniškega vmesnika iz uporabniškega vmesnika odjemalca ponudnika v Dynamics 365 obveščanje o pogovorih.
Za primer integracije med Dynamics 365 obveščanje o pogovorih in zunanjim ponudnikom telefonije, Twilio Flex, glejte Integrirajte Twilio Flex z Dynamics 365 obveščanje o pogovorih.
Naslednji diagram prikazuje, kako deluje integracija:
Korak 1: Registrirajte ponudnika
Dodajte dovoljenje API za snemanje medijev:
V aplikaciji Microsoft Entra ID, ki ste jo ustvarili, pojdite na Dovoljenja API-ja.
Izberite Dodaj dovoljenje.
Pod API-ji, ki jih uporablja moja organizacija poiščite Media Recording for Dynamics 365 Sales in ga izberite:
Dovoljenje Add Users.Read.All in izberite Dodaj dovoljenje
opomba,
Prepričajte se, da ste pridobili soglasje skrbnika za dovoljenje za klic obveščanje o pogovorih API v kontekstu aplikacije. Več o dovoljenjih in soglasju.
Pridobite žeton za zagon API-jev obveščanje o pogovorih z uporabo aplikacije, ustvarjene v prejšnjem razdelku:
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>'
Parameter
scope
določa ID aplikacije aplikacije obveščanje o pogovorih. Ne spreminjajte te vrednosti.Za več informacij o ukazu curl glejte Get Microsoft Entra ID žetonov za principale storitve.
Pokličite ta obveščanje o pogovorih API, da registrirate ponudnika storitev tretje osebe:
POST /api/v1.0/providers/tenants
V telesu zahteve določite naslednje parametre:
orgID: Določite ID organizacije Dynamics 365.
Vrsta: Določite "po meri" za klicnike drugih proizvajalcev.
gostovanje: Določite vrsto gostovanja ponudnika telefonije. Na primer "oblak" ali "na mestu uporabe".
AccountId: Določite ID računa ponudnika telefonije.
CertificateSubjectName in CertificateIssuer: Določite podrobnosti potrdila ponudnika telefonije.
SourceIPNetwork: Določite naslov IP odjemalca SIPREC. Podajte "0.0.0.0", če ne želite omejiti naslova IP.
Naslednji izrezek je primer telesa zahteve:{ "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" } }
Za več informacij o API-ju glejte dokumentacijo Swagger.
Pokličite ta obveščanje o pogovorih API, da dobite seznam uporabnikov za snemanje:
GET /api/v1.0/providers/users
Ko skrbnik za Dynamics 365 Sales ustvari pravilnik za snemanje, lahko ponudnik uporabi ta končna točka za filtriranje medijev, ki bodo razdeljeni na snemalnike obveščanje o pogovorih.
Korak 2: Razcepi medije (integracija SIPREC)
Obveščanje o pogovorih zapisovalniki izvajajo standardni SIPREC protokol.
Komunikacija je zavarovana s protokoloma SIPS (port 5061) in SRTP. Preverjanje pristnosti poteka z uporabo mTLS v sporočilni povezavi SIPS in temelji na potrdilu, posredovanem API-ju – kar pomeni, da mora biti ponudnik registriran, da lahko najemnik vzpostavi SIPS povezava.
Naslednji posnetek zaslona prikazuje komunikacijo med odjemalcem SIPREC in strežnikom SIPREC:
Za obveščanje o pogovorih so potrebni naslednji metapodatki:
Glave:
Ime glave | Opis | Primer vrednosti |
---|---|---|
ID klica | Enolični identifikator klica. Ta ID se uporablja za korelacijo signalov SIP in uporabniških dejanj, kot je začetek/ustavitev snemanja. | efxxxxxxxxxxxxxxx |
X-AccountId | Enolični identifikator računa, ki mu pripada klic. Ta ID se uporablja za avtentikacijo in avtorizacijo. To je isti ID računa, registriran v API-ju za najemnika. | ACxxxxxxxxxxxxxxxxxxxxxxxx |
Metapodatki
Ime ključa metapodatkov | Opis | Primer vrednosti |
---|---|---|
Vloga | Označuje, ali gre za dohodni ali odhodni klic za prodajalca. | ["inbound", "outbound"] |
CallerDisplayName | Klicatelj prikazno ime. Če ni na voljo, se prikaže telefonska številka. | Kenny Smith |
CalleeDisplayName | Prejemnikov prikazno ime. Če ni na voljo, se prikaže telefonska številka. | Alex Baker |
Tu so primeri povabil in poslovilnih sporočil z zahtevanimi glavami in metapodatki:
Sporočilo VABILO:
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--
Adijo sporočilo:
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
Podprte končne točke in regije snemalnika
Naslednja tabela navaja podprte končne točke snemalnika in njihove regije. Snemalnike, ki jih želite uporabljati, lahko konfigurirate v nastavitvah ponudnika telefonije. Če želite izvedeti, kako se to naredi za Twilio Flex, glejte korak 2: Namestite priključek SIPREC in usmerite klice v Dynamics 365.
Končna točka | Regija |
---|---|
media.recording.dynamics.com | Globalno (najbližja regija) |
southeastasia.media.recording.dynamics.com | Jugovzhodna Azija |
australiaeast.media.recording.dynamics.com | Avstralija |
sam.media.recording.dynamics.com | Južna Amerika |
canadacentral.media.recording.dynamics.com | Kanada |
switzerlandnorth.media.recording.dynamics.com | Švica |
eastus.media.recording.dynamics.com | ZDA |
francecentral.media.recording.dynamics.com | Francija |
centralindia.media.recording.dynamics.com | Indija |
japaneast.media.recording.dynamics.com | Japonska |
uae.media.recording.dynamics.com | UAE |
uksouth.media.recording.dynamics.com | Združeno kraljestvo |
westeurope.media.recording.dynamics.com | Zahodna Evropa |
zaf.media.recording.dynamics.com | Južnoafriška republika |
Korak 3: Pošiljanje dogodkov v realnem času (integracija odjemalca klicanja)
Če želite omogočiti obveščanje o pogovorih, da zagotovi sprotni prepis in vpogledi, lahko klicalnik tretje osebe uporabi dva dogodka za obvestilo, ko se klic začne ali konča.
Dogodek začetka klica: Ko obveščanje o pogovorih dobi dogodek "začetek klica", bo prikazal gumb za snemanje in sprotni prepis in vpogledi.
Dogodek končanega klica: Ko obveščanje o pogovorih prejme dogodek "končan klic", bo Zavijanje sprožil klic in prikazal Celoten povzetek gumb za pridobitev povzetek klica in vpogledov, ustvarjenih z umetno inteligenco.
Za pošiljanje dogodkov uporabite raiseEvent API v ogrodje za integracijo kanalov za Dynamics 365 (CIF).
Tukaj je vzorec izrezek kode za pošiljanje dogodkov:
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);
});
Preizkusite integracijo
Ko registrirate novega ponudnika pri najemniku in nastavite razcepitev SIPREC in dogodke klicalnika odjemalca, lahko preizkusite integracijo tako, da ustvarite novo politiko snemanja pri novem ponudniku.
Prijavite se kot sistemski skrbnik v aplikaciji središče za prodajo.
V območju Spremeni izberite Nastavitve vpogledov v prodajo.
Pojdi na Globalne nastavitve> obveščanje o pogovorih. V razdelku Ponudniki klicev boste videli zunanjega ponudnika, ki ste ga registrirali.
Ustvarite politiko snemanja za novega ponudnika. Za več informacij glejte Nastavite Microsoft Teams za obveščanje o pogovorih
Naslednji posnetek zaslona je primer pravilnika o snemanju za Twilio.
Zdaj pokličite uporabnika, ki je del izbranega varnostna vloga (v našem primeru je pravilnik omogočen za vse varnostne vloge).
Ko Dynamics 365 prejme klic je začel dogodek iz klicalnika, boste imeli možnost začeti snemanje:
Po izbiri Zapis, si boste lahko med klicem ogledali prepis v realnem času ter celoten povzetek in vpogledi v klice na koncu klica.