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


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

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

С тази интеграция потребителите на Dynamics 365 могат да използват номератори, предоставени от други телефонни компании, като Twilio Flex, за да извършват и приемат телефонни обаждания в Dynamics 365 и да получават за тях в реално време генерирани от AI прозрения и задълбочен анализ след обаждане. Научете повече за 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=00001111-aaaa-2222-bbbb-3333cccc4444/.default' -d 'client_secret=<your app secret>'

    Параметърът scope определя ИД на приложението за разузнаване чрез разговор. Не променяйте тази стойност.

    За повече информация относно командата curl вижте Получаване Microsoft Entra на маркери за ИД за принципали на услугата.

  4. Извикайте следния API на разузнаване чрез разговор, за да регистрирате доставчика на услуги – трето лице:
    POST /api/v1.0/providers/tenants

    Посочете следните параметри в основния текст на заявката:

    • orgID: Задайте ИД на организацията на Dynamics 365.

    • Тип: Посочете "персонализиран" за набиране на трети страни.

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

    • AccountId: Посочете ИД на акаунта на доставчика на телефония.

    • CerfificateSubjectName и CertificateIssuer: Посочете подробностите за сертификата на доставчика на телефония.

    • ИзточникIPNetwork: Посочете 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 за клиента. ACxxxxxxxxxxx

Метаданни

Име на ключа за метаданни Описание Пример за стойност
Роля Показва дали става въпрос за входящо или изходящо повикване за продавача. ["входящ", "изходящ"]
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 САЩ
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 (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 от програмата за набиране, ще имате възможност да започнете записа:

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

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

Преглед и разбиране на страницата с резюме на обаждането