1. مقدمة
ستنشئ في هذا التمرين المعملي إجراءً بسيطًا باستخدام Dialogflow وستتعلم كيفية دمجه مع مساعد Google.
يتم ترتيب التمارين لتعكس التجربة الشائعة لمطوّر برامج السحابة الإلكترونية:
- إنشاء وكيل Dialogflow v2
- إنشاء الكيانات
- إنشاء الأهداف
- إعداد ردّ تلقائي على الويب باستخدام وظائف السحابة الإلكترونية في GCP
- استخدام قاعدة المعلومات لاستيراد الأسئلة الشائعة
- اختبار روبوت الدردشة
- تفعيل دمج "مساعد Google"
ما ستقوم بإنشائه
سننشئ تطبيقًا من "مساعد Google" لمجموعة لقاء النساء في Voice. سيكون من الممكن السؤال عن موعد اللقاء التالي، أو مقالة نصائح الكتاب أو الأسئلة العامة حول مجموعة اللقاءات. |
المعلومات التي ستطّلع عليها
- كيفية إنشاء روبوت دردشة باستخدام الإصدار 2 من Dialogflow
- كيفية إنشاء محادثة خطية باستخدام Dialogflow
- كيفية الاستفادة من الكيانات
- كيفية الاستفادة من قاعدة المعرفة
- كيفية إعداد عمليات تنفيذ الردّ التلقائي على الويب باستخدام وظيفتَي Dialogflow وGoogle Cloud Platform
- كيفية نقل تطبيقك إلى "مساعد Google" باستخدام "المهام مع مساعد Google"
المتطلبات الأساسية
- ستحتاج إلى عنوان Google Identity أو Gmail لإنشاء وكيل Dialogflow.
- سنوفّر لك أرصدة على Google Cloud Platform لاستخدام وظائف السحابة الإلكترونية في Google Cloud Platform.
- عليك الوصول إلى جدول بيانات Google العام هذا للحصول على بيانات الوكيل.
- افتحه في علامة تبويب جديدة: https://docs.google.com/spreadsheets/d/1UWx3WYVCrqz0D4uJ_pO56WeqEPa9rQDG1cfc_H11kgY/edit?usp=sharing
- لست بحاجة إلى المعرفة الأساسية بلغة JavaScript، ولكن يمكن أن تكون مفيدة في حال أردت تغيير رمز تنفيذ الردّ التلقائي على الويب.
2. بدء الإعداد
تفعيل "النشاط على الويب" في المتصفّح
- انقر على: http://myaccount.google.com/activitycontrols.
- تأكد من أن الويب & تفعيل النشاط على التطبيقات:
إنشاء وكيل Dialogflow
- في الشريط الأيمن، أسفل الشعار مباشرةً، اختَر "إنشاء وكيل جديد". إذا كان لديك موظّفو دعم حاليون، انقر على القائمة المنسدلة أولاً.
- تحديد اسم وكيل:
yourname-wiv
(استخدِم اسمك الخاص) - اختَر: الإنجليزية - en.
- اختَر المنطقة الزمنية الأقرب إليك كمنطقة زمنية تلقائية.
- لا تختَر "الوكيل الضخم". (باستخدام هذه الميزة، يمكنك إنشاء وكيل شامل يمكنه التنسيق بين الوكلاء "الفرعيين". لسنا بحاجة إليها الآن).
- انقر على إنشاء
ضبط Dialogflow
- انقر على رمز الترس في القائمة اليمنى بجانب اسم مشروعك.
- أدخِل وصف الوكيل التالي: Women in Voice agent
- انتقِل للأسفل وصولاً إلى الميزات التجريبية وانقر على مفتاح التبديل لتفعيل الميزات التجريبية.
- انتقِل للأسفل إلى Log Settings (إعدادات السجلّ) وبدِّل مفتاحَي التبديل لتسجيل تفاعلات Dialogflow وتسجيل جميع التفاعلات في Google Cloud Stackdriver. سنحتاج إلى هذا الإجراء لاحقًا في حال أردنا تصحيح أخطاء الإجراء.
- انقر على حفظ.
- 3. انقر على تم.
ضبط "المهام مع مساعد Google"
- النقر على رابط مساعد Google في القسم التعرّف على طريقة عمله في "مساعد Google" في اللوحة اليسرى
سيؤدي هذا الإجراء إلى فتح: http://console.actions.google.com
ملاحظة: تأكَّد من تسجيل الدخول باستخدام حساب Google نفسه المستخدَم في Dialogflow.
عندما تكون مستخدمًا جديدًا لبرنامج "المهام مع مساعد Google"، عليك ملء هذا النموذج أولاً:
- حاول فتح الإجراء في المحاكي**، من خلال النقر على اسم المشروع.**
- اختيار تطوير في شريط القوائم
أزِل العلامة من المربّع بجانب مطابقة إعداد لغة المستخدم. للتأكّد من أنّ لغة "مساعد Google" التلقائية لن ترفض تحويل النص إلى كلام.
- انقر على حفظ.
- اختَر اختبار في شريط القوائم.
- تأكَّد من ضبط المحاكي على الإنجليزية وانقر على التحدث إلى التطبيق التجريبي.
سيتم الترحيب بك باستخدام الهدف التلقائي الأساسي من Dialogflow. وهذا يعني أنّ عملية إعداد عملية الدمج مع "المهام مع مساعد Google" قد نجحت.
ضبط Google Cloud
بالنسبة لهذا البرنامج التعليمي، ستحتاج إلى حساب GCP مع حساب فوترة. إذا لم يكن لديك حساب بعد، يمكنك إنشاء حساب باتّباع هذه الخطوات.
عادةً ما يتطلب حساب الفوترة استخدام طريقة دفع، مثل بطاقة الائتمان. بالنسبة لورشة العمل هذه، يمكننا الاستفادة من أرصدة ورشة العمل هذه والتي يمكنها تخطي هذه العملية.
- الانتقال إلى عنوان URL هذا وتسجيل الدخول
- انقر: انقر هنا للوصول إلى الأرصدة
- انقر على "قبول &" متابعة
انتهت عملية الإعداد. لقد أنشأت حساب فوترة بقيمة 25 دولارًا أمريكيًا (أو ما يعادل هذا المبلغ بالعملة المحلية)، وهذا المبلغ أكبر من يكفي لاستخدام دوال Cloud لفترة طويلة.
تفعيل Google Sheets API
إذا كان الوكيل بحاجة إلى أكثر من ردود حسب النية الثابتة (على سبيل المثال، لاسترجاع البيانات من خدمة ويب أو قاعدة بيانات أو جدول بيانات)، عليك استخدام سمة طريقة التنفيذ لربط خدمة الويب بوكيلك. يسمح لك ربط خدمة الويب باتخاذ إجراءات بناءً على تعبيرات المستخدم وإرسال ردود ديناميكية إلى المستخدم مرة أخرى.
على سبيل المثال، إذا أراد أحد المستخدمين تلقي نصيحة حول مدونة أو كتاب، يمكن لخدمة الويب التحقق من قاعدة البيانات الخاصة بك والاستجابة للمستخدم بمقالة لقراءتها.
لن نستخدم في هذا البرنامج التعليمي قاعدة بيانات، بل سنستخدم جدول بيانات Google بدلاً من ذلك. بعد تعديل ورقة البيانات، سيتم أيضًا تعديل إجراء "مساعد Google". أنيق!
- افتح جدول بيانات Google هذا في علامة تبويب جديدة في المتصفح، إذا لم يسبق لك إجراء ذلك:
- https://docs.google.com/spreadsheets/d/1UWx3WYVCrqz0D4uJ_pO56WeqEPa9rQDG1cfc_H11kgY/edit#gid=1240329448
- ملاحظة مهمة: أنشِئ نسخة من هذه الورقة. انقر على ملف > إنشاء نسخة
- بعد نسخ ورقة البيانات، انقر على مشاركة.
- سنحتاج إلى منح حساب خدمة Dialogflow حقوق تعديل حساب خدمة Dialogflow. لإجراء ذلك، افتح Dialogflow > الإعدادات (العجلة المسننة).
- انتقِل للأسفل وصولاً إلى مشروع Google.
- انسخ عنوان حساب الخدمة (البريد الإلكتروني). من المفترض أن يظهر على النحو التالي: dialogflow-<someid>@<my-gcp-project>.iam.gserviceaccount.com
- الصق حساب الخدمة هذا في النافذة المنبثقة "مشاركة" في "جداول بيانات Google"، وامنحه حقوق التعديل.
- بعد ذلك سنحتاج إلى تذكر معرّف الورقة الذي نعمل عليه حاليًا.
The Sheets URL will look something like this:
https://docs.google.com/spreadsheets/d/1fPd8b_z19U7ZzAaY327QhYoogn6q8c1rpGSNF8KIR_o/edit#gid=1240329448
But we are only interested in the Sheet id, which is the part between:
https://docs.google.com/spreadsheets/d/ و/edit#gid=1240329448 (بدون الشرطات المائلة).
So it will look something like this: **1fPd8b_z19U7ZzAaY327QhYoogn6q8c1rpGSNF8KIR_o**
**Write this Sheet ID down**, or copy it to Notepad. In the Webhook steps we will use this again.
- الفتح في علامة تبويب متصفّح أخرى http://console.cloud.google.com. (إذا كان لديك المزيد من مشاريع Google Cloud، يمكنك تفعيل مشروع Dialogflow الجديد: yourname-wiv). - في شريط البحث، ابحث عن: Google Sheets API.
- انقر على هذا، وانقر على الزر تفعيل Google Sheets API في الأعلى.
3- الكيانات المخصصة
الكيانات هي الكائنات التي يتخذ تطبيقك أو جهازك إجراءات بشأنها. اعتبرها كمعاملات / متغيرات. في الإجراء الذي نتّخذه، سنسأل عمّا يلي:
"أريد نصيحة للقراءة حول
برامج تتبُّع المحادثات
/ أريد نصيحة قراءة حول
صوت*"*
سواء قلت برامج روبوت الدردشة أو الصوت أو كليهما، سيتم جمع هذه البيانات من كيان مخصّص سيتم استخدامه كمَعلمة في طلبي المُرسَل إلى خدمة ويب.
إليك مزيد من المعلومات حول كيانات Dialogflow.
إنشاء كيان القناة
- انقر على وحدة تحكُّم Dialogflow داخل عنصر القائمة: الكيانات.
- انقر على إنشاء كيان.
- اسم الكيان:
tech
(يُرجى التأكد من أن كل أحرفه صغيرة) - حدِّد الخيارات التي تتضمّن المرادفات. (يمكنك الضغط على مفتاح التبويب (Tab) من خلال الواجهة.)
Chatbots - Chatbots, Chat, Web
Voice - Voice, Voicebots, Voice Assistants
Both - Both, All
5**.** بدِّل إلى وضع **التعديل الأولي** من خلال النقر على زر القائمة إلى جانب زر الحفظ الأزرق.
- يُرجى العلم أنّه كان بإمكانك أيضًا إدخال جميع الكيانات بتنسيق CSV. يمكن أن يكون هذا مفيدًا عندما يكون لديك الكثير من الكيانات التي يجب إنشاؤها.
"Chatbots","Chatbots","Chat","Web"
"Voice","Voice","Voicebots","Voice Assistants"
"Both","Both","All"
- انقر على حفظ.
4. مكان ووقت الاستماع إلى الموسيقى
تستخدم منصة Dialogflow ميزة intents لتصنيف نوايا المستخدم. تتضمّن الأهداف عبارات تدريب، وهي أمثلة على ما قد يقوله المستخدم لوكيلك.
على سبيل المثال، المستخدم الذي يريد معرفة من يريد معرفة موعد الحدث التالي قد يسأل:
"ما موعد اللقاء القادم؟"
عندما يكتب مستخدم طلبًا أو يقوله، يُشار إليه باسم تعبير المستخدم، يطابق Dialogflow تعبير المستخدم مع أفضل نيّة في الوكيل. تُعرف مطابقة النية أيضًا باسم تصنيف القصد.
إليك مزيد من المعلومات حول عناصر Dialogflow.
تعديل هدف الترحيب التلقائي
عند إنشاء وكيل Dialogflow جديد، سيتم إنشاء هدفَين تلقائيَين تلقائيًا. هدف الترحيب التلقائي هو الخطوة الأولى التي تظهر لك عند بدء محادثة مع موظّف الدعم. الغرض الاحتياطي التلقائي هو المسار الذي ستحصل عليه عندما يتعذّر على الوكيل فهمك أو عندما يتعذّر عليه مطابقة الهدف مع ما قلته للتو.
- انقر على الأهداف > نيّة الترحيب التلقائية
في حالة استخدام "مساعد Google"، سيبدأ تلقائيًا بهدف الترحيب التلقائي. ويرجع ذلك إلى أنّ Dialogflow يستمع إلى الحدث الترحيبي. ومع ذلك، يمكنك أيضًا استدعاء الغرض من خلال قول إحدى عبارات التدريب التي تم إدخالها.
في ما يلي رسالة الترحيب لهدف الترحيب التلقائي:
المستخدم | موظّف دعم |
"Ok Google، التحدّث إلى <اسمك>-WIV" | "مرحبًا، أنا آنا، الوكيلة الافتراضية لـ Women in Voice"."بإمكانكِ أن تطلبي مني معلومات حول اللقاءات أو Women in Voice أو نصيحة للقراءة."ما الذي تريد معرفته؟" |
- انتقِل للأسفل إلى الردود.
- محو كل الردود النصية.
- في علامة التبويب التلقائية، أنشئ الردود الثلاث التالية. (انقر فوق إضافة الردود > نص أو رد SSML، لكل سطر جديد:)
- مرحبًا، أنا Anna، الوكيلة الافتراضية لبرنامج Women in Voice.
- يمكنكَ طلب معلومات عن اللقاءات أو مشاركة Women in Voice أو نصيحة حول القراءة.
- ما الذي تريد معرفته؟
يجب أن تكون الإعدادات مشابهة للقطة الشاشة هذه.
- يتم استخدام الناتج السابق لبرامج تتبُّع المحادثات، ويمكننا تعديل الناتج قليلاً، خاصةً لخدمة "مساعد Google". سنستخدم SSML (لغة ترميز تركيب الكلام) لزيادة مرات الإيقاف المؤقت في الجمل. انقر على علامة التبويب مساعد Google.
- لا تفعّل الخيار التلقائي، لأنّنا لن نعيد استخدام رسالة الدردشة المبرمَجة.
- انقر على إضافة ردود > ردّ بسيط
- أضِف الإصدار النصي التالي:
Hey there, I'm Anna, the virtual agent of Women in Voice.
You can ask me for information about meetups, Women in Voice or a reading tip. What would you like to know?
- بعد ذلك، انقر على تخصيص إخراج الصوت.
- وأضف إصدار SSML التالي:
<speak><p><s>Hey there, I'm Anna, the virtual agent of Women in Voice.</s><s>
You can ask me for information about meetups, Women in Voice or a reading tip.</s></p><break time="500ms"/><p><s>
What would you like to know?</s></p></speak>
يجب أن تكون الإعدادات مشابهة للقطة الشاشة هذه.
- انقر على حفظ.
يمكنك العثور هنا على مزيد من المعلومات حول SSML في "المهام مع مساعد Google".
- لنختبر هذا المقصد. يمكننا أولاً اختباره في محاكي Dialogflow.
النوع: مرحبًا. من المفترض أن تعرض هذه الرسالة.
- يمكنك الآن العودة إلى وحدة تحكُّم "المهام مع مساعد Google".
(ننصحك بإدراجها في علامة تبويب أخرى).
انقر على: "التحدث إلى تطبيقي التجريبي." واستمِع إلى رسالة الترحيب الجديدة.
تعديل الغرض الاحتياطي التلقائي
- انقر على الأهداف > الغرض الاحتياطي التلقائي
- انتقِل للأسفل إلى الردود.
- محو كل الردود النصية.
- في علامة التبويب الافتراضية، قم بإنشاء الردود التالية، كل منها في سطر جديد، بحيث يتم التبديل بين هذه الخيارات:
Sorry, can you repeat this?
I didn't understand you. You can ask me questions about Women in Voice, a book or article tip or when the next meetup will be.
- انقر على حفظ.
ملاحظة: عندما لا تُدخل أي نتيجة في "مساعد Google"، سيتم استخدام الإعدادات التلقائية.
إنشاء هدف الإيقاف
- انقر على عنصر القائمة Intents.
- انقر على إنشاء هدف.
- أدخِل اسم Intent:
Stop Intent
- انقر على إضافة عبارات تدريب.
No
That's it
Bye
I don't want that
Goodbye
It's ok for now
Quit
I want to stop
Close this
End the conversation
- مرر لأسفل إلى الردود.> إضافة ردّ
- أضِف خيارات النص التالية:
Alright! Hopefully we will see you at one of our meetups!
No problem. See you at one of our meetups!
- قلب مفتاح التبديل: ضبط هذا الهدف كنهاية المحادثة. وسيؤدي هذا إلى ضمان إغلاق إجراء "مساعد Google" بعد مطابقة هذا الغرض.
- انقر على حفظ.
إنشاء نية اللقاء
سيحتوي هدف اللقاء على هذا الجزء من المحادثة:
المستخدم | موظّف دعم |
"ما موعد اللقاء القادم؟" | "اللقاء القادم سيكون في <التاريخ> في <time> في <location>. سيكون الموضوع <topic>. ومكبّرات الصوت هي: <مكبّرات الصوت>. يمكنك التسجيل من خلال نشرتنا الإخبارية." |
- انقر على عنصر القائمة Intents.
- انقر على إنشاء هدف.
- أدخِل اسم الغرض:
Meetup Intent
(تأكد من استخدام حرف M كبير وحرف I كبير. - إذا كتبت الغرض بطريقة مختلفة، لن تعمل خدمة الواجهة الخلفية.) - انقر على إضافة عبارات تدريب.
When is the next meetup?
Do you have any events?
Which events are in the planning?
Are there meetup events soon?
I would love to attend a meetup
Can I join a virtual meetup?
When will you get together?
Can I join?
What does your calendar look like?
- انقر على التوصيل >. تفعيل توصيل الطلبات
- غيِّر مفتاح التبديل تفعيل ميزة الرد التلقائي على الويب لهذا الغرض.
- انقر على حفظ.
إنشاء نصيحة Intent
سيتضمّن نص النصيحة هذا الجزء من المحادثة:
المستخدم | موظّف دعم |
"أريد نصيحة للقراءة" | "هل تريد الاطّلاع على مزيد من المعلومات حول روبوتات الدردشة أو الصوت أو كليهما؟" |
"الصوت" | "حسنًا، إليك نصيحة اليوم. يعمل <type> <title> عن <author>. هل تريد نصيحة أخرى بشأن كتاب أو مقالة أخرى؟ يُمْكِنُنِي أَيْضًا الِاطِّلَاعْ عَلَى مَزِيدْ مِنَ الْمَعْلُومَاتْ حَوْلَ الْمَلَاقَاتْ وَالْمَهَامِّ الْمَطْلُوبَة. كيف يمكنني مساعدتك؟" |
- انقر على عنصر قائمة Intents مرة أخرى.
- انقر على إنشاء هدف.
- أدخِل اسم الغرض:
Tip Intent
(تأكد من استخدام حرف L كبير وحرف I كبير. - إذا كتبت الغرض بطريقة مختلفة، لن تعمل خدمة الواجهة الخلفية.) - انقر على إضافة عبارات تدريب وأضِف ما يلي:
Can I get a tip for an article?
I would like to receive a reading tip
Any book tips?
What's nice to read?
I want to learn more about Chatbots, what should I read?
What are nice blogs?
Do you have book suggestions?
I want to receive information about Both
Can I have Chatbots reading tip
I would like to read more about Voice
Voice please
Both are okay.
Reading tip
Tip
Blog
Article
Book
Book suggestions
Yes
Yeah
Another tip
Yes one more
- انتقِل إلى الإجراء والمَعلمات في أسفل الصفحة
- وضع علامة مطلوبة على التكنولوجيا
انقر على: تعريف الطلب وأدخِل ما يلي:
Do you want to read more about Chatbots, Voice or Both?
- انقر على التوصيل >. تفعيل توصيل الطلبات
هذه المرة لن يتم إجراء ترميز ثابت للاستجابة. سيأتي الرد من دالة السحابة! وبالتالي، بدِّل مفتاح تفعيل طلب الردّ التلقائي على الويب لهذا الغرض.
انقر على التوصيل >. تفعيل توصيل الطلبات
- غيِّر مفتاح التبديل تفعيل ميزة الرد التلقائي على الويب لهذا الغرض.
- انقر على حفظ.
5- موصلات المعلومات
موصِّلات المعلومات تتكامل مع الأهداف المحدّدة. يحلّلون مستندات المعلومات للعثور على ردود مبرمَجة. (على سبيل المثال، الأسئلة الشائعة أو المقالات من ملفات CSV أو المواقع الإلكترونية على الإنترنت أو حتى ملفات PDF!) لإعدادها، يجب تحديد قاعدة معرفية واحدة أو أكثر، وهي مجموعات من مستندات المعلومات.
اطّلع على مزيد من المعلومات عن "موصِّلات المعلومات".
لنجرب هذا.
- انقر على العلامة en لاختيار اللغة الإنجليزية من القائمة في أعلى الشاشة.
- اختَر المعرفة (إصدار تجريبي) من القائمة.
- انقر على الزر الأزرق الأيسر: إنشاء قاعدة معلومات
- الكتابة كاسم قاعدة معلومات Women in Voice وانقر على حفظ.
- انقر على إنشاء الرابط الأول.
- سيؤدي هذا إلى فتح نافذة.
استخدِم الإعدادات التالية:
اسم المستند: ورقة الأسئلة الشائعة حول النساء في Voice
نوع المعرفة: الأسئلة الشائعة
نوع Mime: ملف CSV
- سنحتاج إلى البيانات من ورقة البيانات هذه، وتأكد من فتح ورقة البيانات، ثم اختَر علامة تبويب الأسئلة الشائعة
- حدد ملف > تنزيل > ملف CSV
- انتقِل مرة أخرى إلى Dialogflow، وانقر على تحميل ملف من جهاز الكمبيوتر واختَر ملف CSV الذي تم تنزيله. انقر على إنشاء.
تم إنشاء قاعدة معرفية:
- انقر على إضافة ردّ.
أنشئ الإجابات التالية وانقر على حفظ:
$Knowledge.Answer[1]
- انقر على عرض التفاصيل.
ستعرض هذه الصفحة كل الأسئلة الشائعة التي نفّذتها في Dialogflow.
الأمر سهل!
يمكنك أيضًا التوجيه إلى موقع إلكتروني بتنسيق HTML على الإنترنت يتضمّن أسئلة شائعة لاستيراد الأسئلة الشائعة إلى وكيلك. من الممكن أيضًا تحميل ملف PDF يتضمّن مجموعة من النصوص، وسيطرح تطبيق Dialogflow الأسئلة نفسها.
- انقر على المعرفة (إصدار تجريبي) في قائمة Dialogflow للرجوع إلى جميع موصلات قاعدة المعلومات.
- من الممكن تغيير نقطة القوة والضعف في "قاعدة المعلومات". وهذا أمر منطقي عندما تكون لديك فكرة أنّ الأسئلة الشائعة ستفوز أو تخسر أهدافك الخاصة. بما أنه ليست لدينا نوايا كثيرة، يمكننا تعزيز قوة "قاعدة المعلومات". غيِّر المقياس إلى -0.2. بعد سحب شريط التمرير، سيتم حفظ القيمة تلقائيًا.
يجب الآن اعتبار الأسئلة الشائعة على أنها "أسئلة إضافية" لإضافته إلى الوكلاء، بجانب تدفقات النية. لا يمكن للأسئلة الشائعة حول "قاعدة المعلومات" تدريب النموذج. لذا قد لا يتطابق طرح الأسئلة بطريقة مختلفة تمامًا، لأنه لا يستخدم فهم اللغات الطبيعية (نماذج تعلُّم الآلة). لهذا السبب، من المفيد أحيانًا تحويل الأسئلة الشائعة إلى أهداف.
6- تنفيذ الرد التلقائي على الويب
إنشاء دالة في Google Cloud
- انتقِل إلى http://console.cloud.google.com في علامة تبويب أخرى داخل المتصفح.
- انقر على Cloud Functions في القائمة اليمنى.
- انقر على إنشاء دالة.
- حدِّد الإعدادات التالية:
- الاسم:
dialogflow
- الذاكرة المخصّصة: 256 ميبي بايت
- المشغِّل: HTTP
- انسخ عنوان URL إلى الحافظة.
- اختَر المحرِّر المضمّن.
- بيئة التشغيل: NodeJS 8
- الدالة المطلوب تنفيذها:
dialogflow
- تأكد من تحديد مربع اختيار المصادقة هذا :
- في ما يلي محتوى الملف package.json. انسخ هذا والصقه في علامة التبويب package.json في المحرر.
يعمل هذا الرمز على تحميل مكتبات npm الصحيحة إلى Google Cloud:
{
"name": "dialogflow",
"description": "Cloud Functions",
"engines": {
"node": "8"
},
"dependencies": {
"request": "^2.85.0",
"request-promise": "^4.2.5",
"dialogflow-fulfillment": "^0.6.1",
"actions-on-google": "^2.2.0",
"googleapis": "^48.0.0",
"moment": "^2.24.0"
},
"devDependencies": {
"eslint": "^5.12.0",
"eslint-plugin-promise": "^4.0.1",
"ngrok": "^3.2.7"
},
"private": true
}
- في ما يلي محتوى ملف index.js. انسخ هذا وألصقه في علامة التبويب index.js في المحرر.
سيتم دمج هذا الرمز مع مكتبة googleapis لجلب البيانات من جدول بيانات Google. حيث يستخدم مكتبة actions-on-google لعرض البطاقات على جهاز مزوّد بخدمة "مساعد Google". وتستفيد هذه التكنولوجيات من dialogflow-fulfillment المكتبة لتصنيف عناصر Dialogflow. ويستفيد من لحظة المكتبة لمعالجة عناصر التاريخ والوقت.
/* jshint esversion: 8 */
'use strict';
process.env.DEBUG = 'dialogflow:debug';
const ACCOUNTS_SHEET_ID = '1UWx3WYVCrqz0D4uJ_pO56WeqEPa9rQDG1cfc_H11kgY';
const {
BasicCard,
Button,
} = require('actions-on-google');
const {google} = require('googleapis');
const moment = require('moment');
moment.locale('nl');
const { WebhookClient } = require('dialogflow-fulfillment');
var books;
var meetups;
const SHEETS_SCOPE = 'https://www.googleapis.com/auth/spreadsheets.readonly';
/**
* Authenticates the Sheets API client for read-only access.
*
* @return {Object} sheets client
*/
async function getSheetsClient() {
// Should change this to file.only probably
const auth = await google.auth.getClient({
scopes: [SHEETS_SCOPE],
});
return google.sheets({version: 'v4', auth});
}
/**
* Return a natural spoken date
* @param {string} date in 'YYYY-MM-DD' format
* @returns {string}
*/
var getSpokenDate = function(date){
let datetime = moment(date, 'YYYY-MM-DD');
return `${datetime.format('D MMMM')}`;
};
/* When the tipIntent Intent gets invoked. */
function tipIntent(agent) {
var par = agent.parameters.tech;
var selection = [];
//console.log(par);
//console.log(books);
for(var i = 0; i<books.length; i++){
if(books[i][2].toLowerCase() == par.toLowerCase()) {
selection.push(books[i]);
}
}
var random = Math.floor(Math.random() * selection.length);
var booktip = selection[random];
//console.log(selection[random]);
let spokenText = `<p><s>Alright, here's the tip of the day!</s></p><p>The ${booktip[6]} ${booktip[0]} of ${booktip[1]}.</p>`;
let writtenText = `Alright, here's the tip of the day! The ${booktip[6]} ${booktip[0]} of ${booktip[1]}.`;
//console.log(booktip[8]);
if (agent.requestSource === agent.ACTIONS_ON_GOOGLE) {
let conv = agent.conv();
conv.ask(`<speak>${spokenText}</speak>`);
conv.ask(new BasicCard({
title: `Tip of the day!`,
subtitle: `${par}`,
text: `The ${booktip[6]} ${booktip[0]} of ${booktip[1]}.`,
buttons: new Button({
title: 'Read',
url: `${booktip[8]}`,
})
}));
conv.ask(`<speak><p><s>Do you want another book or article tip? Also, I can tell you more about meetups or what we do. How can I help?</s></p></speak>`);
// Add Actions on Google library responses to your agent's response
agent.add(conv);
} else {
agent.add(writtenText + ' Do you want another book or article tip? Also, I can tell you more about meetups or what we do. How can I help?');
}
}
function meetupIntent(agent) {
let conv = agent.conv();
let record;
console.log(meetups);
for(var i = 0; i<meetups.length; i++){
let d = moment(meetups[i][0], 'YYYY-MM-DD');
let today = moment(new Date());
if(moment(d).isSameOrAfter(today)) {
// the i event is not in the past
record = meetups[i];
console.log(record);
break;
}
}
let date = getSpokenDate(record[0]);
let spokenText1 = `The next meetup will be ${date} at ${record[1]} in ${record[3]}.`;
let spokenText2 = `The topic will be <emphasis level="moderate">${record[2]}.</emphasis>`;
let spokenText3 = `You can register via our newsletter.`;
let writtenText = `${spokenText1} The topic will be ${record[2]}. ${spokenText3}`;
if (agent.requestSource === agent.ACTIONS_ON_GOOGLE) {
conv.ask(`<speak>${spokenText1} ${spokenText2} ${spokenText3}</speak>`);
conv.ask(new BasicCard({
title: `Meetup`,
subtitle: `${record[2]}`,
text: `${record[0]} ${record[1]} - ${record[3]}`,
buttons: new Button({
title: 'Register',
url: `http://www.meetup.com`
})
}));
conv.ask('<speak><p><s>Is there anything else I can help you with?</s></p></speak>');
agent.add(conv);
} else {
agent.add(`${writtenText} Is there anything else I can help you with?`);
}
}
exports.dialogflow = async (request, response) => {
var agent = new WebhookClient({ request, response });
console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers));
console.log('Dialogflow Request body: ' + JSON.stringify(request.body));
const client = await getSheetsClient();
const allBooks = await client.spreadsheets.values.get({
spreadsheetId: ACCOUNTS_SHEET_ID,
range: 'Books&Blogs!A:I',
});
const allEvents = await client.spreadsheets.values.get({
spreadsheetId: ACCOUNTS_SHEET_ID,
range: 'Meetups!A:D',
});
books = allBooks.data.values;
meetups = allEvents.data.values;
books.shift();
meetups.shift();
var intentMap = new Map();
intentMap.set('Tip Intent', tipIntent);
intentMap.set('Meetup Intent', meetupIntent);
agent.handleRequest(intentMap);
};
- انقر على رابط متغيرات البيئة والشبكات والمهلات والمزيد
- اختَر حساب خدمة عمليات دمج Dialogflow.
(يتم استخدام حساب خدمة GAE App Engine بشكل تلقائي، ولكن يجب أن يكون هذا الحساب هو نفسه حساب الخدمة الذي تمت مشاركته في "جداول بيانات Google" في الخطوات الأولى من هذا البرنامج التعليمي).
- قبل أن ننشر دالة السحابة. سنغيّر سطرًا واحدًا في رمزنا في علامة التبويب index.js. السطر الثالث من التعليمة البرمجية:
const
ACCOUNTS_SHEET_ID = '1Yo_E8KONgSiUm00ZmTOqtjXCwULmc2JuI3sjxRyvrkE';
في إحدى الخطوات الأولى، كتبنا هذا المفتاح في المفكرة (Notepad). لذا انسخ والصق هذا المعرف في التعليمة البرمجية.
- نحن الآن جاهزون. انقر على الزر إنشاء. سيستغرق الأمر بعض الوقت، لأنها تنشر الدالة بدون خادم.
تفعيل عمليات التنفيذ في Dialogflow
- العودة إلى Dialogflow
- انقر على توصيل الطلبات في القائمة الرئيسية.
- فعِّل مفتاح الردّ التلقائي على الويب.
- أدخِل عنوان URL لدالة السحابة الإلكترونية التي تم نسخها إلى الحافظة.
على سبيل المثال: https://us-central1-leeboonstra-wiv-uhtefa.cloudfunctions.net/dialogflow
- انقر على حفظ.
- لنختبر الردّ التلقائي على الويب لمعرفة ما إذا كان الرمز يعمل ونختبر التدفقات مباشرةً في مُحاكي Dialogflow.
7. تنفيذ المهام في "مساعد Google"
المهام مع مساعد Google هي منصة تطوير لخدمة "مساعد Google". تتيح تطوير "الإجراءات" التابعة لجهات خارجية، وهي تطبيقات صغيرة لخدمة "مساعد Google" توفّر وظائف موسّعة.
ستحتاج إلى استدعاء إجراء من خلال Google من خلال مطالبة Google بفتح تطبيق أو التحدث إليه.
سيؤدي هذا إلى فتح الإجراء، وتغيير الصوت، والخروج من "الإجراء الأصلي". نطاق مساعد Google. وهذا يعني أنّه عليك إنشاء كل ما تطلبه من وكيلك من هذه النقطة. لا يمكنك أن تطلب فجأة من "مساعد Google" إطلاعك على معلومات حول الطقس من Google ضمن إجراءاتك الخاصة، إذا كان هذا ما تريده. يجب عليك ترك (إغلاق) نطاق الإجراء الحالي (تطبيقك) أولاً.
اختبار الحركة في محاكي "مساعد Google"
لنختبر المحادثة التالية:
المستخدم | مساعد Google |
"Ok Google، أريد التحدّث إلى التطبيق التجريبي". | "الحصول على الإصدار التجريبي من تطبيقي" |
المستخدم | اسمك وإنجازاتك |
- | "مرحبًا، أنا Anna، الوكيلة الافتراضية لبرنامج Women in Voice. يمكنكَ أن تطلب مني تقديم معلومات عن اللقاءات أو Women in Voice أو نصيحة للقراءة. ما الذي تريد معرفته؟" |
هل يمكنني الحصول على نصيحة بشأن مدونة؟ | "هل تريد الاطّلاع على مزيد من المعلومات حول روبوتات الدردشة أو الصوت أو كليهما؟" |
روبوتات الدردشة | "حسنًا، إليك نصيحة اليوم. The Article Chatbots and The Challenge Of Invisible Affordances of Cobus Greyling.هل تريدون كتاب أو نصيحة أخرى؟ يُمْكِنُنِي أَيْضًا الِاطِّلَاعْ عَلَى مَزِيدْ مِنَ الْمَعْلُومَاتْ حَوْلَ الْمَلَاقَاتْ وَالْمَهَامِّ الْمَطْلُوبَة. كيف يمكنني مساعدتك؟" |
ما موعد اللقاء القادم؟ | "سيكون اللقاء التالي هو 29 نيسان (أبريل) في الساعة 6:00 مساءً ضِمن جلسة Hangout افتراضية. سيكون الموضوع هو "ورشة عمل على الإنترنت": إنشاء "إجراءات Google" باستخدام Dialogflow. يمكنك التسجيل من خلال نشرتنا الإخبارية.هل هناك أي مساعدة أخرى يمكنني تقديمها؟" |
ما هو عنوان URL لموقعك الإلكتروني؟ | "يمكنك التواصل معنا على www.Womeninvoice.com. هل أنت بحاجة إلى مساعدة أخرى؟" |
لا، هذا كل شيء، شكرًا | "حسنًا. نأمل أن نراك في أحد لقاءاتنا". |
- التبديل إلى محاكي "مساعد Google"
افتح: https://console.actions.google.com
- انقر على رمز الميكروفون واسأل نفسك ما يلي:
Talk to my test app.
- الآن، دعنا نسأل:
Can I have a tip for a blog?
من المفترض أن يؤدي هذا الإجراء إلى:
"هل تريد الاطّلاع على مزيد من المعلومات حول روبوتات الدردشة أو الصوت أو كليهما؟"
Chatbots
"حسنًا، إليك نصيحة اليوم. The Article Chatbots and The Challenge Of Invisible Affordances of Cobus Greyling
هل تريد الحصول على نصيحة أخرى حول كتاب أو مقالة أخرى؟ يُمْكِنُنِي أَيْضًا الِاطِّلَاعْ عَلَى مَزِيدْ مِنَ الْمَعْلُومَاتْ حَوْلَ الْمَلَاقَاتْ وَالْمَهَامِّ الْمَطْلُوبَة. كيف يمكنني مساعدتك؟"
- لنجرب صيغة مختلفة من السؤال نفسه:
"Yes, I want to read more about Voice"
"حسنًا، إليك نصيحة اليوم. كتاب تصميم واجهات المستخدم الصوتية: مبادئ تجارب المحادثات. ... لـ "كاثي بيرل"
هل تريد الحصول على نصيحة أخرى حول كتاب أو مقالة أخرى؟ يُمْكِنُنِي أَيْضًا الِاطِّلَاعْ عَلَى مَزِيدْ مِنَ الْمَعْلُومَاتْ حَوْلَ الْمَلَاقَاتْ وَالْمَهَامِّ الْمَطْلُوبَة. كيف يمكنني مساعدتك؟"
يُرجى العلم أنّه لم يسبق لك استخدام هذه العبارة التدريبية في Dialogflow. لقد طابقت الهدف الصحيح للتو.
يُرجى العِلم أيضًا أنّه لم يصلك سؤال متابعة، لأنّك قدّمت معلومات كافية لمتابعة Dialogflow.
- تابع الخطوات في Dialogflow باستخدام العبارات التالية:
What's the URL for your website
Bye
هل توجد أخطاء؟ اطّلِع على السجلّات.
في كل مرة تستخدم فيها console.log()
في رمز دالة Cloud، ستتم كتابة البيانات إلى سجلات Google Cloud Platform (Stackdriver). يمكنك الوصول إلى هذه السجلات من خلال فتح Cloud Console > التسجيل
في القائمة المنسدلة الأولى، يمكنك اختيار Cloud Function >. تدفق الحوار للفلترة بحثًا عن سجلاتك.
8. تهانينا
أحسنت، لقد أنشأت أول إجراء لك على "مساعد Google" باستخدام Dialogflow.
كما لاحظت، كان الإجراء قيد التنفيذ في وضع الاختبار المرتبط بحسابك على Google. يُرجى تسجيل الدخول باستخدام الحساب نفسه على جهاز Nest أو تطبيق "مساعد Google" على هاتف iOS أو Android. يمكنك اختبار الإجراء أيضًا.
الآن هذا عرض توضيحي لورشة العمل. ولكن عندما تكون بصدد إنشاء طلبات لـ "مساعد Google"، يمكنك إرسال الإجراء لتتم الموافقة عليه. اطّلِع على هذا الدليل للحصول على مزيد من المعلومات.
النقاط التي تناولناها
- كيفية إنشاء روبوت دردشة باستخدام الإصدار 2 من Dialogflow
- كيفية إنشاء كيانات مخصّصة باستخدام Dialogflow
- كيفية إنشاء محادثة خطية باستخدام Dialogflow
- كيفية إعداد عمليات تنفيذ الردّ التلقائي على الويب باستخدام Dialogflow ووظائف Google Cloud
- كيفية نقل تطبيقك إلى "مساعد Google" باستخدام "المهام مع مساعد Google"
الخطوات التالية
هل استمتعت بهذا الدرس التطبيقي حول الترميز؟ ألقِ نظرة على هذه المختبرات الرائعة!
- إنشاء إجراء في دليل التلفزيون باستخدام Dialogflow و"المهام مع مساعد Google"
- إنشاء "مهام" لخدمة "مساعد Google" باستخدام Dialogflow (المستوى 1)
- إنشاء "مهام" لخدمة "مساعد Google" باستخدام Dialogflow (المستوى 2)
- إنشاء "مهام" لخدمة "مساعد Google" باستخدام Dialogflow (المستوى 3)
- فهم عملية توصيل الطلبات من خلال دمج Dialogflow مع "تقويم Google"
- دمج Google Cloud Vision API مع Dialogflow