تكامل برامج الاتصال من جهات خارجية مع ذكاء المحادثة في Dynamics 365 (معاينة)
[هذا المقال عبارة عن وثائق نسخة مسبقة وهو عرضة للتغيير.]
من خلال هذا الدمج، بإمكان مستخدمي Dynamics 365 استخدام برامج الطلب التي توفرها شركات هاتفية خارجية مثل Twilio Flex، لإجراء وتلقي مكالمات هاتفية في Dynamics 365، والحصول على الرؤى التي يتم إنشاؤها بواسطة الذكاء الاصطناعي في الوقت الحقيقي بالإضافة إلى تحليل غني للمكالمات بعد المكالمة. اعرف المزيد حول ذكاء المحادثة في Dynamics 365
مهم
- هذه ميزة إصدار أولي.
- الهدف من ميزات المعاينة ليس الاستخدام في الإنتاج وقد يكون لها دالات مقيدة. تخضع هذه الميزات لشروط الاستخدام التكميلية، وهي متاحة قبل الإصدار الرسمي حتى يتمكن العملاء من الوصول المبكر وتقديم التعليقات.
كيفية عمل التكامل
على مستوى عالٍ، تتكون عملية التكامل من ثلاثة أجزاء:
تسجيل الموفر: تسجيل تفاصيل الموفر والحصول على قائمة المستخدمين الذين يجب تسجيلهم باستخدام واجهة API لذكاء المحادثة.
تقسيم الوسائط: تقسيم دفق الصوت إلى مسجلات ذكاء المحادثة باستخدام بروتوكول SIPREC.
إرسال أحداث في الوقت الحقيقي: لتمكين تجربة الكتابة في الوقت الحقيقي ورؤى المكالمات، أرسل أحداث واجهة المستخدم من واجهة مستخدم عميل الموفر إلى ذكاء المحادثة في 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.
النوع: حدد "مخصص" لبرامج الطلب التابعة لجهات خارجية.
استضافة: حدد نوع الاستضافة الخاص بموفر الهتفية. على سبيل المثال، "سحابة" أو "محلي".
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، وتستند إلى الشهادة المقدمة إلى واجهة برمجة التطبيقات - مما يعني أنه يجب تسجيل الموفر للمستأجر لإنشاء اتصال SIPS.
توضح لقطة الشاشة التالية الاتصال بين عميل SIPREC وخادم SIPREC:
بيانات التعريف التالية مطلوبة لذكاء المحادثة:
الرؤوس:
اسم الرأس | الوصف | مثال قيمة |
---|---|---|
Call-ID | المعرّف الفريد للمكالمة. يتم استخدام هذا المعرف لربط إشارات SIP وإجراءات المستخدم مثل بدء/إيقاف التسجيل. | efxxxxxxxxxxxxx |
X-AccountId | المعرّف الفريد للحساب الذي تنتمي إليه المكالمة. يستخدم هذا المعرف للمصادقة والتفويض. إنه معرف الحساب نفسه المسجل في واجهة API للمستأجر. | ACxxxxxxxxxxxxxxxxxxxxxxx |
بيانات التعريف
اسم مفتاح بيانات التعريف | الوصف | مثال قيمة |
---|---|---|
الدور | الإشارة إلى ما إذا كانت مكالمة واردة أو صادرة للبائع. | ["واردة", "صادرة"] |
CallerDisplayName | الاسم المعروض للمتصل. يظهر رقم الهاتف إذا لم يكن متاحًا. | كيني سميث |
CalleeDisplayName | الاسم المعروض للمستلم. يظهر رقم الهاتف إذا لم يكن متاحًا. | أليكس بيكر |
فيما يلي أمثلة عن رسائل الدعوة والوداع التي تحتوي على الرؤوس وبينات التعريف المطلوبة:
رسالة دعوة:
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 | US |
francecentral.media.recording.dynamics.com | فرنسا |
centralindia.media.recording.dynamics.com | الهند |
japaneast.media.recording.dynamics.com | اليابان |
uae.media.recording.dynamics.com | الإمارات العربية المتحدة |
uksouth.media.recording.dynamics.com | المملكة المتحدة |
westeurope.media.recording.dynamics.com | أوروبا الغربية |
zaf.media.recording.dynamics.com | جنوب إفريقيا |
الخطوة 3: إرسال أحداث الوقت الحقيقي (تكامل عميل برنامج الطلب الهاتفي)
للسماح لذكاء المحادثة بتوفير النسخ في الوقت الحقيقي والرؤى، بإمكان برنامج الطلب التابع لجهة خارجية استخدام حدثين للإعلام عند بدء المكالمة أو انتهائها.
حدث بدء المكالمة: عندما يحصل ذكاء المحادثة على حدث "بدء المكالمة"، سيعرض زر التسجيل والنسخ في الوقت الحقيقي والرؤى.
حدث انتهاء المكالمة: عندما يحصل ذكاء المحادثة على حدث "انتهاء المكالمة"، سيقوم بإتمام المكالمة ويعرض الزر ملخص كامل للحصول على الرؤى وملخص المكالمة الذي تم توليده.
لإرسال الأحداث، استخدم raiseEvent API في إطار عمل تكامل قنوات 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 من برنامج الطلب، يمكنك بدء التسجيل:
بعد تحديد تسجيل، سوف تتمكن من مشاهدة النسخ في الوقت الحقيقي أثناء المكالمة وملخص كامل ومعلومات المكالمات في نهاية المكالمة.