Partajați prin


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:

  1. Î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.

  2. Fork media: Forkează fluxul audio la reportofonele Informații despre conversații folosind un protocol SIPREC.

  3. 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:

Diagrama care prezintă fluxul de integrare

Pas 1: Înregistrați furnizorul

  1. Creați o Microsoft Entra aplicație ID.

  2. Adăugați permisiunea API pentru înregistrarea media:

    1. În Microsoft Entra aplicația ID pe care ați creat-o, accesați permisiuni API.

    2. Selectați Adăugați o permisiune.

    3. Sub API-urile folosite de organizația mea căutați Media Recording for Dynamics 365 Sales și selectați-o: Captură de ecran a opțiunii de înregistrare media

    4. 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.

  3. 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.

  4. 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.

  5. 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:

Captură de ecran a unui exemplu de comunicare între 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.

  1. Conectați-vă ca administrator de sistem în aplicația Hub de vânzări.

  2. Din zona Schimbare, selectați Setări privind statisticile vânzărilor.

  3. 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.

  4. 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.

Captură de ecran a unei politici 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:

Captură de ecran a notificării pentru înregistrarea apelurilor

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

Vizualizați și înțelegeți pagina rezumat apel