1. บทนำ
ในห้องทดลองนี้ คุณจะได้สร้างการทำงานง่ายๆ โดยใช้ Dialogflow และเรียนรู้วิธีผสานรวมกับ Google Assistant
แบบฝึกหัดนี้จัดทำขึ้นเพื่อแสดงให้เห็นถึงประสบการณ์ที่นักพัฒนาซอฟต์แวร์ระบบคลาวด์พบได้บ่อย ดังนี้
- สร้าง Agent ของ Dialogflow v2
- สร้างเอนทิตี
- สร้าง Intent
- ตั้งค่าเว็บฮุคด้วยฟังก์ชันระบบคลาวด์ของ GCP
- ใช้ฐานความรู้เพื่อนำเข้าคำถามที่พบบ่อย
- ทดสอบแชทบ็อต
- เปิดใช้การผสานรวม Google Assistant
สิ่งที่คุณจะสร้าง
เราจะสร้างแอป Google Assistant สำหรับกลุ่มมีตติ้ง Women in Voice ถามได้เลยว่ามีตติ้งครั้งถัดไปจะมีขึ้นเมื่อใด บอกบทความและ เคล็ดลับหรือคำถามทั่วไปเกี่ยวกับกลุ่มมีตติ้ง |
สิ่งที่คุณจะได้เรียนรู้
- วิธีสร้างแชทบ็อตด้วย Dialogflow v2
- วิธีสร้างการสนทนาเชิงเส้นด้วย Dialogflow
- วิธีใช้เอนทิตี
- วิธีใช้ฐานความรู้
- วิธีตั้งค่าการดำเนินการให้สมบูรณ์ของเว็บฮุคด้วยฟังก์ชัน Dialogflow และ GCP
- วิธีนำแอปพลิเคชันของคุณมาสู่ Google Assistant ด้วย Actions on Google
ข้อกำหนดเบื้องต้น
- คุณต้องใช้อีเมลของ Google / Gmail เพื่อสร้าง Agent ของ Dialogflow
- เราจะให้เครดิตระบบคลาวด์ของ GCP แก่คุณสำหรับการใช้งาน Cloud Functions ของ GCP
- คุณจะต้องเข้าถึง Google ชีตสาธารณะนี้เพื่อรับข้อมูลตัวแทน
- เปิดในแท็บใหม่: https://docs.google.com/spreadsheets/d/1UWx3WYVCrqz0D4uJ_pO56WeqEPa9rQDG1cfc_H11kgY/edit?usp=sharing
- คุณไม่จำเป็นต้องมีความรู้พื้นฐานเกี่ยวกับ JavaScript แต่จะมีประโยชน์ในกรณีที่คุณต้องการเปลี่ยนโค้ดการดำเนินการของเว็บฮุค
2. การตั้งค่า
เปิดใช้กิจกรรมบนเว็บในเบราว์เซอร์
- ตรวจสอบให้แน่ใจว่าเว็บและ กิจกรรมบนแอปเปิดอยู่
สร้าง Agent ของ Dialogflow
- เปิดที่ https://console.dialogflow.com
- ในแถบด้านซ้ายใต้โลโก้ ให้เลือก "Create New Agent" ในกรณีที่มีตัวแทนอยู่แล้ว ให้คลิกเมนูแบบเลื่อนลงก่อน
- ระบุชื่อตัวแทน:
yourname-wiv
(ใช้ชื่อของคุณเอง) - เป็นภาษาเริ่มต้น ให้เลือก อังกฤษ - en.
- สำหรับเขตเวลาเริ่มต้น ให้เลือกเขตเวลาที่อยู่ใกล้คุณมากที่สุด
- อย่าเลือก Mega Agent (ฟีเจอร์นี้ช่วยให้คุณสามารถสร้าง Agent หลัก ซึ่งจัดการเป็นกลุ่มระหว่าง Agent "ย่อย" ได้ เรายังไม่ต้องใช้อีกในตอนนี้)
- คลิกสร้าง
กำหนดค่า Dialogflow
- คลิกไอคอนรูปเฟืองถัดจากชื่อโครงการในเมนูด้านซ้าย
- ป้อนคำอธิบาย Agent ต่อไปนี้ Women in Voice Agent
- เลื่อนลงไปที่ฟีเจอร์เบต้า และสลับสวิตช์เพื่อเปิดใช้ฟีเจอร์เบต้า
- เลื่อนลงไปที่การตั้งค่าบันทึก แล้วสลับสวิตช์ทั้ง 2 ตัวไปที่บันทึกการโต้ตอบของ Dialogflow และบันทึกการโต้ตอบทั้งหมดใน Google Cloud Stackdriver เราจะต้องใช้ข้อมูลดังกล่าวในภายหลังหากต้องการแก้ไขข้อบกพร่องของการดำเนินการ
- คลิกบันทึก
- คลิกเสร็จสิ้น
กำหนดค่า Actions on Google
- คลิกลิงก์ Google Assistant ในหัวข้อดูวิธีการทำงานใน Google Assistant ในแผงด้านขวามือ
ซึ่งจะเปิดขึ้นใน http://console.actions.google.com
หมายเหตุ: โปรดลงชื่อเข้าสู่ระบบด้วยบัญชี Google เดียวกันกับใน Dialogflow
เมื่อเพิ่งเริ่มใช้ Actions on Google คุณจะต้องกรอกข้อมูลในแบบฟอร์มนี้ก่อน
- ลองเปิดการดำเนินการในเครื่องมือจำลอง** โดยคลิกที่ชื่อโปรเจ็กต์**
- เลือก Develop ในแถบเมนู
ยกเลิกการเลือกตรงกับการตั้งค่าภาษาของผู้ใช้ เพื่อให้มั่นใจว่าโปรแกรมสังเคราะห์การอ่านออกเสียงข้อความจะไม่ถูกลบล้างโดยภาษาเริ่มต้นของ Assistant
- คลิกบันทึก
- เลือกทดสอบในแถบเมนู
- ตรวจสอบว่าเครื่องจำลองมีการตั้งค่าเป็นภาษาอังกฤษ และคลิกพูดกับแอปทดสอบของฉัน
การดำเนินการจะทักทายคุณด้วย Intent เริ่มต้นของ Dialogflow พื้นฐาน ซึ่งหมายความว่าการตั้งค่าการผสานรวมกับ Action on Google จะได้ผล
กำหนดค่า Google Cloud
สำหรับบทแนะนำนี้ คุณจะต้องมีบัญชี GCP ที่มีบัญชีสำหรับการเรียกเก็บเงิน หากยังไม่มี ให้สร้างขั้นตอนเหล่านี้
โดยปกติแล้วบัญชีสำหรับการเรียกเก็บเงินจะต้องมีวิธีการชำระเงิน เช่น บัตรเครดิต สำหรับเวิร์กช็อปนี้ เราจะใช้เครดิตของเวิร์กช็อปซึ่งสามารถข้ามขั้นตอนนี้ได้
- ไปที่ URL นี้และเข้าสู่ระบบ
- คลิก: คลิกที่นี่แล้วเข้าถึงเครดิตของคุณ
- คลิก ยอมรับและ ดำเนินการต่อ
คุณพร้อมแล้ว คุณได้สร้างบัญชีสำหรับการเรียกเก็บเงินด้วยเงิน 25 ดอลล่าร์ ซึ่งน่าจะมากกว่าเพียงพอที่จะใช้ Cloud Functions เป็นเวลานาน
เปิดใช้ Google Sheets API
หาก Agent ต้องการการตอบกลับ Intent แบบคงที่มากกว่า (เช่น เพื่อดึงข้อมูลจากบริการเว็บ ฐานข้อมูล หรือชีต) คุณต้องใช้ Fulfillment เพื่อเชื่อมต่อบริการบนเว็บกับ Agent ของคุณ การเชื่อมต่อบริการเว็บช่วยให้คุณดำเนินการตามนิพจน์ของผู้ใช้และส่งคำตอบแบบไดนามิกกลับไปให้ผู้ใช้ได้
ตัวอย่างเช่น หากผู้ใช้ต้องการรับเคล็ดลับสำหรับบล็อกหรือหนังสือ บริการบนเว็บของคุณสามารถตรวจสอบในฐานข้อมูลของคุณและตอบกลับผู้ใช้ด้วยบทความที่จะอ่าน
ในบทแนะนำนี้ เราจะไม่ใช้ฐานข้อมูล แต่เราจะใช้ Google ชีตแทน เมื่ออัปเดตชีตแล้ว ระบบจะอัปเดตการดำเนินการของ Google Assistant ด้วย เยี่ยมเลย
- เปิด Google ชีตนี้ในแท็บใหม่ของเบราว์เซอร์ หากยังไม่ได้ทำ
- https://docs.google.com/spreadsheets/d/1UWx3WYVCrqz0D4uJ_pO56WeqEPa9rQDG1cfc_H11kgY/edit#gid=1240329448
- สำคัญ: ทำสำเนาชีตนี้ คลิกไฟล์ > ทำสำเนา
- เมื่อคัดลอกชีตแล้ว ให้คลิกแชร์
- เราจะต้องให้สิทธิ์แก้ไขแก่บัญชีบริการ Dialogflow ในการดำเนินการนี้ ให้เปิด Dialogflow > การตั้งค่า (ฟันเฟือง)
- เลื่อนลงไปที่ 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 ในแถบค้นหา
- คลิกส่วนนี้ และคลิกปุ่มเปิดใช้ Google Sheets API ที่ด้านบน
3. เอนทิตีที่กำหนดเอง
เอนทิตีคือออบเจ็กต์ที่แอปหรืออุปกรณ์ของคุณดำเนินการ เปรียบเสมือนพารามิเตอร์ / ตัวแปร ในการดำเนินการ เราจะขอให้ดำเนินการต่อไปนี้
"ฉันอยากอ่านเคล็ดลับการอ่าน
แชทบ็อต
/ ฉันต้องการเคล็ดลับการอ่านเกี่ยวกับ
เสียง*"*
ไม่ว่าคุณจะพูดว่าแชทบ็อต เสียง หรือทั้งคู่ ระบบจะรวบรวมจากเอนทิตีที่กำหนดเองซึ่งจะใช้เป็นพารามิเตอร์ในคำขอของฉันที่ส่งไปยังบริการบนเว็บ
ดูข้อมูลเพิ่มเติมเกี่ยวกับเอนทิตีของ Dialogflow
การสร้างเอนทิตีของช่อง
- คลิกใน Dialogflow Console ที่รายการเมนู: เอนทิตี
- คลิกสร้างเอนทิตี
- ชื่อเอนทิตี:
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. Intent
Dialogflow ใช้ความตั้งใจเพื่อจัดหมวดหมู่ความตั้งใจของผู้ใช้ Intent มีวลีการฝึกอบรม ซึ่งเป็นตัวอย่างสิ่งที่ผู้ใช้อาจพูดกับตัวแทนของคุณ
เช่น ผู้ใช้ที่ต้องการทราบเวลาที่กิจกรรมถัดไปอาจถามว่า
"มีตติ้งครั้งถัดไปคือเมื่อไร"
เมื่อผู้ใช้เขียนหรือพูดบางอย่าง ซึ่งเรียกว่านิพจน์ของผู้ใช้ Dialogflow จะจับคู่นิพจน์ของผู้ใช้กับความตั้งใจที่ดีที่สุดใน Agent การจับคู่ความตั้งใจเรียกอีกอย่างว่าการแยกประเภทความตั้งใจ
ดูข้อมูลเพิ่มเติมเกี่ยวกับ Dialogflow Intents
การแก้ไขจุดประสงค์ในการต้อนรับเริ่มต้น
เมื่อคุณสร้าง Agent ของ Dialogflow ใหม่ ระบบจะสร้าง Intent เริ่มต้น 2 รายการโดยอัตโนมัติ จุดประสงค์ในการต้อนรับเริ่มต้นเป็นขั้นตอนแรกที่คุณไปถึงเมื่อเริ่มต้นการสนทนากับตัวแทน Intent สำรองเริ่มต้น คือขั้นตอนที่คุณจะได้รับเมื่อตัวแทนไม่เข้าใจคุณ หรือจับคู่ Intent กับสิ่งที่คุณพูดไม่ได้
- คลิกความตั้งใจ > จุดประสงค์เริ่มต้นในการต้อนรับ
ในกรณีของ Google Assistant ฟีเจอร์นี้จะเริ่มต้นโดยอัตโนมัติด้วย Intent การต้อนรับเริ่มต้น เนื่องจาก Dialogflow กำลังฟังกิจกรรมต้อนรับ อย่างไรก็ตาม คุณสามารถเรียกใช้ Intent ได้โดยพูดวลีการฝึกที่ป้อนมา 1 วลี
ข้อความต้อนรับสำหรับจุดประสงค์เริ่มต้นในการต้อนรับมีดังนี้
ผู้ใช้ | ตัวแทน |
"Ok Google คุยกับ <ชื่อของคุณ>-WIV" | "สวัสดี ฉันชื่อ Anna เป็นตัวแทนเสมือนจริงของ Women in Voice""คุณถามข้อมูลเกี่ยวกับการพบปะ, Women in Voice หรือเคล็ดลับการอ่านได้"เธออยากทราบเรื่องอะไร" |
- เลื่อนลงไปที่การตอบกลับ
- ล้างการตอบกลับข้อความทั้งหมด
- ในแท็บเริ่มต้น ให้สร้างคำตอบ 3 รายการต่อไปนี้ (คลิกเพิ่มการตอบกลับ > ข้อความหรือการตอบกลับ SSML ในแต่ละบรรทัดใหม่)
- สวัสดี ฉันชื่อ Anna เป็นตัวแทนเสมือนจริงของ Women in Voice
- คุณขอข้อมูลเกี่ยวกับมีตติ้ง, Women in Voice หรือเคล็ดลับการอ่านได้นะ
- คุณอยากทราบเรื่องใด
การกําหนดค่าควรคล้ายกับภาพหน้าจอนี้
- เอาต์พุตก่อนหน้าใช้สำหรับแชทบ็อต เราแก้ไขเอาต์พุตได้เล็กน้อย โดยเฉพาะสำหรับ Google Assistant เราจะใช้ SSML (ภาษามาร์กอัปการสังเคราะห์เสียง) เพื่อสร้างการหยุดชั่วคราวในประโยคของเรา คลิกแท็บ Google Assistant
- อย่าเปิดใช้ปุ่มสลับเริ่มต้น เนื่องจากเราจะไม่นำข้อความแชทบ็อตมาใช้ซ้ำ
- คลิกเพิ่มคำตอบ > คำตอบง่ายๆ
- เพิ่มข้อความเวอร์ชันต่อไปนี้
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 สำหรับ Actions on Google ได้ที่นี่
- มาทดสอบความตั้งใจนี้กัน ก่อนอื่น เราสามารถทดสอบในเครื่องจำลอง Dialogflow
พิมพ์: สวัสดี ระบบควรจะแสดงข้อความนี้
- คราวนี้ให้กลับไปที่คอนโซล Actions on Google
(คุณอาจต้องเก็บไว้ในแท็บอื่น)
คลิก "พูดกับแอปทดสอบของฉัน" แล้วฟังข้อความต้อนรับใหม่
การแก้ไข Intent สำรองเริ่มต้น
- คลิกความตั้งใจ > 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 Assistant ระบบจะใช้ค่าเริ่มต้น
สร้างคำสั่งหยุดการทำงาน
- คลิกรายการในเมนู 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
- เลื่อนลงไปที่การตอบกลับ เพิ่มคำตอบ
- เพิ่มตัวเลือกข้อความต่อไปนี้
Alright! Hopefully we will see you at one of our meetups!
No problem. See you at one of our meetups!
- สลับสวิตช์: ตั้งค่า Intent นี้เป็นสิ้นสุดการสนทนา เพื่อให้มั่นใจได้ว่าเมื่อจับคู่ความตั้งใจนี้แล้ว ระบบจะปิดการดำเนินการของ Google Assistant
- คลิกบันทึก
สร้างความตั้งใจในการพบปะ
ความตั้งใจของ Meetup จะประกอบด้วยการสนทนาส่วนนี้ ดังนี้
ผู้ใช้ | ตัวแทน |
"มีตติ้งครั้งถัดไปคือเมื่อไร" | "มีตติ้งครั้งถัดไปจะจัดขึ้นในวันที่ <date> เวลา <time> ใน <location> หัวข้อจะเป็น<topic> ส่วนลำโพงได้แก่ <speakers> คุณสามารถลงทะเบียนผ่านจดหมายข่าวของเรา" |
- คลิกรายการในเมนู Intent
- คลิกสร้างความตั้งใจ
- ป้อนชื่อ Intent:
Meetup Intent
(ตรวจสอบว่าคุณใช้ M ตัวใหญ่และตัว I ตัวพิมพ์ใหญ่ - หากคุณสะกด Intent ต่างกัน บริการแบ็กเอนด์จะไม่ทำงาน) - คลิกเพิ่มวลีการฝึก
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 นี้
- คลิกบันทึก
สร้างความตั้งใจในการใช้เคล็ดลับ
เคล็ดลับ Intent จะมีการสนทนาส่วนนี้อยู่ด้วย
ผู้ใช้ | ตัวแทน |
"ฉันอยากได้เคล็ดลับการอ่าน" | "คุณอยากอ่านเพิ่มเติมเกี่ยวกับแชทบ็อต เสียง หรือทั้งคู่ไหม" |
"เสียง" | "เอาละ นี่คือเคล็ดลับประจำวัน แท็ก <type> <title> จาก <author> คุณต้องการเคล็ดลับเกี่ยวกับหนังสือหรือบทความอื่นไหม นอกจากนี้ ฉันยังให้ข้อมูลเพิ่มเติมเกี่ยวกับมีตติ้งหรือสิ่งที่เราทำได้ด้วย ฉันจะช่วยอะไรได้บ้าง" |
- คลิกที่รายการในเมนู Intent อีกครั้ง
- คลิกสร้างความตั้งใจ
- ป้อนชื่อ Intent:
Tip Intent
(ใช้ตัวอักษร L พิมพ์ใหญ่และตัว I พิมพ์ใหญ่ - หากคุณสะกด Intent ต่างกัน บริการแบ็กเอนด์จะไม่ทำงาน) - คลิกเพิ่มวลีการฝึกอบรม แล้วเพิ่มข้อมูลต่อไปนี้
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
- เลื่อนลงไปที่การทำงานและพารามิเตอร์
- ทำเครื่องหมายเทคโนโลยีว่าต้องการ
คลิก: กำหนด Prompt และป้อนดังนี้
Do you want to read more about Chatbots, Voice or Both?
- คลิกการดำเนินการตามคำสั่งซื้อ > เปิดใช้การดำเนินการตามคำสั่งซื้อ
ครั้งนี้เราไม่ได้ฮาร์ดโค้ดคำตอบ คำตอบจะมาจากฟังก์ชันระบบคลาวด์ จากนั้นเปิดสวิตช์เปิดใช้การเรียกเว็บฮุคสำหรับ Intent นี้
คลิกการดำเนินการตามคำสั่งซื้อ > เปิดใช้การดำเนินการตามคำสั่งซื้อ
- เลื่อนสวิตช์เปิดใช้การเรียกเว็บฮุคสำหรับ Intent นี้
- คลิกบันทึก
5. เครื่องมือเชื่อมต่อความรู้
เครื่องมือเชื่อมต่อความรู้จะช่วยส่งเสริม Intent ที่กำหนด แล้วแยกวิเคราะห์เอกสารความรู้เพื่อค้นหาคำตอบอัตโนมัติ (ตัวอย่างเช่น คำถามที่พบบ่อยหรือบทความจากไฟล์ CSV, เว็บไซต์ออนไลน์ หรือแม้กระทั่งไฟล์ PDF!) หากต้องการกำหนดค่า ให้กำหนดฐานความรู้อย่างน้อย 1 รายการ ซึ่งเป็นคอลเล็กชันของเอกสารความรู้
อ่านเพิ่มเติมเกี่ยวกับเครื่องมือเชื่อมต่อความรู้
มาลองกันเลย
- เลือกแท็ก en เพื่อเลือกภาษาอังกฤษในเมนูด้านบน
- เลือกความรู้ (เบต้า) ในเมนู
- คลิกปุ่มสีน้ำเงินด้านขวาสร้างฐานความรู้
- พิมพ์เป็นชื่อฐานความรู้ Women in Voice แล้วกดบันทึก
- คลิกลิงก์สร้างลิงก์แรก
- หน้าต่างจะเปิดขึ้น
ใช้การกำหนดค่าต่อไปนี้
ชื่อเอกสาร: ชีตคำถามที่พบบ่อยของผู้หญิงใน Voice
ประเภทความรู้: คำถามที่พบบ่อย
ประเภท Mime: CSV
- เราต้องการข้อมูลจากชีตนี้ ตรวจสอบว่าแผ่นข้อมูลเปิดอยู่ และเลือกแท็บคำถามที่พบบ่อย
- เลือก ไฟล์ > ดาวน์โหลด > CSV
- กลับไปที่ Dialogflow ให้คลิก Upload File from Computer แล้วเลือกไฟล์ CSV ที่คุณดาวน์โหลดมา คลิกสร้าง
มีการสร้างฐานความรู้ขึ้น
- คลิกเพิ่มคำตอบ
สร้างคำตอบต่อไปนี้แล้วกดบันทึก
$Knowledge.Answer[1]
- คลิกดูรายละเอียด
การดำเนินการนี้จะแสดงคำถามที่พบบ่อยทั้งหมดที่คุณใช้ใน Dialogflow
ง่ายนิดเดียว
โปรดทราบว่าคุณยังสามารถนำไปยังเว็บไซต์ HTML ออนไลน์ที่มีคำถามที่พบบ่อยเพื่อนำเข้าคำถามที่พบบ่อยไปยังตัวแทนของคุณ หรือแม้กระทั่งอัปโหลดไฟล์ PDF ที่มีบล็อกข้อความ แล้ว Dialogflow จะตั้งคำถามเอง
- คลิกความรู้ (เบต้า) ในเมนู Dialogflow เพื่อกลับไปที่เครื่องมือเชื่อมต่อฐานความรู้ทั้งหมด
- และสามารถเปลี่ยนจุดแข็งและจุดอ่อนของฐานความรู้ได้ ซึ่งเหมาะสมในกรณีที่คุณทราบว่าคำถามที่พบบ่อยจะชนะหรือแพ้โดยเจตนาของคุณเอง เนื่องจากเรามีความตั้งใจไม่มากนัก เรามาสร้างฐานความรู้ให้แข็งแกร่งยิ่งขึ้นกัน เปลี่ยนสเกลเป็น -0.2 หลังจากลากแถบเลื่อนแล้ว ระบบจะบันทึกค่าดังกล่าวโดยอัตโนมัติ
ขณะนี้คำถามที่พบบ่อยควรถูกมองว่าเป็น "ข้อมูลเพิ่มเติม" เพื่อเพิ่มไปยังตัวแทนของคุณข้างโฟลว์ Intent คำถามที่พบบ่อยเกี่ยวกับฐานความรู้ฝึกโมเดลไม่ได้ ดังนั้นการถามคำถามด้วยวิธีที่ต่างไปจากเดิมอย่างสิ้นเชิง อาจจะไม่ได้รับคำตอบที่ตรงกัน เนื่องจากไม่ได้ใช้การทำความเข้าใจภาษาธรรมชาติ (โมเดลแมชชีนเลิร์นนิง) ด้วยเหตุนี้ บางครั้งจึงคุ้มค่าที่จะเปลี่ยนคำถามที่พบบ่อยไปเป็นความตั้งใจ
6. การดำเนินการตามเว็บฮุค
สร้างฟังก์ชัน Google Cloud
- ไปที่ http://console.cloud.google.com ในแท็บเบราว์เซอร์อื่น
- เลือก Cloud Functions ในเมนูด้านซ้าย
- คลิกสร้างฟังก์ชัน
- ระบุการกำหนดค่าต่อไปนี้
- ชื่อ:
dialogflow
- หน่วยความจำที่จัดสรร: 256MiB
- ทริกเกอร์: HTTP
- คัดลอก URL ไปยังคลิปบอร์ด
- เลือกเครื่องมือแก้ไขในบรรทัด
- รันไทม์: NodeJS 8
- ฟังก์ชันที่จะดำเนินการ:
dialogflow
- ตรวจสอบว่าได้เลือกช่องทำเครื่องหมายการตรวจสอบสิทธิ์นี้แล้ว
- เนื้อหาสำหรับ package.json มีดังนี้ คัดลอกและวางแท็กนี้ลงในแท็บแพ็กเกจ.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 เพื่อจำแนก Intent ของ 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 Integrations
(โดยค่าเริ่มต้น ระบบจะใช้บัญชีบริการ GAE App Engine แต่บัญชีนี้ควรเป็นบัญชีบริการเดียวกับบัญชีที่แชร์ภายใน Google ชีตในขั้นตอนแรกของบทแนะนำนี้)
- ก่อนที่เราจะทำให้ฟังก์ชันระบบคลาวด์ใช้งานได้ เราจะเปลี่ยน 1 บรรทัดในโค้ดของเราในแท็บ index.js โค้ดบรรทัดที่ 3:
const
ACCOUNTS_SHEET_ID = '1Yo_E8KONgSiUm00ZmTOqtjXCwULmc2JuI3sjxRyvrkE';
ในขั้นตอนแรกๆ เราเขียนปุ่มนี้ลงใน Notepad ดังนั้นให้คัดลอกและวางรหัสนี้ในโค้ดของคุณ
- ทีนี้เราก็พร้อมแล้ว คลิกที่ปุ่มสร้าง อาจใช้เวลาสักครู่ เนื่องจากกำลังทำให้ฟังก์ชันแบบ Serverless ใช้งานได้
เปิดใช้การดำเนินการตามคำสั่งซื้อใน Dialogflow
- เปลี่ยนกลับไปใช้ Dialogflow
- คลิกการดำเนินการคำสั่งซื้อในเมนูหลัก
- เปิดใช้สวิตช์เว็บฮุค
- ป้อน URL ของฟังก์ชันระบบคลาวด์ที่คัดลอกไปยังคลิปบอร์ด
เช่น https://us-central1-leeboonstra-wiv-uhtefa.cloudfunctions.net/dialogflow
- คลิกบันทึก
- ลองทดสอบเว็บฮุคเพื่อดูว่าโค้ดใช้งานได้ไหม แล้วทดสอบขั้นตอนโดยตรงในเครื่องมือจำลอง Dialogflow
7. Actions on Google
Actions on Google เป็นแพลตฟอร์มการพัฒนาสำหรับ Google Assistant ช่วยให้พัฒนา "การดำเนินการ" ของบุคคลที่สามได้ ซึ่งเป็นแอปเพล็ตสำหรับ Google Assistant ที่มีฟังก์ชันการทำงานเพิ่มขึ้น
คุณจะต้องเรียกใช้ Google Action ด้วยการขอให้ Google เปิดหรือพูดคุยกับแอป
การดำเนินการนี้จะเปิดการดำเนินการ เปลี่ยนเสียงพูด และคุณจะออกจาก "เนทีฟ" ขอบเขตของ Google Assistant ซึ่งหมายความว่าคุณจะต้องสร้างทุกสิ่งที่ถามตัวแทนจากจุดนี้เอง ในการทำงานของคุณเอง คุณจะไม่สามารถขอข้อมูลสภาพอากาศจาก Google Assistant ได้ในทันทีหากต้องการ คุณควรปิด (ปิด) ขอบเขตของการดำเนินการปัจจุบัน (แอป) ไว้ก่อน
การทดสอบการทำงานในเครื่องมือจำลองของ Google Assistant
ลองทดสอบการสนทนาต่อไปนี้
ผู้ใช้ | Google Assistant |
"Ok Google พูดกับแอปทดสอบของฉัน" | "การรับแอปเวอร์ชันทดสอบของฉัน"" |
ผู้ใช้ | ชื่อของคุณ WIV |
- | "สวัสดี ฉันชื่อ Anna เป็นตัวแทนเสมือนจริงของ Women in Voice คุณขอข้อมูลเกี่ยวกับมีตติ้ง, Women in Voice หรือเคล็ดลับการอ่านได้นะ อยากรู้เรื่องอะไรล่ะ" |
ฉันมีเคล็ดลับสำหรับบล็อกไหม | "คุณอยากอ่านเพิ่มเติมเกี่ยวกับแชทบ็อต เสียง หรือทั้งคู่ไหม" |
แชทบ็อต | "เอาละ นี่คือเคล็ดลับประจำวัน บทความเกี่ยวกับแชทบ็อตและความท้าทายของอคติที่มองไม่เห็นของ Cobus Greyling คุณต้องการคำแนะนำหนังสือหรือบทความอื่นอีกไหม นอกจากนี้ ฉันยังให้ข้อมูลเพิ่มเติมเกี่ยวกับมีตติ้งหรือสิ่งที่เราทำได้ด้วย ฉันจะช่วยอะไรได้บ้าง" |
มีตติ้งครั้งถัดไปเมื่อไร | "มีตติ้งครั้งถัดไปจะจัดขึ้นในวันที่ 29 เมษายน เวลา 18:00 น. ใน Hangouts ออนไลน์ หัวข้อจะเป็นเวิร์กช็อปออนไลน์: สร้าง Google Actions กับ Dialogflow โดยลงทะเบียนผ่านจดหมายข่าวของเรา มีอะไรให้เราช่วยอีกไหม" |
URL เว็บไซต์ของคุณคืออะไร | "คุณสามารถพบเราได้ที่ www. Womeninvoice.com มีอะไรที่เราจะช่วยคุณได้อีกไหม" |
ไม่ใช่ ขอบคุณ | "ต่อไป และหวังว่าจะได้พบคุณในงานพบปะสังสรรค์ของเรา" |
- เปลี่ยนกลับไปใช้เครื่องจำลอง Google Assistant
เปิด: 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"
"เอาละ นี่คือเคล็ดลับประจำวัน The Book Designing Voice User Interfaces: Principles of Conversation Experience ... ของ Cathy Pearl
คุณต้องการเคล็ดลับเกี่ยวกับหนังสือหรือบทความอีกไหม นอกจากนี้ ฉันยังให้ข้อมูลเพิ่มเติมเกี่ยวกับมีตติ้งหรือสิ่งที่เราทำได้ด้วย ฉันจะช่วยอะไรได้บ้าง"
โปรดสังเกตว่าคุณไม่เคยใช้วลีการฝึกอบรมนี้ใน Dialogflow มาก่อน เพียงแต่ตรงกับความตั้งใจที่ถูกต้อง
และโปรดสังเกตว่าคุณไม่ได้รับคำถามติดตามผล เนื่องจากคุณได้ให้ข้อมูลเพียงพอให้ Dialogflow ดำเนินการต่อ
- ดำเนินการต่อใน Dialogflow โดยใช้วลีต่อไปนี้
What's the URL for your website
Bye
หากพบข้อผิดพลาด ตรวจสอบบันทึก
ทุกครั้งที่คุณใช้ console.log()
ในโค้ด Cloud Function ระบบจะเขียนข้อมูลลงในบันทึก GCP (Stackdriver) คุณจะเข้าถึงบันทึกเหล่านี้ได้โดยเปิด Cloud Console > การบันทึก
ในเมนูแบบเลื่อนลงรายการแรก คุณสามารถเลือก Cloud Function > Dialogflow เพื่อกรองบันทึก
8. ขอแสดงความยินดี
คุณสร้างการดำเนินการแรกของ Google Assistant ด้วย Dialogflow แล้ว เยี่ยมมาก
คุณอาจเห็นว่าการดำเนินการของคุณทำงานในโหมดทดสอบซึ่งเชื่อมโยงกับบัญชี Google ของคุณ หากคุณเข้าสู่ระบบในอุปกรณ์ Nest หรือแอป Google Assistant ในโทรศัพท์ iOS หรือ Android ด้วยบัญชีเดียวกัน คุณสามารถทดสอบการดำเนินการของคุณได้เช่นกัน
นี่คือการสาธิตสำหรับเวิร์กช็อป แต่เมื่อสร้างแอปพลิเคชันสำหรับ Google Assistant จริง คุณจะส่งการดำเนินการเพื่อขออนุมัติได้ อ่านคู่มือนี้เพื่อดูข้อมูลเพิ่มเติม
หัวข้อที่ครอบคลุม
- วิธีสร้างแชทบ็อตด้วย Dialogflow v2
- วิธีสร้างเอนทิตีที่กำหนดเองด้วย Dialogflow
- วิธีสร้างการสนทนาเชิงเส้นด้วย Dialogflow
- วิธีตั้งค่าการตอบสนองเว็บฮุคด้วย Dialogflow และ Google Cloud Functions
- วิธีนำแอปพลิเคชันของคุณมาสู่ Google Assistant ด้วย Actions on Google
สิ่งที่ต้องทำต่อไป
ชอบ Code Lab นี้ไหม ลองดูห้องทดลองที่ยอดเยี่ยมเหล่านี้สิ
- สร้างการดำเนินการสำหรับทีวีไกด์ด้วย Dialogflow และ Actions on Google
- สร้างการทำงานสำหรับ Google Assistant ด้วย Dialogflow (ระดับ 1)
- สร้างการทำงานสำหรับ Google Assistant ด้วย Dialogflow (ระดับ 2)
- สร้างการทำงานสำหรับ Google Assistant ด้วย Dialogflow (ระดับ 3)
- ทำความเข้าใจการดำเนินการตามคำสั่งซื้อโดยการผสานรวม Dialogflow กับ Google ปฏิทิน
- ผสานรวม Google Cloud Vision API กับ Dialogflow