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:
Zarejestruj dostawcę: Zarejestruj szczegóły dostawcy i uzyskaj listę użytkowników, którzy mają zostać zarejestrowani za pomocą interfejsu API analizy konwersacji.
Rozwidlenie mediów: Rozwidlenie strumienia audio do rejestratorów analizy konwersacji przy użyciu protokołu SIPREC.
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:
Krok 1: Rejestracja dostawcy
Tworzenie użytkownika aplikacji usługi Tożsamości Microsoft Entra
Dodaj uprawnienie API do nagrywania multimediów:
W utworzonej aplikacji Tożsamość Microsoft Entra przejdź do uprawnień interfejsu API.
Wybierz Dodaj uprawnienie.
W sekcj API używane przez organizację wyszukaj Nagrywanie multimediów dla Dynamics 365 Sales i wybierz tę opcję:
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.
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=00001111-aaaa-2222-bbbb-3333cccc4444/.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.
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.
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:
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ą.
Zaloguj się jako administrator systemu w aplikacji Centrum sprzedaży.
W obszarze Zmień wybierz Ustawienia Sales Insights.
Przejdź do Ustawienia globalne>Analiza konwersacji. W sekcji Dostawcy połączeń zobaczysz zarejestrowanego zewnętrznego dostawcę.
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.
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:
Po wybraniu Rekord, będziesz mógł zobaczyć transkrypcję w czasie rzeczywistym podczas rozmowy oraz pełne podsumowanie i spostrzeżenia na koniec rozmowy.