1. ภาพรวม
Actions on Google คือแพลตฟอร์มสำหรับนักพัฒนาแอปที่ช่วยให้คุณสร้างซอฟต์แวร์เพื่อขยายฟังก์ชันการทำงานของ Google Assistant ซึ่งเป็นผู้ช่วยส่วนตัวเสมือนของ Google ในอุปกรณ์กว่า 1,000 ล้านเครื่อง รวมถึงลำโพงอัจฉริยะ โทรศัพท์ รถยนต์ ทีวี หูฟัง และอื่นๆ ผู้ใช้จะสนทนากับ Assistant เพื่อทำสิ่งต่างๆ เช่น ซื้อของชำหรือจองรถ (ดูรายการทั้งหมดที่ทำได้ในไดเรกทอรี Actions) ในฐานะนักพัฒนาแอป คุณสามารถใช้ Actions on Google เพื่อสร้างและจัดการประสบการณ์การสนทนาที่น่าพึงพอใจและมีประสิทธิภาพระหว่างผู้ใช้กับบริการของบุคคลที่สามได้อย่างง่ายดาย
นี่คือโมดูล Codelab ขั้นสูงที่มีไว้สำหรับผู้อ่านที่มีประสบการณ์ในการสร้าง Actions สำหรับ Google Assistant มาบ้างแล้ว หากคุณไม่มีประสบการณ์ในการพัฒนา Actions on Google มาก่อน เราขอแนะนำให้คุณทำความคุ้นเคยกับแพลตฟอร์มโดยทำตาม Codelab เบื้องต้น ( ระดับ 1, ระดับ 2 และระดับ 3) โมดูลขั้นสูงเหล่านี้จะแนะนำฟีเจอร์ต่างๆ ที่จะช่วยขยายฟังก์ชันการทำงานของ Action และเพิ่มจำนวนผู้ชม
วิธีสำคัญอย่างหนึ่งในการวัดความสำเร็จของแอ็กชันคือการมีส่วนร่วมของผู้ใช้ หรือประสิทธิภาพของแอ็กชันในการดึงผู้ใช้กลับมาหลังจากโต้ตอบครั้งแรก คุณสามารถใช้ฟีเจอร์ต่างๆ ใน Action เพื่อให้ผู้ใช้กลับมายังการสนทนาได้
Codelab นี้ครอบคลุมฟีเจอร์การมีส่วนร่วมของผู้ใช้และแนวทางปฏิบัติแนะนำสำหรับ Actions on Google

สิ่งที่คุณจะสร้าง
คุณจะปรับปรุงฟีเจอร์ที่มีอยู่แล้วได้โดยการเปิดใช้เพื่อให้ทำสิ่งต่อไปนี้ได้
- ส่งข้อมูลอัปเดตรายวันให้ผู้ใช้ ซึ่งผู้ใช้สามารถแตะเพื่อพูดคุยกับแอ็กชันของคุณได้
- ส่งข้อความ Push ให้ผู้ใช้ซึ่งลิงก์กลับไปยังแอ็กชันของคุณ
- สร้างลิงก์ที่นำผู้ใช้ไปยังแอ็กชันของคุณจากเว็บเบราว์เซอร์บนอุปกรณ์เคลื่อนที่
สิ่งที่คุณจะได้เรียนรู้
- การมีส่วนร่วมของผู้ใช้คืออะไร และเหตุใดจึงสำคัญต่อความสำเร็จของแอ็กชัน
- วิธีแก้ไขการกระทําเพื่อเพิ่มการมีส่วนร่วมของผู้ใช้
- ฟีเจอร์การมีส่วนร่วมของผู้ใช้ที่ควรใช้ใน Action ประเภทต่างๆ
- วิธีใช้ Actions API เพื่อส่งการแจ้งเตือนผ่าน Assistant
สิ่งที่คุณต้องมี
คุณต้องมีเครื่องมือต่อไปนี้
- IDE/โปรแกรมแก้ไขข้อความที่คุณเลือก เช่น WebStorm, Atom หรือ Sublime
- เทอร์มินัลเพื่อเรียกใช้คำสั่งเชลล์โดยติดตั้ง Node.js, npm และ git
- เว็บเบราว์เซอร์ เช่น Google Chrome
- สภาพแวดล้อมการพัฒนาในเครื่องที่มีอินเทอร์เฟซบรรทัดคำสั่งของ Firebase
- อุปกรณ์เคลื่อนที่ (Android หรือ iOS) ที่มี Assistant (คุณต้องลงชื่อเข้าใช้ Assistant ด้วยบัญชี Google เดียวกันกับที่จะใช้สร้างโปรเจ็กต์นี้)
นอกจากนี้ เราขอแนะนำอย่างยิ่งให้มีความคุ้นเคยกับ JavaScript (ES6) เพื่อทำความเข้าใจโค้ด Webhook แม้ว่าจะไม่จำเป็นก็ตาม
2. สร้างโปรเจ็กต์
ส่วนนี้จะแสดงวิธีเพิ่มฟีเจอร์การมีส่วนร่วมของผู้ใช้ลงใน Action ที่สร้างไว้ก่อนหน้านี้
ทำความเข้าใจตัวอย่าง
ตัวอย่างสำหรับโค้ดแล็บนี้คือ Action ง่ายๆ สำหรับยิมสมมติชื่อ "Action Gym" Action จะให้ข้อมูลเกี่ยวกับยิม ซึ่งรวมถึงรายการคลาสที่หมุนเวียนในแต่ละวัน การดำเนินการที่ให้ข้อมูลเช่นนี้เป็นตัวเลือกที่ดีสำหรับฟีเจอร์การมีส่วนร่วมของผู้ใช้ทั้งหมด เนื่องจากรายการชั้นเรียนที่หมุนเวียนจะให้ข้อมูลที่เป็นประโยชน์แตกต่างกันไปในแต่ละวัน
แผนภาพต่อไปนี้แสดงโฟลว์การสนทนาของตัวอย่าง Action Gym

คุณจะทำการแก้ไขเล็กน้อยในกล่องโต้ตอบเพื่อให้เหมาะกับฟีเจอร์การมีส่วนร่วมที่คุณเพิ่มมากขึ้น อย่างไรก็ตาม การออกแบบทั่วไปของการสนทนาจะไม่เปลี่ยนแปลงมากนัก
ดาวน์โหลดไฟล์พื้นฐาน
เรียกใช้คำสั่งต่อไปนี้เพื่อโคลนที่เก็บ GitHub สำหรับโค้ดแล็บ
git clone https://github.com/actions-on-google/user-engagement-codelab-nodejs
สร้างโปรเจ็กต์และ Agent
หากต้องการตั้งค่าโปรเจ็กต์ Actions และเอเจนต์ Dialogflow ให้ทําตามขั้นตอนต่อไปนี้
- เปิดคอนโซล Actions
- คลิกโครงการใหม่
- พิมพ์ชื่อโปรเจ็กต์ เช่น
engagement-codelab - คลิกสร้างโปรเจ็กต์
- แทนที่จะเลือกหมวดหมู่ ให้เลื่อนลงไปที่ส่วนตัวเลือกเพิ่มเติม แล้วคลิกการ์ดสนทนา
- คลิกสร้าง Action เพื่อขยายตัวเลือก แล้วเลือกเพิ่ม Action
- คลิกเพิ่มการดำเนินการแรก
- ในกล่องโต้ตอบสร้างการดำเนินการ ให้เลือกความตั้งใจที่กำหนดเอง แล้วคลิกสร้างเพื่อเปิดคอนโซล Dialogflow
- ในหน้าการสร้าง Agent ของคอนโซล Dialogflow ให้คลิกสร้าง
- คลิก
(ไอคอนรูปเฟือง) ในการนำทางด้านซ้าย - คลิกส่งออกและนำเข้า แล้วคลิกกู้คืนจาก Zip
- อัปโหลดไฟล์
agent.zipจากไดเรกทอรี/user-engagement-codelab-nodejs/start/ที่คุณดาวน์โหลดไว้ก่อนหน้านี้ - พิมพ์
RESTOREแล้วคลิกกู้คืน - คลิกเสร็จสิ้น
นำการดำเนินการตามคำสั่งซื้อไปใช้งานจริง
เมื่อโปรเจ็กต์ Actions และเอเจนต์ Dialogflow พร้อมแล้ว ให้ติดตั้งใช้งานไฟล์ index.js ในเครื่องโดยใช้ Firebase Functions CLI
จากไดเรกทอรี /user-engagement-codelab-nodejs/start/functions/ ของการโคลนไฟล์ฐาน ให้เรียกใช้คำสั่งต่อไปนี้
firebase use <PROJECT_ID>
npm install
firebase deploy
หลังจากผ่านไป 2-3 นาที คุณควรเห็นข้อความ "ทําให้ใช้งานได้เสร็จสมบูรณ์แล้ว" ซึ่งแสดงว่าคุณทําให้ Webhook ใช้งานได้ใน Firebase เรียบร้อยแล้ว
เรียก URL ของการทำให้ใช้งานได้
คุณต้องระบุ URL ของ Cloud Functions ให้ Dialogflow หากต้องการดึง URL นี้ ให้ทำตามขั้นตอนต่อไปนี้
- เปิด Firebase Console
- เลือกโปรเจ็กต์ Actions จากรายการตัวเลือก
- ไปที่พัฒนา > ฟังก์ชันในแถบนำทางด้านซ้าย หากได้รับแจ้งให้ "เลือกการตั้งค่าการแชร์ข้อมูล" คุณสามารถข้ามตัวเลือกนี้ได้โดยคลิกทำในภายหลัง
- ในแท็บแดชบอร์ด คุณควรเห็นรายการ "การดำเนินการตามคำสั่งซื้อ" พร้อม URL ในส่วนทริกเกอร์ บันทึก URL นี้ไว้ คุณจะต้องคัดลอก URL นี้ลงใน Dialogflow ในส่วนถัดไป

ตั้งค่า URL ของเว็บฮุคใน Dialogflow
ตอนนี้คุณต้องอัปเดตเอเจนต์ Dialogflow เพื่อใช้ Webhook สำหรับการดำเนินการตามคำสั่ง โดยทำตามขั้นตอนต่อไปนี้
- เปิดคอนโซล Dialogflow (คุณปิดคอนโซล Firebase ได้หากต้องการ)
- คลิกการจัดการคำสั่งซื้อในการนำทางด้านซ้าย
- เปิดใช้ Webhook
- วาง URL ที่คัดลอกจากแดชบอร์ด Firebase หากยังไม่ปรากฏ
- คลิกบันทึก
ยืนยันว่าตั้งค่าโปรเจ็กต์ถูกต้องแล้ว
ผู้ใช้ควรเรียกใช้ Action ของคุณเพื่อดูข้อมูลเกี่ยวกับ Action Gym ได้ ซึ่งรวมถึงการตอบกลับด้วยข้อความที่ฮาร์ดโค้ดพร้อมเวลาทำการ และการตอบกลับด้วยข้อความที่แสดงตารางเรียนสำหรับแต่ละวันในสัปดาห์
วิธีทดสอบ Action ในเครื่องมือจำลองการดำเนินการ
- ในการนําทางด้านซ้ายของคอนโซล Dialogflow ให้คลิกการผสานรวม > Google Assistant
- ตรวจสอบว่าได้เปิดใช้ดูตัวอย่างการเปลี่ยนแปลงโดยอัตโนมัติแล้ว และคลิกทดสอบเพื่ออัปเดตโปรเจ็กต์ Actions
- เครื่องมือจำลองการดำเนินการจะโหลดโปรเจ็กต์การดำเนินการของคุณ หากต้องการทดสอบ Action ให้พิมพ์
Talk to my test appลงในช่องอินพุต แล้วกด Enter - คุณควรเห็นคำตอบที่ต้อนรับคุณสู่ Action Gym ลองทำตามข้อความแจ้งเพื่อสนทนาต่อในขณะที่ตรวจสอบว่าการดำเนินการของคุณมีการตอบสนองต่ออินพุตแต่ละรายการ

3. เพิ่มการสมัครรับข้อมูลอัปเดตรายวัน
วิธีทั่วไปในการดึงดูดผู้ใช้คือการให้ข้อมูลแก่ผู้ใช้เมื่อข้อมูลนั้นมีประโยชน์มากที่สุด โดยทำได้ด้วยการให้ตัวเลือกแก่ผู้ใช้ในการสมัครรับข้อมูลอัปเดตรายวันสำหรับเจตนา ซึ่งจะส่งการแจ้งเตือนของ Assistant ให้ผู้ใช้โดยมีลิงก์ที่นำไปยังการดำเนินการตามเจตนานั้นโดยตรง
ในขั้นตอนนี้ คุณจะได้เรียนรู้เกี่ยวกับการสมัครรับข้อมูลการอัปเดตรายวันและเพิ่มลงในความตั้งใจรายการชั้นเรียนของ Action หลังจากทําตามวิธีการเหล่านี้ การสนทนาของ Action จะมีลักษณะเหมือนแผนภาพต่อไปนี้

วิธีนี้จะดึงดูดผู้ใช้ได้อย่างไร
ผู้ใช้สมาร์ทโฟนน่าจะคุ้นเคยกับข้อความ Push ซึ่งให้ข้อมูลและการอัปเดตเฉพาะแอป การสมัครรับข้อมูลอัปเดตรายวันเป็นวิธีง่ายๆ ในการเข้าถึงผู้ใช้บนอุปกรณ์เคลื่อนที่นอก Assistant โดยมีเงื่อนไขว่าความตั้งใจที่คุณส่งข้อมูลอัปเดตให้ต้องยังคงให้คุณค่าแก่ผู้ใช้ในแต่ละวัน
การอัปเดตรายวันอาจเป็นเครื่องมือที่มีประโยชน์ในการกระตุ้นการมีส่วนร่วม แต่ไม่จำเป็นต้องรวมไว้ในการดำเนินการทุกอย่าง โปรดพิจารณาเคล็ดลับต่อไปนี้เมื่อตัดสินใจว่าจะเพิ่มการสมัครรับข้อมูลอัปเดตรายวันลงใน Action หรือไม่
- ตรวจสอบว่าการอัปเดตรายวันจะทำให้ผู้ใช้เห็นข้อมูลที่แตกต่างกันและเป็นประโยชน์ทุกวัน หากการแตะอัปเดตรายวันทำให้ได้รับข้อความแจ้งเดียวกันทุกครั้ง ผู้ใช้ก็อาจยกเลิกการติดตามหลังจากผ่านไป 2-3 วัน
- ตรวจสอบว่ากล่องโต้ตอบมีความหมายสำหรับผู้ใช้ในกรณีที่ผู้ใช้ข้ามไปยังความตั้งใจในการอัปเดตรายวันโดยตรง ผู้ใช้ไม่จำเป็นต้องเริ่มการสนทนาตั้งแต่ต้น ดังนั้นคุณจึงไม่ควรคาดหวังว่าผู้ใช้จะมีบริบทมากนัก
- แสดงให้ผู้ใช้เห็นประโยชน์ของแอ็กชันก่อนที่จะแจ้งให้สมัครรับข้อมูลอัปเดตรายวัน ผู้ใช้ควรคิดว่า "ฉันอยากดูเนื้อหานี้ทุกวัน" เมื่อได้รับตัวเลือกให้ติดตาม
- อย่าทำให้ผู้ใช้เอือมระอาด้วยการแนะนำให้สมัครใช้บริการซ้ำๆ เสนอการสมัครรับข้อมูลอัปเดตรายวันทันทีหลังจากแสดงให้ผู้ใช้เห็นสิ่งที่พวกเขาจะสมัครรับข้อมูล และหลีกเลี่ยงการรบกวนผู้ใช้เกี่ยวกับเรื่องนี้ในที่อื่นๆ
- พูดคุยสั้นๆ หลังจากที่ระบบทริกเกอร์เจตนาในการอัปเดต การอัปเดตรายวันส่วนใหญ่ควรประกอบด้วยการตอบกลับเพียงครั้งเดียว จากนั้นปิดโดยไม่ต้องให้ผู้ใช้ป้อนข้อมูล
เปิดการอัปเดตรายวัน
คุณสามารถเพิ่มการสมัครรับข้อมูลอัปเดตรายวันไปยัง Intent ต้อนรับซึ่งจะนำผู้ใช้ไปที่จุดเริ่มต้นของการสนทนา หรือ Intent ที่เฉพาะเจาะจงมากขึ้นเพื่อ Deep Link ผู้ใช้ไปยังที่ใดที่หนึ่งในการสนทนา สำหรับโค้ดแล็บนี้ ความตั้งใจรายการชั้นเรียนมีความสมเหตุสมผลมากที่สุดเนื่องจากกล่องโต้ตอบจะเปลี่ยนแปลงทุกวัน และผู้ใช้อาจเห็นว่าการได้รับการแจ้งเตือนว่ามีชั้นเรียนใดบ้างนั้นมีประโยชน์
ทำตามขั้นตอนต่อไปนี้เพื่อเปิดใช้การอัปเดตรายวันสำหรับความตั้งใจของรายชื่อชั้นเรียน
- ในคอนโซล Actions ให้คลิกแท็บพัฒนา แล้วเลือกActions ในแถบนำทางด้านซ้าย
- คลิกรายชื่อชั้นเรียนในรายการการดำเนินการ
- ในส่วนการมีส่วนร่วมของผู้ใช้ ให้เปิดตัวเลือกคุณต้องการเสนอการอัปเดตรายวันแก่ผู้ใช้ไหม
- ตั้งชื่อเนื้อหาที่สื่อความหมายซึ่งอธิบายการอัปเดตรายวัน บริบทจะเป็น "จะให้ฉันส่ง [ชื่อ] ไปให้ทุกวันตอนกี่โมงดี " ดังนั้นโปรดตรวจสอบว่าชื่อของคุณสื่อความหมายและฟังดูถูกต้องเมื่อพูดออกมา สำหรับตัวอย่างนี้ ให้ตั้งค่าชื่อเนื้อหาเป็น
list of upcoming Action Gym classes - คลิกบันทึกที่ด้านบนของหน้า

ตั้งค่า Dialogflow
ทำตามขั้นตอนต่อไปนี้ในคอนโซล Dialogflow เพื่อสร้าง Intent สำหรับขั้นตอนการสมัครรับข้อมูลอัปเดตรายวัน
แจ้งให้ผู้ใช้สมัครรับข้อมูล
- ตั้งค่า Intent ใหม่เพื่อจัดการเมื่อผู้ใช้ขอสมัครรับข้อมูลอัปเดตรายวัน ในคอนโซล Dialogflow ให้คลิกปุ่ม + ข้างเจตนาในการนำทางด้านซ้ายเพื่อสร้างเจตนาใหม่
- ตั้งชื่อ Intent ใหม่นี้ว่า
Setup Updates - ในส่วนวลีการฝึก ให้เพิ่มนิพจน์ของผู้ใช้ต่อไปนี้
Send daily remindersReminderRemind meUpdatesUpcoming classes
- ในส่วนการดำเนินการตามคำสั่งซื้อ ให้สลับตัวเลือกเปิดใช้การเรียกใช้ Webhook สำหรับความตั้งใจนี้
- คลิกบันทึกที่ด้านบนของหน้า

จัดการการตัดสินใจของผู้ใช้
- ตั้งค่าความตั้งใจใหม่เพื่อจัดการการตอบกลับของผู้ใช้ต่อข้อความแจ้งการสมัครรับข้อมูลอัปเดตรายวัน คลิกปุ่ม + ข้าง Intent ในการนําทางด้านซ้ายเพื่อสร้าง Intent ใหม่
- ตั้งชื่อ Intent ใหม่นี้ว่า
Confirm Updates - ในส่วนเหตุการณ์ ให้เพิ่ม
actions_intent_REGISTER_UPDATEเหตุการณ์ Dialogflow นี้จะทริกเกอร์เมื่อผู้ใช้ทําตามขั้นตอนการสมัครรับข้อมูลอัปเดตรายวันเสร็จสิ้น ไม่ว่าผู้ใช้จะสมัครรับข้อมูลหรือไม่ก็ตาม - ในส่วนการดำเนินการตามคำสั่งซื้อ ให้สลับตัวเลือกเปิดใช้การเรียกใช้ Webhook สำหรับความตั้งใจนี้
- คลิกบันทึกที่ด้านบนของหน้า

ติดตั้งใช้งานการดำเนินการตามคำสั่งซื้อ
หากต้องการใช้การดำเนินการตามคำสั่งในเว็บฮุก ให้ทำตามขั้นตอนต่อไปนี้
โหลดทรัพยากร Dependency
ในไฟล์ index.js ให้อัปเดตฟังก์ชัน require() เพื่อเพิ่มแพ็กเกจ RegisterUpdate จากแพ็กเกจ actions-on-google เพื่อให้การนำเข้ามีลักษณะดังนี้
index.js
const {
dialogflow,
Suggestions,
RegisterUpdate,
} = require('actions-on-google');
อัปเดตชิปคำแนะนำ
ในไฟล์ index.js ให้เพิ่มรายการ DAILY ลงในรายการชื่อชิปคำแนะนำ เพื่อให้คำจำกัดความ Suggestion มีลักษณะดังนี้
index.js
// Suggestion chip titles
const Suggestion = {
HOURS: 'Ask about hours',
CLASSES: 'Learn about classes',
DAILY: 'Send daily reminders',
};
เพิ่มการดำเนินการตามคำสั่งสำหรับเจตนาใหม่
เมื่อผู้ใช้บอกว่าต้องการสมัครรับข้อมูล ให้เริ่มขั้นตอนการสมัครรับข้อมูลอัปเดตรายวันโดยเรียกใช้ RegisterUpdate Helper ด้วยเจตนาเป้าหมายของการอัปเดต (Class List) และประเภท (DAILY) หลังจากขั้นตอนการสมัครรับข้อมูลเสร็จสิ้นแล้ว Assistant จะทริกเกอร์เหตุการณ์ actions_intent_REGISTER_UPDATE ด้วยอาร์กิวเมนต์ status ซึ่งอธิบายว่าการสมัครรับข้อมูลสำเร็จหรือไม่ เสนอพรอมต์ติดตามผลแก่ผู้ใช้ซึ่งจะเปลี่ยนแปลงไปตามสถานะการสมัครใช้บริการ
ในไฟล์ index.js ให้เพิ่มโค้ดต่อไปนี้
index.js
// Start opt-in flow for daily updates
app.intent('Setup Updates', (conv) => {
conv.ask(new RegisterUpdate({
intent: 'Class List',
frequency: 'DAILY',
}));
});
// Confirm outcome of opt-in for daily updates
app.intent('Confirm Updates', (conv, params, registered) => {
if (registered && registered.status === 'OK') {
conv.ask(`Gotcha, I'll send you an update everyday with the ` +
'list of classes. Can I help you with anything else?');
} else {
conv.ask(` I won't send you daily reminders. Can I help you with anything else?`);
}
if (conv.screen) {
conv.ask(new Suggestions([Suggestion.HOURS, Suggestion.CLASSES]));
}
});
เสนอพรอมต์อื่นให้ผู้ใช้
คำตอบของรายชื่อชั้นเรียนจะเสนอการสมัครใช้บริการอัปเดตรายวันในตอนท้าย แต่จะทำให้เกิดปัญหา เนื่องจากระบบจะทริกเกอร์การตอบกลับเดียวกันนี้เมื่อผู้ใช้แตะการแจ้งเตือนการอัปเดตรายวัน ผู้ใช้จึงยังคงได้รับคำขอให้สมัครรับการอัปเดตรายวันแม้ว่าเพิ่งจะมาจากการแจ้งเตือนดังกล่าวก็ตาม คุณจะป้องกันไม่ให้ผู้ใช้คิดว่าต้องสมัครใช้บริการอีกครั้งได้อย่างไร
โชคดีที่อาร์กิวเมนต์ของออบเจ็กต์ conv มีข้อมูลเกี่ยวกับจุดที่ผู้ใช้เริ่มการสนทนา คุณสามารถตรวจสอบอาร์กิวเมนต์ conv เพื่อดูว่ามีส่วน UPDATES หรือไม่ ซึ่งจะระบุว่าผู้ใช้เริ่มการสนทนาจากการแจ้งเตือนการอัปเดตรายวัน และเปลี่ยนคำตอบตามนั้น นอกจากนี้ คุณยังใช้กิ่งก้านของบทสนทนานี้เพื่อปิดกล่องโต้ตอบได้ทันทีหลังจากระบุรายชื่อชั้นเรียน ซึ่งเป็นไปตามแนวทางปฏิบัติแนะนำของเราในการอัปเดตรายวันให้สั้น
ในไฟล์ index.js ให้แทนที่โค้ดต่อไปนี้
index.js
// Class list intent handler
app.intent('Class List', (conv, {day}) => {
if (!day) {
day = DAYS[new Date().getDay()];
}
const classes =
[...new Set(schedule.days[day].map((d) => `${d.name} at ${d.startTime}`))]
.join(', ');
const classesMessage =
`On ${day} we offer the following classes: ${classes}. ` +
`Can I help you with anything else?`;
conv.ask(classesMessage);
if (conv.screen) {
conv.ask(new Suggestions([Suggestion.HOURS]));
}
});
ด้วยสิ่งต่อไปนี้
index.js
// Class list intent handler
app.intent('Class List', (conv, {day}) => {
if (!day) {
day = DAYS[new Date().getDay()];
}
const classes =
[...new Set(schedule.days[day].map((d) => `${d.name} at ${d.startTime}`))]
.join(', ');
let classesMessage = `On ${day} we offer the following classes: ${classes}. `;
// If the user started the conversation from the context of a daily update,
// the conv's arguments will contain an 'UPDATES' section.
let engagement = conv.arguments.get('UPDATES');
// Check the conv arguments to tailor the conversation based on the context.
if (engagement) {
classesMessage += `Hope to see you soon at Action Gym!`;
conv.close(classesMessage);
} else {
classesMessage += `Would you like me to send you daily reminders of upcoming classes, or can I help you with anything else?`;
conv.ask(classesMessage);
if (conv.screen) {
conv.ask(new Suggestions([Suggestion.DAILY, Suggestion.HOURS]));
};
};
});
ทดสอบข้อมูลอัปเดตประจำวัน
ในเทอร์มินัล ให้เรียกใช้คำสั่งต่อไปนี้เพื่อติดตั้งใช้งานโค้ดเว็บฮุกที่อัปเดตแล้วไปยัง Firebase
firebase deploy
หากต้องการทดสอบการแจ้งให้พูดซ้ำที่กำหนดเองในเครื่องจำลองการดำเนินการ ให้ทำตามขั้นตอนต่อไปนี้
- ในคอนโซล Actions ให้ไปที่ทดสอบ
- พิมพ์
Talk to my test appลงในช่องป้อนข้อมูล แล้วกด Enter - พิมพ์
Learn about classesแล้วกด Enter ตอนนี้การตอบกลับของ Action ควรเสนอให้ส่งการช่วยเตือนรายวัน - พิมพ์
Send daily remindersแล้วกด Enter - พิมพ์เวลาที่ต้องการดูข้อมูลอัปเดต แล้วกด Enter หากต้องการทดสอบ ให้ลองตอบกลับโดยระบุเวลา 3-5 นาทีหลังจากเวลาปัจจุบัน

คุณควรได้รับการแจ้งเตือนจาก Assistant ในอุปกรณ์เคลื่อนที่ในช่วงเวลาที่คุณระบุไว้สำหรับการอัปเดต โปรดทราบว่าการแจ้งเตือนนี้อาจใช้เวลา 2-3 นาทีจึงจะปรากฏ แตะการแจ้งเตือน แล้วระบบจะ Deep Link ไปยังเจตนารายชื่อชั้นเรียนใน Assistant โดยตรง ซึ่งจะแสดงรายการชั้นเรียนที่กำลังจะเกิดขึ้น

4. เพิ่มข้อความ Push
อีกทางเลือกหนึ่งในการดึงดูดผู้ใช้ภายนอก Action คือการเรียกใช้ Actions API เพื่อส่งการแจ้งเตือนแบบพุชไปยังผู้ใช้ การแจ้งเตือนเหล่านี้จะไม่ได้รับการตั้งเวลาโดยอัตโนมัติจาก Assistant เหมือนกับการอัปเดตรายวัน คุณจึงส่งได้ตามต้องการ
ในขั้นตอนนี้ คุณจะได้เรียนรู้วิธีใช้การแจ้งเตือนแบบพุชใน Action โดยการเพิ่ม Intent Class Canceled ใหม่และส่งการแจ้งเตือนไปยังผู้ใช้เพื่อแจ้งให้ทราบเกี่ยวกับการยกเลิกคลาส นอกจากนี้ คุณยังต้องตั้งค่าคอมโพเนนต์ 3 อย่างต่อไปนี้ที่จำเป็นต่อการส่งการแจ้งเตือนด้วย
- บัญชี Actions API - คุณส่งการแจ้งเตือนไปยังผู้ใช้ได้โดยส่ง
POSTคำขอไปยัง API ดังนั้นคุณจะต้องตั้งค่าบัญชีบริการและข้อมูลเข้าสู่ระบบเพื่อเชื่อมต่อกับ API นี้ - เครื่องมือช่วยเรื่องสิทธิ์ - คุณต้องได้รับสิทธิ์จากผู้ใช้เพื่อเข้าถึงรหัสผู้ใช้ที่จำเป็นต่อการส่งการแจ้งเตือนแบบพุช ในตัวอย่างนี้ คุณจะใช้ฟังก์ชันไลบรารีไคลเอ็นต์เพื่อเรียกใช้เครื่องมือช่วยเหลือด้านสิทธิ์และขอรหัสนี้
- พื้นที่เก็บข้อมูล - หากต้องการส่งข้อความ Push ไปยังผู้ใช้ภายนอกการสนทนา คุณต้องจัดเก็บรหัสผู้ใช้ไว้ในที่ที่สามารถเรียกคืนได้ทุกเมื่อ ในตัวอย่างนี้ คุณจะตั้งค่าฐานข้อมูล Firestore เพื่อจัดเก็บข้อมูลสำหรับผู้ใช้แต่ละราย
หลังจากทำตามวิธีการเหล่านี้แล้ว คุณจะเพิ่มกล่องโต้ตอบต่อไปนี้ลงในการสนทนาของแอ็กชันได้

วิธีนี้จะดึงดูดผู้ใช้ได้อย่างไร
ผู้ใช้สมาร์ทโฟนน่าจะคุ้นเคยกับข้อความ Push ซึ่งให้ข้อมูลและการอัปเดตเฉพาะแอป ข้อความ Push เป็นวิธีที่ยืดหยุ่นในการเข้าถึงผู้ใช้ในอุปกรณ์เคลื่อนที่ภายนอก Assistant โดยมีเงื่อนไขว่าผู้ใช้มีเหตุผลที่ดีในการเปิดใช้ การอัปเดตรายวันทำให้ผู้ใช้ทราบอยู่แล้วว่าจะได้รับการแจ้งเตือนทุกวัน แต่ข้อความ Push ทำให้ผู้ใช้ไม่ทราบว่าตนเองเลือกรับการแจ้งเตือนที่ไม่บ่อยนักหรือจะถูกรบกวนด้วยการแจ้งเตือนหลายรายการต่อวัน
ข้อความ Push เป็นเครื่องมือสร้างการมีส่วนร่วมที่มีประโยชน์ แต่ไม่จำเป็นต้องรวมไว้ในทุกการดำเนินการ โปรดพิจารณาเคล็ดลับต่อไปนี้เมื่อตัดสินใจว่าจะเพิ่มการแจ้งเตือนแบบพุชลงในแอ็กชันหรือไม่
- วางแผนกำหนดเวลาตัวอย่างสำหรับข้อความ Push หากวางแผนที่จะส่งข้อความ Push เพียงวันละครั้ง ให้พิจารณาใช้การอัปเดตรายวันแทน
- ตรวจสอบว่าข้อความ Push จะให้ข้อมูลที่เป็นประโยชน์ทุกครั้งที่ได้รับ การแจ้งเตือนยังสามารถทำ Deep Link ไปยัง Intent ของ Action รายการใดรายการหนึ่งได้ด้วย ดังนั้นโปรดตรวจสอบว่า Intent มีประโยชน์และเกี่ยวข้อง
- ระบุอย่างชัดเจนเมื่อขอให้ผู้ใช้สมัครรับข้อความ Push ผู้ใช้ควรเข้าใจสิ่งที่คาดหวังได้จากการแจ้งเตือนแบบพุชแต่ละรายการ และควรทราบความถี่ในการส่งการแจ้งเตือน
เปิดใช้ Actions API
- เปิดคอนโซล Google Cloud แล้วเลือกชื่อโปรเจ็กต์ Actions ในเมนูแบบเลื่อนลง

- ในเมนูการนำทาง (☰) ให้ไปที่ API และบริการ > ไลบรารี
- ค้นหา Actions API แล้วคลิกเปิดใช้

สร้างบัญชีบริการ
Actions API ต้องมีการตรวจสอบสิทธิ์ ดังนั้นคุณจึงต้องสร้างบัญชีบริการเพื่อส่งคำขอ ทำตามขั้นตอนต่อไปนี้เพื่อสร้างและติดตั้งคีย์บัญชีบริการสำหรับ Actions API
- ในเมนูการนำทางของคอนโซล Google Cloud (☰) ให้ไปที่ API และบริการ > ข้อมูลเข้าสู่ระบบ
- คลิกสร้างข้อมูลเข้าสู่ระบบ > คีย์ของบัญชีบริการ
- ในเมนูแบบเลื่อนลงบัญชีบริการ ให้เลือกบัญชีบริการใหม่
- กรอกข้อมูลต่อไปนี้
- ชื่อบัญชีบริการ:
service-account - บทบาท: โปรเจ็กต์ > เจ้าของ
- รหัสบัญชีบริการ:
service-account(ตามด้วย @<project_id>.iam.gserviceaccount.com เสมอ) - ประเภทคีย์: JSON
- คลิกสร้าง
- ย้ายไฟล์ JSON ที่ดาวน์โหลดไปยังไดเรกทอรี /user-engagement-codelab/start/functions/ ของโปรเจ็กต์
- เปลี่ยนชื่อไฟล์ JSON เป็น
service-account.json

เปิดใช้ Firestore
หากต้องการส่งการแจ้งเตือนนอกการสนทนา คุณต้องมีวิธีจัดเก็บรหัสผู้ใช้ที่อ้างอิงได้จากโค้ดการแจ้งเตือน ในตัวอย่างนี้ เราใช้ฐานข้อมูล Firestore เพื่อจัดเก็บรหัสผู้ใช้ของผู้ใช้ที่สมัครใช้บริการ
ทำตามขั้นตอนต่อไปนี้เพื่อสร้างฐานข้อมูล Firestore สำหรับ Action
- ในคอนโซล Firebase ให้เลือกชื่อโปรเจ็กต์ Actions
- ในการนำทางด้านซ้าย ให้ไปที่พัฒนา > ฐานข้อมูล แล้วคลิกสร้างฐานข้อมูล
- เลือกเริ่มในโหมดทดสอบ
- คลิกเปิดใช้

ตั้งค่า Dialogflow
ทำตามขั้นตอนต่อไปนี้ในคอนโซล Dialogflow เพื่อสร้างขั้นตอนการเลือกรับข้อความพุช
แจ้งให้ผู้ใช้สมัครรับข้อมูล
- ตั้งค่า Intent ใหม่เพื่อจัดการเมื่อผู้ใช้ขอสมัครรับข้อความ Push สำหรับชั้นเรียนที่ยกเลิก ในคอนโซล Dialogflow ให้คลิกปุ่ม + ข้างเจตนาในการนำทางด้านซ้ายเพื่อสร้างเจตนาใหม่
- ตั้งชื่อ Intent ใหม่นี้ว่า
Setup Push Notifications - ในส่วนวลีการฝึก ให้เพิ่มนิพจน์ของผู้ใช้ต่อไปนี้
Subscribe to notificationsSend notificationNotify meSend class notificationsCancelled notifications
- ในส่วนการดำเนินการตามคำสั่งซื้อ ให้สลับตัวเลือกเปิดใช้การเรียกใช้ Webhook สำหรับความตั้งใจนี้
- คลิกบันทึกที่ด้านบนของหน้า

จัดการการตัดสินใจของผู้ใช้
- ตั้งค่า Intent ใหม่เพื่อจัดการการตอบกลับของผู้ใช้ต่อข้อความแจ้งการสมัครรับข้อความ Push คลิกปุ่ม + ข้าง Intent ในการนําทางด้านซ้ายเพื่อสร้าง Intent ใหม่
- ตั้งชื่อ Intent ใหม่นี้ว่า
Confirm Push Notifications - ในส่วนเหตุการณ์ ให้เพิ่ม
actions_intent_PERMISSIONเหตุการณ์ Dialogflow นี้จะทริกเกอร์เมื่อผู้ใช้ทําตามขั้นตอนการสมัครรับการแจ้งเตือนแบบพุชจนเสร็จ ไม่ว่าผู้ใช้จะสมัครรับข้อมูลหรือไม่ก็ตาม - ในส่วนการดำเนินการตามคำสั่งซื้อ ให้สลับตัวเลือกเปิดใช้การเรียกใช้ Webhook สำหรับความตั้งใจนี้
- คลิกบันทึกที่ด้านบนของหน้า

จัดการข้อความ Push
คุณสามารถลิงก์ข้อความ Push กับ Intent ที่เฉพาะเจาะจงได้ เพื่อให้ระบบทำ Deep Link ผู้ใช้ที่แตะข้อความ Push ไปยัง Intent นั้นๆ ใน Action ของคุณโดยตรง ในตัวอย่างนี้ ให้เพิ่ม Intent ใหม่สำหรับข้อความ Push ที่ให้รายละเอียดเกี่ยวกับชั้นเรียนที่ยกเลิก
ทำตามขั้นตอนต่อไปนี้เพื่อเพิ่ม Intent ที่จะทริกเกอร์เมื่อผู้ใช้แตะข้อความพุช
- ในคอนโซล Dialogflow ให้คลิกปุ่ม + ข้างเจตนาในการนำทางด้านซ้ายเพื่อสร้างเจตนาใหม่
- ตั้งชื่อ Intent ใหม่นี้ว่า
Class Canceled - ในส่วนวลีการฝึก ให้เพิ่ม
Cancelationsเป็นนิพจน์ของผู้ใช้ - ในส่วนการดำเนินการตามคำสั่งซื้อ ให้สลับตัวเลือกเปิดใช้การเรียกใช้ Webhook สำหรับความตั้งใจนี้
- คลิกบันทึกที่ด้านบนของหน้า

ส่งการแจ้งเตือนทดสอบกลางการสนทนา
ในเวอร์ชันที่ใช้งานจริง คุณควรมีสคริปต์แยกจากโค้ดการดำเนินการตามคำสั่งของ Action ซึ่งจะส่งการแจ้งเตือนแบบพุช สำหรับตัวอย่างนี้ ให้สร้าง Intent ที่คุณเรียกใช้เพื่อส่งข้อความ Push ขณะพูดกับ Action ได้ ความตั้งใจนี้มีไว้เพื่อการแก้ไขข้อบกพร่องเท่านั้น ในทางปฏิบัติแล้ว การแจ้งเตือนแบบพุชไม่ควรได้รับการจัดการโดยการดำเนินการตามคำสั่งของคุณ หรือทริกเกอร์เป็นส่วนหนึ่งของการสนทนาของ Action
ทำตามขั้นตอนต่อไปนี้เพื่อสร้าง Intent สำหรับทดสอบข้อความพุช
- เพื่อวัตถุประสงค์ในการทดสอบและแก้ไขข้อบกพร่อง ให้ตั้งค่า Intent ใหม่ที่อนุญาตให้คุณส่งข้อความ Push ไปยังผู้ใช้ที่สมัครรับข้อมูล ในคอนโซล Dialogflow ให้คลิกปุ่ม + ข้างเจตนาในการนำทางด้านซ้ายเพื่อสร้างเจตนาใหม่
- ตั้งชื่อ Intent ใหม่นี้ว่า
Test Notification - ในส่วนวลีการฝึก ให้เพิ่ม
Test notificationเป็นนิพจน์ของผู้ใช้ - ในส่วนการดำเนินการตามคำสั่งซื้อ ให้สลับตัวเลือกเปิดใช้การเรียกใช้ Webhook สำหรับความตั้งใจนี้
- คลิกบันทึกที่ด้านบนของหน้า

เปิดข้อความ Push
ทำตามขั้นตอนต่อไปนี้เพื่อเปิดใช้การแจ้งเตือนแบบพุชสำหรับ Intent Class Canceled
- ในคอนโซล Dialogflow ให้ไปที่การผสานรวมในแถบนำทาง
- ในการ์ด Google Assistant ให้คลิกการตั้งค่าการผสานรวม
- เพิ่ม Class Canceled เป็น Intent Implicit invocation ขั้นตอนนี้จำเป็นเพื่อให้ Dialogflow ทราบว่าผู้ใช้สามารถเริ่มการสนทนากับคุณได้ด้วยเจตนายกเลิกชั้นเรียน (โดยการแตะข้อความพุช)
- คลิกปิด

- ในคอนโซล Actions ให้คลิกแท็บพัฒนา แล้วเลือกActions ในแถบนำทางด้านซ้าย
- คลิกยกเลิกชั้นเรียนในรายการการดำเนินการ
- ในส่วนการมีส่วนร่วมของผู้ใช้ ให้เปิด/ปิดตัวเลือกคุณต้องการส่งข้อความ Push ไหม
- ตั้งชื่อเนื้อหาที่สื่อความหมายซึ่งอธิบายถึงข้อความพุช บริบทจะเป็น "ฉันจะส่งข้อความ Push ของ [ชื่อแอป] ได้ไหม" ดังนั้นโปรดตรวจสอบว่าชื่อของคุณสื่อความหมายและฟังดูถูกต้องเมื่อพูดออกมา สำหรับตัวอย่างนี้ ให้ตั้งค่าชื่อเนื้อหาเป็น
class cancelations - คลิกบันทึกที่ด้านบนของหน้า

ติดตั้งใช้งานการดำเนินการตามคำสั่งซื้อ
หากต้องการใช้การดำเนินการตามคำสั่งในเว็บฮุก ให้ทำตามขั้นตอนต่อไปนี้
โหลดทรัพยากร Dependency
ในไฟล์ index.js ให้อัปเดตฟังก์ชัน require() เพื่อเพิ่มแพ็กเกจ UpdatePermission จากแพ็กเกจ actions-on-google เพื่อให้การนำเข้ามีลักษณะดังนี้
index.js
const {
dialogflow,
Suggestions,
RegisterUpdate,
UpdatePermission,
} = require('actions-on-google');
อัปเดตชิปคำแนะนำ
ในไฟล์ index.js ให้เพิ่มรายการ NOTIFICATIONS ลงในรายการชื่อชิปคำแนะนำ เพื่อให้คำจำกัดความ Suggestion มีลักษณะดังนี้
index.js
// Suggestion chip titles
const Suggestion = {
HOURS: 'Ask about hours',
CLASSES: 'Learn about classes',
DAILY: 'Send daily reminders',
NOTIFICATIONS: 'Get notifications',
};
ตั้งค่าการนําเข้าใหม่
หากต้องการเชื่อมต่อกับฐานข้อมูล Firestore ให้เพิ่มแพ็กเกจ firebase-admin และเพิ่มค่าคงที่สำหรับฟิลด์ที่จัดเก็บไว้ในฐานข้อมูล นอกจากนี้ ให้นำเข้าแพ็กเกจ google-auth-library และ request เพื่อจัดการการตรวจสอบสิทธิ์และคำขอไปยัง Actions API
ในไฟล์ index.js ให้เพิ่มโค้ดต่อไปนี้ลงในการนำเข้า
index.js
// Firebase admin import
const admin = require('firebase-admin');
// Initialize Firestore
admin.initializeApp();
const db = admin.firestore();
// Firestore constants
const FirestoreNames = {
INTENT: 'intent',
USER_ID: 'userId',
USERS: 'users',
};
// Actions API authentication imports
const {auth} = require('google-auth-library');
const request = require('request');
เสนอให้ตั้งค่าการแจ้งเตือนการยกเลิกชั้นเรียน
ในไฟล์ index.js ให้แทนที่โค้ดต่อไปนี้
index.js
// Class list intent handler
app.intent('Class List', (conv, {day}) => {
if (!day) {
day = DAYS[new Date().getDay()];
}
const classes =
[...new Set(schedule.days[day].map((d) => `${d.name} at ${d.startTime}`))]
.join(', ');
let classesMessage = `On ${day} we offer the following classes: ${classes}. `;
// If the user started the conversation from the context of a daily update,
// the conv's arguments will contain an 'UPDATES' section.
let engagement = conv.arguments.get('UPDATES');
// Check the conv arguments to tailor the conversation based on the context.
if (engagement) {
classesMessage += `Hope to see you soon at Action Gym!`;
conv.close(classesMessage);
} else {
classesMessage += `Would you like me to send you daily reminders of upcoming classes, or can I help you with anything else?`;
conv.ask(classesMessage);
if (conv.screen) {
conv.ask(new Suggestions([Suggestion.DAILY, Suggestion.HOURS]));
};
};
});
ด้วยสิ่งต่อไปนี้
index.js
// Class list intent handler
app.intent('Class List', (conv, {day}) => {
if (!day) {
day = DAYS[new Date().getDay()];
}
const classes =
[...new Set(schedule.days[day].map((d) => `${d.name} at ${d.startTime}`))]
.join(', ');
let classesMessage = `On ${day} we offer the following classes: ${classes}. `;
// If the user started the conversation from the context of a daily update,
// the conv's arguments will contain an 'UPDATES' section.
let engagement = conv.arguments.get('UPDATES');
// Check the conv arguments to tailor the conversation based on the context.
if (engagement) {
classesMessage += `Hope to see you soon at Action Gym!`;
conv.close(classesMessage);
} else {
classesMessage += `Would you like to receive daily reminders of upcoming classes, subscribe to notifications about cancelations, or can I help you with anything else?`;
conv.ask(classesMessage);
if (conv.screen) {
conv.ask(new Suggestions([Suggestion.DAILY, Suggestion.NOTIFICATIONS,
Suggestion.HOURS]));
};
};
});
เพิ่มการดำเนินการตามคำสั่งสำหรับเจตนาใหม่
เมื่อผู้ใช้บอกว่าต้องการสมัครรับการแจ้งเตือนแบบพุช ให้เรียกใช้ตัวช่วย UpdatePermission เพื่อขอสิทธิ์จากผู้ใช้ หากสำเร็จ ระบบจะเพิ่มอาร์กิวเมนต์ PERMISSION ลงในอาร์กิวเมนต์ของออบเจ็กต์ conv ซึ่งคุณสามารถตรวจสอบเพื่อเปลี่ยนมุมมองการสนทนาได้
เมื่อได้รับสิทธิ์จากผู้ใช้แล้ว ให้ใช้รหัสผู้ใช้จากอาร์กิวเมนต์ของออบเจ็กต์ conv และบันทึกไว้ในฐานข้อมูล ต่อมาคุณจะส่งรหัสผู้ใช้นี้ไปยัง Actions API ซึ่งเป็นวิธีที่ Assistant ใช้ในการพิจารณาว่าใครจะได้รับการแจ้งเตือน
สุดท้าย ให้เพิ่มการดำเนินการตามคำสั่งสำหรับClass Canceledเจตนาที่ทริกเกอร์โดยการแตะข้อความ Push ในตัวอย่างนี้ คำตอบของคุณคือสตริงตัวยึดตำแหน่ง แต่ในเวอร์ชันที่พร้อมใช้งานจริงของ Action นี้ สคริปต์การแจ้งเตือนจะให้ข้อมูลแบบไดนามิกเพิ่มเติมเกี่ยวกับชั้นเรียนที่ถูกยกเลิก
ในไฟล์ index.js ให้เพิ่มโค้ดต่อไปนี้
index.js
// Call the User Information helper for permission to send push notifications
app.intent('Setup Push Notifications', (conv) => {
conv.ask('Update permission for setting up push notifications');
conv.ask(new UpdatePermission({intent: 'Class Canceled'}));
});
// Handle opt-in or rejection of push notifications
app.intent('Confirm Push Notifications', (conv) => {
if (conv.arguments.get('PERMISSION')) {
let userId = conv.arguments.get('UPDATES_USER_ID');
if (!userId) {
userId = conv.request.conversation.conversationId;
}
// Add the current conversation ID and the notification's
// target intent to the Firestore database.
return db.collection(FirestoreNames.USERS)
.add({
[FirestoreNames.INTENT]: 'Class Canceled',
[FirestoreNames.USER_ID]: userId,
})
.then(() => {
conv.ask(`Great, I'll notify you whenever there's a class cancelation. ` +
'Can I help you with anything else?');
});
} else {
conv.ask(`Okay, I won't send you notifications about class cancelations. ` +
'Can I help you with anything else?');
}
if (conv.screen) {
conv.ask(new Suggestions([Suggestion.CLASSES, Suggestion.HOURS]));
}
});
// Intent triggered by tapping the push notification
app.intent('Class Canceled', (conv) => {
conv.ask('Classname at classtime has been canceled.');
});
เพิ่มการแจ้งเตือนทดสอบ
หากต้องการส่งการแจ้งเตือนแบบพุชไปยังผู้ใช้ ให้ส่งPOSTคำขอไปยัง Actions API พร้อมด้วยรหัสผู้ใช้ ชื่อของการแจ้งเตือน และ Intent เป้าหมาย ในตัวอย่างนี้ การเรียกใช้ Intent การแจ้งเตือนทดสอบจะวนซ้ำในฐานข้อมูล Firestore และส่งข้อความ Push ไปยังผู้ใช้ทุกคนที่สมัครรับการแจ้งเตือน
โปรดทราบว่าในตัวอย่างนี้ คุณกำลังรวมโค้ดที่ส่งการแจ้งเตือนแบบพุชในการจัดการเว็บฮุกและทริกเกอร์โค้ดนั้นโดยการเรียกใช้ Intent การทดสอบในการสนทนา ใน Actions ที่คุณตั้งใจจะเผยแพร่ โค้ดการแจ้งเตือนแบบพุชควรอยู่ในสคริปต์ที่แยกจากการดำเนินการตามคำสั่ง
ในไฟล์ index.js ให้เพิ่มโค้ดต่อไปนี้
index.js
// Debug intent to trigger a test push notification
app.intent('Test Notification', (conv) => {
// Use the Actions API to send a Google Assistant push notification.
let client = auth.fromJSON(require('./service-account.json'));
client.scopes = ['https://www.googleapis.com/auth/actions.fulfillment.conversation'];
let notification = {
userNotification: {
title: 'Test Notification from Action Gym',
},
target: {},
};
client.authorize((err, tokens) => {
if (err) {
throw new Error(`Auth error: ${err}`);
}
// Iterate through Firestore and send push notifications to every user
// who's currently opted in to canceled class notifications.
db.collection(FirestoreNames.USERS)
.where(FirestoreNames.INTENT, '==', 'Class Canceled')
.get()
.then((querySnapshot) => {
querySnapshot.forEach((user) => {
notification.target = {
userId: user.get(FirestoreNames.USER_ID),
intent: user.get(FirestoreNames.INTENT),
};
request.post('https://actions.googleapis.com/v2/conversations:send', {
'auth': {
'bearer': tokens.access_token,
},
'json': true,
'body': {'customPushMessage': notification, 'isInSandbox': true},
}, (err, httpResponse, body) => {
if (err) {
throw new Error(`API request error: ${err}`);
}
console.log(`${httpResponse.statusCode}: ` +
`${httpResponse.statusMessage}`);
console.log(JSON.stringify(body));
});
});
})
.catch((error) => {
throw new Error(`Firestore query error: ${error}`);
});
});
conv.ask('A notification has been sent to all subscribed users.');
});
ทดสอบข้อความ Push
ในเทอร์มินัล ให้เรียกใช้คำสั่งต่อไปนี้เพื่อติดตั้งใช้งานโค้ดเว็บฮุกที่อัปเดตแล้วไปยัง Firebase
firebase deploy
หากต้องการทดสอบการแจ้งเตือนในโปรแกรมจำลอง Actions ให้ทำตามขั้นตอนต่อไปนี้
- ในคอนโซล Actions ให้ไปที่แท็บทดสอบ
- พิมพ์
Talk to my test appลงในช่องป้อนข้อมูล แล้วกด Enter - พิมพ์
Learn about classesแล้วกด Enter - พิมพ์
Get notificationsแล้วกด Enter - หากยังไม่ได้ให้สิทธิ์แก่ Action ในการส่งการแจ้งเตือนแบบพุช ให้พิมพ์
yesแล้วกด Enter - พิมพ์
yesแล้วกด Enter ตอนนี้บัญชี Google ของคุณควรสมัครรับการแจ้งเตือนแบบพุชสำหรับแอ็กชันนี้แล้ว

- พิมพ์
noแล้วกด Enter เพื่อออก - พิมพ์
Talk to my test appแล้วกด Enter เพื่อเริ่มการสนทนาใหม่ - พิมพ์
Test notificationแล้วกด Enter

ภายในไม่กี่นาที คุณจะได้รับข้อความ Push ของ Assistant ที่ระบุว่า "การแจ้งเตือนการทดสอบจาก Action Gym" บนอุปกรณ์เคลื่อนที่ การแตะการแจ้งเตือนนี้จะ Deep Link คุณไปยังเจตนายกเลิกชั้นเรียนของแอ็กชัน

5. สร้างลิงก์ Assistant
ที่ผ่านมา เราได้พูดถึงฟีเจอร์การมีส่วนร่วมที่คุณสามารถใช้เพื่อให้ผู้ใช้กลับมาที่ Action ของคุณได้ แต่ฟีเจอร์เหล่านั้นต้องมีผู้ใช้ที่ค้นพบและใช้ Action ของคุณก่อน
คุณสามารถสร้างลิงก์ Assistant ที่จะลิงก์ผู้ใช้ในอุปกรณ์เคลื่อนที่ไปยัง Action บน Assistant ของคุณโดยตรง เนื่องจากลิงก์ Assistant เป็นไฮเปอร์ลิงก์มาตรฐาน คุณจึงเพิ่มลิงก์นี้ไปยังเว็บไซต์หรือสื่อการตลาดบนเว็บ เช่น บล็อกหรือโพสต์โซเชียลมีเดียได้
ในขั้นตอนนี้ คุณจะได้เรียนรู้ว่าลิงก์ Assistant คืออะไร วิธีสร้างลิงก์สำหรับ Intent ต้อนรับของ Action และวิธีเพิ่มลิงก์ไปยังเว็บไซต์อย่างง่ายเพื่อทดสอบ
วิธีนี้จะดึงดูดผู้ใช้ได้อย่างไร
การดึงดูดผู้ใช้ให้มาที่ Action ของคุณเป็นครั้งแรกอาจเป็นเรื่องท้าทาย โดยเฉพาะอย่างยิ่งเมื่อผู้ใช้ต้องเรียกใช้ Action ของคุณใน Assistant อย่างชัดเจน ลิงก์ Assistant ช่วยลดอุปสรรคนี้ด้วยการให้ลิงก์โดยตรงไปยังแอ็กชันแก่ผู้ใช้ เมื่อผู้ใช้คลิกลิงก์ Assistant ในอุปกรณ์ที่เปิดใช้ Assistant ระบบจะนำผู้ใช้ไปยัง Action ของคุณโดยตรง เมื่อผู้ใช้เปิดลิงก์ในอุปกรณ์ที่ไม่ใช่อุปกรณ์เคลื่อนที่หรืออุปกรณ์อื่นๆ ที่ไม่รองรับ Assistant ระบบจะยังนำผู้ใช้ไปยังข้อมูลไดเรกทอรีการดำเนินการของคุณ (หากเผยแพร่แล้ว) เพื่อให้ลิงก์ยังคงทำการตลาดการดำเนินการของคุณต่อผู้ใช้เหล่านั้นได้
ลิงก์ Assistant เป็นเครื่องมือการมีส่วนร่วมที่มีประโยชน์ ดังนั้นคุณควรสร้างลิงก์หากวางแผนที่จะโฆษณา Action ผ่านเว็บไซต์หรือโซเชียลมีเดีย โปรดทราบเคล็ดลับต่อไปนี้ก่อนสร้างและเผยแพร่ลิงก์ Assistant
- ลิงก์ Assistant จะใช้ได้เมื่อเผยแพร่ Action แล้วเท่านั้น ขณะที่โปรเจ็กต์อยู่ในสถานะฉบับร่าง ลิงก์จะใช้ได้เฉพาะในอุปกรณ์ของคุณเอง ส่วนผู้ใช้รายอื่นๆ จะถูกนำไปยังหน้าที่แสดงข้อผิดพลาด 404 ในไดเรกทอรีการดำเนินการ
- คุณสามารถให้ผู้ใช้ทดสอบลิงก์ Assistant ก่อนเผยแพร่ได้โดยการเผยแพร่ Action ในสภาพแวดล้อมอัลฟ่าหรือเบต้า โปรดทราบว่าเฉพาะผู้ใช้ที่เข้าร่วมเวอร์ชันอัลฟ่าหรือเบต้าเท่านั้นที่จะทดสอบลิงก์ Assistant ได้
- ตรวจสอบว่าความตั้งใจปลายทางสำหรับลิงก์ Assistant สร้างความประทับใจแรกที่ดีแก่ผู้ใช้ใหม่ Intent ต้อนรับเป็นปลายทางเริ่มต้นสำหรับลิงก์ Assistant เนื่องจากควรทำหน้าที่แนะนำ Action ได้ดีอยู่แล้ว
เปิดลิงก์ Assistant
ทำตามขั้นตอนต่อไปนี้เพื่อสร้างลิงก์ Assistant สำหรับ Intent ต้อนรับ
- ในคอนโซล Actions ให้คลิกแท็บพัฒนา แล้วเลือกActions ในแถบนำทางด้านซ้าย
- คลิก actions.intent.MAIN ในรายการ Actions
- ในส่วนลิงก์ ให้เปิดตัวเลือกคุณต้องการเปิดใช้ URL สำหรับการดำเนินการนี้ไหม
- ตั้งชื่อลิงก์ที่สื่อความหมายซึ่งอธิบายการกระทําของคุณ ตั้งชื่อเป็นคู่กริยา-คำนามง่ายๆ ที่อธิบายสิ่งที่ผู้ใช้ทำได้ด้วยแอ็กชันของคุณ สำหรับตัวอย่างนี้ ให้ตั้งค่าชื่อลิงก์เป็น
learn about Action Gym - คัดลอกข้อมูลโค้ด HTML จากด้านล่างของหน้านี้และบันทึกไว้ใช้ในภายหลัง
- คลิกบันทึกที่ด้านบนของหน้า

ติดตั้งใช้งานเว็บไซต์ทดสอบ
หากต้องการทดสอบลิงก์ Assistant คุณสามารถใช้เครื่องมือ Firebase เพื่อติดตั้งใช้งานเว็บไซต์ทดสอบควบคู่ไปกับการดำเนินการตามคำสั่ง เราได้สร้างเว็บไซต์ทดสอบแบบง่ายๆ สำหรับตัวอย่างนี้ไว้แล้ว คุณเพียงแค่ต้องเพิ่มลิงก์ Assistant
ไปที่ไดเรกทอรี /user-engagement-codelab-nodejs/start/public/ ของการจัดการคำสั่งซื้อ แล้วเปิดไฟล์ index.html ในเครื่องมือแก้ไขข้อความ
ในไฟล์ index.html ให้วางข้อมูลโค้ด HTML ของลิงก์ Assistant ลงในองค์ประกอบ body ไฟล์ควรมีลักษณะเหมือนกับข้อมูลโค้ดด้านล่าง
index.html
<body>
<p>
<a href="https://assistant.google.com/services/invoke/uid/000000efb5f2fd97">🅖 Ask my test app to learn about Action Gym
</a>
</p>
</body>
ทดสอบลิงก์ Assistant
ในเทอร์มินัล ให้เรียกใช้คำสั่งต่อไปนี้เพื่อทำให้เว็บไซต์ทดสอบใช้งานได้ใน Firebase
firebase deploy
เมื่อคำสั่งการติดตั้งใช้งานทำงานเสร็จแล้ว ให้จดURL การโฮสต์ในเอาต์พุต

ไปที่ URL นี้ในเว็บเบราว์เซอร์ของอุปกรณ์เคลื่อนที่ แล้วคุณจะเห็นลิงก์ Assistant ในเว็บไซต์ทดสอบ การคลิกลิงก์นี้ในอุปกรณ์เคลื่อนที่ควรนำคุณไปยัง Intent ต้อนรับของ Action ใน Assistant

นอกจากนี้ คุณยังลองไปที่URL ของโฮสติ้งในเบราว์เซอร์บนเดสก์ท็อปได้ ซึ่งควรจะนำคุณไปยังหน้า 404 ในไดเรกทอรี Assistant เนื่องจากยังไม่ได้เผยแพร่ Action
6. ขั้นตอนถัดไป
ยินดีด้วย
ตอนนี้คุณได้ทราบถึงความสําคัญของการมีส่วนร่วมของผู้ใช้เมื่อพัฒนา Action, ฟีเจอร์การมีส่วนร่วมของผู้ใช้ที่มีอยู่ในแพลตฟอร์ม และวิธีเพิ่มฟีเจอร์แต่ละอย่างลงใน Action แล้ว
แหล่งข้อมูลการเรียนรู้เพิ่มเติม
ดูแหล่งข้อมูลต่อไปนี้เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับการมีส่วนร่วมของผู้ใช้สำหรับ Action ของคุณ
- การมีส่วนร่วมของผู้ใช้และเอกสารลิงก์ Assistant: เอกสารประกอบอย่างเป็นทางการของ Actions on Google เกี่ยวกับฟีเจอร์ที่กล่าวถึงในโค้ดแล็บนี้และการมีส่วนร่วมของผู้ใช้โดยทั่วไป
- ข้อมูลวิเคราะห์การรักษาผู้ใช้: เอกสารประกอบสำหรับฟีเจอร์ข้อมูลวิเคราะห์ในคอนโซล Actions ที่แสดงการรักษาผู้ใช้สำหรับ Action ที่เผยแพร่
- หลักเกณฑ์การออกแบบเชิงสนทนา: แนวทางปฏิบัติแนะนำและหลักเกณฑ์เกี่ยวกับวิธีออกแบบฟีเจอร์การมีส่วนร่วมของผู้ใช้
- ที่เก็บข้อมูล GitHub ของ Actions on Google: ตัวอย่างโค้ดและไลบรารี
- r/GoogleAssistantDev: ชุมชน Reddit อย่างเป็นทางการสำหรับนักพัฒนาซอฟต์แวร์ที่ทำงานร่วมกับ Assistant
ติดตามเราบน Twitter ที่ @ActionsOnGoogle เพื่อรับทราบประกาศล่าสุด และทวีตถึง #AoGDevs เพื่อแชร์สิ่งที่คุณสร้าง
แบบสำรวจความคิดเห็น
ก่อนดำเนินการต่อ โปรดกรอกแบบฟอร์มนี้เพื่อแจ้งให้เราทราบว่าเราทำได้ดีเพียงใด