Поділитися через


Інтеграція сторонніх номеронабирачів із Dynamics 365 Аналітика розмов (підготовча версія)

[Ця стаття стосується інструкції до попередньої версії, і її буде змінено.]

Завдяки цій інтеграції користувачі Dynamics 365 можуть використовувати набори номерів, надані сторонніми компаніями телефонії, такими як Twilio Flex, для здійснення та отримання телефонних дзвінків у Dynamics 365, а також отримувати статистику, створену штучним інтелектом, у режимі реального часу та розширений аналіз своїх дзвінків після дзвінків. Дізнайтеся більше про Dynamics 365 Аналітика розмов

Важливо

  • Це функція попереднього перегляду.
  • Підготовчі функції призначені для невиробничого використання. Їх можливості можуть бути обмеженими. Ці функції регулюються додатковими умовами використання та доступні до офіційного випуску, щоб клієнти могли отримати ранній доступ і залишити відгук.

Як працює інтеграція

На високому рівні інтеграція складається з трьох частин:

  1. Зареєструйте постачальника: Зареєструйте дані провайдера та отримайте список користувачів для запису за допомогою API Аналітика розмов.

  2. Розгалуження медіа: Розгалуження аудіопотоку на диктофони Аналітика розмов за допомогою протоколу SIPREC.

  3. Надсилати події в реальному часі: Щоб увімкнути транскрипцію в реальному часі та Аналітика викликів досвід, надсилайте події інтерфейсу користувача з клієнтського інтерфейсу постачальника на Dynamics 365 Аналітика розмов.

Приклад інтеграції між Dynamics 365 Аналітика розмов та стороннім постачальником телефонії, Twilio Flex, наведено в статті Інтеграція Twilio Flex з Dynamics 365 Аналітика розмов.

Наступна діаграма ілюструє, як працює інтеграція:

Схема із зображенням потоку інтеграції

Крок 1: Зареєструйте провайдера

  1. Створіть додаток Microsoft Entra для ідентифікації.

  2. Додайте дозвіл API для запису медіафайлів:

    1. Microsoft Entra У створеному вами додатку ID перейдіть до розділу Дозволи API.

    2. Виберіть Додати дозвіл.

    3. У розділі API моя організація використовує пошук Запис медіа для Dynamics 365 Sales і виберіть його: Скріншот опції запису медіа

    4. Додайте дозвіл Users.Read.All і виберіть Додати дозвіл

    Нотатка

    Обов’язково отримайте згоду адміністратора на отримання дозволу, щоб мати змогу викликати API Аналітика розмов у контексті програми. Докладніше про дозволи та згоду.

  3. Отримайте токен для запуску 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-токенів для реєстраційних записів служб.

  4. Зателефонуйте до наступного 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.

  5. Викличте наступний API Аналітика розмов, щоб отримати список користувачів для запису:
    GET /api/v1.0/providers/users

Після того, як адміністратор продажів Dynamics 365 створить політику запису, постачальник може використовувати цю кінцеву точку для фільтрації медіафайлів, які будуть розгалужені на рекордери Аналітика розмов.

Крок 2: Розгалуження носія (інтеграція з SIPREC)

Диктофони Аналітика розмов реалізують стандарт Протокол SIPREC.

Зв’язок захищений за допомогою протоколів SIPS (порт 5061) і SRTP. Аутентифікація виконується за допомогою mTLS у з’єднанні SIP-повідомлень і ґрунтується на сертифікаті, наданому API – це означає, що провайдер повинен бути зареєстрований для клієнта для встановлення SIP-з’єднання.

Наступний знімок екрана ілюструє зв’язок між клієнтом SIPREC і сервером SIPREC:

Знімок екрана зразка зв’язку між клієнтом 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 та подій автообдзвону клієнта можна протестувати інтеграцію, створивши нову політику запису з новим провайдером.

  1. Увійдіть як системний адміністратор у програму Центр збуту.

  2. У розділі Змінити виберіть Налаштування статистики продажів.

  3. Перейдіть до розділу Глобальні налаштуванняАналітика> розмов. У розділі Постачальники послуг виклику ви побачите стороннього постачальника, якого ви зареєстрували.

  4. Створіть політику записування для нового постачальника. Щоб дізнатися більше, перегляньте статтю Налаштування Microsoft Teams Аналітика розмов

Наступний скріншот є прикладом політики запису для Twilio.

скріншот політики запису для Twilio

Тепер викличте користувача, який входить в обрану роль безпеки (в нашому прикладі політика включена для всіх ролей безпеки).

Коли Dynamics 365 отримає подію «Почато» від автообдзвону, у вас буде можливість почати запис:

Скріншот повідомлення для запису дзвінків

Вибравши Запис, ви зможете бачити транскрипцію в реальному часі під час дзвінка, а також повний підсумок і Аналітика викликів в кінці дзвінка.

Перегляньте та зрозумійте сторінку зведення виклику