1. مقدمة
تاريخ آخر تعديل: 23/08/2021
نقل الوكيل مباشرةً باستخدام ميزة "الرسائل التجارية"
إنّ ميزة النقل المباشر لموظّفي الدعم في "الرسائل التجارية" تتيح لوكيلك بدء محادثة كبرنامج تتبُّع والتبديل في أثناء المحادثة إلى موظّف دعم يقدّم خدمة مباشرة (أي ممثل بشري). يستطيع روبوت الدردشة الخاص بك التعامل مع الأسئلة الشائعة، مثل ساعات العمل، في حين يمكن لوكيلك المباشر تقديم تجربة مخصصة مع قدر أكبر من الوصول إلى سياق المستخدم. وعندما يكون الانتقال بين هاتين التجربتَين سلسًا، تتم الإجابة عن أسئلتهم بسرعة ودقة، ما يؤدي إلى ارتفاع نسبة التفاعل مع الإرجاع وزيادة رضا العملاء.
يعلّمك هذا الدرس التطبيقي حول الترميز كيفية الاستفادة بشكل كامل من ميزة نقل الوكيل المباشر.
ما الذي ستنشئه
في هذا الدرس التطبيقي حول الترميز، سيتم إنشاء ردّ تلقائي على الويب لوكيلك يمكنه إرسال أحداث مباشرة لنقل الوكيل وتلقّيها. ستستخدم واجهة مستخدم أساسية يوفرها رمز البدء لاختبار ما قمت بإنشائه.
المعلومات التي ستطّلع عليها
- كيفية تخزين حالة المحادثة وإدارتها
- كيفية استخدام ميزة "الرسائل التجارية" لإرسال أحداث مباشرة بشأن نقل الوكيل
- كيفية إعداد ردّ تلقائي على الويب وواجهة مستخدم أساسية للانضمام إلى المحادثات كوكيل
- أفضل الممارسات لاستخدام واجهة برمجة تطبيقات "الرسائل التجارية"
يركّز هذا الدرس التطبيقي حول الترميز على استخدام Business Message API لتنفيذ عملية نقل الوكيل مباشرةً. يمكنك قراءة رمز إجراء التفعيل لكل مرحلة، ولكن ما عليك سوى تنفيذ الرمز المرتبط بميزة "الرسائل التجارية".
المتطلبات
- وكيل في ميزة "الرسائل التجارية"، بما في ذلك مفتاح حساب الخدمة يمكنك إنشاء وكيل من خلال اتّباع الخطوات في دليل إنشاء وكيل.
- يجب أن تكون إعدادات تخزين البيانات في السحابة الإلكترونية صالحة ومرتبطة بمشروع Google Cloud Platform الخاص بوكيلك. يمكنك استخدام البدء السريع لخدمة Cloud Datastore لإعداد هذه الخدمة. لست بحاجة إلى معرفة كيفية استخدام خدمة "تخزين البيانات في السحابة الإلكترونية".
- جهاز كمبيوتر مثبّت عليه Google Cloud SDK وNode.js (الإصدار 10 أو إصدار أحدث)
- جهاز Android (بالإصدار 5 أو إصدار أحدث) أو جهاز iOS لاختبار تجربة المستخدم
- خبرة في برمجة تطبيقات الويب. ستكتب قدرًا صغيرًا من رمز JavaScript وقد تحتاج إلى تصحيح الأخطاء التي تكتبها.
2. إنشاء برنامج تتبُّع للصدى
في هذه الخطوة، ستنشر ممثِّل روبوت أساسي يسمى "برنامج تتبع Echo". يأخذ برنامج التتبُّع هذا رسائل المستخدمين ويسجِّلها في سلسلة محادثات في "مخزن البيانات في السحابة الإلكترونية"، ثم "يردّد" رسالة المستخدم من خلال الرد بنفس المحتوى. بعد أن يصبح لديك برنامج تتبُّع أساسي وبنية أساسية للتسجيل، يمكنك إضافة ذلك في الخطوات اللاحقة لإنشاء عملية تنفيذ كاملة لنقل الوكيل المباشر.
الحصول على رمز إجراء التفعيل
في الوحدة الطرفية، استنسِخ رمز بدء عملية نقل الوكيل المباشر إلى دليل عمل مشروعك باستخدام الأمر التالي:
git clone https://github.com/google-business-communications/bm-nodejs-live-agent-transfer
التعرّف على رمز إجراء التفعيل
لنلقِ نظرة على بنية رموز البداية التي ستعمل عليها خلال الدرس التطبيقي حول الترميز.
انتقِل إلى دليل step-1
واطّلِع على محتواه. ويشتمل على العناصر التالية:
- bin: يحتوي هذا الدليل على النص البرمجي للمبتدئين www الذي يعمل على إعداد الخادم وإعداده.
- libs: يحتوي هذا الدليل على
datastore_util.js
، الذي يحتوي على طرق ملائمة للقراءة والكتابة من Cloud Datastore. لست بحاجة إلى فهم آلية عمل هذا الملف. ما عليك سوى مراعاة الطرق المتاحة ووظيفتها. - الموارد: يحتوي هذا الحقل على مفتاح حساب الخدمة كملف باسم
credentials.json
. - المسارات: يحتوي ملف
index.js
على الرد التلقائي على الويب وجميع الطرق المساعدة له. هذا هو الملف الرئيسي الذي ستعمل به وتضيف إليه. - views: يحتوي هذا الدليل على ملفات نماذج EJS لعناصر واجهة المستخدم. ستحتوي على المزيد من الملفات في الخطوات اللاحقة.
- app.js وapp.yaml وpackage.json: تضبط هذه الملفات التطبيق وتبعياته.
قبل النشر، نزِّل مفتاح حساب خدمة Google Cloud Platform وانسخ ملف بيانات اعتماد JSON إلى كل دليل موارد في نموذج الرمز. نفِّذ ذلك في كل خطوة من الدرس التطبيقي حول الترميز.
cp credentials.json bm-nodejs-live-agent-transfer/step-<step number>/resources/credentials.json
نشر رمز التفعيل
في الوحدة الطرفية، انتقِل إلى دليل step-1
للنموذج. بعد ذلك، عليك ضبط أداة gcloud لاستخدام مشروعك على Google Cloud من خلال ضبط رقم تعريف المشروع الذي استخدمته للتسجيل باستخدام واجهات برمجة التطبيقات.
gcloud config set project <PROJECT_ID>
لنشر التطبيق، شغِّل الأمر التالي:
gcloud app deploy
دوِّن عنوان URL للتطبيق المنشور في مخرج الأمر الأخير:
Deployed service [default] to [https://PROJECT_ID.appspot.com]
يحتوي رمز إجراء التفعيل الذي نشرته للتو على تطبيق ويب يتضمّن ردًّا تلقائيًا على الويب لتلقّي الرسائل من "الرسائل التجارية". ويردّ التطبيق الرسائل على المستخدم ويسجِّل سلاسل الرسائل في "مخزن البيانات في السحابة الإلكترونية".
إعداد وكيلك
انتقِل إلى صفحة "إعدادات الحساب" في وحدة تحكّم Business Communications Developer Console واضبط الردّ التلقائي على الويب على عنوان URL لتطبيقك المنشور. على سبيل المثال، https://PROJECT_ID.appspot.com/callback/
.
بعد ذلك، في صفحة "معلومات الوكيل"، اضبط نوعَي التفاعل الأساسي والثانوي ليكونا روبوت أو Human على التوالي.
إجراء محادثة مع برنامج تتبُّع الصدى
افتح الوكيل في Play Console. ستظهر لك صفحة نظرة عامة التي تتيح لك مراجعة تفاصيل وكيلك. انسخ عنوان URL التجريبي للوكيل الذي يتطابق مع جهاز الاختبار المتوافق مع الأجهزة الجوّالة. استخدِم عنوان URL هذا على جهازك الجوّال لإتاحة مساحة المحادثات لوكيلك.
يمكنك التفاعل مع موظّف الدعم من خلال إرسال بعض الرسائل. لا ينسخ سطح المحادثة سوى ما تقوله - ليس تجربة مستخدم مفيدة للغاية. ولو كان هناك طريقة ما للتحدث مع شخص حقيقي!
3- الانضمام إلى المحادثة
لنلقِ الآن نظرة على المحادثة من منظور موظّف الدعم المباشر. بصفتك موظّف دعم يقدّم خدمة مباشرة، تحتاج إلى معرفة بعض المعلومات عن المحادثة قبل الانضمام إليها، مثل معرّف المحادثة. من المفيد أيضًا معرفة ما إذا كان المستخدم قد طلب التحدّث إلى موظّف دعم يقدّم خدمة مباشرة. في هذه الخطوة، ستستخدم صفحة أساسية لإدارة العلاقات مع العملاء (CRM) للاطّلاع على هذه المعلومات والانضمام إلى المحادثة كموظّف دعم يقدّم خدمة مباشرة.
يضيف رمز التفعيل الخاص بهذه الخطوة نظام إدارة علاقات العملاء الأساسي الذي يسرد جميع سلاسل المحادثات الحالية للوكيل. لنلقِ نظرة على نظام إدارة علاقات العملاء (CRM) هذا لمعرفة المحادثات التي قد تتطلّب انتباه أحد موظّفي الدعم المباشر.
انتقِل إلى دليل step-2
وأعِد نشر التطبيق كما فعلت في الخطوة السابقة.
عند نشر التطبيق، يظهر لك عنوان URL مستهدف. انتقِل إلى عنوان URL هذا في أحد المتصفِّحات للاطّلاع على بطاقة بيانات تتضمّن سلسلة المحادثات التي بدأتها في الخطوة السابقة. تكون حالة المحادثة حاليًا "مُدار بواسطة روبوت" لأنّ برنامج Echo bot هو ممثل وكيلنا في هذه المحادثة.
سيظهر زر الانضمام إلى المحادثة ولكن لا يتّخذ أي إجراء بعد. ولا يمكنك أيضًا تحديد ما إذا كان المستخدم يريد التحدّث إلى موظّف دعم يقدّم خدمة مباشرة من خلال هذه الواجهة.
توفّر ميزة "الرسائل التجارية" حدثًا يطلبه وكيل مباشر يشير إلى الوقت الذي يريد فيه المستخدم التحدّث إلى أحد موظّفي الدعم المباشر. يجب تتبُّع هذه الحالة لإدراجها في واجهة المستخدِم.
ألقِ نظرة على طريقة معاودة الاتصال في index.js
. أما التعليق TODO
، فيشير إلى أين عليك تسجيل طلب المستخدم للوصول إلى موظّف دعم يقدّم خدمة مباشرة، وتعديل حالة سلسلة المحادثات.
step-2/routes/index.js
/**
* The webhook callback method.
*/
router.post('/callback', async function(req, res, next) {
...
} else if (requestBody.userStatus !== undefined) {
if (requestBody.userStatus.requestedLiveAgent !== undefined) {
...
// TODO: Update the thread state to QUEUED_THREAD_STATE.
}
}
});
...
});
يجب استخدام الطرق المتوفّرة في libs/datastore_utils.js
لتحميل سلسلة المحادثات الحالية وتعديل حالتها إلى QUEUED_THREAD_STATE
.
إذا لم تكن متأكدًا مما يجب فعله، ألق نظرة خاطفة على الحلول. يتضمّن رمز التفعيل دليل solutions
ضمن كل خطوة تحتاج فيها إلى إكمال بعض الرموز. تحتوي هذه الأدلة على نسخة من التطبيق بالكامل مع التنفيذ الكامل للخطوة المحددة.
بعد إكمال عملية التنفيذ وإعادة نشر التطبيق، استخدِم القائمة الكاملة في المحادثة على جهازك الجوّال لطلب التواصل مع موظّف دعم يقدّم خدمة مباشرة.
الآن، في حال الرجوع إلى نظام إدارة علاقات العملاء، من المفترض أن تظهر لك ملاحظة في سلسلة المحادثات نصها "تم طلب موظّف دعم مباشر". هذا المستخدم بحاجة إلى بعض المساعدة من بشر! عليك تنفيذ نقطة نهاية joinConversation
حتى يعمل الزر.
يمكنك العثور على تعليق TODO
الآخر بالطريقة التي تم استئصالها لـ "/joinConversation
".
step-2/routes/index.js
/**
* Updates the thread state and sends a representative join signal to the user.
*/
router.post('/joinConversation', async function(req, res, next) {
let conversationId = req.body.conversationId;
// TODO: Update the thread state to LIVE_AGENT_THREAD_STATE and post a REPRESENTATIVE_JOINED event.
res.json({
'result': 'ok',
});
});
يجب تعديل حالة سلسلة المحادثات مجددًا، ولكن هذه المرة إلى LIVE_AGENT_THREAD_STATE
. بالإضافة إلى ذلك، عليك استخدام الطريقة conversations.events.create
في Business Message API لنشر حدث REPRESENTATIVE_JOINED
.
لإنشاء حمولة الطلب، عليك إعداد الحقول الموضّحة في الجدول التالي:
اسم الحقل | تلميح |
| اضبط هذا الخيار على 'conversations/{conversationId}'. |
| يجب إنشاء رقم تعريف عشوائي للحدث. |
| استخدِم طريقة |
| هذا هو نص الحدث نفسه. يجب ضبط eventType والممثل. |
ألقِ نظرة على الصفحة المرجعية لطريقة الإنشاء أو الصفحة المرجعية للأحداث للحصول على المساعدة.
عند الانتهاء من عملية التنفيذ، أعِد نشر التطبيق وانقر على زر الانضمام إلى المحادثة. سيظهر مربّع حوار تم الانضمام إلى المحادثة وتتغيّر حالة المحادثة إلى "محادثة مباشرة". إذا نظرت إلى المحادثة على جهازك الجوّال، ستظهر لك ملاحظة في المحادثة انضمّ إليها موظّف الدعم المباشر.
تهانينا! في الخطوة التالية، سنلقي نظرة على طريقة حث موظّف الدعم المباشر على التحدّث إلى المستخدم.
4. المراسلة كموظّف دعم يقدّم خدمة مباشرة
الآن بعد انضمامك إلى المحادثة، حان الوقت لإرسال بعض الرسائل كموظّف دعم يقدّم خدمة مباشرة.
يُرجى الانتقال إلى دليل step-3
وإعادة نشر التطبيق. في "إدارة علاقات العملاء"، انقر على سلسلة محادثات من الخطوة السابقة. ستظهر لك الآن واجهة دردشة أساسية. من هنا، يمكنك الاطّلاع على رسائل المستخدم في الوقت الفعلي.
ومع ذلك، لم يتم تنفيذ عملية إرسال رسالة لأنّ الوكيل حتى الآن. يجب إكمال ذلك في هذه الخطوة.
افتح ملف routes/index.js
واطّلِع على نقاط النهاية الثلاث التي تمت إضافتها مؤخرًا:
/messages
: يحصل على ملف عرضmessages.ejs
ويعرضه في المتصفّح. عندما تنقر على سلسلة محادثات من الفهرس، تنتقل إلى إحدى هذه الصفحات./retrieveMessages
: يحصل على محتوى الرسائل في سلسلة محادثات ويعرض قائمة منسّقة تضم جميع الرسائل في المحادثة. تستدعي صفحة الرسائل نقطة النهاية هذه بشكل دوري لعرض أحدث الرسائل./sendMessage
: يرسل رسالة من ممثل الوكيل المباشر إلى المستخدم. تطلب صفحة الرسائل هذا عند النقر على "إرسال". لم يتم التنفيذ حاليًا.
ألقِ نظرة الآن على طريقة storeAndSendResponse
الحالية:
step-3/routes/index.js
/**
* Updates the thread, adds a new message and sends a response to the user.
*
* @param {string} message The message content that was received.
* @param {string} conversationId The unique id for this user and agent.
* @param {string} threadState Represents who is managing the conversation for the CRM.
* @param {string} representativeType The representative sending the message, BOT or HUMAN.
*/
async function storeAndSendResponse(message, conversationId, threadState, representativeType) {
...
}
يستخدم الردّ التلقائي على الويب هذه الطريقة لإرسال ردود من برنامج تتبُّع الصدى. تخزِّن الطريقة أولاً بيانات الرسائل الواردة في كائن "مخزن البيانات في السحابة الإلكترونية" للمحادثة. ثم يرسل رسالة الرد. ألقِ نظرة فاحصة على كائن الرسالة الذي ينشئه، لا سيما في النوع التمثيلي.
الآن، نفِّذ نقطة نهاية /sendMessage
بنفسك. يمكنك استخدام طريقة storeAndSendResponse
الحالية هنا لتنفيذ معظم المهام. المهم هو تذكر تحديد الممثل الصحيح.
بعد الانتهاء من ذلك، أعِد نشر التطبيق وارجع إلى محادثتك في نظام إدارة علاقات العملاء. يمكنك الآن الاطّلاع على رسائلك في سجلّ المحادثات. يمكنك أيضًا الاطّلاع على رسائل الوكيل وهي تظهر على جهاز الاختبار على جهازك الجوّال.
قبل المتابعة، تأكَّد من فهم كيفية عمل نقاط النهاية الجديدة. في الخطوة التالية، عليك إضافة نقطة النهاية الخاصة بك لمغادرة المحادثة.
5- جارٍ مغادرة المحادثة
بعد مساعدة المستخدم في الإجابة عن أسئلته، قد تريد مغادرة المحادثة والسماح للمستخدم بالتحدّث إلى برنامج التتبُّع مرة أخرى. في "الرسائل التجارية"، تتم الإشارة إلى هذا التغيير من خلال حدث REPRESENTATIVE_LEFT
.
يُرجى الانتقال إلى دليل step-4
وإعادة نشر التطبيق ثم العودة إلى سلسلة المحادثات. يظهر الآن رابط إغلاق المحادثة ومغادرةها في أسفل سلسلة المحادثات. لا يعمل هذا الرابط حتى الآن بسبب عدم تنفيذ نقطة نهاية leaveConversation
.
يُرجى الاطّلاع على الملف index.js
. هناك تعليق على قائمة المهام يوجِّهك إلى إنشاء نقطة نهاية leaveConversation
جديدة.
step-4/routes/index.js
/*
* TODO: Create a '/leaveConversation' endpoint that does the following:
* - Updates the thread to BOT_THREAD_STATE.
* - Sends a REPRESENTATIVE_LEFT event.
* - Sends a message to the thread informing the user that they are speaking to the echo bot again.
*
* Hint: You can use the same methods that '/joinConversation' uses.
*/
لتنفيذ ذلك، عليك تجميع كل المعلومات التي تعلّمتها من الدرس التطبيقي حول الترميز حتى الآن. يجب أن تنفذ نقطة النهاية هذه ما يلي:
- عدِّل سلسلة المحادثات إلى
BOT_THREAD_STATE
. - إرسال حدث
REPRESENTATIVE_LEFT
- أرسِل رسالة في المحادثة لإعلام المستخدم بأنّه يتحدث إلى برنامج تتبُّع الصدى. استخدِم الطريقة
storeAndSendResponse
. يُرجى تذكُّر أنّ الممثل قد غيّر مرة أخرى إلىBOT
.
توضح الخطوة الأخيرة حالة المحادثة للمستخدم. يرى المستخدم حدثًا عندما يغادر ممثّل المحادثة، ولكنّه لن يعرف بالضرورة أنّه يتحدث مع برنامج تتبُّع الصدى مرة أخرى. يمكنك الحدّ من ارتباك المستخدمين وتحسين تجربة الاستخدام من خلال إرسال رسالة من برنامج التتبُّع مباشرةً.
بعد أن يتولّى روبوت الدردشة المهام، أصبح بإمكان موظّف الدعم المباشر الانضمام إلى محادثة أخرى. حاول استخدام عينة التعليمات البرمجية ونظام إدارة علاقات العملاء متى شئت. اختبِر بعض الأفكار المختلفة لديك عن تجربة نقل الوكيل لنشاطك التجاري مباشرةً، واطّلِع على ما توصّلت إليه.
6- ملخص
تهانينا على إكمال الدرس التطبيقي حول الترميز الخاص بنقل الوكيل.
لقد أنشأت وكيلاً يمكنه معالجة عمليات نقل الوكيل المباشر من البداية إلى النهاية. لقد تعلمت أيضًا طريقة واحدة لتتبع حالة المحادثة مع Cloud Datastore.
من خلال نقل الوكيل المباشر، يمكنك مغادرة الطلبات الشائعة إلى روبوت الدردشة الخاص بك، بينما يتولّى موظّفو الدعم المباشرون معالجة الاستفسارات الأكثر تعقيدًا. سيكون المستخدمون أكثر رضا عن التجربة الجديدة المخصصة والمفيدة، مما يزيد من احتمالية عودتهم إلى نشاطك التجاري وتوصية الأصدقاء بنشاطك التجاري.
الخطوات التالية
اطّلِع على بعض هذه الدروس التطبيقية حول الترميز:
- الجزء 1 لشراء المنتجات على الإنترنت واستلامها من المتجر
- الجزء 2 لشراء المنتجات على الإنترنت واستلامها من المتجر
قراءة إضافية
- يمكنك مراجعة أساسيات نقل موظفي الدعم المباشر من خلال دليل التبديل من برنامج التتبُّع إلى الوكيل المباشر.
- عليك ترقية برنامج تتبُّع الارتداد إلى برنامج تتبُّع للأسئلة الشائعة باستخدام دليل Dialogflow.