รวมโปรแกรมโทรออกของบริษัทอื่นเข้ากับระบบการสนทนาอัจฉริยะของ Dynamics 365 (พรีวิว)
[บทความนี้เป็นคู่มือรุ่นก่อนวางจำหน่าย และอาจจะมีการเปลี่ยนแปลงในอนาคต]
ด้วยการรวมนี้ ผู้ใช้ Dynamics 365 สามารถใช้โปรแกรมโทรออกที่ให้บริการโดยบริษัทโทรศัพท์บุคคลที่สาม เช่น Twilio Flex เพื่อโทรออกและรับสายใน Dynamics 365 และรับข้อมูลเชิงลึกที่สร้างโดย AI แบบเรียลไทม์และการวิเคราะห์หลังการโทรอย่างละเอียด เรียนรู้เพิ่มเติมเกี่ยวกับระบบการสนทนาอัจฉริยะของ Dynamics 365
สำคัญ
- นี่คือคุณลักษณะพรีวิว
- คุณลักษณะพรีวิวไม่ได้มีไว้สำหรับการนำไปใช้งานจริง และอาจมีการจำกัดฟังก์ชันการทำงาน คุณลักษณะเหล่านี้อยู่ภายใต้ ข้อกำหนดการใช้งานเพิ่มเติม และสามารถใช้ได้ก่อนการเผยแพร่อย่างเป็นทางการเพื่อให้ลูกค้าสามารถเข้าถึงล่วงหน้าและแสดงความคิดเห็น
วิธีที่การรวมทำงาน
ในระดับสูง การรวมประกอบด้วยสามส่วน:
ลงทะเบียนผู้ให้บริการ: ลงทะเบียนรายละเอียดผู้ให้บริการและขอรับรายชื่อผู้ใช้ที่จะบันทึกโดยใช้ API ระบบการสนทนาอัจฉริยะ
แยกสื่อ: แยกสตรีมเสียงไปยังโปรแกรมบันทึกของระบบการสนทนาอัจฉริยะโดยใช้โปรโตคอล SIPREC
ส่งเหตุการณ์แบบเรียลไทม์: หากต้องการเปิดใช้งานการถอดความแบบเรียลไทม์และประสบการณ์ข้อมูลเชิงลึกการโทร ให้ส่งเหตุการณ์ UI จาก UI ไคลเอ็นต์ของผู้ให้บริการไปยังระบบการสนทนาอัจฉริยะของ Dynamics 365
สำหรับตัวอย่างการรวมระหว่างระบบการสนทนาอัจฉริยะของ Dynamics 365 กับผู้ให้บริการระบบโทรศัพท์บุคคลที่สาม Twilio Flex โปรดดู รวม Twilio Flex กับระบบการสนทนาอัจฉริยะของ Dynamics 365
ไดอะแกรมต่อไปนี้แสดงวิธีการทำงานของการรวม:
ขั้นตอนที่ 1: ลงทะเบียนผู้ให้บริการ
เพิ่มสิทธิ์ของ API สำหรับการบันทึกสื่อ:
ในแอปพลิเคชัน Microsoft Entra ID ที่คุณสร้างขึ้น ไปที่ สิทธิ์ของ API
เลือก เพิ่มสิทธิ์
ภายใต้ API ที่องค์กรของฉันใช้ ค้นหา การบันทึกสื่อสำหรับ Dynamics 365 Sales และเลือก:
เพิ่มสิทธิ์ Users.Read.All และเลือก เพิ่มสิทธิ์
หมายเหตุ
ตรวจสอบให้แน่ใจว่าได้รับความยินยอมจากผู้ดูแลระบบสำหรับสิทธิ์ให้เรียก API ระบบการสนทนาอัจฉริยะในบริบทของแอป เรียนรู้เพิ่มเติมเกี่ยวกับสิทธิ์และความยินยอม
รับโทเค็นเพื่อเรียกใช้ 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 สำหรับบริการหลัก
เรียก API ระบบการสนทนาอัจฉริยะต่อไปนี้เพื่อลงทะเบียนผู้ให้บริการบุคคลที่สาม:
POST /api/v1.0/providers/tenants
ระบุพารามิเตอร์ต่อไปนี้ในเนื้อความของคำขอ:
orgID: ระบุรหัสองค์กร Dynamics 365
Type: ระบุ "กำหนดเอง" สำหรับโปรแกรมโทรออกของบริษัทอื่น
hosting: ระบุชนิดการโฮสต์ของผู้ให้บริการระบบโทรศัพท์ ตัวอย่างเช่น "ระบบคลาวด์" หรือ "ในสถานที่"
AccountId: ระบุรหัสบัญชีของผู้ให้บริการระบบโทรศัพท์
CerfificateSubjectName และ CertificateIssuer: ระบุรายละเอียดใบรับรองของผู้ให้บริการระบบโทรศัพท์
SourceIPNetwork: ระบุที่อยู่ 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
เรียก API ระบบการสนทนาอัจฉริยะต่อไปนี้เพื่อรับรายชื่อผู้ใช้ที่จะบันทึก:
GET /api/v1.0/providers/users
หลังจากที่ผู้ดูแลระบบ Dynamics 365 Sales สร้างนโยบายการบันทึก ผู้ให้บริการสามารถใช้ตำแหน่งข้อมูลนี้เพื่อกรองสื่อที่จะถูกแยกไปยังโปรแกรมบันทึกของระบบการสนทนาอัจฉริยะ
ขั้นตอนที่ 2: แยกสื่อ (การรวม SIPREC)
โปรแกรมบันทึกของระบบการสนทนาอัจฉริยะใช้ โปรโตคอล SIPREC มาตรฐาน
การสื่อสารมีการรักษาความปลอดภัยโดยใช้โปรโตคอล SIPS (พอร์ต 5061) และ SRTP การรับรองความถูกต้องเสร็จสิ้นโดยใช้ mTLS ในการเชื่อมต่อข้อความ SIPS และอิงตามใบรับรองที่มอบให้กับ API ซึ่งหมายความว่าผู้ให้บริการต้องลงทะเบียนสำหรับผู้เช่าเพื่อสร้างการเชื่อมต่อ SIPS
ภาพหน้าจอต่อไปนี้แสดงการสื่อสารระหว่างไคลเอ็นต์ SIPREC กับเซิร์ฟเวอร์ SIPREC:
เมตาดาต้าต่อไปนี้จำเป็นสำหรับระบบการสนทนาอัจฉริยะ:
ส่วนหัว:
ชื่อส่วนหัว | คำอธิบาย | ตัวอย่างค่า |
---|---|---|
Call-ID | รหัสเฉพาะของผู้โทร รหัสนี้ใช้เพื่อเชื่อมโยงสัญญาณ SIP และการดำเนินการของผู้ใช้ เช่น การเริ่ม/หยุดการบันทึก | efxxxxxxxxxxxxx |
X-AccountId | รหัสเฉพาะของบัญชีที่มีการโทร รหัสนี้ใช้สำหรับการรับรองความถูกต้องและการอนุญาต รหัสนี้เป็นรหัสบัญชีเดียวกันกับที่ลงทะเบียนใน API สำหรับผู้เช่า | ACxxxxxxxxxxxxxxxxxxxxxxx |
เมตาดาต้า
ชื่อคีย์เมตาดาต้า | คำอธิบาย | ตัวอย่างค่า |
---|---|---|
บทบาท | ระบุว่าเป็นการโทรเข้าหรือโทรออกสำหรับผู้ขาย | ["โทรเข้า", "โทรออก"] |
CallerDisplayName | ชื่อที่แสดงของผู้โทร หากไม่มี หมายเลขโทรศัพท์จะแสดงขึ้น | Kenny Smith |
CalleeDisplayName | ชื่อที่แสดงของผู้รับ หากไม่มี หมายเลขโทรศัพท์จะแสดงขึ้น | Alex Baker |
ต่อไปนี้เป็นตัวอย่างข้อความเชิญและการลาที่มีส่วนหัวและเมตาดาต้าที่จำเป็น:
ข้อความ 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--
ข้อความ 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
รองรับตำแหน่งข้อมูลและภูมิภาคของโปรแกรมบันทึก
ตารางต่อไปนี้แสดงรายการตำแหน่งข้อมูลโปรแกรมบันทึกที่รองรับและภูมิภาค คุณสามารถกำหนดค่าโปรแกรมบันทึกที่คุณต้องการใช้ในการตั้งค่าผู้ให้บริการระบบโทรศัพท์ หากต้องการเรียนรู้เกี่ยวกับวิธีการดำเนินการนี้สำหรับ 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 | US |
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 และข้อมูลเชิงลึก
เมื่อต้องการส่งเหตุการณ์ ใช้ raiseEvent API ในเฟรมเวิร์กการรวมช่องทาง (CIF) ของ Dynamics 365
นี่คือตัวอย่างส่วนย่อยของโค้ดที่จะส่งเหตุการณ์:
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 และเหตุการณ์ของโปรแกรมโทรออกของไคลเอ็นต์แล้ว คุณสามารถทดสอบการรวมได้โดยสร้างนโยบายการบันทึกใหม่กับผู้ให้บริการรายใหม่
เข้าสู่ระบบในฐานะผู้ดูแลระบบในแอปฮับการขาย
ในพื้นที่เปลี่ยนแปลง เลือก การตั้งค่า Sales Insights
ไปที่ การตั้งค่าส่วนกลาง>ระบบการสนทนาอัจฉริยะ ในส่วนผู้ให้บริการการโทร คุณจะเห็นผู้ให้บริการบุคคลที่สามที่คุณลงทะเบียนไว้
สร้างนโยบายการบันทึกสำหรับผู้ให้บริการรายใหม่ สำหรับข้อมูลเพิ่มเติม โปรดดู ตั้งค่า Microsoft Teams สำหรับระบบการสนทนาอัจฉริยะ
ภาพหน้าจอต่อไปนี้เป็นตัวอย่างของนโยบายการบันทึกสำหรับ Twilio
ตอนนี้ โทรหาผู้ใช้ที่เป็นส่วนหนึ่งของบทบาทความปลอดภัยที่เลือก (ในตัวอย่างของเรา นโยบายถูกเปิดใช้งานสำหรับบทบาทความปลอดภัยทั้งหมด)
เมื่อ Dynamics 365 ได้รับเหตุการณ์ callStarted จากโปรแกรมโทรออก คุณจะมีตัวเลือกเพื่อเริ่มการบันทึก:
หลังจากเลือก บันทึก คุณจะสามารถดูการถอดความแบบเรียลไทม์ระหว่างการโทรและสรุปข้อมูลทั้งหมดข้อมูลเชิงลึกการโทรเมื่อสิ้นสุดการโทร