1. مقدمه
در این آزمایشگاه شما یک اقدام ساده با استفاده از Dialogflow خواهید ساخت و یاد می گیرید که چگونه آن را با دستیار گوگل ادغام کنید.
تمرینها برای منعکسکننده تجربه مشترک توسعهدهنده ابری سفارش داده شدهاند:
- یک عامل Dialogflow v2 ایجاد کنید
- موجودیت ها را ایجاد کنید
- قصد ایجاد کنید
- یک وب هوک با توابع GCP Cloud راه اندازی کنید
- از پایگاه دانش برای وارد کردن سؤالات متداول استفاده کنید
- چت بات را تست کنید
- ادغام دستیار Google را فعال کنید
آنچه خواهید ساخت
ما یک برنامه Google Assistant برای گروه ملاقات زنان در صدا ایجاد خواهیم کرد. این امکان وجود دارد که بپرسید جلسه بعدی چه زمانی است، نکات مقاله و کتاب یا سؤالات کلی در مورد گروه ملاقات. |
چیزی که یاد خواهید گرفت
- نحوه ایجاد ربات چت با Dialogflow v2
- نحوه ایجاد مکالمه خطی با Dialogflow
- نحوه استفاده از نهادها
- نحوه استفاده از پایگاه دانش
- نحوه تنظیم اجراهای وب هوک با توابع Dialogflow و GCP
- چگونه برنامه خود را با Actions on Google به Google Assistant بیاورید
پیش نیازها
- برای ایجاد یک عامل Dialogflow به یک آدرس Google Identity / gmail نیاز دارید.
- ما اعتبارات ابری GCP را برای استفاده از توابع GCP Cloud به شما ارائه می دهیم
- برای دریافت اطلاعات نماینده، باید به این برگه عمومی Google دسترسی داشته باشید.
- آن را در یک برگه جدید باز کنید: https://docs.google.com/spreadsheets/d/1UWx3WYVCrqz0D4uJ_pO56WeqEPa9rQDG1cfc_H11kgY/edit?usp=sharing
- دانش اولیه جاوا اسکریپت مورد نیاز نیست، اما در صورتی که بخواهید کد اجرای وب هوک را تغییر دهید می تواند مفید باشد.
2. راه اندازی
Web Activity را در مرورگر خود فعال کنید
- کلیک کنید: http://myaccount.google.com/activitycontrols
- مطمئن شوید که Web & App Activity فعال است:
یک عامل Dialogflow ایجاد کنید
- باز کنید: https://console.dialogflow.com
- در نوار سمت چپ، درست زیر لوگو، « ایجاد نماینده جدید » را انتخاب کنید. در صورتی که نمایندگان موجود دارید، ابتدا روی منوی کشویی کلیک کنید.
- نام نماینده را مشخص کنید:
yourname-wiv
(از نام خود استفاده کنید) - به عنوان زبان پیش فرض انتخاب کنید: انگلیسی - en.
- به عنوان منطقه زمانی پیشفرض، منطقه زمانی را انتخاب کنید که نزدیکترین منطقه به شماست.
- Mega Agent را انتخاب نکنید . (با این ویژگی می توانید یک عامل فراگیر ایجاد کنید که می تواند بین عوامل "زیر" هماهنگ شود. ما اکنون به این نیاز نداریم.)
- روی Create کلیک کنید
Dialogflow را پیکربندی کنید
- روی نماد چرخ دنده ، در منوی سمت چپ، در کنار نام پروژه خود کلیک کنید.
- توضیحات نماینده زیر را وارد کنید: نماینده Women in Voice
- برای فعال کردن ویژگیهای بتا ، به پایین بروید و به ویژگیهای بتا بروید و سوئیچ را بچرخانید.
- به تنظیمات Log بروید و هر دو سوئیچ را برای Log the interactions of Dialogflow و برای ثبت همه تعاملات در Google Cloud Stackdriver بچرخانید. در صورتی که بخواهیم اقدام خود را اشکال زدایی کنیم، بعداً به این نیاز خواهیم داشت.
- روی ذخیره کلیک کنید
- روی Done کلیک کنید
Actions در Google را پیکربندی کنید
- روی پیوند Google Assistant در مشاهده نحوه عملکرد آن در Google Assistant در پانل سمت راست کلیک کنید.
این باز می شود: http://console.actions.google.com
توجه: مطمئن شوید که با همان حساب Google در Dialogflow وارد شده اید.
وقتی با Actions on Google جدید هستید، ابتدا باید این فرم را مرور کنید:
- سعی کنید با کلیک روی نام پروژه اقدام خود را در شبیه ساز** باز کنید.**
- در نوار منو Develop را انتخاب کنید
علامت تطبیق تنظیمات زبان کاربر را بردارید. برای اطمینان از اینکه ترکیبکننده نوشتار به گفتار توسط زبان پیشفرض دستیار نادیده گرفته نمیشود.
- روی ذخیره کلیک کنید
- تست را در نوار منو انتخاب کنید
- مطمئن شوید که شبیه ساز روی انگلیسی تنظیم شده است و روی Talk to my test-app کلیک کنید
این عمل با هدف پیشفرض اولیه Dialogflow به شما خوشامد میگوید. این بدان معناست که راهاندازی ادغام با Action در Google کار میکند!
Google Cloud را پیکربندی کنید
برای این آموزش به یک حساب GCP با حساب صورتحساب نیاز دارید. اگر هنوز یکی را ندارید، می توانید با این مراحل یکی بسازید.
معمولاً یک حساب صورتحساب به یک روش پرداخت مانند کارت اعتباری نیاز دارد. برای این کارگاه میتوانیم از اعتبارات کارگاهی استفاده کنیم که میتوان از این فرآیند صرفنظر کرد.
- به این URL بروید و وارد شوید
- کلیک کنید: اینجا را کلیک کنید و به اعتبارات خود دسترسی پیدا کنید
- روی Accept & Continue کلیک کنید
شما آماده اید. شما یک حساب صورتحساب با 25 دلار ایجاد کرده اید که برای استفاده طولانی مدت از توابع Cloud کافی است.
Google Sheets API را فعال کنید
اگر نماینده شما بیش از پاسخهای هدف ثابت (مثلاً برای واکشی دادهها از یک وب سرویس، پایگاه داده یا Sheet) نیاز دارد، باید از تکمیل برای اتصال سرویس وب خود به نماینده خود استفاده کنید. اتصال سرویس وب به شما امکان می دهد اقداماتی را بر اساس عبارات کاربر انجام دهید و پاسخ های پویا را برای کاربر ارسال کنید.
به عنوان مثال، اگر کاربری بخواهد یک وبلاگ یا نکته کتاب دریافت کند، وب سرویس شما می تواند پایگاه داده شما را بررسی کند و با مقاله ای برای خواندن به کاربر پاسخ دهد.
در این آموزش ما از پایگاه داده استفاده نخواهیم کرد، در عوض از Google Sheet استفاده خواهیم کرد. پس از بهروزرسانی برگه، عملکرد «دستیار Google» نیز بهروزرسانی میشود. مرتب!
- اگر قبلاً این کار را نکردهاید، این برگه Google را در یک برگه مرورگر جدید باز کنید:
- https://docs.google.com/spreadsheets/d/1UWx3WYVCrqz0D4uJ_pO56WeqEPa9rQDG1cfc_H11kgY/edit#gid=1240329448
- مهم : از این برگه یک کپی تهیه کنید. روی File > Make a Copy کلیک کنید
- پس از کپی شدن برگه، روی اشتراک گذاری کلیک کنید
- ما باید به حساب سرویس Dialogflow حقوق ویرایش بدهیم. برای انجام این کار، Dialogflow > Settings (چرخ چرخ دنده) را باز کنید.
- به Google Project بروید
- آدرس حساب سرویس (ایمیل) را کپی کنید. باید چیزی شبیه به این باشد: 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 را جستجو کنید
- روی این کلیک کنید و روی دکمه Enable Google Sheets API در بالا کلیک کنید.
3. نهادهای سفارشی
نهادها اشیایی هستند که برنامه یا دستگاه شما روی آنها اقداماتی انجام می دهد. در مورد آن به عنوان پارامترها / متغیرها فکر کنید. در اقدام خود خواهیم پرسید:
"من یک نکته برای خواندن می خواهم
چت ربات ها
/ من یک نکته در مورد مطالعه می خواهم
صدا **"*
فرقی نمیکند Chatbots، Voice یا Both را بگویید، این مورد از یک موجودیت سفارشی جمعآوری میشود که به عنوان پارامتری در درخواست من به یک وب سرویس استفاده میشود.
در اینجا اطلاعات بیشتری در مورد نهادهای Dialogflow وجود دارد .
ایجاد نهاد کانال
- در گزینه Dialogflow Console در آیتم منو کلیک کنید: Entities
- روی Create Entity کلیک کنید
- نام نهاد:
tech
(مطمئن شوید همه آن حروف کوچک باشد) - گزینه های مترادف را مشخص کنید. (شما می توانید از طریق واسط تب کنید.)
-
Chatbots - Chatbots, Chat, Web
-
Voice - Voice, Voicebots, Voice Assistants
-
Both - Both, All
5**.** با کلیک بر روی دکمه منو در کنار دکمه آبی ذخیره به حالت **Raw Edit** بروید.
- توجه داشته باشید که میتوانید تمام موجودیتها را در قالب CSV نیز وارد کنید. این می تواند مفید باشد زمانی که شما تعداد زیادی موجودیت دارید که باید ایجاد شوند.
"Chatbots","Chatbots","Chat","Web"
"Voice","Voice","Voicebots","Voice Assistants"
"Both","Both","All"
- ذخیره را بزنید
4. مقاصد
Dialogflow از intent ها برای دسته بندی مقاصد کاربر استفاده می کند. Intent عبارات آموزشی دارد، که نمونه هایی از آنچه کاربر ممکن است به نماینده شما بگوید است.
برای مثال، کاربری که میخواهد بداند چه کسی میخواهد بداند رویداد بعدی چه زمانی است، ممکن است بپرسد:
"جلسه بعدی کی است؟"
وقتی کاربر چیزی را مینویسد یا میگوید که به آن عبارت کاربر گفته میشود، Dialogflow عبارت کاربر را با بهترین هدف در عامل شما مطابقت میدهد. تطبیق یک قصد نیز به عنوان طبقه بندی قصد شناخته می شود.
در اینجا اطلاعات بیشتری در مورد اهداف Dialogflow وجود دارد .
تغییر هدف پیشفرض خوشآمدگویی
هنگامی که یک عامل جدید Dialogflow ایجاد می کنید، دو هدف پیش فرض به طور خودکار ایجاد می شود. پیشفرض پیشفرض خوشآمدگویی ، اولین جریانی است که هنگام شروع مکالمه با نماینده به آن میرسید. هدف پیشفرض بازگشتی ، جریانی است که وقتی نماینده نتواند شما را درک کند یا نتواند هدفی را با آنچه که گفتید مطابقت دهد، دریافت خواهید کرد.
- Intents > Default Welcome Intent را کلیک کنید
در مورد Google Assistant، به طور خودکار با پیشفرض پیشفرض خوشآمدگویی شروع میشود. دلیلش این است که Dialogflow به رویداد خوش آمدگویی گوش می دهد. با این حال، می توانید با گفتن یکی از عبارات آموزشی وارد شده، قصد را نیز فراخوانی کنید.
در اینجا پیام خوشامدگویی برای پیشفرض پیشفرض پیشفرض آمده است:
کاربر | عامل |
"Ok Google، با <yourname>-WIV صحبت کن" | "سلام، من آنا هستم، نماینده مجازی Women in Voice." |
- به پایین اسکرول کنید تا به پاسخ ها بروید.
- تمام پاسخ های متنی را پاک کنید.
- در تب پیش فرض، 3 پاسخ زیر را ایجاد کنید. (برای هر خط جدید روی Add Responses > Text یا SSML Response کلیک کنید:)
- سلام، من آنا هستم، نماینده مجازی Women in Voice.
- میتوانید از من اطلاعاتی درباره ملاقاتها، زنان در صدا یا نکتهای برای خواندن بخواهید.
- چه چیزی را دوست دارید بدانید؟
پیکربندی باید مشابه این اسکرین شات باشد.
- خروجی قبلی برای چت بات ها استفاده می شود، ما می توانیم خروجی را کمی تغییر دهیم، مخصوصاً برای دستیار گوگل. ما از SSML (زبان نشانه گذاری سنتز گفتار) برای ایجاد مکث در جملات خود استفاده خواهیم کرد. روی تب Google Assistant کلیک کنید.
- تغییر حالت پیش فرض را فعال نکنید ، زیرا از پیام ربات چت دوباره استفاده نمی کنیم.
- روی Add Responses > Simple Response کلیک کنید
- نسخه متنی زیر را اضافه کنید:
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?
- سپس روی Customize audio output کلیک کنید
- و نسخه 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 for Actions on Google بیابید.
- بیایید این نیت را آزمایش کنیم. ابتدا می توانیم آن را در Dialogflow Simulator تست کنیم.
نوع: سلام . باید این پیام را برگرداند.
- اکنون به Actions on Google console برگردید.
(شاید بخواهید این را در برگه دیگری نگه دارید.)
کلیک کنید: " Talk to my test app. " و به پیام خوش آمدگویی جدید گوش دهید.
تغییر هدف پیشفرض بازگشتی
- Intents > Default Fallback Intent را کلیک کنید
- به پایین اسکرول کنید تا به پاسخ ها بروید.
- تمام پاسخ های متنی را پاک کنید.
- در برگه پیشفرض، پاسخهای زیر را هر کدام در یک خط جدید ایجاد کنید، بنابراین بین این گزینهها جایگزین میشود:
-
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 را وارد نمیکنید، پیشفرض خواهد بود.
Stop Intent را ایجاد کنید
- روی آیتم منو Intents کلیک کنید.
- روی Create Intent کلیک کنید
- نام 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
- به پایین بروید به Responses .> Add Response
- گزینه های متن زیر را اضافه کنید:
-
Alright! Hopefully we will see you at one of our meetups!
-
No problem. See you at one of our meetups!
- سوئیچ را برگردانید: این هدف را به عنوان پایان مکالمه تنظیم کنید . این اطمینان حاصل می کند که وقتی این هدف مطابقت پیدا کرد، عملکرد دستیار Google را می بندد.
- روی ذخیره کلیک کنید.
Meetup Intent را ایجاد کنید
Meetup Intent شامل این قسمت از گفتگو خواهد بود:
کاربر | عامل |
"جلسه بعدی کی است؟" | "جلسه بعدی <date> در <time> در <location> خواهد بود. موضوع <topic> خواهد بود. و سخنرانان عبارتند از: <speakers>. شما می توانید از طریق خبرنامه ما ثبت نام کنید." |
- روی آیتم منو Intents کلیک کنید.
- روی Create Intent کلیک کنید
- Intent Name را وارد کنید:
Meetup Intent
(مطمئن شوید که از M بزرگ و I بزرگ استفاده می کنید. - اگر قصد را متفاوت بنویسید، سرویس back-end کار نخواهد کرد!) - روی افزودن عبارات آموزشی کلیک کنید
-
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?
- روی Fulfillment > Enable Fulfillment کلیک کنید
- برای این سوئیچ قصد، فراخوانی Enable Webhook را برگردانید.
- ذخیره را بزنید
Tip Intent را ایجاد کنید
هدف نکته شامل این قسمت از گفتگو خواهد بود:
کاربر | عامل |
"من یک نکته برای خواندن می خواهم." | "آیا می خواهید در مورد چت بات ها، صدا یا هر دو بیشتر بخوانید؟" |
"صدا" | "بسیار خوب، این نکته روز است! <type> <title> <author>. آیا نکته دیگری برای کتاب یا مقاله می خواهید؟ همچنین، می توانم در مورد ملاقات ها یا کارهایی که انجام می دهیم بیشتر به شما بگویم. چگونه می توانم کمک کنم؟ " |
- دوباره بر روی آیتم منوی Intents کلیک کنید.
- روی Create Intent کلیک کنید
- Intent Name را وارد کنید:
Tip Intent
(مطمئن شوید که از L بزرگ و I بزرگ استفاده می کنید. - اگر قصد را متفاوت بنویسید، سرویس back-end کار نخواهد کرد!) - روی افزودن عبارات آموزشی کلیک کنید و موارد زیر را اضافه کنید:
-
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
- به پایین اسکرول کنید تا به Action and Parameters بروید
- علامت گذاری فناوری به عنوان r مورد نیاز
کلیک کنید: Define Prompt و وارد کنید:
-
Do you want to read more about Chatbots, Voice or Both?
- روی Fulfillment > Enable Fulfillment کلیک کنید
این بار ما پاسخی را کدگذاری نمی کنیم. پاسخ از تابع ابری خواهد آمد! بنابراین فراخوانی Enable Webhook را برای این سوئیچ قصد برگردانید.
روی Fulfillment > Enable Fulfillment کلیک کنید
- برای این سوئیچ قصد، فراخوانی Enable Webhook را برگردانید.
- ذخیره را بزنید
5. رابط های دانش
کانکتورهای دانش تکمیل کننده مقاصد تعریف شده هستند. آنها اسناد دانش را برای یافتن پاسخ های خودکار تجزیه می کنند. (به عنوان مثال، سؤالات متداول یا مقالات از فایل های CSV، وب سایت های آنلاین یا حتی فایل های PDF!) برای پیکربندی آنها، یک یا چند پایگاه دانش را تعریف می کنید که مجموعه ای از اسناد دانش هستند.
درباره رابط های دانش بیشتر بخوانید.
بیایید این را امتحان کنیم.
- برای انتخاب زبان انگلیسی در منوی بالا، تگ en را انتخاب کنید.
- دانش (بتا) را در منو انتخاب کنید.
- روی دکمه آبی سمت راست کلیک کنید: Create Knowledge Base
- به عنوان یک نام پایگاه دانش تایپ کنید. Women in Voice و save را بزنید.
- روی ایجاد اولین پیوند کلیک کنید
- با این کار یک پنجره باز می شود.
از کانفیگ زیر استفاده کنید:
نام سند: برگه سوالات متداول Women in Voice
نوع دانش: سوالات متداول
نوع Mime: CSV
- ما به داده های این برگه نیاز خواهیم داشت، مطمئن شوید که برگه داده باز است و برگه پرسش و پاسخ را انتخاب کنید
- فایل > دانلود > CSV را انتخاب کنید
- در Dialogflow برگردید، روی آپلود فایل از رایانه کلیک کنید و فایل CSV را که دانلود کرده اید انتخاب کنید. روی Create کلیک کنید
یک پایگاه دانش ایجاد شده است:
- روی افزودن پاسخ کلیک کنید
پاسخ های زیر را ایجاد کنید و ذخیره کنید:
$Knowledge.Answer[1]
- روی View Detail کلیک کنید
با این کار تمام سوالات متداول که در Dialogflow پیاده سازی کرده اید نمایش داده می شود.
این آسان است!
بدانید که میتوانید برای وارد کردن سؤالات متداول به نماینده خود به یک وبسایت HTML آنلاین با سؤالات متداول اشاره کنید. حتی امکان آپلود PDF با یک بلوک متن وجود دارد و Dialogflow خودش سوالاتی را مطرح می کند.
- روی Knowledge (بتا) در منوی Dialogflow کلیک کنید تا به تمام اتصالات پایه دانش بازگردید.
- امکان تغییر نقاط قوت و ضعف پایگاه دانش وجود دارد. این زمانی منطقی به نظر می رسد که شما این ایده را داشته باشید که سوالات متداول شما برنده یا باخت از اهداف شماست. از آنجایی که ما قصد زیادی نداریم، بیایید پایگاه دانش خود را کمی قویتر کنیم. مقیاس را به - 0.2 تغییر دهید. پس از کشیدن نوار لغزنده، به طور خودکار مقدار را ذخیره می کند.
اکنون سؤالات متداول باید به عنوان "اضافی" برای افزودن به عوامل خود، در کنار جریان های قصد شما در نظر گرفته شوند. پرسشهای متداول پایگاه دانش نمیتواند مدل را آموزش دهد. بنابراین پرسیدن سؤالات به روشی کاملاً متفاوت، ممکن است مطابقت نداشته باشد زیرا از درک زبان طبیعی (مدل های یادگیری ماشینی) استفاده نمی کند. به همین دلیل است که گاهی اوقات ارزش آن را دارد که سؤالات متداول خود را به اهداف تبدیل کنید.
6. تحقق Webhook
یک تابع 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 Assistant استفاده میکند. از کتابخانه 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);
};
- روی پیوند Environment variables, networking, timeouts and more کلیک کنید
- حساب سرویس Dialogflow Integrations را انتخاب کنید.
(به طور پیشفرض از یک حساب GAE App Engine Service استفاده میکند، اما این حساب باید همان حساب سرویسی باشد که در Google Sheets شما در اولین مراحل این آموزش به اشتراک گذاشته شده است.)
- قبل از اینکه تابع ابر را مستقر کنیم. ما یک خط در کد خود را در تب index.js تغییر می دهیم. خط سوم کد:
const
ACCOUNTS_SHEET_ID = '1Yo_E8KONgSiUm00ZmTOqtjXCwULmc2JuI3sjxRyvrkE';
در یکی از اولین مراحل، این کلید را در Notepad یادداشت کردیم. پس این id را در کد خود کپی و پیست کنید.
- حالا ما آماده ایم. روی دکمه Create کلیک کنید. یک لحظه طول می کشد، زیرا در حال استقرار عملکرد بدون سرور شما است.
اجراها را در Dialogflow فعال کنید
- به Dialogflow برگردید
- در منوی اصلی روی Fulfillment کلیک کنید
- سوئیچ Webhook را فعال کنید.
- URL تابع ابری را که در کلیپ بورد کپی شده است وارد کنید.
به عنوان مثال: https://us-central1-leeboonstra-wiv-uhtefa.cloudfunctions.net/dialogflow
- روی ذخیره کلیک کنید.
- بیایید وبهوک را آزمایش کنیم تا ببینیم آیا کد کار میکند و جریانها را مستقیماً در شبیهساز Dialogflow آزمایش کنیم.
7. اقدامات در گوگل
Actions on Google یک پلت فرم توسعه برای دستیار Google است. این امکان توسعه "اقدامات" توسط شخص ثالث را فراهم می کند - برنامه های کاربردی برای دستیار Google که عملکرد گسترده ای را ارائه می دهند.
با درخواست از Google برای باز کردن یا صحبت کردن با یک برنامه، باید یک Google Action را فراخوانی کنید.
این عمل شما را باز میکند، صدا را تغییر میدهد و شما از محدوده «بومی» Google Assistant خارج میشوید. یعنی هر چیزی که از این نقطه از نماینده خود می خواهید باید توسط شما ایجاد شود. در حین اقدام خود، نمیتوانید ناگهان از دستیار Google اطلاعات آب و هوای Google را بخواهید، اگر این همان چیزی است که میخواهید. ابتدا باید محدوده اقدام فعلی خود (برنامه خود) را ترک کنید (بسته شوید).
آزمایش عملکرد خود در شبیه ساز دستیار Google
بیایید مکالمه زیر را آزمایش کنیم:
کاربر | دستیار گوگل |
"Hey Google، با برنامه آزمایشی من صحبت کن." | "در حال دریافت نسخه آزمایشی برنامه من." |
کاربر | نام شما-WIV |
- | "سلام، من آنا هستم، نماینده مجازی Women in Voice. شما می توانید اطلاعاتی در مورد ملاقات ها، Women in Voice یا نکات خواندنی از من بخواهید. چه چیزی را دوست دارید بدانید؟" |
آیا می توانم راهنمایی برای وبلاگ داشته باشم؟ | "آیا می خواهید در مورد چت بات ها، صدا یا هر دو بیشتر بخوانید؟" |
چت ربات ها | "بسیار خوب، این نکته روز است! مقاله Chatbots And The Challenge Of Invisible Affordances of Cobus Greyling. آیا نکته دیگری برای کتاب یا مقاله می خواهید؟ همچنین، می توانم در مورد جلسات یا کاری که انجام می دهیم به شما بیشتر بگویم. چگونه می توانم کمک کنم. ؟" |
جلسه بعدی کی است؟ | "جلسه بعدی 29 آوریل ساعت 6 بعد از ظهر در یک Hangout مجازی خواهد بود. موضوع کارگاه آنلاین خواهد بود: ایجاد Google Actions با Dialogflow!. می توانید از طریق خبرنامه ما ثبت نام کنید. آیا چیز دیگری وجود دارد که بتوانم به شما کمک کنم؟" |
آدرس وب سایت شما چیست؟ | "شما می توانید ما را در www.womeninvoice.com پیدا کنید. آیا کار دیگری می توانم برای شما انجام دهم؟" |
نه همین است، ممنون | "باشه! امیدوارم شما را در یکی از جلسات خود ببینیم!" |
- به شبیه ساز دستیار Google برگردید
باز کنید: https://console.actions.google.com
- روی نماد میکروفون کلیک کنید و موارد زیر را بپرسید:
-
Talk to my test app.
- حالا بیایید بپرسیم:
-
Can I have a tip for a blog?
این باید برگردد:
"آیا می خواهید در مورد چت بات ها، صدا یا هر دو بیشتر بخوانید؟"
-
Chatbots
"بسیار خوب، اینجا نکته روز است! چت ربات های مقاله و چالش توانایی های نامرئی Cobus Greyling.
آیا نکته دیگری برای کتاب یا مقاله می خواهید؟ همچنین، میتوانم درباره ملاقاتها یا کارهایی که انجام میدهیم بیشتر به شما بگویم. چگونه می توانم کمک کنم؟"
- بیایید نسخه دیگری از همان سوال را امتحان کنیم:
-
"Yes, I want to read more about Voice"
"بسیار خوب، این نکته روز است! کتاب طراحی رابط های کاربری صوتی: اصول تجربیات گفتگو... کتی پرل.
آیا نکته دیگری برای کتاب یا مقاله می خواهید؟ همچنین، میتوانم درباره ملاقاتها یا کارهایی که انجام میدهیم بیشتر به شما بگویم. چگونه می توانم کمک کنم؟"
توجه داشته باشید که قبلا از این عبارت آموزشی در Dialogflow استفاده نکرده اید. فقط با هدف درست مطابقت داشت.
همچنین توجه داشته باشید که سؤال بعدی دریافت نکردید، زیرا اطلاعات کافی برای ادامه Dialogflow ارائه کردید.
- Dialogflow را با عبارات زیر ادامه دهید:
-
What's the URL for your website
-
Bye
خطاها؟ سیاهههای مربوط را بررسی کنید!
هر بار که console.log()
در کد تابع Cloud خود استفاده می کنید، داده ها در گزارش های GCP شما (Stackdriver) نوشته می شود. می توانید با باز کردن Cloud Console > Logging به این گزارش ها دسترسی پیدا کنید.
در اولین بازشو، میتوانید Cloud Function > dialogflow را برای فیلتر کردن گزارشهای خود انتخاب کنید.
8. تبریک می گویم
شما اولین اقدام Google Assistant خود را با Dialogflow ایجاد کردید، آفرین!
همانطور که ممکن است متوجه شده باشید، عملکرد شما در حالت آزمایشی اجرا می شد که به حساب Google شما مرتبط است. اگر میخواهید با همان حساب در دستگاه Nest یا برنامه Google Assistant در تلفن iOS یا Android خود وارد شوید. می توانید عمل خود را نیز آزمایش کنید.
اکنون این یک نسخه نمایشی کارگاهی است. اما زمانی که در حال ساخت برنامههای کاربردی برای دستیار Google هستید، میتوانید Action خود را برای تأیید ارسال کنید. برای اطلاعات بیشتر این راهنما را بخوانید.
آنچه را پوشش داده ایم
- نحوه ایجاد ربات چت با Dialogflow v2
- نحوه ایجاد موجودیت های سفارشی با Dialogflow
- نحوه ایجاد مکالمه خطی با Dialogflow
- نحوه راهاندازی اجراهای وب هوک با Dialogflow و Google Cloud Functions
- چگونه برنامه خود را با Actions on Google به Google Assistant بیاورید
بعدش چی؟
از این آزمایشگاه کد لذت بردید؟ نگاهی به این آزمایشگاه های عالی بیندازید!
- با Dialogflow و Actions on Google یک اقدام راهنمای تلویزیون بسازید
- Build Actions برای Google Assistant با Dialogflow (سطح 1)
- Build Actions برای Google Assistant با Dialogflow (سطح 2)
- Build Actions برای Google Assistant با Dialogflow (سطح 3)
- درک تحقق با ادغام Dialogflow با Google Calendar
- Google Cloud Vision API را با Dialogflow ادغام کنید