Teilen über


Wählhilfen von Drittanbietern in die Unterhaltungsdaten von Dynamics 365 integrieren (Vorschauversion)

[Dieser Artikel ist Teil der Dokumentation zur Vorabversion und kann geändert werden.]

Mit dieser Integration können Dynamics 365-Benutzende Wählhilfen von Drittanbietern wie Twilio Flex für Telefonie verwenden, um Telefonanrufe in Dynamics 365 zu tätigen und zu empfangen, und erhalten in Echtzeit KI-generierte Erkenntnisse und umfassende Analysen im Anschluss an ihre Anrufe. Erfahren Sie mehr über die Dynamics 365 Unterhaltungsdaten

Wichtig

  • Dies ist eine Vorschauversion.
  • Funktionen in der Vorschauversion sind nicht für den Produktionseinsatz gedacht und können eine eingeschränkte Funktionalität aufweisen. Diese Funktionen unterliegen den ergänzenden Nutzungsbedingungen und stehen vor dem offiziellen Release zur Verfügung, damit die Kundschaft frühen Zugriff darauf erhalten und Feedback geben können.

Wie funktioniert die Integration

Auf einer allgemeinen Ebene besteht die Integration aus drei Teilen:

  1. Den Anbieter registrieren: Registrieren Sie die Anbieterdetails und rufen Sie die aufzuzeichnende Benutzerliste mithilfe der Unterhaltungsdaten-API ab.

  2. Medien verzweigen: Verzweigen Sie den Audiostream mithilfe eines SIPREC-Protokolls zu den Rekordern für die Unterhaltungsdaten.

  3. Echtzeitereignisse senden: Um Echtzeittranskription und Anruferkenntnisse zu ermöglichen, senden Sie UI-Ereignisse von der Client-UI des Anbieters an die Dynamics 365-Unterhaltungsdaten.

Eine Beispielintegration zwischen Dynamics 365 Unterhaltungsdaten und einem Drittanbieter für Telefonie, Twilio Flex, finden Sie unter Twilio Flex in Dynamics 365-Unterhaltungsdaten integrieren.

Das folgende Diagramm zeigt, wie die Integration funktioniert:

Diagramm, das den Integrationsablauf darstellt

Schritt 1: Den Anbieter registrieren

  1. Microsoft Entra-ID-Anwendung erstellen.

  2. Fügen Sie eine API-Berechtigung für die Medienaufzeichnung hinzu:

    1. Gehen Sie für den von Ihnen erstellten Microsoft Entra ID-Anwendung zu API-Berechtigungen.

    2. Wählen Sie Berechtigung hinzufügen aus.

    3. Suchen Sie unter APIs, die meine Organisation verwendet nach Medienaufzeichnungen für Dynamics 365 Sales und wählen Sie es aus: Screenshot der Option „Medienaufzeichnung“

    4. Fügen Sie die Berechtigung Users.Read.All hinzu und wählen Sie Berechtigung hinzufügen aus

    Anmerkung

    Stellen Sie sicher, dass Sie die Zustimmung des Administrierenden einholen, damit Sie die Unterhaltungsdaten-API im App-Kontext aufrufen können. Erfahren Sie mehr über Berechtigungen und Einwilligung.

  3. Rufen Sie das Token ab, um die Unterhaltungsdaten-APIs mithilfe der im vorherigen Abschnitt erstellten App auszuführen:

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

    Der scope-Parameter gibt die Anwendungs-ID der Unterhaltungsdaten-App an. Ändern Sie diesen Wert nicht.

    Weitere Informationen zum cURL-Befehl finden Sie unter Microsoft Entra-ID-Token für Dienstprinzipale abrufen.

  4. Rufen Sie die folgende Unterhaltungsdaten-API auf, um den Drittanbieter zu registrieren:
    POST /api/v1.0/providers/tenants

    Legen Sie die folgenden Parameter im Anforderungstext fest:

    • orgID: Geben Sie die Dynamics 365-Organisations-ID an.

    • Typ: Geben Sie „Benutzerdefiniert“ für Wählhilfen von Drittanbietern an.

    • Hosting: Geben Sie den Hosting-Typ des Telefonieanbieters an. Zum Beispiel „Cloud“ oder „lokal“.

    • AccountId: Geben Sie die Konto-ID des Telefonanbieters an.

    • CerfificateSubjectName und CertificateIssuer: Geben Sie die Zertifikatsdetails des Telefonanbieters an.

    • SourceIPNetwork: Geben Sie die IP-Adresse des SIPREC-Clients an. Geben Sie „0.0.0.0“ an, wenn Sie die IP-Adresse nicht einschränken möchten.
      Das folgende Snippet ist ein Beispiel für den Anforderungstext:

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

    Weitere Informationen über die API finden Sie unter Swagger-Dokumentation.

  5. Rufen Sie die folgende Unterhaltungsdaten-API auf, um die Liste der aufzuzeichnenden Benutzenden abzurufen:
    GET /api/v1.0/providers/users

Nachdem der Dynamics 365 Sales-Administrierende die Aufzeichnungsrichtlinie erstellt hat, kann der Anbieter diesen Endpunkt verwenden, um die Medien zu filtern, die an Unterhaltungsdatenrekorder verzweigt werden.

Schritt 2: Die Medien verzweigen (SIPREC-Integration)

Unterhaltungsdatenrekorder implementieren das standardmäßige SIPREC-Protokoll.

Die Kommunikation ist über die Protokolle SIPS (Port 5061) und SRTP abgesichert. Die Authentifizierung erfolgt mittels mTLS in der SIPS-Nachrichtenverbindung und basiert auf dem der API bereitgestellten Zertifikat. Dies bedeutet, dass der Anbieter registriert sein muss, damit ein Mandant eine SIPS-Verbindung herstellen kann.

Der folgende Screenshot veranschaulicht die Kommunikation zwischen SIPREC-Client und SIPREC-Server:

Screenshot einer beispielhaften Kommunikation zwischen SIPREC-Client und SIPREC-Server.

Für die Unterhaltungsdaten sind folgende Metadaten erforderlich:

Kopfzeile:

Kopfzeilenname Beschreibung des Dataflows Wertebeispiel
Anruf-ID Eindeutiger Bezeichner des Anrufs. Diese ID wird verwendet, um SIP-Signale und Benutzeraktionen wie das Starten/Stoppen der Aufzeichnung zu korrelieren. efxxxxxxxxxxxxx
X-AccountId Eindeutiger Bezeichner des Kontos, zu dem der Anruf gehört. Diese ID wird zur Authentifizierung und Autorisierung verwendet. Dabei handelt es sich um dieselbe Konto-ID, die in der API für den Mandanten registriert ist. ACxxxxxxxxxxxxxxxxxxxxxxx

Metadata

Metadaten-Schlüsselname Beschreibung des Dataflows Wertebeispiel
Role Gibt an, ob es sich um einen eingehenden oder ausgehenden Anruf für den Verkaufenden handelt. [„eingehend“, „ausgehend“]
CallerDisplayName Anzeigename des Anrufers. Falls nicht verfügbar, wird die Telefonnummer angezeigt. Kenny Smith
CalleeDisplayName Name des Angerufenen. Falls nicht verfügbar, wird die Telefonnummer angezeigt. Alex Baker

Hier sind Beispiele für Einladungs- und Abschiedsnachrichten mit den erforderlichen Kopfzeilen und Metadaten:

EINLADEN-Nachricht:

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

ABSCHIEDS-Nachricht:

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 

Unterstützte Rekorder-Endpunkte und Regionen

In der folgenden Tabelle finden Sie die unterstützten Rekorder-Endpunkte und ihre Regionen. Sie können die Rekorder, die Sie verwenden möchten, in den Einstellungen Ihres Telefonanbieters konfigurieren. Weitere Informationen dazu, wie dies für Twilio Flex geschieht, finden Sie unter Schritt 2: Den SIPREC-Connector installieren und Anrufe an Dynamics 365 weiterleiten.

Endpunkt Region
media.recording.dynamics.com Global (nächstgelegene Region)
southeastasia.media.recording.dynamics.com Asien, Südosten
australiaeast.media.recording.dynamics.com Australien
sam.media.recording.dynamics.com Südamerika
canadacentral.media.recording.dynamics.com Kanada
switzerlandnorth.media.recording.dynamics.com Schweiz
eastus.media.recording.dynamics.com USA
francecentral.media.recording.dynamics.com Frankreich
centralindia.media.recording.dynamics.com Indien
japaneast.media.recording.dynamics.com Japan
uae.media.recording.dynamics.com VAE
uksouth.media.recording.dynamics.com UK
westeurope.media.recording.dynamics.com Europa, Westen
zaf.media.recording.dynamics.com Südafrika

Schritt 3: Echtzeitereignisse senden (Wählhilfen-Client-Integration)

Damit Unterhaltungsdaten Transkriptionen und Erkenntnisse in Echtzeit liefern können, kann die Drittanbieter-Wählhilfe zwei Ereignisse verwenden, um zu benachrichtigen, wenn ein Anruf beginnt oder endet.

  • „Anruf gestartet“-Ereignis: Wenn Unterhaltungsdaten das „Anruf gestartet“-Ereignis erhalten, werden die Aufzeichnungsschaltfläche sowie die Transkription und Erkenntnisse in Echtzeit angezeigt.

  • „Anruf beendet“-Ereignis: Wenn Unterhaltungsdaten das „Anruf beendet“-Ereignis erhält, wird der Anruf abgeschlossen und die Schaltfläche Vollständige Zusammenfassung angezeigt, um die von der KI generierte Anrufzusammenfassung und Erkenntnisse zu erhalten.

Um die Ereignisse zu senden, verwenden Sie die API raiseEvent im Dynamics 365-Kanalintegrationsframework (CIF).

Hier ist ein Beispielcodeausschnitt zum Senden der Ereignisse:

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

Die Integration testen

Nachdem Sie den neuen Anbieter beim Mandanten registriert und die SIPREC-Verzweigungs- und Client-Wählhilfen-Ereignisse eingerichtet haben, können Sie die Integration testen, indem Sie beim neuen Anbieter eine neue Aufzeichnungsrichtlinie erstellen.

  1. Melden Sie sich in der Vertriebshub-App als Systemadministrierender an.

  2. Wählen Sie im Bereich „Ändern“ Sales Insights-Einstellungen aus.

  3. Gehen Sie zu Globale Einstellungen>Unterhaltungsdaten. Im Abschnitt „Anrufanbieter“ sehen Sie den Drittanbieter, den Sie registriert haben.

  4. Erstellen Sie eine Aufzeichnungsrichtlinie für den neuen Anbieter. Weitere Informationen finden Sie unter Microsoft Teams für Unterhaltungsdaten einrichten

Der folgende Screenshot ist ein Beispiel einer Aufzeichnungsrichtlinie für Twilio.

Screenshot einer Aufzeichnungsrichtlinie für Twilio

Rufen Sie nun einen Benutzenden auf, der zu der ausgewählten Sicherheitsrolle gehört (in unserem Beispiel ist die Richtlinie für alle Sicherheitsrollen aktiviert).

Wenn Dynamics 365 das Ereignis callStarted von der Wählhilfe empfängt, haben Sie die Möglichkeit, die Aufzeichnung zu starten:

Screenshot der Benachrichtigung zum Aufzeichnen von Anrufen

Nachdem Sie Aufzeichnen ausgewählt haben, können Sie am Ende des Anrufs die Transkription in Echtzeit während des Anrufs sowie eine vollständige Zusammenfassung und Anruferkenntnisse sehen.

Siehe auch

Anrufzusammenfassungsseite anzeigen und verstehen