Споделяне чрез


Интегриране на набирания от трети страни с разузнаване на разговори в Dynamics 365 (предварителен преглед)

[Тази статия е предварително издание на документацията и подлежи на промяна.]

С тази интеграция потребителите на Dynamics 365 могат да използват номератори, предоставени от други телефонни компании, като Twilio Flex, за да извършват и приемат телефонни обаждания в Dynamics 365 и да получават за тях в реално време генерирани от AI прозрения и задълбочен анализ след обаждане. Научете повече за интелигентността на разговорите в Dynamics 365

Важно

  • Това е функция за предварителен преглед.
  • Функциите за предварителен преглед не са предназначени за производствена употреба и може да са с ограничена функционалност. Тези функции са предмет на допълнителни условия за ползване и са налични преди официалното издание, така че клиентите да могат да получат ранен достъп и да предоставят обратна връзка.

Как работи интеграцията

На високо ниво интеграцията се състои от три части:

  1. Регистрирайте доставчика: Регистрирайте данните за доставчика и получете списъка с потребители, който трябва да бъде записан, като използвате API за разузнаване на разговорите.

  2. Fork медиите: Fork аудио поток към разговора разузнавателни записващи устройства с помощта на протокол SIPREC.

  3. Изпращане на събития в реално време: За да активирате транскрипция в реално време и прозрения за обажданията, изпратете събития в потребителския интерфейс от клиентския потребителски интерфейс на доставчика към разузнаването на разговорите в Dynamics 365.

За пример интеграция между Dynamics 365 разговор разузнаване и трета страна доставчик на телефония, Twilio Flex, вижте Интегриране Twilio Flex с Dynamics 365 разговор интелигентност.

Следващата диаграма илюстрира как работи интеграцията:

Диаграма, изобразяваща интеграционния поток

Стъпка 1: Регистрирайте доставчика

  1. Създаване на приложение Microsoft Entra заИД.

  2. Добавяне на разрешение за API за запис на мултимедия:

    1. В приложението за Microsoft Entra ИД, което сте създали, отидете на разрешения за API.

    2. Изберете Добавяне на разрешение.

    3. Под API моята организация използва търсене за Media Recording за 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 org.

    • Тип: Задайте "по избор" за набиране на трети страни.

    • хостинг: Посочете типа хостинг на доставчика на телефония. Например "облак" или "локален".

    • 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 сигнали и действия на потребителя, като например старт/стоп запис. Чата на xsexyblackxx
X-AccountId Еднозначен идентификатор на акаунта, към който принадлежи повикването. Този идентификатор се използва за удостоверяване и упълномощаване. Това е същият ИД на акаунт, регистриран в API за клиента. АКххх

Метаданни

Име на ключ за метаданни Описание Пример за стойност
Роля Показва дали това е входящо или изходящо повикване за продавача. ["входящ", "изходящ"]
Показвано име на повикващия Показвано име на повикващия. Ако не е наличен, се показва телефонен номер. Кени Смит
Показване на CalleeName Показвано име на получателя. Ако не е наличен, се показва телефонен номер. Алекс Бейкър

Ето примери за покани и сбогуване съобщения с необходимите заглавки и метаданни:

Съобщение ПОКАНА:

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 САЩ
francecentral.media.recording.dynamics.com Франция
centralindia.media.recording.dynamics.com Индия
japaneast.media.recording.dynamics.com Япония
uae.media.recording.dynamics.com UAE
uksouth.media.recording.dynamics.com Обединеното кралство
westeurope.media.recording.dynamics.com Западна Европа
zaf.media.recording.dynamics.com Южна Африка

Стъпка 3: Изпращане на събития в реално време (интеграция на клиента на Dialer)

За да позволи на разузнаването чрез разговори да предоставя транскрипция и аналитични данни в реално време, номераторът от друг производител може да използва две събития за известяване за началото или края на обаждането.

  • Събитие със стартирано обаждане: Когато разузнаването на разговора получи събитието "започнато повикване", то ще покаже бутона за запис и транскрипцията и прозренията в реално време.

  • Събитие с край на разговора: Когато разузнаването на разговора получи събитието "край на разговора", то ще приключи разговора и ще покаже бутона Пълно резюме , за да получи обобщението и прозренията, генерирани от AI.

За да изпратите събитията, използвайте API raiseEvent в Dynamics 365 Channel Integration Framework (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 от наречието, ще имате възможност да стартирате записа:

Екранна снимка на известието за записване на повиквания

След като изберете Запис, ще можете да видите транскрипцията в реално време по време на разговора и пълно резюме и прозрения за обажданията в края на разговора.

Вижте също

Преглед и разбиране на страницата с обобщение на повикването