Integrați dialere terță parte cu Dynamics 365 Informații despre conversații (versiune preliminară)
[Acest articol este documentație de prelansare și poate suferi modificări.]
Cu această integrare, utilizatorii Dynamics 365 pot folosi dialere furnizate de companii de telefonie terțe, cum ar fi Twilio Flex, pentru a efectua și primi apeluri telefonice în Dynamics 365 și pentru a obține informații în timp real generate de AI și analize bogate post-apel ale apelurilor lor. . Aflați mai multe despre Dynamics 365 Informații despre conversații
Important
- Aceasta este o caracteristică de previzualizare.
- Caracteristicile în regim de previzualizare nu sunt destinate utilizării în producție și pot avea funcționalitate restricționată. Aceste funcții sunt supuse termenilor de utilizare suplimentari și sunt disponibile înainte de o lansare oficială, astfel încât clienții să poată avea acces din timp și să poată oferi feedback.
Cum funcționează integrarea
La un nivel înalt, integrarea constă din trei părți:
Înregistrați furnizorul: Înregistrați detaliile furnizorului și obțineți ca lista de utilizatori să fie înregistrată utilizând API-ul Informații despre conversații.
Fork media: Forkează fluxul audio la reportofonele Informații despre conversații folosind un protocol SIPREC.
Trimiteți evenimente în timp real: Pentru a activa transcrierea în timp real și experiența Detalii despre apeluri, trimiteți evenimentele UI din interfața de utilizare a clientului furnizorului către Dynamics 365 Informații despre conversații.
Pentru un exemplu de integrare între Dynamics 365 Informații despre conversații și un furnizor de telefonie terță parte, Twilio Flex, consultați Integrarea Twilio Flex cu Dynamics 365 Informații despre conversații.
Următoarea diagramă ilustrează modul în care funcționează integrarea:
Pas 1: Înregistrați furnizorul
Adăugați permisiunea API pentru înregistrarea media:
În Microsoft Entra aplicația ID pe care ați creat-o, accesați permisiuni API.
Selectați Adăugați o permisiune.
Sub API-urile folosite de organizația mea căutați Media Recording for Dynamics 365 Sales și selectați-o:
Adăugați permisiunea Users.Read.All și selectați Adăugați permisiunea
Notă
Asigurați-vă că obțineți consimțământul administratorului pentru permisiunea de a putea apela API-ul Informații despre conversații în contextul aplicației. Aflați mai multe despre permisiuni și consimțământ.
Obțineți simbolul pentru a rula API-urile Informații despre conversații folosind aplicația creată în secțiunea anterioară:
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>'
Parametrul
scope
specifică ID-ul aplicației al aplicației Informații despre conversații. Nu modificați această valoare.Pentru mai multe informații despre comanda curl, consultați Obțineți Microsoft Entra jetoane ID pentru directorii de serviciu.
Apelați următorul Informații despre conversații API pentru a înregistra furnizorul de servicii terță parte:
POST /api/v1.0/providers/tenants
Specificați următorii parametri în corpul cererii:
orgID: Specificați ID-ul organizației Dynamics 365.
Tip: Specificați „personalizat” pentru dispozitivele de apelare terță parte.
găzduire: specificați tipul de găzduire al furnizorului de telefonie. De exemplu, „nor” sau „local”.
AccountId: Specificați ID-ul contului furnizorului de telefonie.
CerfificateSubjectName și CertificateIssuer: Specificați detaliile certificatului furnizorului de telefonie.
SourceIPNetwork: Specificați adresa IP a clientului SIPREC. Specificați „0.0.0.0” dacă nu doriți să restricționați adresa IP.
Următorul fragment este un exemplu al corpului cererii:{ "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" } }
Pentru mai multe informații despre API, consultați documentația Swagger.
Apelați următorul Informații despre conversații API pentru a obține lista de utilizatori de înregistrat:
GET /api/v1.0/providers/users
După ce administratorul Dynamics 365 Sales creează politica de înregistrare, furnizorul poate folosi acest punct final pentru a filtra mediile care vor fi transferate la recorderele Informații despre conversații.
Pas 2: Bifurcați media (integrare SIPREC)
Recorderele Informații despre conversații implementează standardul protocolul SIPREC.
Comunicarea este securizată folosind protocoale SIPS (port 5061) și SRTP. Autentificarea se face folosind mTLS în conexiunea de mesaje SIPS și se bazează pe certificatul furnizat API-ului – ceea ce înseamnă că furnizorul trebuie să fie înregistrat pentru ca un chiriaș să poată stabili Conexiune SIPS.
Următoarea captură de ecran ilustrează comunicarea dintre clientul SIPREC și serverul SIPREC:
Următoarele metadate sunt necesare pentru Informații despre conversații:
Anteturi:
Nume antet | Descriere | Exemplu de valoare |
---|---|---|
ID-ul apelului | Identificatorul unic al apelului. Acest ID este folosit pentru a corela semnalele SIP și acțiunile utilizatorului, cum ar fi pornirea/oprirea înregistrării. | efxxxxxxxxxxxxx |
X-AccountId | Identificatorul unic al contului căruia îi aparține apelul. Acest ID este folosit pentru autentificare și autorizare. Acesta este același ID de cont înregistrat în API pentru chiriaș. | ACxxxxxxxxxxxxxxxxxxxxxxxx |
Metadate
Numele cheii metadatelor | Descriere | Exemplu de valoare |
---|---|---|
Rol | Indică dacă este un apel de intrare sau de ieșire pentru vânzător. | ["sosire plecare"] |
CallerDisplayName | Numele afișat al apelantului. Dacă nu este disponibil, este afișat numărul de telefon. | Kenny Smith |
CalleeDisplayName | Numele afișat al destinatarului. Dacă nu este disponibil, este afișat numărul de telefon. | Alex Baker |
Iată exemple de mesaje de invitație și de revedere cu anteturile și metadatele necesare:
mesaj INVITARE:
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--
mesaj BYE:
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
Punctele finale și regiunile înregistrator acceptate
Următorul tabel listează punctele finale de înregistrare acceptate și regiunile acestora. Puteți configura înregistratoarele pe care doriți să le utilizați în setările furnizorului dvs. de telefonie. Pentru a afla cum se face acest lucru pentru Twilio Flex, consultați pas 2: Instalați conectorul SIPREC și direcționați apelurile către Dynamics 365.
Punct final | Regiunea |
---|---|
media.recording.dynamics.com | Global (regiune cea mai apropiată) |
southeastasia.media.recording.dynamics.com | Asia de Sud-Est |
australiaeast.media.recording.dynamics.com | Australia |
sam.media.recording.dynamics.com | America de Sud |
canadacentral.media.recording.dynamics.com | Canada |
switzerlandnorth.media.recording.dynamics.com | Elveția |
eastus.media.recording.dynamics.com | România |
francecentral.media.recording.dynamics.com | Franța |
centralindia.media.recording.dynamics.com | India |
japaneast.media.recording.dynamics.com | Japonia |
uae.media.recording.dynamics.com | EAU |
uksouth.media.recording.dynamics.com | Regatul Unit |
westeurope.media.recording.dynamics.com | Europa de Vest |
zaf.media.recording.dynamics.com | Africa de Sud |
Pas 3: Trimiteți evenimente în timp real (integrarea clientului Dialerului)
Pentru a permite Informații despre conversații să furnizeze transcriere și detalii în timp real, dialer-ul terță parte poate folosi două evenimente pentru a notifica când începe sau se termină un apel.
Evenimentul a început apelul: Când Informații despre conversații primește evenimentul „apel început”, va afișa butonul de înregistrare și transcriere și detalii în timp real.
Eveniment de apel încheiat: când Informații despre conversații primește evenimentul „apel încheiat”, va activa Încapsulare apelul și va afișa Rezumat complet butonul pentru a obține rezumat apel și statistici generate de AI.
Pentru a trimite evenimentele, utilizați raiseEvent API în Cadru de lucru pentru integrarea canalelor Dynamics 365 (CIF).
Iată o mostră fragment de cod pentru a trimite evenimentele:
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ți integrarea
După înregistrarea noului furnizor la chiriaș și configurarea evenimentelor de bifurcare SIPREC și de apelare client, puteți testa integrarea creând o nouă politică de înregistrare cu noul furnizor.
Conectați-vă ca administrator de sistem în aplicația Hub de vânzări.
Din zona Schimbare, selectați Setări privind statisticile vânzărilor.
Mergi la Setări globale> Informații despre conversații. În secțiunea Furnizori de apeluri, veți vedea furnizorul terță parte pe care l-ați înregistrat.
Creați o politică de înregistrare pentru noul furnizor. Pentru mai multe informații, vezi Înființat Microsoft Teams pentru Informații despre conversații
Următoarea captură de ecran este un exemplu de politică de înregistrare pentru Twilio.
Acum, apelați un utilizator care face parte din rol de securitate selectat (în exemplul nostru, politica este activată pentru toate rolurile de securitate).
Când Dynamics 365 primește apel început eveniment de la dialer, veți avea opțiunea de a începe înregistrarea:
După selectare Record, veți putea vedea transcrierea în timp real în timpul apelului și un rezumat complet și Detalii despre apeluri la sfârșitul apelului.
Consultați și
Feedback
https://aka.ms/ContentUserFeedback.
În curând: Pe parcursul anului 2024, vom elimina treptat Probleme legate de GitHub ca mecanism de feedback pentru conținut și îl vom înlocui cu un nou sistem de feedback. Pentru mai multe informații, consultați:Trimiteți și vizualizați feedback pentru