1. مقدمة
تاريخ آخر تعديل: 11/05/2022
مرحبًا بك في ميزة "الرسائل التجارية"
يقدّم لك هذا الدليل التعليمي مقدمة عن الدمج مع الرسائل التجارية، التي تتيح للعملاء التواصل مع الأنشطة التجارية التي تديرها من خلال "بحث Google" و"خرائط Google". قد تكون نشاطًا تجاريًا تريد الدمج مع ميزة "الرسائل التجارية" مباشرةً، أو ربما تعمل لدى مزوّد برامج مستقل ينشئ حلول مراسلة للأنشطة التجارية التي تعمل معها، أو ربما صادفت ميزة "الرسائل التجارية" وتريد إجراء تعديلات على المنصة.
بغض النظر عن سبب وصولك إلى هذا الدرس، يُعدّ هذا الدرس التطبيقي حول الترميز طريقة رائعة للبدء. وفي نهاية هذه العملية، سيكون لديك أول وكيل رقمي يمكن للمستخدمين التفاعل معه. عندما تكون مستعدًا للإطلاق على "رسائل النشاط التجاري" بعد إجراء بعض التحسينات، ستتمكّن من الوصول إلى ملايين العملاء.
ما الذي يجعل موظّف الدعم الرقمي جيدًا؟
ميزة "الرسائل التجارية" هي مساحة مخصّصة للمحادثات، وتقدّم تجربة شبيهة بالتطبيقات على الأجهزة الجوّالة تتيح للمستهلكين التواصل مع الأنشطة التجارية بدون تثبيت تطبيق إضافي. ويُعدّ موظّف الدعم الرقمي هو العنصر المنطقي الذي يتفاعل معه عملاؤك. تتم إدارة المنطق من خلال تطبيق ويب يتم نشره في السحابة الإلكترونية أو في البنية الأساسية. القرار لك تمامًا بشأن كيفية الردّ على المستخدم. يقدّم أفضل موظّفي الدعم سياقًا لتحديد التوقعات والحفاظ على تفاعل العملاء وتوفير وظائف لتلبية احتياجات المستخدمين.
التطبيق الذي ستصممه
في هذا الدليل التعليمي حول الرموز البرمجية، ستُنشئ موظّف دعم رقميًا على ميزة "الرسائل التجارية" لشركة خيالية تُسمى Bonjour Meal. سيجيب هذا الوكيل الرقمي عن بعض الأسئلة البسيطة، مثل "ما هو وقت الإغلاق؟" أو "هل يمكنني الشراء على الإنترنت؟".
في هذا الدليل التعليمي حول الرموز البرمجية، سيتمكّن المستخدمون من شراء سلع من خلال موظّف الدعم الرقمي، وتوجيه المستخدم إلى جهة معالجة دفعات لجمع الأموال، ثم تحديد موعد لاستلام سلعهم الوهمية من المتجر.
في هذا الدرس التطبيقي حول الترميز، سينفّذ تطبيقك ما يلي:
- الردّ على الأسئلة من خلال شريحة اقتراح
- توجيه المستخدم لطرح أسئلة يمكن للوكيل الرقمي الإجابة عنها
- توفير ميزات محادثة غنية للحفاظ على تفاعل المستخدم في المحادثة
ما ستتعرّف عليه
- كيفية نشر تطبيق ويب على App Engine على Google Cloud Platform بدلاً من ذلك، يمكنك استخدام ngrok لاختبار تطبيقك على الجهاز بشكل علني.
- كيفية ضبط إعدادات حسابك على ميزة "الرسائل التجارية" باستخدام ميزة "الردّ التلقائي على الويب" لتطبيق الويب من أجل تلقّي الرسائل من المستخدمين
- كيفية إرسال ميزات منسّقة، مثل البطاقات ومنصّات العرض الدوّارة والاقتراحات الحوارية باستخدام Business Messages API
- كيفية إرسال رسائلك من خلال ميزة "الرسائل التجارية"
تركّز ورشة رموز البرامج هذه على إنشاء أول وكيل رقمي لك.
المتطلبات
- التسجيل للحصول على حساب مطوِّر مجاني على Business Communications
- يُرجى الانتقال إلى الموقع الإلكتروني للمطوّرين للحصول على تعليمات حول كيفية
- جهاز Android يعمل بالإصدار 5 أو إصدار أحدث أو جهاز iOS مزوّد بتطبيق "خرائط Google"
- خبرة في برمجة تطبيقات الويب
- اتصال بالإنترنت
2. الإعداد
تفعيل واجهات برمجة التطبيقات
في هذا الدليل التعليمي حول الرموز البرمجية، بما أنّنا سنستخدم تطبيق Django، سنعتمد على Cloud Build API لنشر التطبيق على App Engine. بدلاً من ذلك، إذا كنت تستخدم ngrok، ليس عليك تفعيل Cloud Build API.
لتفعيل Cloud Build API:
- افتح Cloud Build API في Google Cloud Console.
- انقر على تفعيل.
إنشاء حساب خدمة
عليك إنشاء حساب خدمة للوصول إلى واجهات برمجة التطبيقات Business Communications وBusiness Messages. اتّبِع الخطوات الواردة في المستندات لإنشاء حساب خدمة ضمن "وحدة تحكّم مطوّري تطبيقات اتصالات الأعمال".
نشر رمز Django Python EchoBot المبتدئ
في وحدة طرفية، يمكنك استنساخ نموذج Django Echo Bot إلى دليل العمل في مشروعك باستخدام الأمر التالي:
$ git clone https://github.com/google-business-communications/bm-bonjour-meal-django-starter-code
انسخ ملف بيانات الاعتماد بتنسيق JSON الذي أنشأته لحساب الخدمة إلى مجلد موارد العيّنة وأعِد تسمية بيانات الاعتماد إلى "bm-agent-service-account-credentials.json".
bm-bonjour-meal-django-starter-code/bonjourmeal-codelab/step-1/resources/bm-agent-service-account-credentials.json
في وحدة طرفية، انتقِل إلى دليل الخطوة 1 للنموذج.
لتنفيذ النموذج، نفِّذ الأوامر التالية في وحدة طرفية:
$ gcloud config set project PROJECT_ID*
$ gcloud app create
$ gcloud app deploy
- PROJECT_ID هو رقم تعريف المشروع الذي استخدمته للتسجيل في واجهات برمجة التطبيقات.
يُرجى ملاحظة عنوان URL للتطبيق الذي تم نشره في ناتج الأمر الأخير:
Deployed service [default] to [https://PROJECT_ID.appspot.com]
يحتوي رمز البدء الذي تم نشره للتو على تطبيق ويب يتضمّن رمزًا لردّ تلقائي على الويب لتلقّي الرسائل من ميزة "الرسائل التجارية". يعيد التطبيق الرسائل إلى المستخدم ويمكنه عرض بعض الميزات الغنية المتاحة في مساحة المحادثة.
ضبط دفتر الحجوزات
بعد نشر خدمتك، ستستخدم عنوان URL للتطبيق لضبط عنوان URL لنقطة الاتصال في صفحة إعدادات الحساب في وحدة تحكّم مطوّري تطبيقات "مراسلات الأنشطة التجارية".
سيكون عنوان URL للرابط الخارجي هو عنوان URL للتطبيق + "/callback/". على سبيل المثال، قد يكون على النحو التالي: https://PROJECT_ID.appspot.com/callback/
انتقِل إلى صفحة إعدادات الحساب في "وحدة تحكّم الاتصالات التجارية". في أعلى يسار الشاشة أسفل شريط التنقّل، من المفترض أن يظهر اسم مشروعك على Google Cloud Platform. إذا ظهرت لك قائمة منسدلة، احرص على اختيار مشروعك على Google Cloud Platform.
املأ تفاصيل جهة الاتصال الفنية، ثم عدِّل Webhook باستخدام عنوان URL لـ webhook لتطبيقك المنشور.
انقر على حفظ بجانب مرجع مشروعك على Google Cloud Platform.
3- إنشاء أول وكيل
استخدام "وحدة تحكّم مطوّري تطبيقات الاتصالات التجارية"
في Business Communications Console، انقر على الشعار في أعلى يمين الصفحة للرجوع إلى لوحة بيانات وحدة التحكّم، ثم انقر على إنشاء موظّف دعم. يمكنك إنشاء علامة تجارية في الوقت نفسه الذي تنشئ فيه وكيلك. اختَر الرسائل من عملاء تجاريين في نوع موظّف الدعم وتأكَّد من صحة معلومات الشريك.
في حقل العلامة التجارية، اكتب اسم العلامة التجارية التي تنشئها.والعلامة التجارية هي النشاط التجاري الذي تعمل معه ويمكن للمستهلكين التفاعل مع موظّف الدعم من خلال المحادثة. في اسم موظّف الدّعم، حدِّد ما تريد أن يظهر للمستخدمين في محادثة "الرسائل التجارية". في ما يتعلّق بشركة Bonjour Meal الخيالية، فإنّ Bonjour Rail هي شركة السكك الحديدية التي تدير مطاعم Bonjour Meal. سأحدّد Bonjour Rail كعلامة تجارية وBonjour Meal كوكيل.
الوكيل هو الكيان الحواري الذي يمثّل العلامة التجارية.
انقر على إنشاء وكيل واترك وحدة التحكّم تُجري بعض الإجراءات السحرية. يستغرق هذا الطلب بضع ثوانٍ لتقديم عدة طلبات إلى Business Communications API لإنشاء العلامة التجارية والوكيل. يمكنك استخدام Business Communications API مباشرةً لإنشاء موظّف دعم وإنشاء علامة تجارية. اطّلِع على المستندات لمعرفة شكل طلب curl لتنفيذ الإجراءات نفسها التي تنفّذها وحدة التحكّم.
إجراء محادثتك الأولى
افتح الوكيل الذي أنشأته للتو، وستظهر لك صفحة نظرة عامة تتيح لك بدء مراجعة تفاصيل الوكيل. اطّلِع على عناوين URL التجريبية للوكيل. تُستخدَم عناوين URL هذه لتشغيل مساحة المحادثة على جهازك.
يمكنك نسخ عنوان URL للاختبار من خلال النقر على أيّ من الشرائح. بالطبع، عليك نسخ عنوان URL للاختبار على الجهاز الذي تريد استخدامه. يمكنك إرسال هذه الرسالة المنسوخة إلى جهازك بأي طريقة تريدها.
بعد النقر على الرابط على جهازك الجوّال، يتم تشغيل "مشغِّل موظّفي الدعم في ميزة "الرسائل التجارية"" مع تعبئة عنوان URL لاختبار موظّف الدعم مسبقًا.
انقر على بدء لعرض مساحة المحادثة الخاصة بالوكيل.
يمكنك التفاعل مع موظّف الدعم والتعرّف على إمكانات هذا المساعد. في معظم الأحيان، ستلاحظ أنّ مساحة المحادثة ستكرّر رسائلك فقط. أرسِل رسالة مثل "مرحبًا"، وسيردّ عليك موظّف الدعم بالرسالة نفسها.
يحتوي التطبيق المنشور أيضًا على بعض المنطق لعرض الميزات الغنية المتاحة في ميزة "الرسائل التجارية".
- إذا أرسلت "card"، سيتم عرض بطاقة تفاعلية.
- في حال إرسال "شرائح"، سيتم عرض شرائح الاقتراحات.
- إذا أرسلت "مجموعة بطاقات"، سيتم عرض مجموعة من البطاقات التفاعلية.
تهانينا! هذه هي المحادثة الأولى التي يجريها موظّف الدعم معك.
يمكن استخدام كل ميزة من الميزات الغنية لتوفير سياق أفضل للمستخدم الذي يتواصل مع موظّف الدعم. أرسِل مواد عرض الرسومات في بطاقات غنية للتعبير عن الأفكار بشكل أفضل، أو استخدِم شرائح الاقتراحات لتوجيه المحادثة.
تعديل رسالة الترحيب واستخدام شرائح المحادثات
لنتدرب على استخدام Developer Console ونتعرّف على كيفية تعديل رسالة الترحيب التي يرسلها موظّف الدعم وكيفية الاستفادة من شرائح الاقتراحات لمساعدة المستخدم في التواصل.
انتقِل إلى صفحة نظرة عامة عن موظّف الدّعم واختَر معلومات موظّف الدّعم. انتقِل للأسفل إلى رسالة الترحيب وقسم "مبتدئات المحادثات".
عدِّل رسالة الترحيب (حقل الإدخال الأصفر) لتظهر على النحو التالي:
مرحبًا بك، اسمي "مساعد بدء الوجبة". يمكنني تكرار رسائلك وعرض بعض الميزات الرائعة المتاحة على المنصة. جرِّب هذه الاقتراحات.
انقر على + إضافة بداية محادثة كما هو موضّح في المربّع الأرجواني في الصورة أعلاه لإضافة أفكار لبدء المحادثات من أجل عرض شرائح الاقتراحات واللوحات الدوّارة والبطاقات. تحتاج أدوات بدء المحادثات التي تضيفها إلى مكوّن نصي ومكوّن postbackData. النص هو ما يتم عرضه للمستخدم، في حين أنّ بيانات postBack هي ما يتم إرساله إلى رابط webhook الخاص بوكيلك. يُحلّل الردّ التلقائي على الويب بيانات تسجيل الإحالات الناجحة ويُرسِل الردّ المناسب إلى المستخدم.
تظهر معلومات موظّف الدعم في وحدة التحكّم على النحو التالي بعد التعديل:
على يسار وحدة التحكّم، ستظهر لك معاينة لشكل موظّف الدعم. لاحظ كيف أنّ رسالة الترحيب تعكس ما غيّرته للتوّ والرقائق المقترَحة التي تظهر تحتها.
هذه أداة رائعة للحصول على فكرة عن تجربة المستخدم. يمكنك استخدامها أثناء إنشاء موظّف الدعم وتخطيط رحلات المستخدمين التي تريد تقديم الدعم لها.
لن تظهر هذه التغييرات في المحادثة على الفور، لأنّ البيانات السابقة يتم تخزينها مؤقتًا في بنية "الرسائل التجارية" الأساسية. تتم إزالة ذاكرة التخزين المؤقت كل ساعتَين تقريبًا، لذا من المفترض أن تتمكّن من تجربة ذلك غدًا.
في هذه الأثناء، لنلقِ نظرة على آلية عمل كل الميزات.
4. تحليل الرمز البرمجي الأوّلي
عرض رمز المصدر من ارتفاع 10,000 قدم
يعيد الرمز المبدئي الذي تم نشره عرض الرسائل إلى المستخدمين ويمكن أن يعرض بطاقة غنية أو لوحة عرض دوّارة أو شرائح اقتراحات. لنلقِ نظرة أكثر تفصيلاً على رمز المصدر لنفهم طريقة عمل هذا الإجراء. بعد ذلك، سنحدّد التغييرات التي يجب إجراؤها.
رمز البدء هو مشروع Django. في جزء لاحق من سلسلة جلسات إعداد الرمز البرمجي هذه، سنستخدم Google Datastore للحفاظ على البيانات، مثل سلال التسوّق والمحادثات المرتبطة بها. لا داعي للقلق إذا لم يسبق لك استخدام Django، فهو سهل الاستخدام، وفي نهاية هذا الدليل التعليمي حول الرموز البرمجية، ستتعرّف على آلية عمله.
بشكل عام، سيوجّه Django عناوين URL إلى طرق العرض، ويُنشئ منطق العرض نموذجًا يتم عرضه في المتصفّح. لنلقِ نظرة على ملف urls.py الخاص بالمشروع.
bm-django-echo-bot/bmcodelab/urls.py [السطور 31-37]
from django.urls import include, path
import bopis.views as bopis_views
urlpatterns = [
path('', bopis_views.landing_placeholder),
path('callback/', bopis_views.callback),
]
تم تحديد مسارَين هنا، وبالتالي يمكن لخدمة Django تنفيذ المنطق في حال التعرّف على عنوانَي URL هذين. بما أنّ عنوان URL للمشروع هو https://PROJECT_ID.appspot.com/، فإنّ المسارات التي يعرفها المشروع هي:
- https://PROJECT_ID.appspot.com/
- https://PROJECT_ID.appspot.com/callback/
يشير كلا مسارَي عنوان URL إلى bopis_views
من bopis/views.py. لنلقِ نظرة على ما يحدث في هذا الملف. للبدء، لنفهم أولاً bopis_views.landing_placeholder
.
bm-django-echo-bot/bonjourmeal-codelab/step-1/bopis/views.py [الخطوط 302-309]
...
def landing_placeholder(request):
return HttpResponse("<h1>Welcome to the Bonjour Meal Codelab</h1>
<br/><br/>
To message your Bonjour Meal agent, go to the Developer Console and retrieve
the Test URLs for the agent you have created as described in the codelab
<a href='https://codelabs.developers.google.com/codelabs/'>here</a>.")
...
ينفِّذ خادم الويب هذه القطعة من المنطق عندما يتلقّى طلب ويب يشير إلى جذر المشروع. لا يحدث هنا أيّ شيء مميّز: ما عليك سوى عرض HTTPResponse يحتوي على بعض صفحات HTML إلى المتصفّح الذي قدّم الطلب. نعم، يمكنك فتح عنوان URL الجذر للمشروع، ولكن ليس هناك الكثير من الإجراءات التي يمكنك اتّخاذها هناك لأنّه سيعيدك إلى هذا الدليل التعليمي.
ينقل عنوان URL الآخر إلى دالة تُسمى callback
، وهي موجودة أيضًا في bopis/views.py
. لنلقِ نظرة على هذه الدالة.
bm-django-echo-bot/bopis/views.py [الخطوط 60-101]
...
def callback(request):
"""
Callback URL. Processes messages sent from user.
"""
if request.method == "POST":
request_data = request.body.decode('utf8').replace("'", '"')
request_body = json.loads(request_data)
print('request_body: %s', request_body)
# Extract the conversation id and message text
conversation_id = request_body.get('conversationId')
print('conversation_id: %s', conversation_id)
# Check that the message and text body exist
if 'message' in request_body and 'text' in request_body['message']:
message = request_body['message']['text']
print('message: %s', message)
route_message(message, conversation_id)
elif 'suggestionResponse' in request_body:
message = request_body['suggestionResponse']['postbackData']
print('message: %s', message)
route_message(message, conversation_id)
elif 'userStatus' in request_body:
if 'isTyping' in request_body['userStatus']:
print('User is typing')
elif 'requestedLiveAgent' in request_body['userStatus']:
print('User requested transfer to live agent')
return HttpResponse("Response.")
elif request.method == "GET":
return HttpResponse("This webhook expects a POST request.")
...
يحلّل المنطق هنا محتوى الطلب بحثًا عن message أو suggestionResponse ويُرسل هذه المعلومات إلى دالة تُسمى route_message
، ثم يُعيد HttpResponse إلى بنية رسائل النشاط التجاري لإقرار استلام الرسالة.
هذه وظيفة مهمة. هذه القطعة من المنطق هي عنصر الردّ التلقائي على الويب لتطبيقك، والذي يتلقّى الرسائل من المستخدمين الذين يتفاعلون مع موظّف الدعم. يمكنك توسيع نطاق رابط البيانات لإنشاء رسائل وإرسالها إلى أداة التشغيل الآلي، مثل Dialogflow، لفهم ما قد يقوله المستخدم وتقديم ردّ بناءً على هذا الاستنتاج. يمكنك أيضًا إعادة توجيه الرسالة ليتمكّن المستخدم من التواصل مع أحد موظّفي الدعم المباشر. اطّلِع على المخطّط البياني التالي:
تُرسِل ميزة "الرسائل التجارية" محتوى الرسالة كحمولة JSON إلى رابط webhook الذي يتم توجيهه إلى موظّف دعم مباشر أو إلى بعض المنطق للردّ كروبوت. آلية التوجيه هذه، في حالتنا هنا، هي route_message
. لنلق نظرة.
bm-django-echo-bot/bopis/views.py [السطور 105-122]
...
def route_message(message, conversation_id):
'''
Routes the message received from the user to create a response.
Args:
message (str): The message text received from the user.
conversation_id (str): The unique id for this user and agent.
'''
normalized_message = message.lower()
if normalized_message == CMD_RICH_CARD:
send_rich_card(conversation_id)
elif normalized_message == CMD_CAROUSEL_CARD:
send_carousel(conversation_id)
elif normalized_message == CMD_SUGGESTIONS:
send_message_with_suggestions(conversation_id)
else:
echo_message(message, conversation_id)
...
يبدأ هذا الجزء من المنطق بفحص الرسالة التي تلقّاها المستخدم. أولاً، يتم تطبيع الرسالة عن طريق خفض جميع الأحرف. بعد تسويتها، يتم التحقّق ممّا إذا كانت الرسالة هي أيّ من الثوابت المحدّدة في أعلى الملف.
bm-django-echo-bot/bopis/views.py [السطور 40-42]
...
# Set of commands the bot understands
CMD_RICH_CARD = 'card'
CMD_CAROUSEL_CARD = 'carousel'
CMD_SUGGESTIONS = 'chips'
...
وهذا يعني أنّه يبحث عن الرسائل التي تحتوي على أي من السلاسل التي وضعناها في postback_data
من عبارة بدء المحادثة من الخطوة السابقة في هذا الدليل التعليمي. إذا لم تظهر أيّ من هذه السلاسل، يتم ببساطة تمرير الرسالة إلى دالة تُسمى echo_message
، والتي تتيح لك تكرار الرسائل.
إرسال الرسائل
من المفترض أن يكون لديك الآن فكرة عن كيفية تلقّي رسائل تطبيق الويب. ويتم تنفيذ كل ذلك من خلال رابط البيانات المجمّعة.
ولكن كيف يرسل التطبيق رسالة صادرة إلى مستخدم باستخدام ميزة "الرسائل التجارية"؟
عندما تردّ البنية الأساسية على المستخدم، يتم إرسال الردّ إلى Business Messages API، التي ترسِل الرسالة إلى المستخدم.
تتضمّن Business Messages API مكتبات بلغات Python وNode.js وJava. لدينا أيضًا واجهة برمجة تطبيقات REST API يمكنك إرسال طلبات إليها مباشرةً إذا لم تكن البنية الأساسية بلغة تتوفّر لها مكتبة. اطّلِع على مقالة إرسال الرسائل لمعرفة كيفية استخدام cURL لإرسال رسالة إلى معرّف محادثة محدّد.
لأغراض هذا الدليل التعليمي حول الرموز البرمجية، سنركّز على استخدام مكتبة برامج Python للعملاء التي تم دمجها في رمز بدء Bonjour Meal الذي تم نشره على App Engine في مشروعك على Google Cloud Platform، أو تشغيله محليًا من خلال ngrok.
لنلقِ نظرة على الدالة echo_message
ونرى كيف نتفاعل مع واجهة برمجة التطبيقات لإرسال الرسالة إلى ميزة "الرسائل التجارية".
bm-django-echo-bot/bopis/views.py [السطور 199-212]
...
def echo_message(message, conversation_id):
'''
Sends the message received from the user back to the user.
Args:
message (str): The message text received from the user.
conversation_id (str): The unique id for this user and agent.
'''
message_obj = BusinessMessagesMessage(
messageId=str(uuid.uuid4().int),
representative=BOT_REPRESENTATIVE,
text=message)
send_message(message_obj, conversation_id)
...
في هذه الدالة، يتمّ إنشاء مثيل لـ BusinessMessagesMessage باستخدام متغيّر الرسالة الذي تمّ تمريره إلى الدالة echo_message
. بعد إنشاء مثيل للكائن، يتم تمريره إلى send_message
مع رقم تعريف المحادثة.
bm-django-echo-bot/bopis/views.py [السطور 214-236]
...
def send_message(message, conversation_id):
'''
Posts a message to the Business Messages API, first sending
a typing indicator event and sending a stop typing event after
the message has been sent.
Args:
message (obj): The message object payload to send to the user.
conversation_id (str): The unique id for this user and agent.
'''
credentials = ServiceAccountCredentials.from_json_keyfile_name(
SERVICE_ACCOUNT_LOCATION,
scopes=['https://www.googleapis.com/auth/businessmessages'])
client = bm_client.BusinessmessagesV1(credentials=credentials)
# Create the message request
create_request = BusinessmessagesConversationsMessagesCreateRequest(
businessMessagesMessage=message,
parent='conversations/' + conversation_id)
bm_client.BusinessmessagesV1.ConversationsMessagesService(
client=client).Create(request=create_request)
...
لا تفعل الدالة send_message
سوى استخدام بيانات اعتماد حساب الخدمة للتحقّق من أنّه يمكنك إرسال رسائل إلى هذه المحادثة، وإنشاء مثيل لعميل "رسائل النشاط التجاري"، وإنشاء طلب لإرسال الرسالة إلى conversation ID
المحدّد.
تستفيد الميزات الغنية من دالة send_message
هذه أيضًا، ولكن الرسائل التي تنشئها تكون خاصة بالبطاقات الغنية ولوحات العرض الدوّارة ورقائق الاقتراحات. قد تتضمّن البطاقات التفاعلية وعروض المنتجات الدوّارة مواد عرض رسومية، بينما تتضمّن شرائح الاقتراحات postback_data
حتى يتمكّن منطق الاستدعاء من تحليلها بشكلٍ مناسب.
بعد أن اطّلعنا على كيفية إرسال رسالة، ننصحك بالاطّلاع على كيفية إرسال العيّنة للبطاقات التفاعلية ولوحات العرض الدوّارة ورقائق الاقتراحات. في القسم التالي، سنعدّل الرمز المصدر لإرسال الرسائل مع بعض هذه الميزات الغنية.
عندما تكون مستعدًا، لنبدأ في تخصيص موظّف دعم Bonjour Meal.
5- تخصيص وكيلك
إذا اتبعت الخطوات الواردة في ورشة رموز البرامج حتى الآن، من المفترض أن يظهر لك موظّف الدعم الجميل.
حسنًا، ليس جميلًا جدًا، يبدو في الواقع فارغًا إلى حد ما ولا يمثّل نشاطنا التجاري بشكل جيد. لحسن الحظ، لدينا معرفة أساسية بالرمز البرمجي الذي يدعم موظّف الدعم ولدينا الأدوات التي نحتاجها لتخصيص موظّف الدعم بأي طريقة نريدها.
في الجزء المتبقّي من هذا الدليل التعليمي حول الرموز البرمجية، سنوسّع نطاق وكيل المستخدم ليشمل ما يلي:
- تضمين شعار فعلي
- رسالة ترحيب محسّنة
- تقديم معلومات عن ساعات العمل
- إبلاغ المستخدم بأنّه سيتم قريبًا توفير إمكانية شراء السلع على الإنترنت
- استخدام شرائح الاقتراحات الحوارية لتسهيل المحادثة
سنستفيد من Business Communications Console لمساعدتنا في تعديل الشعار ورسالة الترحيب، ولكن يمكنك دائمًا استخدام واجهات برمجة تطبيقات Business Communications API مباشرةً لإجراء ذلك. بعد ذلك، سيكون علينا تعديل الرمز المصدر لإرسال الرسائل المناسبة لتقديم معلومات عن ساعات العمل وأنّ Bonjour Meal ستقدّم قريبًا ميزة التسوّق على الإنترنت. عند الانتهاء من ذلك، سنعود إلى Business Communications Console وسننشئ شرائح اقتراحات للمحادثات للمساعدة في توجيه المحادثة إلى تجارب المسار الناجح التي يتيحها موظّف الدعم الرقمي.
إدراج شعار
من Business Communications Console، اختَر موظّف الدعم وانتقِل إلى معلومات موظّف الدعم. سنحتاج إلى تعديل شعار النشاط التجاري، كما هو موضّح باللون الأصفر أدناه.
انقر على تحميل، وسيكون بإمكانك اختيار صورة لتحميلها أو استيرادها من عنوان URL.
اطّلِع على إرشادات تصميم الشعار في المستندات للتعرّف على أفضل الممارسات التي ننصح بها لاستخدام شعاراتك.
لنحمِّل الشعار المتوفّر في رمز المصدر الذي نسخته في بداية هذا الدليل التعليمي حول الرموز البرمجية. يمكنك العثور عليه في الدليل ./assets/ في المستودع، ويُسمّى الملف "bonjour_meal-logo.png". يمكنك سحب الملف إلى النافذة المنبثقة في متصفّح الويب، وستظهر لك أداة تعديل بسيطة لتغيير جودة الصورة واقتصاصها. عدِّل دقة الصورة واقتَص منها لكي تصبح أصغر من 50 كيلوبايت أو تساوي هذا الحدّ. عندما تكون راضيًا عن الصورة، انقر على علامة الاختيار في الدائرة الزرقاء لتأكيد ذلك، ثم انقر على اختيار في أسفل النافذة المنبثقة.
أخيرًا، انقر على حفظ في أعلى يسار صفحة معلومات موظّف الدّعم. سيستغرق هذا التغيير بعض الوقت ليظهر على جهازك لأنّه يتم تخزين معلومات موظّف الدعم مؤقتًا في خوادمنا ومن المفترض أن تظهر في غضون ساعتَين من إجراء التغيير.
تعديل رسالة الترحيب
لقد سبق أن أجرينا تعديلات على رسالة الترحيب في هذا الدليل التعليمي. لنكرّر ذلك مرة أخرى، ولكن هذه المرة سنضبط رسالة ترحيب أكثر ملاءمةً لرحلة مستخدم Bonjour Meal.
في Business Communications Console، اختَر موظّف الدعم وانتقِل إلى معلومات موظّف الدعم. انتقِل للأسفل إلى أن يظهر لك حقل إدخال رسالة الترحيب حيث يمكنك تعديل الرسالة.
بما أنّنا سنضيف عبارات لبدء المحادثات، يمكننا الإشارة إليها في رسالة الترحيب. في حقل الإدخال، لنستبدِل النصّ التالي:
"مرحبًا بك في Bonjour Meal. أنا مساعد يمكنني مساعدتك في الإجابة عن أسئلتك حول Bonjour Meal. جرِّب بعض الخيارات التالية".
أخيرًا، انقر على حفظ في أعلى يسار صفحة معلومات موظّف الدّعم. يُرجى العِلم أنّ ظهور هذا التغيير قد يستغرق بعض الوقت بسبب آلية التخزين المؤقت التي نستخدمها لضمان سرعة الأداء.
تقديم معلومات عن ساعات العمل
لتقديم هذه المعلومات للمستخدمين، سنرسل رسالة مخصّصة إليهم باستخدام Business Messages API.
قد تتذكر أنّه يتم تحليل الرسائل في دالة route_message
من views.py
. تعمل الدالة أولاً على تطبيع السلسلة، ثم تبدأ في التحقّق مما إذا كانت الرسالة المُعدَّلة تتطابق مع أي من المَعلمات المُبرمَجة. للتبسيط، لنضيف شرطًا إضافيًا نتحقّق فيه ممّا إذا كانت الرسالة المنسَّقة مساويةً لكонстантة جديدة سنُطلق عليها اسم CMD_BUSINESS_HOURS_INQUIRY
وستحتوي على القيمة "business-hours-inquiry". إذا كانت القيمة الناتجة عن تقييم الشرط صحيحة، سنستدعي دالة باسم send_message_with_business_hours
.
ستظهر دالة route_message
الآن على النحو التالي:
bm-django-echo-bot/bopis/views.py
...
def route_message(message, conversation_id):
'''
Routes the message received from the user to create a response.
Args:
message (str): The message text received from the user.
conversation_id (str): The unique id for this user and agent.
'''
normalized_message = message.lower()
if normalized_message == CMD_RICH_CARD:
send_rich_card(conversation_id)
elif normalized_message == CMD_CAROUSEL_CARD:
send_carousel(conversation_id)
elif normalized_message == CMD_SUGGESTIONS:
send_message_with_suggestions(conversation_id)
elif normalized_message == CMD_BUSINESS_HOURS_INQUIRY:
send_message_with_business_hours(conversation_id)
else:
echo_message(message, conversation_id)
...
لكي يعمل الرمز، علينا إجراء تغييرَين إضافيَين: الأول هو تحديد CMD_BUSINESS_HOURS_INQUIRY
مع الثوابت الأخرى، والثاني هو تحديد الدالة send_message_with_business_hours
وإرسال رسالة باستخدام Business Messages API.
لنحدِّد أولاً الثابت في أعلى الملف مع تعريفات الثوابت الأخرى:
bm-django-echo-bot/bopis/views.py
...
# Set of commands the bot understands
CMD_RICH_CARD = 'card'
CMD_CAROUSEL_CARD = 'carousel'
CMD_SUGGESTIONS = 'chips'
CMD_BUSINESS_HOURS_INQUIRY = 'business-hours-inquiry'
...
والآن، لتحديد send_message_with_business_hours
. يمكنك تعريف هذه الدالة في أي مكان في الملف، مع اتّباع بنية الجملة المناسبة في Python. بما أنّ هذه الدالة تُرسِل رسالة ببساطة، مثل echo_message
، يمكنك استخدامها كقالب لتعريف هذه الدالة.
bm-django-echo-bot/bopis/views.py
...
def send_message_with_business_hours(conversation_id):
message = '''Thanks for contacting us! The hours for the store are:\n
MON 8am - 8pm\n
TUE 8am - 8pm\n
WED 8am - 8pm\n
THU 8am - 8pm\n
FRI 8am - 8pm\n
SAT 8am - 8pm\n
SUN 8am - 8pm
'''
message_obj = BusinessMessagesMessage(
messageId=str(uuid.uuid4().int),
representative=BOT_REPRESENTATIVE,
text=message)
send_message(message_obj, conversation_id)
...
بعد ذلك، من المفترض أن يتمكّن برنامجنا من الردّ على المستخدم بساعات العمل هذه عند إرسال الرسالة التالية: "business-hours-inquiry". يمكنك توقّع ظهور رسالة مماثلة:
بعد نشر الرمز المصدر على Google Cloud Platform، ستظهر التغييرات على الفور. لا نخزِّن تطبيق الويب في Google Cloud Platform بالطريقة نفسها التي نخزِّن بها معلومات موظّفي الدعم، لذا ستتمكّن من اختبار هذه التجربة على الفور.
بما أنّنا نمتلك بعض الزخم في ما يتعلّق بإجراء تغييرات على المصدر، لنعدّل العبارة مرة أخرى كي يتمكن المستخدم من الاستفسار عن التسوّق على الإنترنت. سيردّ موظّف الدعم الرقمي بأنّ الميزة غير متاحة بعد، ولكن يمكن الرجوع والتحقق لاحقًا.
إعلام المستخدم بأنّ ميزة التسوّق على الإنترنت ستتوفّر قريبًا
سنُجري تعديلاً مشابهًا للتعديل الذي أجريناه لإعلام المستخدم بساعات العمل. هذه المرة، لنضع المعلومات في بطاقة غنية مع صورة جذابة.
يمكنك تحليل الرسالة المنسَّقة والتحقّق من شرط ثابت يُسمى CMD_ONLINE_SHOPPING_INQUIRY
تم ضبط قيمته على "طلب-معلومات-تسوّق-على-الإنترنت"، والذي يستدعي send_online_shopping_info_message
إذا كان الشرط صحيحًا.
bm-django-echo-bot/bopis/views.py
...
# Set of commands the bot understands
CMD_RICH_CARD = 'card'
CMD_CAROUSEL_CARD = 'carousel'
CMD_SUGGESTIONS = 'chips'
CMD_BUSINESS_HOURS_INQUIRY = 'business-hours-inquiry'
CMD_ONLINE_SHOPPING_INQUIRY = 'online-shopping-inquiry'
...
...
...
def route_message(message, conversation_id):
'''
Routes the message received from the user to create a response.
Args:
message (str): The message text received from the user.
conversation_id (str): The unique id for this user and agent.
'''
normalized_message = message.lower()
if normalized_message == CMD_RICH_CARD:
send_rich_card(conversation_id)
elif normalized_message == CMD_CAROUSEL_CARD:
send_carousel(conversation_id)
elif normalized_message == CMD_SUGGESTIONS:
send_message_with_suggestions(conversation_id)
elif normalized_message == CMD_BUSINESS_HOURS_INQUIRY:
send_message_with_business_hours(conversation_id)
elif normalized_message == CMD_ONLINE_SHOPPING_INQUIRY:
send_online_shopping_info_message(conversation_id)
else:
echo_message(message, conversation_id)
...
الآن سنحدّد send_online_shopping_info_message
. نريد إرسال هذه الرسالة في بطاقة غنية بالصور، لذا لننسخ الدالة send_rich_card
لاستخدامها كقالب لتحديد send_online_shopping_info_message
.
أولاً، علينا تعديل النص الاحتياطي لعرض رسالة مناسبة. يتم استخدام النص الاحتياطي إذا تعذّر على الجهاز عرض بطاقة منسّقة لسبب ما. بعد ذلك، علينا تعديل BusinessMessagesRichCard
لتضمين عنوان ووصف واقتراحات ذات صلة وحقل وسائط. من المفترض أن تظهر الدالة على النحو التالي:
bm-django-echo-bot/bopis/views.py
...
def send_online_shopping_info_message(conversation_id):
fallback_text = ('Online shopping will be available soon!')
rich_card = BusinessMessagesRichCard(
standaloneCard=BusinessMessagesStandaloneCard(
cardContent=BusinessMessagesCardContent(
title='Online shopping info!',
description='Thanks for your business, we are located in SF near the Golden Gate Bridge. Online shopping is not yet available, please check back with us in a few days.',
suggestions=[],
media=BusinessMessagesMedia(
height=BusinessMessagesMedia.HeightValueValuesEnum.MEDIUM,
contentInfo=BusinessMessagesContentInfo(
fileUrl=SAMPLE_IMAGES[4],
forceRefresh=False
))
)))
message_obj = BusinessMessagesMessage(
messageId=str(uuid.uuid4().int),
representative=BOT_REPRESENTATIVE,
richCard=rich_card,
fallback=fallback_text)
send_message(message_obj, conversation_id)
...
رائع! يمكن الآن للوكيل الرقمي الردّ على المستخدمين الذين يسألون عن التسوّق على الإنترنت. في الوقت الحالي، لا يتيح موظّف الدعم الرقمي التسوّق على الإنترنت، لذلك نرسل رسالة إلى المستخدم لإعلامه بأنّ هذه الميزة ستتوفّر قريبًا. هذا هو شكل موظّف الدعم الرقمي عندما يسأل المستخدم عن التسوّق على الإنترنت.
تمامًا مثل التغيير السابق الذي أجريناه للسماح للمستخدم بالاستفسار عن ساعات العمل، يمكن رؤية هذا التغيير على الفور إذا كنت تستخدم ngrok، أو بعد نشر الرمز إلى App Engine في Google Cloud Platform.
في الجزء التالي، سنستخدم أدوات بدء المحادثات ورقائق الاقتراحات لتوجيه المحادثة إلى المسار الناجح.
استخدام الشرائح لتوجيه المحادثة
أجرينا بعض التغييرات على رمز المصدر ونشرنا موظّف الدعم الرقمي المعدّل، ولكننا لا نتوقع أبدًا أن يكتب المستخدمون "طلب-معلومات-عن-ساعات-العمل" أو "معلومات-عن-التسوّق-على-الإنترنت" للاستفسار عن النشاط التجاري. لنعدّل أدوات بدء المحادثات بحيث لا يتم الترحيب بالمستخدم برسالة ترحيب لطيفة فقط عند فتح المحادثة، بل يتم أيضًا عرض أدوات بدء المحادثات.
انتقِل إلى Business Communications Console (وحدة تحكّم اتصالات النشاط التجاري) وسرِّد إلى صفحة معلومات موظّف الدعم. لقد حدّدنا سابقًا أدوات بدء المحادثات لكل من "الشرائح" و"البطاقات" و "اللوحات الدوّارة". على الرغم من أنّ هذه الإصدارات لا تزال تعمل، إلا أنّها لم تعُد ذات صلة بوظائف نشاطنا التجاري. يمكنك إبقاءها لمواصلة عرض هذه الميزات الغنية أو إزالتها لكي يعرض موظّف الدعم الرقمي عبارات بدء محادثة خاصة بنشاط تجاري معيّن.
سننشئ طريقتَين جديدتَين لبدء المحادثات. بالنسبة إلى السؤال الأول، اضبط النص على "ما هي ساعات عمل نشاطك التجاري؟" واضبط بيانات تسجيل الإحالات الناجحة على "business-hours-inquiry". بالنسبة إلى عبارة البدء الثانية للمحادثة، اضبط النص على "هل يمكنني إجراء عمليات شراء هنا؟" واضبط بيانات تسجيل الإحالات الناجحة على "online-shopping-info".
يجب أن تظهر النتيجة على النحو الموضّح في لقطة الشاشة التالية:
كما هو الحال مع التغييرات الأخرى التي يتم إجراؤها على "وحدة تحكّم اتصالات النشاط التجاري"، سيستغرق نشر هذا التغيير بعض الوقت قبل أن تتمكّن من رؤية التغييرات التي تم إجراؤها على جهازك الجوّال.
بعد الانتهاء من إنشاء عبارات لبدء المحادثات، سنحتاج أيضًا إلى طريقة لإرشاد المستخدم إلى مسار إيجابي بعد بدء المحادثة. من الممكن استخدام الشرائح بشكل سياقي بعد إرسال رسالة لتوجيه المستخدم إلى ميزات أخرى يمكن للوكيل الرقمي تقديمها. سنرسل رسالة تتضمّن اقتراحًا بإجراء إجراء آخر مع موظّف الدّعم كلما استفسر المستخدم عن ساعات العمل أو التسوّق على الإنترنت.
في نهاية الدالة، أضِف ما يلي:
bm-django-echo-bot/bopis/views.py
...
def send_online_shopping_info_message(conversation_id):
...
# at the end of the function, send a message with suggestions
message_obj = BusinessMessagesMessage(
messageId=str(uuid.uuid4().int),
representative=BOT_REPRESENTATIVE,
text='Let us know how else we can help you:',
fallback='Please let us know how else we can help you.',
suggestions=[
BusinessMessagesSuggestion(
reply=BusinessMessagesSuggestedReply(
text='Business hours',
postbackData='business-hours-inquiry')
),
])
send_message(message_obj, conversation_id)
...
# Let's do the same with the business hours
def send_message_with_business_hours(conversation_id):
...
# at the end of the function, send a message with suggestions
message_obj = BusinessMessagesMessage(
messageId=str(uuid.uuid4().int),
representative=BOT_REPRESENTATIVE,
text='Let us know how else we can help you:',
fallback='Please let us know how else we can help you.',
suggestions=[
BusinessMessagesSuggestion(
reply=BusinessMessagesSuggestedReply(
text='Can I purchase online?',
postbackData='online-shopping-inquiry')
),
])
send_message(message_obj, conversation_id)
...
يُرجى العِلم أنّ حقل النص ضمن BusinessMessagesSuggestion لا يتجاوز 25 حرفًا، كما هو موضّح في المستندات.
مع المواضيع المعدّلة لبدء المحادثات والاستخدام الاستراتيجي للشرائح المقترَحة، إليك بعض لقطات الشاشة لتجربة المستخدم المتوقّعة.
6- تهانينا
تهانينا، لقد نجحت في إنشاء أول وكيل رقمي في ميزة "الرسائل التجارية".
لقد طرحت تطبيق ويب لدعم موظّف الدعم الرقمي في ميزة "الرسائل التجارية"، واستخدمت Business Communications Console لتعديل موظّف الدعم، وصمّمت تجربة المستخدم مع موظّف الدعم الرقمي من خلال إجراء تغييرات على رمز المصدر.
لقد تعرّفت الآن على الخطوات الرئيسية المطلوبة لإنشاء تجربة تفاعلية في ميزة "الرسائل التجارية"، ويمكنك الآن الاستفادة من إمكانات رائعة. يمكن توسيع نطاق وكيلك ليشمل ميزة البحث في المستودع أو توفير سلة تسوّق لتتبُّع المنتجات التي قد تهمّ المستخدم. يمكنك استخدام لوحة عرض دوّارة لعرض العناصر في القائمة، والسماح للمستخدم باختيار العناصر التي تهمّه باستخدام الاقتراحات.
في ما يلي لمحة عن الشكل الذي قد يبدو عليه ذلك.
كيف يمكنني إنشاء تجربة محادثات رائعة؟
يقدّم أفضل موظّفي الدعم معلومات سياقية للمستخدم مع تزويده بوظائف خلال المحادثة حتى يتمكّن من التفاعل مع النشاط التجاري كما يفعل عادةً عبر الهاتف أو حتى شخصيًا. فكِّر في كيفية تطبيق المواضيع التالية على محادثة تريد إجراؤها مع نشاط تجاري تتعامل معه.
تقديم سياق وتحديد التوقعات
يمكن أن يشمل تقديم السياق أيّ شيء، بدءًا من توضيح كيفية مساعدتك للمستخدم ووصولاً إلى تقديم شخصية للمساعد الرقمي يمكن للمستخدم التفاعل معها. يستخدم موظّفو الدعم الناجحون في ميزة "الرسائل التجارية" الصورة الرمزية التمثيلية لإظهار المستخدم الذي يتحدثون معه.
يعتمد تحديد التوقعات على تجربة المستخدم التي تنشئها. على سبيل المثال، إذا كان موظّف الدعم يتيح البحث في المستودع، يُرجى إعلام المستخدم أولاً بأنّه قد يكون هناك عدد قليل من المنتجات المتوفّرة قبل تقديم الإجابة.
توفير وظائف للمستخدم
يتواصل المستهلكون مع الأنشطة التجارية في كل الأوقات. يمكن أن توفّر ميزة "الرسائل التجارية" تفاعلات معقدة مع العملاء، بدءًا من الاستفسارات حول حالة طلب معيّن ووصولاً إلى التحقّق مما إذا كان منتج معيّن متوفّرًا. يواصل العديد من المستخدمين الاتصال بالأنشطة التجارية عبر الهاتف للحصول على إجابات عن أسئلتهم حتى إذا كانت الإجابات متاحة على الموقع الإلكتروني للأنشطة التجارية. نتيجةً لذلك، على الأنشطة التجارية استثمار المزيد من الموارد للتعامل مع عدد المكالمات، خاصةً خلال الأعياد.
الحفاظ على تفاعل المستخدم
قدِّم نقاط اتصال للمحادثة للحفاظ على تفاعل المستخدم في المحادثة. بين الرسائل، يمكنك استخدام مؤشرات الكتابة لإعلام المستخدم بأنّك بصدد معالجة إجابة له.
باستخدام ميزات غنية مثل مؤشرات الكتابة ورقائق الاقتراحات والبطاقات الغنية وأداة العرض الدوّارة، يمكنك توجيه المستخدم خلال تجارب المستخدمين التي تؤدي إلى تحقيق النتيجة المطلوبة لمساعدته في إكمال مهام معيّنة، مثل الطلب من قائمة سلع. والهدف من ذلك هو تقليل عدد المكالمات الواردة إلى خط هاتف النشاط التجاري.
من المهم أن توفّر المحادثة وظائف للمستخدم. يتوقع المستخدمون الذين يتواصلون مع نشاط تجاري عبر المراسلة أن يتم الردّ على أسئلتهم بسرعة. في الحالات غير المثالية، لا يمكن للوكيل الرقمي تسهيل المحادثة، ما قد يؤدي إلى تجربة سيئة للمستخدم. لحسن الحظ، هناك طرق لحلّ هذه المشكلة، مثل تحويل المحادثة إلى موظّف دعم مباشر، وسنتناول هذه الطرق في أحد ورشات عمل الترميز المستقبلية.
الخطوة التالية
عندما تكون مستعدًا، اطّلِع على بعض المواضيع التالية للتعرّف على التفاعلات الأكثر تعقيدًا التي يمكنك إجراؤها في ميزة "الرسائل التجارية".
مستندات المرجع
- SuggestedReply
- مستند مرجعي لرسائل "الرسائل التجارية"
- تعريف JSON لعنصر RichCard