Udostępnij za pośrednictwem


Integracja dialerów innych firm z analizą konwersacji Dynamics 365 (wersja zapoznawcza)

[Ten artykuł stanowi wstępną wersję dokumentacji i może ulec zmianie.]

Dzięki tej integracji użytkownicy Dynamics 365 mogą korzystać z dialerów dostarczanych przez zewnętrzne firmy telefoniczne, takie jak Twilio Flex, do wykonywania i odbierania połączeń telefonicznych w Dynamics 365, a także uzyskiwać w czasie rzeczywistym wgląd generowany przez sztuczną inteligencję i bogatą analizę połączeń. Dowiedz się więcej o analizie konwersacji w Dynamics 365

Ważne

  • Jest to funkcja w wersji zapoznawczej.
  • Funkcje w wersji zapoznawczej nie są przeznaczone do użytku w środowiskach produkcyjnych i mogą mieć ograniczoną funkcjonalność. Te funkcje podlegają dodatkowym warunkom i są udostępniane przed oficjalnym wydaniem, dzięki czemu klienci mogą szybciej uzyskać do nich dostęp i przekazać opinie na ich temat.

Jak działa integracja

Na wysokim poziomie integracja składa się z trzech części:

  1. Zarejestruj dostawcę: Zarejestruj szczegóły dostawcy i uzyskaj listę użytkowników, którzy mają zostać zarejestrowani za pomocą interfejsu API analizy konwersacji.

  2. Rozwidlenie mediów: Rozwidlenie strumienia audio do rejestratorów analizy konwersacji przy użyciu protokołu SIPREC.

  3. Wysyłanie zdarzeń w czasie rzeczywistym: aby włączyć w czasie rzeczywistym transkrypcję i wgląd w rozmowy, wysyłaj zdarzenia interfejsu użytkownika z interfejsu użytkownika klienta dostawcy do analizy rozmowy usługi Dynamics 365.

Aby zapoznać się z przykładową integracją między analizą konwersacji Dynamics 365 i zewnętrznym dostawcą telefonii, Twilio Flex, zobacz Integracja Twilio Flex z analizą konwersacji Dynamics 365.

Poniższy schemat ilustruje sposób działania integracji:

Diagram przedstawiający przepływ integracji

Krok 1: Rejestracja dostawcy

  1. Tworzenie użytkownika aplikacji usługi Tożsamości Microsoft Entra

  2. Dodaj uprawnienie API do nagrywania multimediów:

    1. W utworzonej aplikacji Tożsamość Microsoft Entra przejdź do uprawnień interfejsu API.

    2. Wybierz Dodaj uprawnienie.

    3. W sekcj API używane przez organizację wyszukaj Nagrywanie multimediów dla Dynamics 365 Sales i wybierz tę opcję: Zrzut ekranu opcji nagrywania multimediów

    4. Dodaj uprawnienie Users.Read.All i wybierz Dodaj uprawnienie

    Uwaga

    Upewnij się, że uzyskałeś zgodę administratora na zezwolenie na wywoływanie interfejsu API analizy konwersacji w kontekście aplikacji. Dowiedz się więcej o uprawnieniach i zgodach.

  3. Uzyskaj token do uruchamiania interfejsów API Analizy konwersacji przy użyciu aplikacji utworzonej w poprzedniej sekcji:

    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>'

    Parametr scope określa identyfikator aplikacji do analizy konwersacji. Nie zmieniaj tej wartości.

    Aby uzyskać więcej informacji na temat polecenia curl, zobacz Pobieranie tokenów Tożsamości Microsoft Entra dla jednostek usługi.

  4. Wywołaj poniższy interfejs API analizy konwersacji, aby zarejestrować zewnętrznego dostawcę usług:
    POST /api/v1.0/providers/tenants

    W treści żądania należy podać następujące parametry:

    • orgID: Określ identyfikator organizacji Dynamics 365.

    • Typ: Określ "niestandardowy" dla dialerów innych firm.

    • hosting: Określ typ hostingu dostawcy telefonii. Na przykład "chmura" lub "lokalnie".

    • AccountId: Określ identyfikator konta operatora telefonii.

    • CerfificateSubjectName i CertificateIssuer: Określ szczegóły certyfikatu dostawcy telefonii.

    • SourceIPNetwork: Określ adres IP klienta SIPREC. Podaj "0.0.0.0", jeśli nie chcesz ograniczać adresu IP.
      Poniższy fragment jest przykładem treści żądania:

      
      {
         "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"
         }
      }
      

    Więcej informacji na temat interfejsu API można znaleźć w dokumentacji Swagger.

  5. Wywołaj następujący interfejs API analizy konwersacji, aby uzyskać listę użytkowników do zarejestrowania:
    GET /api/v1.0/providers/users

Po utworzeniu zasad nagrywania przez administratora Dynamics 365 Sales, dostawca może użyć tych zasad do filtrowania mediów, które zostaną przekierowane do rejestratorów analizy konwersacji.

Krok 2: Rozgałęzienie nośnika (integracja SIPREC)

Rejestratory do analizy konwersacji implementują standardowy protokół SIPREC.

Komunikacja jest zabezpieczona przy użyciu protokołów SIPS (port 5061) i SRTP. Uwierzytelnianie jest wykonywane przy użyciu funkcji mTLS w połączeniu z komunikatami SIPS, i jest oparte na certyfikacie dostarczonym do interfejsu API, co oznacza, że aby ustanowić połączenie SIPS dla dzierżawcy, należy zarejestrować dostawcę.

Poniższy zrzut ekranu ilustruje komunikację między klientem SIPREC a serwerem SIPREC:

Zrzut ekranu przykładowej komunikacji między klientem SIPREC a serwerem SIPREC.

Do analizy konwersacji wymagane są następujące metadane:

Nagłówki:

Nazwa nagłówka Opis Przykład wartości
Identyfikator wywołania Unikatowy identyfikator połączenia. Ten identyfikator służy do korelowania sygnały z zestawu SIP oraz akcji użytkownika, takich jak rozpoczęcie/zatrzymanie rejestrowania. efxxxxxxxxxxxxx
X-AccountId Unikalny identyfikator konta, do którego należy połączenie. Ten identyfikator jest używany do uwierzytelniania i autoryzacji. Jest to ten sam identyfikator konta zarejestrowany w interfejsie API dla dzierżawy. ACxxxxxxxxxxxxxxxxxxxxxxx

Metadane

Nazwa klucza metadanych Opis Przykład wartości
Rola Wskazuje, czy jest to przychodzące lub wychodzące połączenie dla sprzedawcy. ["przychodzące", "wychodzące"]
CallerDisplayName Wyświetlana nazwa dzwoniącego. Jeśli nie jest dostępny, wyświetlany jest numer telefonu. Kenny Smith
CalleeDisplayName Wyświetlana nazwa odbiorcy. Jeśli nie jest dostępny, wyświetlany jest numer telefonu. Alex Baker

Oto przykłady wiadomości invite i bye z wymaganymi nagłówkami i metadanymi:

Wiadomość INVITE:

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--

Wiadomość 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 

Obsługiwane punkty końcowe i regiony

Poniższa tabela zawiera listę obsługiwanych punktów końcowych rejestratora i ich regionów. Rejestratory, które mają być używane, można skonfigurować w ustawieniach operatora telefonii. Aby dowiedzieć się, jak to zrobić dla Twilio Flex, zobacz Krok 2: Zainstalowanie łącznika SIPREC i kierowanie połączeń do Dynamics 365.

Punkt końcowy Region
media.recording.dynamics.com Globalny (najbliższy region)
southeastasia.media.recording.dynamics.com Azja Południowo-Wschodnia
australiaeast.media.recording.dynamics.com Australia
sam.media.recording.dynamics.com Ameryka Południowa
canadacentral.media.recording.dynamics.com Kanada
switzerlandnorth.media.recording.dynamics.com Szwajcaria
eastus.media.recording.dynamics.com — USA
francecentral.media.recording.dynamics.com Francja
centralindia.media.recording.dynamics.com Indie
japaneast.media.recording.dynamics.com Japonia
uae.media.recording.dynamics.com Zjednoczone Emiraty Arabskie
uksouth.media.recording.dynamics.com Zjednoczone Królestwo
westeurope.media.recording.dynamics.com Europa Zachodnia
zaf.media.recording.dynamics.com Republika Południowej Afryki

Krok 3: Wysyłanie zdarzeń w czasie rzeczywistym (integracja klienta dialera)

Aby umożliwić analizie konwersacji dostarczanie transkrypcji i spostrzeżeń w czasie rzeczywistym, dialer innej firmy może wykorzystywać dwa zdarzenia do powiadamiania o rozpoczęciu lub zakończeniu połączenia.

  • Zdarzenie rozpoczynania rozmowy: Gdy Analiza konwersacji otrzyma zdarzenie "rozpoczęcie połączenia", wyświetli przycisk nagrywania oraz transkrypcję i spostrzeżenia w czasie rzeczywistym.

  • Zdarzenie zakończenia połączenia: Gdy Analiza konwersacji otrzyma zdarzenie "połączenie zakończone", zakończy połączenie i wyświetli przycisk Pełne podsumowanie, aby uzyskać wygenerowane przez AI podsumowanie połączenia i spostrzeżenia.

Aby wysłać zdarzenia, należy użyć raiseEvent API w Dynamics 365 Channel Integration Framework (CIF).

Oto przykładowy fragment kodu do wysyłania zdarzeń:

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); 
});

Przetestuj integrację

Po zarejestrowaniu nowego dostawcy w dzierżawie i skonfigurowaniu rozwidlenia SIPREC oraz zdarzeń dialera klienta, można przetestować integrację, tworząc nowe zasady nagrywania z nowym dostawcą.

  1. Zaloguj się jako administrator systemu w aplikacji Centrum sprzedaży.

  2. W obszarze Zmień wybierz Ustawienia Sales Insights.

  3. Przejdź do Ustawienia globalne>Analiza konwersacji. W sekcji Dostawcy połączeń zobaczysz zarejestrowanego zewnętrznego dostawcę.

  4. Utwórz zasady nagrywania dla nowego dostawcy. Więcej informacji można znaleźć tutaj: Skonfiguruj usługę Microsoft Teams na potrzeby analizy konwersacji

Poniższy zrzut ekranu jest przykładem polityki nagrywania dla Twilio.

zrzut ekranu polityki nagrywania dla Twilio

Teraz należy wywołać użytkownika, który należy do wybranej roli zabezpieczeń (w naszym przykładzie polityka jest włączona dla wszystkich ról zabezpieczeń).

Gdy Dynamics 365 otrzyma zdarzenie callStarted z dialera, będziesz mieć możliwość rozpoczęcia nagrywania:

Zrzut ekranu powiadomienia o nagrywaniu rozmów

Po wybraniu Rekord, będziesz mógł zobaczyć transkrypcję w czasie rzeczywistym podczas rozmowy oraz pełne podsumowanie i spostrzeżenia na koniec rozmowy.

Zobacz też

Wyświetlenie i zrozumienie strony podsumowania połączenia