1. ภาพรวม
Actions on Google เป็นแพลตฟอร์มสำหรับนักพัฒนาซอฟต์แวร์ที่ให้คุณสร้างซอฟต์แวร์เพื่อขยายฟังก์ชันการทํางานของ Google Assistant ซึ่งเป็นผู้ช่วยส่วนตัวเสมือนของ Google ในอุปกรณ์กว่า 1 พันล้านเครื่อง ซึ่งรวมถึงลําโพงอัจฉริยะ โทรศัพท์ รถยนต์ ทีวี หูฟัง และอื่นๆ อีกมากมาย ผู้ใช้มีส่วนร่วมกับ Assistant ในการสนทนาเพื่อทำสิ่งต่างๆ เช่น ซื้อของชำหรือจองรถโดยสาร (ดูรายการสิ่งที่เป็นไปได้ทั้งหมดได้ที่ไดเรกทอรีการดำเนินการ) ในฐานะนักพัฒนาแอป คุณสามารถใช้ Actions on Google เพื่อสร้างและจัดการประสบการณ์การสนทนาที่น่าประทับใจและมีประสิทธิภาพระหว่างผู้ใช้และบริการของบุคคลที่สามได้อย่างง่ายดาย
นี่คือโมดูล Codelab ขั้นสูงที่มีไว้สำหรับผู้อ่านที่มีประสบการณ์ในการสร้างการดำเนินการสำหรับ Google Assistant มาบ้างแล้ว หากคุณไม่มีประสบการณ์ในการพัฒนามาก่อนกับ Actions on Google เราขอแนะนำเป็นอย่างยิ่งให้คุณทำความคุ้นเคยกับแพลตฟอร์มโดยศึกษา Codelab แนะนำเบื้องต้นของเรา ( ระดับ 1 ระดับ 2 และระดับ 3) โมดูลขั้นสูงเหล่านี้จะแนะนำชุดฟีเจอร์ที่จะช่วยคุณขยายฟังก์ชันการทำงานของการดำเนินการและเพิ่มจำนวนผู้ชม
วิธีการสําคัญวิธีหนึ่งในการวัดความสำเร็จของการดำเนินการคือการมีส่วนร่วมของผู้ใช้หรือประสิทธิภาพของการดำเนินการในการนําผู้ใช้กลับมาหลังจากการโต้ตอบครั้งแรก เพื่อช่วยให้การดำเนินการดังกล่าวง่ายขึ้น คุณสามารถใช้ฟีเจอร์ต่างๆ ในการดำเนินการซึ่งจะมอบเส้นทางที่ผู้ใช้กลับมายังการสนทนาของคุณได้
Codelab ครอบคลุมฟีเจอร์การมีส่วนร่วมของผู้ใช้และแนวทางปฏิบัติแนะนำสำหรับ Actions on Google
สิ่งที่คุณจะสร้าง
คุณจะปรับปรุงฟีเจอร์ที่สร้างไว้แล้วได้โดยการเปิดใช้งาน
- ส่งอัปเดตรายวันให้ผู้ใช้ทราบว่าสามารถแตะเพื่อพูดกับการดำเนินการของคุณได้
- ส่งข้อความ Push ให้ผู้ใช้ที่ลิงก์กลับไปยังการดำเนินการของคุณ
- สร้างลิงก์ที่นำผู้ใช้ไปยังการดำเนินการของคุณจากเว็บเบราว์เซอร์บนอุปกรณ์เคลื่อนที่
สิ่งที่คุณจะได้เรียนรู้
- การมีส่วนร่วมของผู้ใช้คืออะไรและเหตุใดจึงสำคัญต่อความสำเร็จของการดำเนินการ
- วิธีแก้ไขการดำเนินการเพื่อเพิ่มการมีส่วนร่วมของผู้ใช้
- ฟีเจอร์การมีส่วนร่วมของผู้ใช้ใดบ้างที่จะใช้ในการดำเนินการประเภทต่างๆ
- วิธีใช้ Actions API เพื่อส่งการแจ้งเตือนผ่าน Assistant
สิ่งที่คุณต้องมี
คุณต้องมีเครื่องมือต่อไปนี้
- ตัวแก้ไข IDE/ข้อความที่คุณเลือก เช่น WebStorm, Atom หรือ Sublime
- เทอร์มินัลสำหรับเรียกใช้คำสั่ง Shell ที่ติดตั้ง Node.js, npm และ git
- เว็บเบราว์เซอร์ เช่น Google Chrome
- สภาพแวดล้อมการพัฒนาในเครื่องที่มีอินเทอร์เฟซบรรทัดคำสั่ง Firebase
- อุปกรณ์เคลื่อนที่ (Android หรือ iOS) ที่มี Assistant (คุณต้องลงชื่อเข้าใช้ Assistant ด้วยบัญชี Google เดียวกันกับที่จะใช้สร้างโปรเจ็กต์นี้)
นอกจากนี้ เราขอแนะนําอย่างยิ่งให้มีความคุ้นเคยกับ JavaScript (ES6) ด้วย แม้ว่าจะไม่จำเป็นก็ตาม เพื่อให้สามารถทำความเข้าใจโค้ดเว็บฮุคได้
2. ตั้งค่าโปรเจ็กต์
ส่วนนี้จะแสดงวิธีเพิ่มฟีเจอร์การมีส่วนร่วมของผู้ใช้ลงในการดําเนินการที่สร้างไว้ก่อนหน้านี้จนเสร็จสมบูรณ์
ทำความเข้าใจตัวอย่าง
ตัวอย่างสำหรับ Codelab นี้เป็น Action ง่ายๆ สำหรับยิมสมมติที่ชื่อ "Action Gym" การดำเนินการดังกล่าวจะให้ข้อมูลเกี่ยวกับฟิตเนส รวมถึงรายชื่อชั้นเรียนที่หมุนเวียนในแต่ละวัน การดำเนินการที่ให้ข้อมูลเช่นนี้เป็นตัวเลือกที่ดีสำหรับฟีเจอร์การมีส่วนร่วมของผู้ใช้ทั้งหมด เนื่องจากรายการคลาสที่หมุนเวียนให้ข้อมูลที่เป็นประโยชน์แตกต่างกันไปในแต่ละวัน
แผนภาพต่อไปนี้จะแสดงโฟลว์การสนทนาของตัวอย่าง Action Gym
คุณจะปรับแต่งกล่องโต้ตอบเล็กน้อยเพื่อให้เหมาะสมกับฟีเจอร์การมีส่วนร่วมที่คุณเพิ่มมากขึ้น แต่การออกแบบบทสนทนาโดยทั่วไปจะยังคงเหมือนเดิม
ดาวน์โหลดไฟล์พื้นฐาน
เรียกใช้คำสั่งต่อไปนี้เพื่อโคลนที่เก็บ GitHub สำหรับ Codelab
git clone https://github.com/actions-on-google/user-engagement-codelab-nodejs
ตั้งค่าโปรเจ็กต์และ Agent
หากต้องการตั้งค่าโปรเจ็กต์ Actions และ Agent ของ Dialogflow ให้ทำตามขั้นตอนต่อไปนี้
- เปิดคอนโซล Actions
- คลิกโครงการใหม่
- พิมพ์ชื่อโปรเจ็กต์ เช่น
engagement-codelab
- คลิกสร้างโปรเจ็กต์
- แทนที่จะเลือกหมวดหมู่ ให้เลื่อนลงไปที่ส่วนตัวเลือกเพิ่มเติมแล้วคลิกการ์ดการสนทนา
- คลิกสร้างการดำเนินการของคุณเพื่อขยายตัวเลือก แล้วเลือกเพิ่มการดำเนินการ
- คลิกเพิ่มการดำเนินการแรกของคุณ
- ในกล่องโต้ตอบสร้างการดำเนินการ ให้เลือกความตั้งใจที่กำหนดเอง แล้วคลิกสร้างเพื่อเปิดคอนโซล Dialogflow
- ในหน้าการสร้าง Agent ของคอนโซล Dialogflow ให้คลิกสร้าง
- คลิก (ไอคอนรูปเฟือง) ที่การนำทางด้านซ้าย
- คลิกส่งออกและนำเข้า จากนั้นคลิกกู้คืนจาก ZIP
- อัปโหลดไฟล์
agent.zip
จากไดเรกทอรี/user-engagement-codelab-nodejs/start/
ที่คุณดาวน์โหลดไว้ก่อนหน้านี้ - พิมพ์
RESTORE
และคลิกกู้คืน - คลิกเสร็จสิ้น
ทำให้การจำหน่ายของคุณใช้งานได้
เมื่อโปรเจ็กต์ Actions และ Agent ของ Dialogflow พร้อมแล้ว ให้ทำให้ไฟล์ index.js
ในเครื่องใช้งานได้โดยใช้ Firebase Functions CLI
เรียกใช้คำสั่งต่อไปนี้จากไดเรกทอรี /user-engagement-codelab-nodejs/start/functions/
ของการโคลนไฟล์ฐาน
firebase use <PROJECT_ID>
npm install
firebase deploy
หลังจากผ่านไป 2-3 นาที คุณจะเห็นข้อความ "ติดตั้งใช้งานเสร็จสมบูรณ์!" ซึ่งระบุว่าคุณติดตั้งใช้งานเว็บฮุคกับ Firebase เรียบร้อยแล้ว
ดึงข้อมูล URL การทำให้ใช้งานได้
คุณต้องระบุ URL สำหรับไปยังฟังก์ชันระบบคลาวด์ให้กับ Dialogflow หากต้องการเรียก URL นี้ ให้ทำตามขั้นตอนต่อไปนี้
- เปิดคอนโซล Firebase
- เลือกโปรเจ็กต์ Actions จากรายการตัวเลือก
- ไปที่ Develop > ฟังก์ชันในแถบนำทางด้านซ้าย หากคุณได้รับแจ้งให้ "เลือกการตั้งค่าการแชร์ข้อมูล" คุณสามารถข้ามตัวเลือกนี้ได้โดยคลิกดำเนินการนี้ในภายหลัง
- ในแท็บแดชบอร์ด คุณจะเห็นรายการ "Fulfillment" ที่มี URL ในส่วนทริกเกอร์ บันทึก URL นี้ คุณจะต้องคัดลอกไปไว้ใน Dialogflow ในส่วนถัดไป
ตั้งค่า URL ของเว็บฮุคใน Dialogflow
ตอนนี้คุณต้องอัปเดต Agent ของ Dialogflow เพื่อใช้เว็บฮุคสำหรับการดำเนินการ โดยทำตามขั้นตอนต่อไปนี้
- เปิดคอนโซล Dialogflow (ปิดคอนโซล Firebase ได้ถ้าต้องการ)
- คลิกการดำเนินการตามคำสั่งซื้อในการนำทางด้านซ้าย
- เปิดใช้เว็บฮุค
- วาง URL ที่คัดลอกจากแดชบอร์ด Firebase หากยังไม่ได้ปรากฏ
- คลิกบันทึก
ยืนยันว่าตั้งค่าโปรเจ็กต์อย่างถูกต้อง
ผู้ใช้ควรสามารถเรียกใช้การดำเนินการของคุณเพื่อขอข้อมูลเกี่ยวกับ Action Gym ได้ ซึ่งรวมถึงข้อความตอบกลับแบบฮาร์ดโค้ดพร้อมเวลาทำการและคำตอบแบบข้อความที่แสดงตารางเรียนสำหรับแต่ละวันของสัปดาห์
วิธีทดสอบการดำเนินการในเครื่องมือจำลองการดำเนินการ
- คลิกที่ Integrations > ในการนําทางด้านซ้ายของคอนโซล Dialogflow Google Assistant
- ตรวจสอบว่าเปิดใช้แสดงตัวอย่างการเปลี่ยนแปลงอัตโนมัติ แล้วคลิกทดสอบเพื่ออัปเดตโปรเจ็กต์ Actions
- เครื่องมือจำลอง Actions จะโหลดโปรเจ็กต์ Actions ของคุณ หากต้องการทดสอบการดำเนินการ ให้พิมพ์
Talk to my test app
ลงในช่องอินพุต แล้วกด Enter - คุณควรเห็นการตอบกลับต้อนรับเข้าสู่ Action Gym ลองทำตามข้อความที่ปรากฏเพื่อสนทนาต่อ ขณะเดียวกันก็ตรวจสอบว่า Fulfillment มีการตอบกลับสำหรับข้อมูลแต่ละรายการ
3. เพิ่มการสมัครรับข้อมูลอัปเดตรายวัน
วิธีทั่วไปในการดึงดูดผู้ใช้คือการให้ข้อมูลที่เป็นประโยชน์ที่สุดแก่ผู้ใช้ ซึ่งทำได้โดยการเสนอตัวเลือกให้ผู้ใช้สมัครรับข้อมูลอัปเดตรายวันสำหรับความตั้งใจ ซึ่งจะเป็นการส่งการแจ้งเตือน Assistant ที่ลิงก์ไปยังการดำเนินการตามวัตถุประสงค์นั้นโดยตรง
ในขั้นตอนนี้ คุณจะได้เรียนรู้เกี่ยวกับการสมัครใช้บริการอัปเดตรายวัน และเพิ่มลงใน Intent ในรายการชั้นเรียนของการดำเนินการ หลังจากทำตามวิธีการเหล่านี้ การสนทนาของการดำเนินการจะมีลักษณะดังแผนภาพต่อไปนี้
วิธีนี้จะดึงดูดผู้ใช้ได้อย่างไร
ผู้ใช้สมาร์ทโฟนอาจคุ้นเคยกับข้อความ Push ที่ให้ข้อมูลและการอัปเดตเฉพาะของแอป การสมัครรับข้อมูลอัปเดตรายวันเป็นวิธีง่ายๆ ในการเข้าถึงผู้ใช้บนอุปกรณ์เคลื่อนที่ภายนอก Assistant โดยที่ Intent ที่คุณส่งการอัปเดตยังคงให้คุณค่าแก่ผู้ใช้ในแต่ละวัน
การอัปเดตรายวันเป็นเครื่องมือสร้างการมีส่วนร่วมที่มีประโยชน์ แต่ไม่จำเป็นต้องรวมไว้ในทุกการดำเนินการ พิจารณาเคล็ดลับเหล่านี้เมื่อตัดสินใจว่าจะเพิ่มการติดตามการอัปเดตรายวันลงในการดำเนินการหรือไม่
- ตรวจสอบให้แน่ใจว่าการอัปเดตประจำวันจะช่วยให้ผู้ใช้เห็นข้อมูลที่เป็นประโยชน์และต่างออกไปทุกวัน หากการแตะการอัปเดตรายวันปรากฏในข้อความแจ้งเดียวกันทุกครั้ง ผู้ใช้อาจยกเลิกการสมัครรับข้อมูลหลังจากผ่านไป 2-3 วัน
- ตรวจสอบว่ากล่องโต้ตอบเหมาะกับผู้ใช้ หากผู้ใช้ข้ามไปยังสิ่งที่ต้องการอัปเดตในแต่ละวันโดยตรง ผู้ใช้อาจไม่จำเป็นต้องเริ่มต้นจากจุดเริ่มต้นของการสนทนาเสมอไป ดังนั้นผู้ใช้จึงไม่ควรมีบริบทใดๆ มากนัก
- แสดงให้ผู้ใช้เห็นถึงประโยชน์ของการดำเนินการของคุณก่อนแจ้งให้สมัครรับข้อมูลอัปเดตรายวัน ผู้ใช้ของคุณควรคิดว่า "ฉันต้องการเนื้อหานี้ทุกวัน" เมื่อได้รับตัวเลือกให้สมัครใช้บริการ
- อย่าแนะนำผู้ใช้ซ้ำๆ ให้ติดตามมากเกินไป เสนอการสมัครรับข้อมูลอัปเดตรายวันหลังจากที่แสดงให้ผู้ใช้เห็นเนื้อหาที่จะสมัครรับข้อมูลทันที และหลีกเลี่ยงการรบกวนไปจากที่อื่น
- สนทนาให้สั้นกระชับหลังจากเรียกให้แสดง Intent ที่จะอัปเดตแล้ว การอัปเดตรายวันส่วนใหญ่ควรประกอบด้วยการตอบกลับครั้งเดียวแล้วปิดโดยที่ผู้ใช้ไม่ต้องป้อนข้อมูล
เปิดอัปเดตรายวัน
คุณจะเพิ่มการสมัครใช้บริการอัปเดตรายวันลงใน Intent ของการต้อนรับซึ่งจะนำผู้ใช้ตรงมาเริ่มต้นการสนทนาได้ หรือจะเป็นจุดประสงค์ที่เฉพาะเจาะจงมากขึ้นเพื่อ Deep Link ผู้ใช้ไปยังที่ใดที่หนึ่งภายในการสนทนาก็ได้ สำหรับ Codelab นี้ Intent ของรายการชั้นเรียนเหมาะสมที่สุดเนื่องจากกล่องโต้ตอบจะเปลี่ยนแปลงไปทุกวัน และผู้ใช้อาจพบว่าการแจ้งเตือนประเภทมีชั้นเรียนนั้นเป็นประโยชน์
โปรดทำตามขั้นตอนต่อไปนี้เพื่อเปิดใช้การอัปเดตรายวันสำหรับ Intent ของรายการชั้นเรียน
- ในคอนโซล Actions ให้คลิกแท็บพัฒนา และเลือกการดำเนินการในแถบนำทางด้านซ้าย
- คลิกรายการชั้นเรียนในรายการการดำเนินการ
- ในส่วนการมีส่วนร่วมของผู้ใช้ ให้สลับตัวเลือกคุณต้องการเสนอการอัปเดตรายวันให้ผู้ใช้หรือไม่
- ตั้งชื่อเนื้อหาที่สื่อความหมายซึ่งอธิบายการอัปเดตประจำวัน บริบทจะเป็น "อยากให้ฉันส่ง <ชื่อเนื้อหา> ประจำวันตอนกี่โมง" เพราะฉะนั้นอย่าลืมตั้งชื่อที่มีทั้งการอธิบายและอ่านออกเสียงอย่างถูกต้อง สำหรับตัวอย่างนี้ ให้ตั้งค่าชื่อเนื้อหาเป็น
list of upcoming Action Gym classes
- คลิกบันทึกที่ด้านบนของหน้า
ตั้งค่า Dialogflow
โปรดทำตามขั้นตอนต่อไปนี้ในคอนโซล Dialogflow เพื่อสร้าง Intent สำหรับการสมัครใช้บริการอัปเดตรายวัน
แจ้งให้ผู้ใช้สมัครใช้บริการ
- ตั้งค่า Intent ใหม่เพื่อจัดการผู้ใช้ที่ขอติดตามการอัปเดตรายวัน ในคอนโซล Dialogflow ให้คลิกปุ่ม + ถัดจาก Intent ในการนำทางด้านซ้ายเพื่อสร้าง Intent ใหม่
- ตั้งชื่อ Intent ใหม่นี้เป็น
Setup Updates
- เพิ่มนิพจน์ของผู้ใช้ต่อไปนี้ในส่วนวลีการฝึกอบรม
Send daily reminders
Reminder
Remind me
Updates
Upcoming classes
- ในส่วนการดำเนินการตามคำสั่งซื้อ ให้สลับตัวเลือกเปิดใช้การเรียกเว็บฮุคสำหรับ Intent นี้
- คลิกบันทึกที่ด้านบนของหน้า
ดำเนินการตามการตัดสินใจของผู้ใช้
- ตั้งค่า Intent ใหม่เพื่อจัดการคำตอบของผู้ใช้ต่อข้อความแจ้งให้สมัครใช้บริการอัปเดตรายวัน คลิกปุ่ม + ถัดจาก Intent ในการนำทางด้านซ้ายเพื่อสร้าง Intent ใหม่
- ตั้งชื่อ Intent ใหม่นี้เป็น
Confirm Updates
- เพิ่ม
actions_intent_REGISTER_UPDATE
ในส่วนเหตุการณ์ เหตุการณ์ Dialogflow นี้จะทริกเกอร์เมื่อผู้ใช้ทำตามขั้นตอนการอัปเดตรายวันจนเสร็จสิ้น ไม่ว่าผู้ใช้จะสมัครใช้บริการหรือไม่ก็ตาม - ในส่วนการดำเนินการตามคำสั่งซื้อ ให้สลับตัวเลือกเปิดใช้การเรียกเว็บฮุคสำหรับ Intent นี้
- คลิกบันทึกที่ด้านบนของหน้า
ใช้การดำเนินการตามคำสั่งซื้อ
หากต้องการใช้ Fulfillment ในเว็บฮุค ให้ทำตามขั้นตอนต่อไปนี้
โหลดทรัพยากร 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',
};
เพิ่มการดำเนินการสำหรับ Intent ใหม่
เมื่อผู้ใช้บอกว่าต้องการสมัครใช้บริการ ให้เริ่มขั้นตอนการสมัครใช้บริการอัปเดตรายวันโดยโทรหาผู้ช่วย RegisterUpdate
ด้วย Intent เป้าหมายของการอัปเดต (รายการชั้นเรียน) และพิมพ์ (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
หรือไม่ ซึ่งระบุว่าผู้ใช้เริ่มการสนทนาจากการแจ้งเตือนการอัปเดตรายวัน และเปลี่ยนการตอบกลับให้สอดคล้องกัน นอกจากนี้คุณยังใช้ Branch ของการสนทนานี้เพื่อปิดกล่องโต้ตอบได้ทันทีหลังจากที่ระบุรายชื่อชั้นเรียนแล้ว ซึ่งเป็นไปตามแนวทางปฏิบัติแนะนำของเราในการทำให้การอัปเดตรายวันสั้นลง
ในไฟล์ 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
ลงในช่อง Input แล้วกด Enter - พิมพ์
Learn about classes
แล้วกด Enter ตอนนี้คำตอบของการดำเนินการของคุณควรเสนอการส่งการช่วยเตือนรายวัน - พิมพ์
Send daily reminders
แล้วกด Enter - พิมพ์เวลาที่ต้องการดูอัปเดต แล้วกด Enter สำหรับการทดสอบ ให้ลองตอบกลับภายในเวลาปัจจุบัน 3-5 นาที
ในอุปกรณ์เคลื่อนที่ คุณควรได้รับการแจ้งเตือนจาก Assistant ในช่วงเวลาที่คุณระบุไว้เพื่ออัปเดต โปรดทราบว่าการแจ้งเตือนนี้อาจใช้เวลาสักครู่จึงจะปรากฏ แตะที่การแจ้งเตือน แล้วระบบควรลิงก์ Deep Link ไปยัง Intent แบบรายการชั้นเรียนใน Assistant โดยตรง เพื่อแสดงรายการชั้นเรียนที่กำลังจะเกิดขึ้น ดังนี้
4. เพิ่มข้อความ Push
อีกตัวเลือกหนึ่งในการดึงดูดผู้ใช้นอกการดำเนินการของคุณ คุณสามารถเรียกใช้ Actions API เพื่อส่งข้อความ Push ไปยังผู้ใช้ Assistant ไม่ได้ตั้งเวลาการแจ้งเตือนเหล่านี้โดยอัตโนมัติ ซึ่งต่างจากการอัปเดตประจำวัน คุณจึงส่งการแจ้งเตือนได้ตามต้องการ
ในขั้นตอนนี้ คุณจะได้เรียนรู้วิธีใช้ข้อความ Push ใน "การดำเนินการ" โดยเพิ่ม Intent ที่ยกเลิกชั้นเรียนรายการใหม่และส่งการแจ้งเตือนไปยังผู้ใช้ที่แจ้งเกี่ยวกับการยกเลิกชั้นเรียน นอกจากนี้ คุณจะต้องตั้งค่าคอมโพเนนต์ 3 รายการต่อไปนี้ที่จำเป็นต่อการส่งการแจ้งเตือนด้วย
- บัญชี Actions API - คุณจะส่งการแจ้งเตือนให้ผู้ใช้โดยส่งคำขอ
POST
ไปยัง API ดังนั้นคุณจะต้องตั้งค่าบัญชีบริการและข้อมูลเข้าสู่ระบบเพื่อเชื่อมต่อกับ API นี้ - ตัวช่วยเหลือเกี่ยวกับสิทธิ์ - คุณต้องมีสิทธิ์ของผู้ใช้จึงจะเข้าถึงรหัสผู้ใช้ที่จำเป็นต่อการส่งข้อความ Push ให้ผู้ใช้ได้ ในตัวอย่างนี้ คุณจะใช้ฟังก์ชันไลบรารีของไคลเอ็นต์เพื่อเรียกผู้ช่วยด้านสิทธิ์และขอรหัสนี้
- พื้นที่เก็บข้อมูล - ในการส่งข้อความ Push ไปยังผู้ใช้นอกการสนทนา คุณจะต้องจัดเก็บรหัสผู้ใช้ไว้ในที่ที่เรียกคืนได้ตามต้องการ ในตัวอย่างนี้ คุณจะได้ตั้งค่าฐานข้อมูล Firestore เพื่อจัดเก็บข้อมูลสำหรับผู้ใช้แต่ละราย
หลังจากทำตามวิธีการเหล่านี้ คุณจะต้องเพิ่มกล่องโต้ตอบต่อไปนี้ในการสนทนาของการดำเนินการ
วิธีนี้จะดึงดูดผู้ใช้ได้อย่างไร
ผู้ใช้สมาร์ทโฟนอาจคุ้นเคยกับข้อความ Push ที่ให้ข้อมูลและการอัปเดตเฉพาะของแอป ข้อความ Push เป็นวิธีที่ยืดหยุ่นในการเข้าถึงผู้ใช้บนอุปกรณ์เคลื่อนที่ภายนอก Assistant ในกรณีที่ผู้ใช้มีเหตุผลที่ดีในการเปิดใช้ สำหรับการอัปเดตรายวัน ผู้ใช้ทราบแล้วว่าจะได้รับการแจ้งเตือนเป็นประจำทุกวัน แต่เมื่อใช้ข้อความ Push ผู้ใช้ไม่ทราบว่าตัวเองกำลังเลือกรับการแจ้งเตือนที่นานๆ ครั้งหรืออาจถูกรบกวนจากการแจ้งเตือนหลายครั้งต่อวัน
ข้อความ Push เป็นเครื่องมือเพื่อการมีส่วนร่วมที่มีประโยชน์ แต่ไม่จำเป็นต้องรวมไว้ในการดำเนินการทั้งหมด พิจารณาเคล็ดลับเหล่านี้เมื่อตัดสินใจว่าจะเพิ่มข้อความ Push ลงในการดำเนินการหรือไม่
- วางแผนตัวอย่างกำหนดการสำหรับข้อความ Push หากคุณวางแผนที่จะส่งข้อความ Push เพียง 1 รายการต่อวัน ให้ลองใช้การอัปเดตรายวันแทน
- ตรวจสอบว่าข้อความ Push จะให้ข้อมูลที่เป็นประโยชน์ทุกครั้งที่ได้รับข้อความ การแจ้งเตือนของคุณยังสามารถทำ Deep Link ไปยัง Intent ของการดำเนินการรายการใดรายการหนึ่งได้ด้วย ดังนั้นโปรดตรวจสอบว่า Intent นั้นมีประโยชน์และเกี่ยวข้อง
- บอกให้ชัดเจนเมื่อขอให้ผู้ใช้สมัครรับข้อความ Push เข้าใจสิ่งที่จะได้รับจากข้อความ Push แต่ละรายการ และทราบว่าระบบจะส่งการแจ้งเตือนบ่อยเพียงใด
เปิดใช้ Actions API
- เปิดคอนโซล Google Cloud แล้วเลือกชื่อโปรเจ็กต์ Actions ในเมนูแบบเลื่อนลง
- ในเมนูการนําทาง (☰) ให้ไปที่ API และ บริการ > คลัง
- ค้นหา Actions API แล้วคลิกเปิดใช้
สร้างบัญชีบริการ
Actions API ต้องมีการตรวจสอบสิทธิ์ คุณจึงต้องสร้างบัญชีบริการเพื่อส่งคำขอ ทําตามขั้นตอนต่อไปนี้เพื่อสร้างและติดตั้งคีย์บัญชีบริการสําหรับ Actions API
- ในเมนูการนำทาง (☰) ของ Google Cloud Console ให้ไปที่ API และ บริการ > ข้อมูลเข้าสู่ระบบ
- คลิกสร้างข้อมูลเข้าสู่ระบบ > คีย์บัญชีบริการ
- ในเมนูแบบเลื่อนลงของบัญชีบริการ ให้เลือกบัญชีบริการใหม่
- กรอกข้อมูลต่อไปนี้
- ชื่อบัญชีบริการ:
service-account
- บทบาท: โปรเจ็กต์ > เจ้าของ
- รหัสบัญชีบริการ:
service-account
(ตามด้วย @<project_id>.iam.gserviceaccount.com เสมอ) - ประเภทคีย์: JSON
- คลิกสร้าง
- ย้ายไฟล์ JSON ที่ดาวน์โหลดไปยังไดเรกทอรี /user-engagement-codelab/start/functions/ ของโปรเจ็กต์
- เปลี่ยนชื่อไฟล์ JSON เป็น
service-account.json
เปิดใช้ Firestore
หากต้องการส่งการแจ้งเตือนไปนอกการสนทนา คุณต้องมีวิธีจัดเก็บรหัสผู้ใช้ซึ่งสามารถอ้างอิงจากรหัสการแจ้งเตือนได้ ในตัวอย่างนี้ เราใช้ฐานข้อมูล Firestore เพื่อเก็บรหัสผู้ใช้ของผู้ใช้ที่สมัครใช้บริการ
ทำตามขั้นตอนต่อไปนี้เพื่อสร้างฐานข้อมูล Firestore สำหรับการดำเนินการ
- เลือกชื่อโปรเจ็กต์ Actions ในคอนโซล Firebase
- ในการนำทางด้านซ้าย ให้ไปที่พัฒนา > ฐานข้อมูล และคลิกสร้างฐานข้อมูล
- เลือกเริ่มในโหมดทดสอบ
- คลิกเปิดใช้
ตั้งค่า Dialogflow
ทำตามขั้นตอนต่อไปนี้ในคอนโซล Dialogflow เพื่อสร้างขั้นตอนการเลือกใช้ข้อความ Push
แจ้งให้ผู้ใช้สมัครใช้บริการ
- ตั้งค่า Intent ใหม่เพื่อจัดการผู้ใช้ที่ขอสมัครรับข้อความ Push สำหรับชั้นเรียนที่ยกเลิกแล้ว ในคอนโซล Dialogflow ให้คลิกปุ่ม + ถัดจาก Intent ในการนำทางด้านซ้ายเพื่อสร้าง Intent ใหม่
- ตั้งชื่อ Intent ใหม่นี้เป็น
Setup Push Notifications
- เพิ่มนิพจน์ของผู้ใช้ต่อไปนี้ในส่วนวลีการฝึกอบรม
Subscribe to notifications
Send notification
Notify me
Send class notifications
Cancelled notifications
- ในส่วนการดำเนินการตามคำสั่งซื้อ ให้สลับตัวเลือกเปิดใช้การเรียกเว็บฮุคสำหรับ Intent นี้
- คลิกบันทึกที่ด้านบนของหน้า
ดำเนินการตามการตัดสินใจของผู้ใช้
- ตั้งค่า Intent ใหม่เพื่อจัดการคำตอบของผู้ใช้ต่อข้อความแจ้งการสมัครรับข้อความ Push คลิกปุ่ม + ถัดจาก Intent ในการนำทางด้านซ้ายเพื่อสร้าง Intent ใหม่
- ตั้งชื่อ Intent ใหม่นี้เป็น
Confirm Push Notifications
- เพิ่ม
actions_intent_PERMISSION
ในส่วนเหตุการณ์ เหตุการณ์ Dialogflow นี้จะทริกเกอร์เมื่อผู้ใช้ดำเนินการตามขั้นตอนการสมัครรับข้อความ Push จนเสร็จสมบูรณ์ ไม่ว่าผู้ใช้จะสมัครใช้บริการหรือไม่ก็ตาม - ในส่วนการดำเนินการตามคำสั่งซื้อ ให้สลับตัวเลือกเปิดใช้การเรียกเว็บฮุคสำหรับ Intent นี้
- คลิกบันทึกที่ด้านบนของหน้า
จัดการข้อความ Push
คุณสามารถลิงก์ข้อความ Push ไปยังความตั้งใจที่เฉพาะเจาะจง เพื่อให้ผู้ใช้ที่แตะข้อความ Push ทํา Deep Link ไปยัง Intent นั้นในการดําเนินการของคุณได้โดยตรง ในตัวอย่างนี้ ให้เพิ่ม Intent ใหม่สำหรับข้อความ Push ซึ่งจะให้รายละเอียดเกี่ยวกับชั้นเรียนที่ยกเลิก
ทำตามขั้นตอนต่อไปนี้เพื่อเพิ่มความตั้งใจที่จะทริกเกอร์เมื่อผู้ใช้แตะข้อความ Push
- ในคอนโซล Dialogflow ให้คลิกปุ่ม + ถัดจาก Intent ในการนำทางด้านซ้ายเพื่อสร้าง Intent ใหม่
- ตั้งชื่อ Intent ใหม่นี้เป็น
Class Canceled
- ในส่วนวลีการฝึก ให้เพิ่ม
Cancelations
เป็นนิพจน์ของผู้ใช้ - ในส่วนการดำเนินการตามคำสั่งซื้อ ให้สลับตัวเลือกเปิดใช้การเรียกเว็บฮุคสำหรับ Intent นี้
- คลิกบันทึกที่ด้านบนของหน้า
ส่งการแจ้งเตือนทดสอบระหว่างการสนทนา
ในเวอร์ชันที่ใช้งานจริง คุณควรมีสคริปต์แยกต่างหากจากโค้ดการดำเนินการตามคำสั่งซื้อที่ส่งข้อความ Push ในตัวอย่างนี้ ให้สร้าง Intent ที่คุณเรียกใช้ได้เพื่อส่งข้อความ Push ขณะพูดกับการดำเนินการของคุณ Intent นี้มีไว้เพื่อแก้ไขข้อบกพร่องเท่านั้น ในทางปฏิบัติ ข้อความ Push ไม่ควรได้รับการจัดการตาม Fulfillment หรือการดำเนินการอื่นๆ ที่เป็นส่วนหนึ่งของการสนทนาของการดำเนินการของคุณ
ทำตามขั้นตอนต่อไปนี้เพื่อสร้างความตั้งใจสำหรับการทดสอบข้อความ Push
- สำหรับการทดสอบและการแก้ไขข้อบกพร่อง ให้ตั้งค่า Intent ใหม่ที่ให้คุณส่งข้อความ Push ไปยังผู้ใช้ที่สมัครรับข้อมูลได้ ในคอนโซล Dialogflow ให้คลิกปุ่ม + ถัดจาก Intent ในการนำทางด้านซ้ายเพื่อสร้าง Intent ใหม่
- ตั้งชื่อ Intent ใหม่นี้เป็น
Test Notification
- ในส่วนวลีการฝึก ให้เพิ่ม
Test notification
เป็นนิพจน์ของผู้ใช้ - ในส่วนการดำเนินการตามคำสั่งซื้อ ให้สลับตัวเลือกเปิดใช้การเรียกเว็บฮุคสำหรับ Intent นี้
- คลิกบันทึกที่ด้านบนของหน้า
เปิดข้อความ Push
ทำตามขั้นตอนต่อไปนี้เพื่อเปิดใช้ข้อความ Push สำหรับ Intent ที่ยกเลิกชั้นเรียน
- ในคอนโซล Dialogflow ให้ไปที่การผสานรวมในแถบนำทาง
- คลิกการตั้งค่าการผสานรวมในการ์ด Google Assistant
- เพิ่มชั้นเรียนที่ยกเลิกเป็น Intent การเรียกใช้โดยนัย Dialogflow ต้องทำขั้นตอนนี้เพื่อจดจำว่าผู้ใช้สามารถเริ่มสนทนาด้วยข้อความที่ยกเลิกชั้นเรียนแล้วได้ (โดยแตะข้อความ Push)
- คลิกปิด
- ในคอนโซล Actions ให้คลิกแท็บพัฒนา และเลือกการดำเนินการในแถบนำทางด้านซ้าย
- คลิกชั้นเรียนถูกยกเลิกในรายการการดำเนินการ
- ในส่วนการมีส่วนร่วมของผู้ใช้ ให้สลับตัวเลือกคุณต้องการส่งข้อความ Push ไหม
- ตั้งชื่อเนื้อหาที่สื่อความหมายซึ่งอธิบายข้อความ Push บริบทจะเป็น "จะเป็นอะไรไหมถ้าฉันส่งข้อความ Push สำหรับ <ชื่อเนื้อหา>" ดังนั้นโปรดตรวจสอบว่าชื่อสื่อความหมายและอ่านออกเสียงอย่างถูกต้อง สำหรับตัวอย่างนี้ ให้ตั้งค่าชื่อเนื้อหาเป็น
class cancelations
- คลิกบันทึกที่ด้านบนของหน้า
ใช้การดำเนินการตามคำสั่งซื้อ
หากต้องการใช้ Fulfillment ในเว็บฮุค ให้ทำตามขั้นตอนต่อไปนี้
โหลดทรัพยากร 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]));
};
};
});
เพิ่มการดำเนินการสำหรับ Intent ใหม่
เมื่อผู้ใช้บอกว่าต้องการสมัครรับข้อความ Push ให้โทรหาผู้ช่วย UpdatePermission
เพื่อขอสิทธิ์จากผู้ใช้ หากดำเนินการสำเร็จ ระบบจะเพิ่มอาร์กิวเมนต์ PERMISSION
ในอาร์กิวเมนต์ของออบเจ็กต์ conv
ซึ่งคุณจะเลือกเพื่อ Pivot การสนทนาได้
เมื่อมีสิทธิ์ของผู้ใช้แล้ว ให้ใช้รหัสผู้ใช้จากอาร์กิวเมนต์ของออบเจ็กต์ conv
แล้วบันทึกไว้ในฐานข้อมูล คุณจะต้องส่ง User-ID นี้ไปยัง Actions API ในภายหลัง ซึ่งเป็นวิธีที่ Assistant จะระบุผู้ที่จะได้รับการแจ้งเตือน
สุดท้าย เพิ่ม Fulfillment สำหรับ Intent Class Canceled
ที่เรียกให้แสดงโดยแตะข้อความ Push ในตัวอย่างนี้ คำตอบของคุณเป็นสตริงตัวยึดตำแหน่ง แต่ในเวอร์ชันที่พร้อมสำหรับการใช้งานจริงของการดำเนินการนี้ สคริปต์การแจ้งเตือนจะให้ข้อมูลแบบไดนามิกมากขึ้นเกี่ยวกับคลาสที่ถูกยกเลิก
ในไฟล์ 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.');
});
เพิ่มการแจ้งเตือนการทดสอบ
หากต้องการส่งข้อความ Push ไปยังผู้ใช้ ให้ส่งคำขอ POST
ไปยัง Actions API พร้อมรหัสผู้ใช้ ชื่อการแจ้งเตือน และ Intent เป้าหมาย ในตัวอย่างนี้ การทริกเกอร์ความตั้งใจการแจ้งเตือนการทดสอบจะทำซ้ำผ่านฐานข้อมูล Firestore และส่งข้อความ Push ไปยังผู้ใช้ทุกคนที่สมัครรับการแจ้งเตือน
อย่าลืมว่าในตัวอย่างนี้ คุณกำลังใส่โค้ดที่ส่งข้อความ Push ในการตอบสนองเว็บฮุค และทริกเกอร์โค้ดนั้นด้วยการเรียกใช้ Intent ทดสอบในการสนทนา ในการดําเนินการที่คุณตั้งใจจะเผยแพร่ โค้ดข้อความ Push ควรอยู่ในสคริปต์แยกจากการดําเนินการตามคําสั่งซื้อ
ในไฟล์ 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 ให้ไปที่แท็บทดสอบ
- พิมพ์
Talk to my test app
ลงในช่อง Input แล้วกด Enter - พิมพ์
Learn about classes
แล้วกด Enter - พิมพ์
Get notifications
แล้วกด Enter - หากคุณยังไม่ได้ให้สิทธิ์การดำเนินการในการส่งข้อความ Push ถึงคุณ ให้พิมพ์
yes
แล้วกด Enter - พิมพ์
yes
แล้วกด Enter ตอนนี้บัญชี Google ของคุณควรสมัครรับข้อความ Push สำหรับการดำเนินการนี้แล้ว
- พิมพ์
no
และกด Enter เพื่อออก - พิมพ์
Talk to my test app
แล้วกด Enter เพื่อเริ่มการสนทนาใหม่ - พิมพ์
Test notification
แล้วกด Enter
คุณควรได้รับ "การแจ้งเตือนการทดสอบจาก Action Gym" ภายในไม่กี่นาที ข้อความ Push ของ Assistant ในอุปกรณ์เคลื่อนที่ การแตะการแจ้งเตือนนี้จะสร้าง Deep Link ไปยัง Intent ที่ยกเลิกชั้นเรียนของการดำเนินการ
5. สร้างลิงก์ Assistant
ถึงตอนนี้เราได้พูดถึงฟีเจอร์การมีส่วนร่วมที่คุณสามารถนำไปใช้เพื่อทำให้ผู้ใช้กลับมาที่การดำเนินการของคุณอยู่เรื่อยๆ แต่ฟีเจอร์เหล่านั้นมีไว้เพื่อทำให้ผู้ใช้ค้นพบและใช้การดำเนินการของคุณ
คุณสร้างลิงก์ Assistant ที่จะลิงก์ผู้ใช้ในอุปกรณ์เคลื่อนที่ไปยังการดำเนินการใน Assistant ได้โดยตรง เนื่องจากลิงก์ Assistant เป็นไฮเปอร์ลิงก์มาตรฐาน คุณจึงเพิ่มลิงก์ดังกล่าวลงในเว็บไซต์หรือเนื้อหาทางการตลาดบนเว็บได้ เช่น บล็อกหรือโพสต์โซเชียลมีเดีย
ในขั้นตอนนี้ คุณจะได้เรียนรู้ว่าลิงก์ Assistant คืออะไร วิธีสร้างลิงก์สำหรับ Intent ในการต้อนรับของการดำเนินการ และวิธีเพิ่มลงในเว็บไซต์ง่ายๆ เพื่อการทดสอบ
วิธีนี้จะดึงดูดผู้ใช้ได้อย่างไร
การดึงดูดให้ผู้ใช้ไปที่ Action เป็นครั้งแรกอาจทำได้ยาก โดยเฉพาะเมื่อจำเป็นต้องเรียกใช้การดำเนินการใน Assistant อย่างชัดแจ้ง ลิงก์ Assistant จะช่วยลดความยุ่งยากนี้ด้วยการให้ลิงก์โดยตรงแก่ผู้ใช้ไปยังการดำเนินการของคุณ เมื่อผู้ใช้ติดตามลิงก์ Assistant ในอุปกรณ์ที่พร้อมใช้งาน Assistant ระบบจะนำผู้ใช้ไปที่การดำเนินการของคุณโดยตรง เมื่อผู้ใช้เปิดลิงก์ของคุณในอุปกรณ์ที่ไม่ใช่อุปกรณ์เคลื่อนที่หรืออุปกรณ์อื่นๆ ที่ไม่รองรับ Assistant ระบบจะยังคงนำไปที่ไดเรกทอรีการดำเนินการของคุณ (หากเผยแพร่ไว้) เพื่อให้ลิงก์ยังคงทำการตลาดให้การดำเนินการของคุณกับผู้ใช้เหล่านั้นได้
ลิงก์ Assistant อาจเป็นเครื่องมือสร้างการมีส่วนร่วมที่มีประโยชน์ คุณจึงควรสร้างลิงก์หากวางแผนจะโฆษณาการดำเนินการผ่านเว็บไซต์หรือโซเชียลมีเดีย โปรดคำนึงถึงเคล็ดลับต่อไปนี้ก่อนสร้างและแจกจ่ายลิงก์ Assistant
- ลิงก์ Assistant จะใช้งานได้เมื่อเผยแพร่การดำเนินการของคุณแล้วเท่านั้น ขณะที่โปรเจ็กต์อยู่ในสถานะฉบับร่าง ลิงก์จะใช้ได้ในอุปกรณ์ของคุณเท่านั้น ระบบจะนำคนอื่นๆ ไปยังหน้า 404 ในไดเรกทอรีการดำเนินการ
- คุณสามารถอนุญาตให้ผู้ใช้ทดสอบลิงก์ Assistant ก่อนเผยแพร่โดยเผยแพร่การดำเนินการของคุณในสภาพแวดล้อมเวอร์ชันอัลฟ่าหรือเบต้า โปรดทราบว่าเฉพาะผู้ใช้ที่เข้าร่วมเวอร์ชันอัลฟ่าหรือเบต้าเท่านั้นที่จะทดสอบลิงก์ Assistant ของคุณได้
- ตรวจสอบว่าจุดประสงค์ปลายทางของลิงก์ Assistant สร้างความประทับใจแรกที่ดีให้แก่ผู้ใช้ใหม่ ความตั้งใจในการต้อนรับเป็นปลายทางเริ่มต้นสำหรับลิงก์ Assistant เนื่องจากควรทำหน้าที่แนะนำการดำเนินการได้ดีอยู่แล้ว
เปิดลิงก์ Assistant
ทําตามขั้นตอนต่อไปนี้เพื่อสร้างลิงก์ Assistant สําหรับความตั้งใจในการต้อนรับ
- ในคอนโซล Actions ให้คลิกแท็บพัฒนา และเลือกการดำเนินการในแถบนำทางด้านซ้าย
- คลิก actions.intent.MAIN ในรายการการดำเนินการ
- ในส่วนลิงก์ ให้สลับตัวเลือกคุณต้องการเปิดใช้ URL สำหรับการกระทำนี้หรือไม่
- กำหนดชื่อลิงก์ที่สื่อความหมายซึ่งอธิบายการดำเนินการของคุณ ตั้งชื่อเป็นคู่คำ-คำสรรพนามง่ายๆ ที่อธิบายสิ่งที่ผู้ใช้จะทำได้จาก Action ของคุณ สำหรับตัวอย่างนี้ ให้ตั้งค่าชื่อลิงก์เป็น
learn about Action Gym
- คัดลอกข้อมูลโค้ด HTML จากด้านล่างของหน้านี้และบันทึกไว้ใช้ภายหลัง
- คลิกบันทึกที่ด้านบนของหน้า
ทำให้เว็บไซต์ทดสอบใช้งานได้
หากต้องการทดสอบลิงก์ Assistant คุณสามารถใช้เครื่องมือ Firebase เพื่อทำให้เว็บไซต์ทดสอบใช้งานได้ควบคู่ไปกับการดำเนินการตามคำสั่งซื้อ เราสร้างเว็บไซต์ทดสอบง่ายๆ สำหรับตัวอย่างนี้ไว้แล้ว คุณแค่ต้องใส่ลิงก์ Assistant เท่านั้น
ไปที่ไดเรกทอรี /user-engagement-codelab-nodejs/start/public/
ของ Fulfillment แล้วเปิดไฟล์ index.html
ในเครื่องมือแก้ไขข้อความ
ในไฟล์ index.html
ให้วางข้อมูลโค้ด HTML ของลิงก์ Assistant ลงในองค์ประกอบเนื้อหา ไฟล์ควรจะมีหน้าตาเหมือนข้อมูลโค้ดด้านล่าง
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 ในเว็บไซต์ทดสอบ การคลิกลิงก์นี้ในอุปกรณ์เคลื่อนที่จะนำคุณไปยังจุดประสงค์ในการต้อนรับของการดำเนินการใน Assistant
หรือคุณจะลองไปที่ URL ของโฮสติ้งในเบราว์เซอร์บนเดสก์ท็อปก็ได้ ซึ่งน่าจะนำคุณไปยังหน้า 404 ในไดเรกทอรี Assistant เนื่องจากการดำเนินการของคุณยังไม่ได้เผยแพร่
6. ขั้นตอนถัดไป
ยินดีด้วย
ตอนนี้คุณได้เรียนรู้เกี่ยวกับความสำคัญของการมีส่วนร่วมของผู้ใช้เมื่อพัฒนาการดำเนินการ ฟีเจอร์การมีส่วนร่วมของผู้ใช้ที่มีในแพลตฟอร์ม และวิธีการเพิ่มฟีเจอร์แต่ละรายการลงในการดำเนินการ
แหล่งข้อมูลการเรียนรู้เพิ่มเติม
สำรวจแหล่งข้อมูลเหล่านี้เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับการมีส่วนร่วมของผู้ใช้สำหรับการดำเนินการของคุณ
- การมีส่วนร่วมของผู้ใช้และ เอกสารเกี่ยวกับลิงก์ของ Assistant: เอกสารอย่างเป็นทางการของ Actions on Google เกี่ยวกับฟีเจอร์ที่กล่าวถึงใน Codelab นี้และการมีส่วนร่วมของผู้ใช้โดยทั่วไป
- การวิเคราะห์การคงผู้ใช้ไว้: เอกสารสำหรับฟีเจอร์การวิเคราะห์ในคอนโซล Actions ที่แสดงการคงผู้ใช้ไว้สําหรับการดําเนินการที่เผยแพร่แล้ว
- หลักเกณฑ์การออกแบบการสนทนา: แนวทางปฏิบัติแนะนำและหลักเกณฑ์เกี่ยวกับวิธีออกแบบฟีเจอร์การมีส่วนร่วมของผู้ใช้
- Actions on Google GitHub repo: โค้ดและไลบรารีตัวอย่าง
- r/GoogleAssistantDev: ชุมชน Reddit อย่างเป็นทางการสำหรับนักพัฒนาซอฟต์แวร์ที่ทำงานร่วมกับ Assistant
ติดตามเราบน Twitter @ActionsOnGoogle เพื่อติดตามประกาศล่าสุดของเรา และทวีตข้อความไปที่ #AoGDevs เพื่อแชร์สิ่งที่คุณสร้าง
แบบสำรวจความคิดเห็น
แต่ก่อนจากกัน โปรดกรอกแบบฟอร์มนี้เพื่อแสดงความคิดเห็นของคุณให้เราทราบ