เกี่ยวกับ Codelab นี้
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