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


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

  4. Зателефонуйте за наступним API Аналітика розмов, щоб зареєструвати стороннього постачальника послуг:
    POST /api/v1.0/providers/tenants

    У тілі запиту вкажіть такі параметри:

    • orgID: Укажіть ідентифікатор організації Dynamics 365.

    • Тип: Вкажіть "custom" для сторонніх номеронабирачів.

    • хостинг: Вкажіть тип хостингу провайдера телефонії. Наприклад, «хмара» або «локальний».

    • AccountId: Вкажіть ідентифікатор облікового запису постачальника послуг телефонії.

    • 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 Sales створить політику записування, постачальник може використовувати цю кінцеву точку для фільтрування медіафайлів, які буде розгалужено на Аналітика розмов записувачі.

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

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

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

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

Знімок екрана зразка зв’язку між клієнтом SIPREC і сервером SIPREC.

Для Аналітика розмов потрібні такі метадані:

Заголовки:

Назва заголовка Опис Приклад значення
Ідентифікатор дзвінка Унікальний ідентифікатор дзвінка. Цей ідентифікатор використовується для співвіднесення сигналів SIP і дій користувача, таких як початок/зупинка запису. efxxxxxxxxxxxxxxx
X-AccountId Унікальний ідентифікатор облікового запису, до якого належить дзвінок. Цей ідентифікатор використовується для автентифікації та авторизації. Це той самий ідентифікатор облікового запису, зареєстрований в API для орендаря. ACxxxxxxx

Метадані

Ім’я ключа метаданих Опис Приклад значення
Роль Указує, вхідний чи вихідний дзвінок для продавця. ["вхідний", "вихідний"]
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:

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 (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 отримає подію CallStarted від номеронабирача, у вас буде можливість почати запис:

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

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

Див. також

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