Integra i dialer di terze parti con Conversazione intelligente di Dynamics 365 (anteprima)
[Questo articolo fa parte della documentazione non definitiva, pertanto è soggetto a modifiche.]
Con questa integrazione, gli utenti di Dynamics 365 possono utilizzare dialer forniti da società di telefonia di terze parti come Twilio Flex, per effettuare e ricevere chiamate telefoniche in Dynamics 365 e ottenere approfondimenti generati dall'intelligenza artificiale in tempo reale e un'analisi post-chiamata completa delle loro chiamate. Altre informazioni su Conversazione intelligente in Dynamics 365
Importante
- Questa è una funzionalità di anteprima.
- Le funzionalità di anteprima non sono destinate ad essere utilizzate per la produzione e sono soggette a restrizioni. Queste funzionalità sono soggette a condizioni per l'utilizzo supplementari e sono disponibili prima di una versione ufficiale in modo che i clienti possano ottenere l'accesso iniziale e fornire feedback.
Funzionamento dell'integrazione
Ad alto livello, l’integrazione è composta da tre parti:
Registrazione del provider: Registra i dettagli del provider e ottieni l'elenco degli utenti da registrare utilizzando l'API di Conversazione intelligente.
Fork dei file multimediali: il fork del flusso audio ai registratori di Conversazione intelligente utilizzando un protocollo SIPREC.
Invia eventi in tempo reale: per abilitare la trascrizione in tempo reale e l'esperienza delle informazioni dettagliate sulle chiamate, invia eventi dell'interfaccia utente dall'interfaccia utente del client del provider a Conversazione intelligente di Dynamics 365.
Per un esempio di integrazione tra Conversazione intelligente di Dynamics 365 e un provider di telefonia di terze parti, Twilio Flex, vedi Integrazione di Twilio Flex con Conversazione intelligente di Dynamics 365.
Il diagramma seguente illustra come funziona l'integrazione:
Passaggio 1: registrazione del provider
Aggiungi autorizzazione API per la registrazione multimediale:
Nell'applicazione Microsoft Entra ID creata, vai a Autorizzazioni API.
Seleziona Aggiungi autorizzazione.
In API utilizzate dalla mia organizzazione cerca Registrazione multimediale per Dynamics 365 Sales e selezionalo:
Aggiungi autorizzazioni Users.Read.All e seleziona Aggiungi autorizzazione
Nota
Assicurati di ottenere il consenso amministratore per l'autorizzazione a chiamare l'API di Conversazione intelligente nel contesto dell'app. Altre informazioni sulle autorizzazioni e sul consenso.
Ottieni il token per eseguire le API di Conversazione intelligente utilizzando l'app creata nella sezione precedente:
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>'
Il parametro
scope
specifica l'ID applicazione dell'app Conversazione intelligente. Non modificare questo valore.Per ulteriori informazioni sul comando Curl, vedi Ottieni token Microsoft Entra ID per le entità di servizio.
Chiama la seguente API di Conversazione intelligente per registrare il provider di servizi di terze parti:
POST /api/v1.0/providers/tenants
Specifica i seguenti parametri nel corpo della richiesta:
orgID: specifica l'ID organizzazione Dynamics 365.
Tipo: specifica "personalizzato" per dialer di terze parti.
hosting: specifica il tipo di hosting del provider di telefonia. Ad esempio, "cloud" o "locale".
AccountId: specifica l'ID account del provider di telefonia.
CerfificateSubjectName e CertificateIssuer: specifica i dettagli del certificato del provider di telefonia.
SourceIPNetwork: specifica l'indirizzo IP del client SIPREC. Specifica "0.0.0.0" se non si desidera limitare l'indirizzo IP.
Il seguente frammento è un esempio di corpo della richiesta:{ "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" } }
Per ulteriori informazioni sull'API, vedi Documentazione swagger.
Chiama la seguente API di Conversazione intelligente per ottenere l'elenco di utenti da registrare:
GET /api/v1.0/providers/users
Dopo che l'amministratore di Dynamics 365 Sales ha creato il criterio di registrazione, il provider può utilizzare questo endpoint per filtrare i contenuti multimediali che verranno trasferiti ai registratori di Conversazione intelligente.
Passaggio 2: fork dei file multimediali (integrazione SIPREC)
I registratori di Conversazione intelligente implementano il protocollo SIPREC standard.
La comunicazione è protetta utilizzando i protocolli SIPS (porta 5061) e SRTP. L'autenticazione viene eseguita utilizzando mTLS nella connessione dei messaggi SIPS e si basa sul certificato fornito all'API, il che significa che il provider deve essere registrato affinché un tenant possa stabilire una connessione SIPS.
La seguente schermata illustra la comunicazione tra il client SIPREC e il server SIPREC:
I seguenti metadati sono richiesti per Conversazione intelligente:
Intestazioni:
Nome intestazione | Descrizione | Valore di esempio |
---|---|---|
ID chiamata | Identificatore univoco della chiamata. Questo ID viene utilizzato per correlare i segnali SIP e le azioni dell'utente come l'avvio/arresto della registrazione. | efxxxxxxxxxxxxx |
X-AccountId | Identificatore univoco dell'account a cui appartiene la chiamata. Questo ID viene utilizzato per l'autenticazione e l'autorizzazione. Questo è lo stesso ID account registrato nell'API per il tenant. | ACxxxxxxxxxxxxxxxxxxxxxxx |
Metadati UFX
Nome chiave metadati | Descrizione | Valore di esempio |
---|---|---|
Ruolo | Indica se si tratta di una chiamata in entrata o in uscita per il venditore. | ["in entrata", "in uscita"] |
CallerDisplayName | Nome visualizzato chiamante. Se non disponibile, viene visualizzato il numero di telefono. | Kenny Smith |
CalleeDisplayName | Nome visualizzato destinatario. Se non disponibile, viene visualizzato il numero di telefono. | Alex Baker |
Ecco alcuni esempi di messaggi di invito e di saluto con le intestazioni e i metadati richiesti:
Messaggio INVITO:
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--
Messaggio di SALUTO:
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
Endpoint e aree geografiche del registratore supportati
La tabella seguente elenca gli endpoint del registratore supportati e le relative aree geografiche. È possibile configurare i registratori che si desidera utilizzare nelle impostazioni del provider di telefonia. Per informazioni su come eseguire questa operazione per Twilio Flex, vedi Passaggio 2: installare il connettore SIPREC e instradare le chiamate a Dynamics 365.
Endpoint | Area geografica |
---|---|
media.recording.dynamics.com | Globale (area geografica più vicina) |
southeastasia.media.recording.dynamics.com | Asia sud-orientale |
australiaeast.media.recording.dynamics.com | Australia |
sam.media.recording.dynamics.com | America del Sud |
canadacentral.media.recording.dynamics.com | Canada |
switzerlandnorth.media.recording.dynamics.com | Svizzera |
eastus.media.recording.dynamics.com | Stati Uniti |
francecentral.media.recording.dynamics.com | Francia |
centralindia.media.recording.dynamics.com | India |
japaneast.media.recording.dynamics.com | Giappone |
uae.media.recording.dynamics.com | UAE |
uksouth.media.recording.dynamics.com | Regno Unito |
westeurope.media.recording.dynamics.com | Europa occidentale |
zaf.media.recording.dynamics.com | Sudafrica |
Passaggio 3: inviare eventi in tempo reale (integrazione client del dialer)
Per consentire a Conversazione intelligente di fornire informazioni dettagliate e trascrizione in tempo reale, il dialer di terze parti può utilizzare due eventi per notificare l'inizio o la fine di una chiamata.
Evento di chiamata avviata: Quando Conversazione intelligente riceve l'evento "chiamata avviata", mostrerà il pulsante di registrazione e le informazioni dettagliate e le trascrizione in tempo reale.
Evento chiamata terminata: quando Conversazione intelligente riceve l'evento "chiamata terminata", concluderà la chiamata e mostrerà il pulsante Riepilogo completo per ottenere il riepilogo della chiamata generato dall'intelligenza artificiale e le informazioni dettagliate.
Per inviare gli eventi, utilizza l'API raiseEvent in Framework di integrazione del canale Dynamics 365 (CIF).
Ecco un frammento di codice di esempio per inviare gli eventi:
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 dell'integrazione
Dopo aver registrato il nuovo provider con il tenant e impostato il fork SIPREC e gli eventi del dialer client, è possibile testare l'integrazione creando un nuovo criterio di registrazione con il nuovo provider.
Accedi come amministratore di sistema nell'app Hub delle vendite.
Nell'area di modifica, seleziona Impostazioni di Sales Insights.
Vai a Impostazioni globali>Conversazione intelligente. Nella sezione Provider di chiamate, vedrai il provider di terze parti che hai registrato.
Creare criteri di registrazione per il nuovo provider. Per ulteriori informazioni, vedi Configurare Microsoft Teams per Conversazione intelligente
Lo screenshot seguente è un esempio di criteri di registrazione per Twilio.
Ora chiama un utente che fa parte del ruolo di sicurezza selezionato (nel nostro esempio, i criteri sono abilitati per tutti i ruoli di sicurezza).
Quando Dynamics 365 riceve l'evento callStarted dal dialer, avrai la possibilità di avviare la registrazione:
Dopo aver selezionato Registra, potrai vedere la trascrizione in tempo reale durante la chiamata e un riepilogo completo e informazioni dettagliate sulla chiamata al termine della chiamata.
Informazioni correlate
Visualizzare e comprendere la pagina di riepilogo delle chiamate