共用方式為


將第三方撥號程式與 Dynamics 365 交談智慧整合 (預覽版)

[本文章是發行前版本文件,隨時可能變更。]

Dynamics 365 使用者可以透過這種整合,使用第三方電話公司 (例如 Twilio Flex) 提供的撥號程式在 Dynamics 365 中撥打和接聽通話,並取得 AI 產生的即時見解和豐富的通話後分析。 深入了解 Dynamics 365 交談智慧

重要

  • 這是預覽功能。
  • 預覽功能不供生產時使用,而且可能功能受限。 這些功能應受補充使用規定規範,並且是在正式發行前先行推出,讓客戶可以搶先體驗並提供意見反應。

整合的運作方式

大致上,整合由三個部分組成:

  1. 註冊提供者:註冊提供者詳細資料,並使用交談智慧 API 取得要錄音的使用者清單。

  2. 派生媒體:使用 SIPREC 通訊協定將音訊串流派生至談話智慧錄音機。

  3. 傳送即時事件:若要啟用即時謄寫和通話見解體驗,請將 UI 事件從提供者的用戶端 UI 傳送至 Dynamics 365 交談智慧。

如需 Dynamics 365 交談智慧與第三方電話語音提供者 (Twilio Flex) 之間的範例整合,請參閱將 Twilio Flex 與 Dynamics 365 交談智慧整合

下圖顯示此整合的運作方式:

圖中描繪整合流程

步驟 1:註冊提供者

  1. 建立 Microsoft Entra ID 應用程式

  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 ID 權杖

  4. 呼叫下列交談智慧 API 來註冊第三方服務提供者:
    POST /api/v1.0/providers/tenants

    在要求本文中指定下列參數:

    • orgID:指定 Dynamics 365 組織識別碼。

    • Type:指定第三方撥號程式的「自訂」。

    • hosting:指定電話語音提供者的代管類型。 例如,「雲端」或「內部部署」。

    • AccountId:指定電話語音提供者的帳戶識別碼。

    • CerfificateSubjectName 和 CertificateIssuer:指定電話語音提供者的憑證詳細資料。

    • SourceIPNetwork:指定 SIPREC 用戶端的 IP 位址。 如果您不希望限制 IP 位址,請指定 "0.0.0.0"。
      下列片段是要求本文的範例:

      
      {
         "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 通訊協定

通訊是使用 SIP (連接埠 5061) 和 SRTP 通訊協定來保護。 驗證是在 SIPS 訊息連接中使用 mTLS 來完成,並且是根據提供給 API 的憑證而定,這意味著必須註冊租用戶的提供者才能建立 SIPS 連接。

下列螢幕擷取畫面顯示 SIPREC 用戶端與 SIPREC 伺服器之間的通訊:

SIPREC 用戶端與 SIPREC 伺服器之間範例通訊的螢幕擷取畫面。

交談智慧需要下列中繼資料:

標頭:

標頭名稱 描述 值範例
通話識別碼 通話的唯一識別碼。 此識別碼用於將 SIP 訊號與使用者動作 (例如開始/停止錄製) 相互關聯。 efxxxxxxxxxxxxx
X-AccountId 通話所屬帳戶的唯一識別碼。 此識別碼用於驗證和授權。 這與租用戶在 API 中註冊的帳戶識別碼相同。 ACxxxxxxxxxxxxxxxxxxxxxxx

中繼資料

中繼資料金鑰名稱 描述 值範例
角色 指示這是賣家的撥入通話還是撥出通話。 ["撥入", "撥出"]
CallerDisplayName 來電者顯示名稱。 如果沒有提供,則會顯示電話號碼。 Kenny Smith
CalleeDisplayName 受話者的顯示名稱。 如果沒有提供,則會顯示電話號碼。 Alex Baker

以下是邀請和再見訊息的範例,其中包含所需的標頭和中繼資料:

邀請訊息:

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:傳送即時事件 (撥號程式的用戶端整合)

若要讓交談智慧提供即時謄寫和深入解析,第三方撥號程式可以使用兩個事件,在通話開始或結束時發出通知。

  • 通話開始事件:交談智慧收到「通話開始」事件時,它會顯示錄音按鈕以及即時謄寫和深入解析。

  • 通話結束事件:交談智慧收到「通話結束」事件時,它會結束通話,並顯示完整摘要按鈕,以取得 AI 產生的通話摘要和深入解析。

若要傳送事件,請使用 Dynamics 365 管道整合架構 (CIF) 中的 raiseEvent API。

以下是傳送事件的範例程式碼片段:

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. 從變更區域選取 Sales Insights 設定

  3. 移至全域設定>交談智慧。 在通話提供者區段中,您會看到您已註冊的第三方提供者。

  4. 建立新提供者的錄製原則。 如需詳細資訊,請參閱設定用於交談智慧的 Microsoft Teams

下列螢幕擷取畫面是 Twilio 錄製原則的範例。

Twilio 錄製原則的螢幕擷取畫面

現在,打電話給屬於所選資訊安全角色的使用者 (在本範例中,所有資訊安全角色都已啟用該原則)。

Dynamics 365 從撥號程式收到 callStarted 事件時,您會有選項可用於開始錄音:

錄製通話通知的螢幕擷取畫面

選取錄製後,您可以在通話期間看到即時謄寫,並在通話結束時看到完整摘要和通話見解。

檢視並了解通話摘要頁面