Інтеграція сторонніх номеронабирачів із Dynamics 365 Аналітика розмов (підготовча версія)
[Ця стаття стосується інструкції до попередньої версії, і її буде змінено.]
Завдяки цій інтеграції користувачі Dynamics 365 можуть використовувати набори номерів, надані сторонніми компаніями телефонії, такими як Twilio Flex, для здійснення та отримання телефонних дзвінків у Dynamics 365, а також отримувати статистику, створену штучним інтелектом, у режимі реального часу та розширений аналіз своїх дзвінків після дзвінків. Дізнайтеся більше про Dynamics 365 Аналітика розмов
Важливо
- Це функція попереднього перегляду.
- Підготовчі функції призначені для невиробничого використання. Їх можливості можуть бути обмеженими. Ці функції регулюються додатковими умовами використання та доступні до офіційного випуску, щоб клієнти могли отримати ранній доступ і залишити відгук.
Як працює інтеграція
На високому рівні інтеграція складається з трьох частин:
Зареєструйте постачальника: Зареєструйте дані провайдера та отримайте список користувачів для запису за допомогою API Аналітика розмов.
Розгалуження медіа: Розгалуження аудіопотоку на диктофони Аналітика розмов за допомогою протоколу SIPREC.
Надсилати події в реальному часі: Щоб увімкнути транскрипцію в реальному часі та Аналітика викликів досвід, надсилайте події інтерфейсу користувача з клієнтського інтерфейсу постачальника на Dynamics 365 Аналітика розмов.
Приклад інтеграції між Dynamics 365 Аналітика розмов та стороннім постачальником телефонії, Twilio Flex, наведено в статті Інтеграція Twilio Flex з Dynamics 365 Аналітика розмов.
Наступна діаграма ілюструє, як працює інтеграція:
Крок 1: Зареєструйте провайдера
Додайте дозвіл API для запису медіафайлів:
Microsoft Entra У створеному вами додатку ID перейдіть до розділу Дозволи API.
Виберіть Додати дозвіл.
У розділі API моя організація використовує пошук Запис медіа для Dynamics 365 Sales і виберіть його:
Додайте дозвіл Users.Read.All і виберіть Додати дозвіл
Нотатка
Обов’язково отримайте згоду адміністратора на отримання дозволу, щоб мати змогу викликати API Аналітика розмов у контексті програми. Докладніше про дозволи та згоду.
Отримайте токен для запуску API Аналітика розмов за допомогою програми, створеної в попередньому розділі:
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>'
Параметр
scope
визначає ідентифікатор програми Аналітика розмов. Не змінюйте це значення.Щоб дізнатися більше про команду curl, перегляньте статтю Отримання Microsoft Entra ID-токенів для реєстраційних записів служб.
Зателефонуйте до наступного API Аналітика розмов, щоб зареєструвати стороннього постачальника послуг:
POST /api/v1.0/providers/tenants
У тілі запиту вкажіть такі параметри:
orgID: Вкажіть ідентифікатор організації Dynamics 365.
Тип: Вкажіть "custom" для сторонніх номерів.
хостинг: Вкажіть тип хостингу постачальника послуг телефонії. Наприклад, "хмара" або "локальний".
AccountId: Вкажіть ID облікового запису постачальника телефонії.
CerfificateSubjectName та CertificateIssuer: Вкажіть деталі сертифіката постачальника телефонії.
SourceIPNetwork: Вкажіть IP-адресу клієнта SIPREC. Вкажіть "0.0.0.0", якщо ви не хочете обмежувати IP-адресу.
Наступний фрагмент є прикладом тіла запиту:{ "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" } }
Для отримання додаткової інформації про API перегляньте документацію Swagger.
Викличте наступний API Аналітика розмов, щоб отримати список користувачів для запису:
GET /api/v1.0/providers/users
Після того, як адміністратор продажів Dynamics 365 створить політику запису, постачальник може використовувати цю кінцеву точку для фільтрації медіафайлів, які будуть розгалужені на рекордери Аналітика розмов.
Крок 2: Розгалуження носія (інтеграція з SIPREC)
Диктофони Аналітика розмов реалізують стандарт Протокол SIPREC.
Зв’язок захищений за допомогою протоколів SIPS (порт 5061) і SRTP. Аутентифікація виконується за допомогою mTLS у з’єднанні SIP-повідомлень і ґрунтується на сертифікаті, наданому API – це означає, що провайдер повинен бути зареєстрований для клієнта для встановлення SIP-з’єднання.
Наступний знімок екрана ілюструє зв’язок між клієнтом SIPREC і сервером SIPREC:
Для Аналітика розмов потрібні такі метадані:
Заголовки:
Назва заголовка | Опис | Приклад значення |
---|---|---|
Ідентифікатор дзвінка | Унікальний ідентифікатор дзвінка. Цей ідентифікатор використовується для кореляції сигналів SIP і дій користувача, таких як початок/зупинка запису. | efxxxxxxxxxxxxx |
X-AccountId | Унікальний ідентифікатор облікового запису, до якого належить дзвінок. Цей ідентифікатор використовується для аутентифікації та авторизації. Це той самий ID облікового запису, прописаний в API для орендаря. | ACxxxxx |
Метадані
Ім’я ключа метаданих | Опис | Приклад значення |
---|---|---|
Роль | Указує, чи це вхідний чи вихідний дзвінок для продавця. | ["вхідний", "вихідний"] |
CallerDisplayName | Коротке ім’я абонента. Якщо немає в наявності, відображається номер телефону. | Кенні Сміт |
CalleeDisplayName | Коротке ім’я одержувача. Якщо немає в наявності, відображається номер телефону. | Алекс Бейкер |
Ось приклади повідомлень із запрошеннями та прощаннями з обов’язковими заголовками та метаданими:
ЗАПРОШЕНЕ повідомлення:
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--
Повідомлення до побачення:
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
Підтримувані кінцеві точки та регіони записувача
У наведеній нижче таблиці перелічено підтримувані кінцеві точки реєстратора та їхні регіони. Ви можете налаштувати диктофони, які ви хочете використовувати, у налаштуваннях постачальника телефонії. Щоб дізнатися, як це робиться для Twilio Flex, перегляньте крок 2: Встановіть з’єднувач SIPREC і спрямуйте виклики на Dynamics 365.
Кінцева точка | Область |
---|---|
media.recording.dynamics.com | Глобальний (найближчий регіон) |
southeastasia.media.recording.dynamics.com | Південно-Східна Азія |
australiaeast.media.recording.dynamics.com | Австралія |
sam.media.recording.dynamics.com | Південна Америка |
canadacentral.media.recording.dynamics.com | Канада |
switzerlandnorth.media.recording.dynamics.com | Швейцарія |
eastus.media.recording.dynamics.com | US |
francecentral.media.recording.dynamics.com | Франція |
centralindia.media.recording.dynamics.com | Індія |
japaneast.media.recording.dynamics.com | Японія |
uae.media.recording.dynamics.com | ОАЕ |
uksouth.media.recording.dynamics.com | Сполучене Королівство |
westeurope.media.recording.dynamics.com | Західна Європа |
zaf.media.recording.dynamics.com | Південно-Африканська Республіка |
Крок 3: Надсилання подій у реальному часі (інтеграція з клієнтом Dialer)
Щоб Аналітика розмов могла надавати транскрибування та аналітичні висновки в реальному часі, сторонній автообдзвін може використовувати дві події для сповіщення про початок або завершення дзвінка.
Подія початку дзвінка: Коли аналітика розмов отримує подію «дзвінок розпочато», він покаже кнопку запису, а також транскрибування та статистику в реальному часі та аналітичні висновки в реальному часі.
Подія завершення виклику: коли аналітика розмов отримує подію «дзвінок завершено», вона Упакування виклику та показує кнопку «Повний підсумок », щоб отримати згенерований штучним інтелектом виклику та статистику.
Щоб надіслати події, використовуйте raiseEvent API у Dynamics 365 Channel Integration Framework Інфраструктура інтеграції каналів Dynamics 365 (CIF).
Ось приклад фрагмента фрагмента коду для надсилання подій:
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);
});
Протестуйте інтеграцію
Після реєстрації нового провайдера у клієнта та налаштування форку SIPREC та подій автообдзвону клієнта можна протестувати інтеграцію, створивши нову політику запису з новим провайдером.
Увійдіть як системний адміністратор у програму Центр збуту.
У розділі Змінити виберіть Налаштування статистики продажів.
Перейдіть до розділу Глобальні налаштуванняАналітика> розмов. У розділі Постачальники послуг виклику ви побачите стороннього постачальника, якого ви зареєстрували.
Створіть політику записування для нового постачальника. Щоб дізнатися більше, перегляньте статтю Налаштування Microsoft Teams Аналітика розмов
Наступний скріншот є прикладом політики запису для Twilio.
Тепер викличте користувача, який входить в обрану роль безпеки (в нашому прикладі політика включена для всіх ролей безпеки).
Коли Dynamics 365 отримає подію «Почато» від автообдзвону, у вас буде можливість почати запис:
Вибравши Запис, ви зможете бачити транскрипцію в реальному часі під час дзвінка, а також повний підсумок і Аналітика викликів в кінці дзвінка.