Integrace číselníků třetích stran s analytickými nástroji pro konverzace Dynamics 365 (preview)
[Tento článek představuje předběžnou dokumentaci a může se změnit.]
Díky této integraci mohou uživatelé Dynamics 365 používat číselníky poskytované telefonními společnostmi třetích stran, jako je Twilio Flex, k uskutečňování a přijímání telefonních hovorů v Dynamics 365 a získávat přehledy generované AI v reálném čase a bohatou analýzu svých hovorů po jejich skončení. Další informace o analytických nástrojích pro konverzace Dynamics 365
Důležité
- Toto je funkce Preview.
- Funkce Preview nejsou určené pro normální používání a mohou mít omezené fungování. Tyto funkce podléhají doplňujícím podmínkám použití a jsou poskytnuty před oficiálním vydáním, aby si je zákazníci mohli co nejdříve vyzkoušet a napsat nám své názory.
Jak integrace funguje
Na vysoké úrovni se integrace skládá ze tří částí:
Registrace zprostředkovatele: Zaregistrujte podrobnosti o zprostředkovateli a získejte seznam uživatelů, který je zaznamenán pomocí rozhraní API analytických nástrojů pro konverzace.
Rozvětvení médií: Rozvětvete audio tok do záznamníků analytických nástrojů pro konverzace pomocí protokolu SIPREC.
Odeslání událostí v reálném čase: Aby bylo možné povolit prostředí přepisu a přehledů hovorů v reálném čase, odešlete události uživatelského rozhraní z klientského uživatelského rozhraní zprostředkovatele do analytických nástrojů pro konverzace Dynamics 365.
Příklad integrace mezi analytickými nástroji pro konverzace Dynamics 365 a zprostředkovatelem telefonních služeb třetí strany Twilio Flex viz Integrace Twilio Flex s analytickými nástroji pro konverzace Dynamics 365.
Následující schéma znázorňuje, jak integrace funguje:
Krok 1: Registrace zprostředkovatele
Přidání oprávnění rozhraní API pro záznam médií:
V aplikaci Microsoft Entra ID, kterou jste vytvořili, přejděte na Oprávnění rozhraní API.
Vyberte Přidat oprávnění.
V sekci Rozhraní API, která používá má organizace vyhledejte položku Záznam médií pro Dynamics 365 Sales a vyberte ji: .
Přidejte oprávnění Users.Read.All a vyberte Přidat oprávnění.
Poznámka:
Ujistěte se, že máte souhlas správce pro oprávnění volat rozhraní API analytických nástrojů pro konverzace v kontextu aplikace. Další informace o oprávněních a souhlasu.
Získejte token pro spuštění rozhraní API analytických nástrojů pro konverzace pomocí aplikace vytvořené v předchozí části:
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>'
Parametr
scope
určuje ID aplikace Analytické nástroje pro konverzace. Tuto hodnotu neměňte.Další informace o příkazu curl viz Získání tokenů ID Microsoft Entra pro instanční objekty.
Chcete-li zaregistrovat zprostředkovatele služeb třetí strany, zavolejte následující rozhraní API analytických nástrojů pro konverzace:
POST /api/v1.0/providers/tenants
Do textu žádosti zadejte následující parametry:
orgID: Zadejte ID organizace Dynamics 365.
Type: Pro číselníky třetích stran zadejte „custom“.
hosting: Zadejte typ hostingu poskytovatele telefonie. Například „cloud“ nebo „on-premises“.
AccountId: Zadejte ID účtu zprostředkovatele telefonie.
CerfificateSubjectName a CertificateIssuer: Zadejte podrobnosti certifikátu zprostředkovatele telefonie.
SourceIPNetwork: Zadejte IP adresu klienta SIPREC. Pokud nechcete omezit IP adresu, zadejte „0.0.0.0“.
Následuje fragment kódu je příklad textu žádosti:{ "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" } }
Další informace o rozhraní API získáte v dokumentaci swagger.
Chcete-li získat seznam uživatelů, který se má zaznamenat, zavolejte následující rozhraní API analytických nástrojů pro konverzace:
GET /api/v1.0/providers/users
Poté, co správce Dynamics 365 Sales vytvoří zásady nahrávání, může zprostředkovatel použít tento koncový bod k filtrování médií, která budou rozdělena do záznamníků analytických nástrojů pro konverzace.
Krok 2: Rozvětvení médií (integrace SIPREC)
Záznamníky analytických nástrojů pro konverzace implementují standardní protokol SIPREC.
Komunikace je zabezpečena protokoly SIPS (port 5061) a SRTP. Ověřování se provádí pomocí mTLS v připojení zpráv SIPS a je založeno na certifikátu poskytnutém rozhraním API – což znamená, že zprostředkovatel musí být registrován, aby klient mohl navázat připojení SIPS.
Následující screenshot ilustruje komunikaci mezi klientem SIPREC a serverem SIPREC:
Pro analytické nástroje pro konverzace jsou vyžadována následující metadata:
Záhlaví:
Název záhlaví | Popis | Příklad hodnoty |
---|---|---|
Call-ID | Jedinečný identifikátor hovoru. Toto ID slouží ke korelaci signálů SIP a uživatelských akcí, jako je zahájení/zastavení záznamu. | efxxxxxxxxxxxxx |
X-AccountId | Jedinečný identifikátor účtu, kterému náleží hovor. Toto ID slouží k ověřování a autorizaci. Stejné ID účtu je registrované v rozhraní API pro klienta. | ACxxxxxxxxxxxxxxxxxxxxxxx |
Metadata
Název klíče metadat | Popis | Příklad hodnoty |
---|---|---|
Role | Označuje, zda se jedná o příchozí nebo odchozí hovor pro prodejce. | [„inbound“, „outbound“] |
CallerDisplayName | Zobrazovaný název volajícího. Není-li k dispozici, zobrazí se telefonní číslo. | Kenny Smith |
CalleeDisplayName | Zobrazované jméno příjemce. Není-li k dispozici, zobrazí se telefonní číslo. | Alex Baker |
Zde jsou příklady pozvánek a zpráv na rozloučenou s potřebnýmii záhlavími a metadaty:
Uvítací zpráva (INVITE):
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--
Rozlučková zpráva (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
Podporované koncové body a oblasti záznamníku
V následující tabulce jsou uvedeny podporované koncové body záznamníku a jejich oblasti. Záznamníky, které chcete používat, můžete nakonfigurovat v nastavení zprostředkovatele telefonie. Chcete-li vědět, jak se to dělá pro Twilio Flex, viz Krok 2: Instalace konektoru SIPREC a směrování hovorů do Dynamics 365.
Koncový bod | Oblast |
---|---|
media.recording.dynamics.com | Globální (nejbližší oblast) |
southeastasia.media.recording.dynamics.com | Jihovýchodní Asie |
australiaeast.media.recording.dynamics.com | Austrálie |
sam.media.recording.dynamics.com | Jižní Amerika |
canadacentral.media.recording.dynamics.com | Kanada |
switzerlandnorth.media.recording.dynamics.com | Švýcarsko |
eastus.media.recording.dynamics.com | (USA) |
francecentral.media.recording.dynamics.com | Francie |
centralindia.media.recording.dynamics.com | Indie |
japaneast.media.recording.dynamics.com | Japonsko |
uae.media.recording.dynamics.com | UAE |
uksouth.media.recording.dynamics.com | Velká Británie |
westeurope.media.recording.dynamics.com | Západní Evropa |
zaf.media.recording.dynamics.com | Jihoafrická republika |
Krok 3: Odesílání událostí v reálném čase (integrace klienta číselníku)
Aby analytické nástroje pro konverzace poskytovaly přepis a přehledy v reálném čase, může číselník třetí strany používat dvě události k upozornění na začátek nebo konec hovoru.
Událost zahájení hovoru: Když analytické nástroje pro konverzace přjmou událost „hovor zahájen“, zobrazí tlačítko pro záznam spolu s přepisem a přehledy v reálném čase.
Událost ukončení hovoru: Když analytické nástroje pro konverzace přijmou událost „hovor ukončen“, vytvoří souhrn hovoru a zobrazí tlačítko Úplné shrnutí, čímž získáte souhrn a přehledy hovoru vygenerované AI.
K odeslání událostí použijte rozhraní API raiseEvent v Dynamics 365 Channel Integration Framework (CIF).
Zde je ukázkový fragment kódu pro odeslání událostí:
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);
});
Testování integrace
Po registraci nového zprostředkovatele s klientem a nastavení rozvětvení SIPREC a událostí číselníku klienta můžete otestovat integraci vytvořením nové zásady nahrávání s novým zprostředkovatelem.
V aplikaci Centrum prodeje se přihlaste jako správce systému.
V sekci Změna oblasti vyberte Nastavení Sales Insights.
Jděte na Globální nastavení>Analytické nástroje pro konverzace. V části Zprostředkovatelé hovorů uvidíte zprostředkovatele třetí strany, kterého jste zaregistrovali.
Vytvořte zásady nahrávání pro nového zprostředkovatele. Další informace viz Nastavení Microsoft Teams pro analytické nástroje pro konverzace.
Následující screenshot je příklad zásad nahrávání pro Twilio.
Nyní zavolejte uživatele, který je součástí vybrané role zabezpečení (v našem příkladu je zásada povolena pro všechny role zabezpečení).
Když Dynamics 365 z číselníku obdrží událost callStarted, budete mít možnost zahájit nahrávání:
Po výběru možnosti Záznam budete moci vidět přepis v reálném čase během hovoru a úplné shrnutí a přehledy hovorů na konci hovoru.