ดึงดูดผู้ใช้ด้วย Action for Google Assistant

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

a3fc0061bd01a75.png 961ef6e27dc73da2.png

สิ่งที่คุณจะสร้าง

คุณจะปรับปรุงฟีเจอร์ที่สร้างไว้แล้วได้โดยการเปิดใช้งาน

  • ส่งอัปเดตรายวันให้ผู้ใช้ทราบว่าสามารถแตะเพื่อพูดกับการดำเนินการของคุณได้
  • ส่งข้อความ 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

e2d6e4ad98948cf3.png

คุณจะปรับแต่งกล่องโต้ตอบเล็กน้อยเพื่อให้เหมาะสมกับฟีเจอร์การมีส่วนร่วมที่คุณเพิ่มมากขึ้น แต่การออกแบบบทสนทนาโดยทั่วไปจะยังคงเหมือนเดิม

ดาวน์โหลดไฟล์พื้นฐาน

เรียกใช้คำสั่งต่อไปนี้เพื่อโคลนที่เก็บ GitHub สำหรับ Codelab

git clone https://github.com/actions-on-google/user-engagement-codelab-nodejs

ตั้งค่าโปรเจ็กต์และ Agent

หากต้องการตั้งค่าโปรเจ็กต์ Actions และ Agent ของ Dialogflow ให้ทำตามขั้นตอนต่อไปนี้

  1. เปิดคอนโซล Actions
  2. คลิกโครงการใหม่
  3. พิมพ์ชื่อโปรเจ็กต์ เช่น engagement-codelab
  4. คลิกสร้างโปรเจ็กต์
  5. แทนที่จะเลือกหมวดหมู่ ให้เลื่อนลงไปที่ส่วนตัวเลือกเพิ่มเติมแล้วคลิกการ์ดการสนทนา
  6. คลิกสร้างการดำเนินการของคุณเพื่อขยายตัวเลือก แล้วเลือกเพิ่มการดำเนินการ
  7. คลิกเพิ่มการดำเนินการแรกของคุณ
  8. ในกล่องโต้ตอบสร้างการดำเนินการ ให้เลือกความตั้งใจที่กำหนดเอง แล้วคลิกสร้างเพื่อเปิดคอนโซล Dialogflow
  9. ในหน้าการสร้าง Agent ของคอนโซล Dialogflow ให้คลิกสร้าง
  10. คลิก 6bf56243a8a11a3b.png (ไอคอนรูปเฟือง) ที่การนำทางด้านซ้าย
  11. คลิกส่งออกและนำเข้า จากนั้นคลิกกู้คืนจาก ZIP
  12. อัปโหลดไฟล์ agent.zip จากไดเรกทอรี /user-engagement-codelab-nodejs/start/ ที่คุณดาวน์โหลดไว้ก่อนหน้านี้
  13. พิมพ์ RESTORE และคลิกกู้คืน
  14. คลิกเสร็จสิ้น

ทำให้การจำหน่ายของคุณใช้งานได้

เมื่อโปรเจ็กต์ 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 นี้ ให้ทำตามขั้นตอนต่อไปนี้

  1. เปิดคอนโซล Firebase
  2. เลือกโปรเจ็กต์ Actions จากรายการตัวเลือก
  3. ไปที่ Develop > ฟังก์ชันในแถบนำทางด้านซ้าย หากคุณได้รับแจ้งให้ "เลือกการตั้งค่าการแชร์ข้อมูล" คุณสามารถข้ามตัวเลือกนี้ได้โดยคลิกดำเนินการนี้ในภายหลัง
  4. ในแท็บแดชบอร์ด คุณจะเห็นรายการ "Fulfillment" ที่มี URL ในส่วนทริกเกอร์ บันทึก URL นี้ คุณจะต้องคัดลอกไปไว้ใน Dialogflow ในส่วนถัดไป

1741a329947975db.png

ตั้งค่า URL ของเว็บฮุคใน Dialogflow

ตอนนี้คุณต้องอัปเดต Agent ของ Dialogflow เพื่อใช้เว็บฮุคสำหรับการดำเนินการ โดยทำตามขั้นตอนต่อไปนี้

  1. เปิดคอนโซล Dialogflow (ปิดคอนโซล Firebase ได้ถ้าต้องการ)
  2. คลิกการดำเนินการตามคำสั่งซื้อในการนำทางด้านซ้าย
  3. เปิดใช้เว็บฮุค
  4. วาง URL ที่คัดลอกจากแดชบอร์ด Firebase หากยังไม่ได้ปรากฏ
  5. คลิกบันทึก

ยืนยันว่าตั้งค่าโปรเจ็กต์อย่างถูกต้อง

ผู้ใช้ควรสามารถเรียกใช้การดำเนินการของคุณเพื่อขอข้อมูลเกี่ยวกับ Action Gym ได้ ซึ่งรวมถึงข้อความตอบกลับแบบฮาร์ดโค้ดพร้อมเวลาทำการและคำตอบแบบข้อความที่แสดงตารางเรียนสำหรับแต่ละวันของสัปดาห์

วิธีทดสอบการดำเนินการในเครื่องมือจำลองการดำเนินการ

  1. คลิกที่ Integrations > ในการนําทางด้านซ้ายของคอนโซล Dialogflow Google Assistant
  2. ตรวจสอบว่าเปิดใช้แสดงตัวอย่างการเปลี่ยนแปลงอัตโนมัติ แล้วคลิกทดสอบเพื่ออัปเดตโปรเจ็กต์ Actions
  3. เครื่องมือจำลอง Actions จะโหลดโปรเจ็กต์ Actions ของคุณ หากต้องการทดสอบการดำเนินการ ให้พิมพ์ Talk to my test app ลงในช่องอินพุต แล้วกด Enter
  4. คุณควรเห็นการตอบกลับต้อนรับเข้าสู่ Action Gym ลองทำตามข้อความที่ปรากฏเพื่อสนทนาต่อ ขณะเดียวกันก็ตรวจสอบว่า Fulfillment มีการตอบกลับสำหรับข้อมูลแต่ละรายการ

60acf1ff87b1a87f.png

3. เพิ่มการสมัครรับข้อมูลอัปเดตรายวัน

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

ในขั้นตอนนี้ คุณจะได้เรียนรู้เกี่ยวกับการสมัครใช้บริการอัปเดตรายวัน และเพิ่มลงใน Intent ในรายการชั้นเรียนของการดำเนินการ หลังจากทำตามวิธีการเหล่านี้ การสนทนาของการดำเนินการจะมีลักษณะดังแผนภาพต่อไปนี้

f48891c8118f7436.png

วิธีนี้จะดึงดูดผู้ใช้ได้อย่างไร

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

การอัปเดตรายวันเป็นเครื่องมือสร้างการมีส่วนร่วมที่มีประโยชน์ แต่ไม่จำเป็นต้องรวมไว้ในทุกการดำเนินการ พิจารณาเคล็ดลับเหล่านี้เมื่อตัดสินใจว่าจะเพิ่มการติดตามการอัปเดตรายวันลงในการดำเนินการหรือไม่

  • ตรวจสอบให้แน่ใจว่าการอัปเดตประจำวันจะช่วยให้ผู้ใช้เห็นข้อมูลที่เป็นประโยชน์และต่างออกไปทุกวัน หากการแตะการอัปเดตรายวันปรากฏในข้อความแจ้งเดียวกันทุกครั้ง ผู้ใช้อาจยกเลิกการสมัครรับข้อมูลหลังจากผ่านไป 2-3 วัน
  • ตรวจสอบว่ากล่องโต้ตอบเหมาะกับผู้ใช้ หากผู้ใช้ข้ามไปยังสิ่งที่ต้องการอัปเดตในแต่ละวันโดยตรง ผู้ใช้อาจไม่จำเป็นต้องเริ่มต้นจากจุดเริ่มต้นของการสนทนาเสมอไป ดังนั้นผู้ใช้จึงไม่ควรมีบริบทใดๆ มากนัก
  • แสดงให้ผู้ใช้เห็นถึงประโยชน์ของการดำเนินการของคุณก่อนแจ้งให้สมัครรับข้อมูลอัปเดตรายวัน ผู้ใช้ของคุณควรคิดว่า "ฉันต้องการเนื้อหานี้ทุกวัน" เมื่อได้รับตัวเลือกให้สมัครใช้บริการ
  • อย่าแนะนำผู้ใช้ซ้ำๆ ให้ติดตามมากเกินไป เสนอการสมัครรับข้อมูลอัปเดตรายวันหลังจากที่แสดงให้ผู้ใช้เห็นเนื้อหาที่จะสมัครรับข้อมูลทันที และหลีกเลี่ยงการรบกวนไปจากที่อื่น
  • สนทนาให้สั้นกระชับหลังจากเรียกให้แสดง Intent ที่จะอัปเดตแล้ว การอัปเดตรายวันส่วนใหญ่ควรประกอบด้วยการตอบกลับครั้งเดียวแล้วปิดโดยที่ผู้ใช้ไม่ต้องป้อนข้อมูล

เปิดอัปเดตรายวัน

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

โปรดทำตามขั้นตอนต่อไปนี้เพื่อเปิดใช้การอัปเดตรายวันสำหรับ Intent ของรายการชั้นเรียน

  1. ในคอนโซล Actions ให้คลิกแท็บพัฒนา และเลือกการดำเนินการในแถบนำทางด้านซ้าย
  2. คลิกรายการชั้นเรียนในรายการการดำเนินการ
  3. ในส่วนการมีส่วนร่วมของผู้ใช้ ให้สลับตัวเลือกคุณต้องการเสนอการอัปเดตรายวันให้ผู้ใช้หรือไม่
  4. ตั้งชื่อเนื้อหาที่สื่อความหมายซึ่งอธิบายการอัปเดตประจำวัน บริบทจะเป็น "อยากให้ฉันส่ง <ชื่อเนื้อหา> ประจำวันตอนกี่โมง" เพราะฉะนั้นอย่าลืมตั้งชื่อที่มีทั้งการอธิบายและอ่านออกเสียงอย่างถูกต้อง สำหรับตัวอย่างนี้ ให้ตั้งค่าชื่อเนื้อหาเป็น list of upcoming Action Gym classes
  5. คลิกบันทึกที่ด้านบนของหน้า

c00885cc30e14d68.png

ตั้งค่า Dialogflow

โปรดทำตามขั้นตอนต่อไปนี้ในคอนโซล Dialogflow เพื่อสร้าง Intent สำหรับการสมัครใช้บริการอัปเดตรายวัน

แจ้งให้ผู้ใช้สมัครใช้บริการ

  1. ตั้งค่า Intent ใหม่เพื่อจัดการผู้ใช้ที่ขอติดตามการอัปเดตรายวัน ในคอนโซล Dialogflow ให้คลิกปุ่ม + ถัดจาก Intent ในการนำทางด้านซ้ายเพื่อสร้าง Intent ใหม่
  2. ตั้งชื่อ Intent ใหม่นี้เป็น Setup Updates
  3. เพิ่มนิพจน์ของผู้ใช้ต่อไปนี้ในส่วนวลีการฝึกอบรม
  • Send daily reminders
  • Reminder
  • Remind me
  • Updates
  • Upcoming classes
  1. ในส่วนการดำเนินการตามคำสั่งซื้อ ให้สลับตัวเลือกเปิดใช้การเรียกเว็บฮุคสำหรับ Intent นี้
  2. คลิกบันทึกที่ด้านบนของหน้า

5c70faa02151da0.png

ดำเนินการตามการตัดสินใจของผู้ใช้

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

b871c2bdadac8abc.png

ใช้การดำเนินการตามคำสั่งซื้อ

หากต้องการใช้ Fulfillment ในเว็บฮุค ให้ทำตามขั้นตอนต่อไปนี้

โหลดทรัพยากร Dependency

b2f84ff91b0e1396.png ในไฟล์ index.js ให้อัปเดตฟังก์ชัน require() เพื่อเพิ่มแพ็กเกจ RegisterUpdate จากแพ็กเกจ actions-on-google การนำเข้าจะมีลักษณะดังนี้

index.js

const {
  dialogflow,
  Suggestions,
  RegisterUpdate,
} = require('actions-on-google');

อัปเดตชิปคำแนะนำ

b2f84ff91b0e1396.png ในไฟล์ 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 ที่ระบุว่าการสมัครใช้บริการสำเร็จหรือไม่ เสนอข้อความแจ้งติดตามผลแก่ผู้ใช้ซึ่งจะแตกต่างกันไปตามสถานะการสมัครใช้บริการ

b2f84ff91b0e1396.png ในไฟล์ 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 ของการสนทนานี้เพื่อปิดกล่องโต้ตอบได้ทันทีหลังจากที่ระบุรายชื่อชั้นเรียนแล้ว ซึ่งเป็นไปตามแนวทางปฏิบัติแนะนำของเราในการทำให้การอัปเดตรายวันสั้นลง

b2f84ff91b0e1396.png ในไฟล์ 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

หากต้องการทดสอบการแสดงข้อความซ้ำที่กำหนดเองในเครื่องมือจำลองการดำเนินการ ให้ทำตามขั้นตอนต่อไปนี้

  1. ในคอนโซล Actions ให้ไปที่ทดสอบ
  2. พิมพ์ Talk to my test app ลงในช่อง Input แล้วกด Enter
  3. พิมพ์ Learn about classes แล้วกด Enter ตอนนี้คำตอบของการดำเนินการของคุณควรเสนอการส่งการช่วยเตือนรายวัน
  4. พิมพ์ Send daily reminders แล้วกด Enter
  5. พิมพ์เวลาที่ต้องการดูอัปเดต แล้วกด Enter สำหรับการทดสอบ ให้ลองตอบกลับภายในเวลาปัจจุบัน 3-5 นาที

83a15ecac8c71787.png

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

8582482eafc67d5b.png

4. เพิ่มข้อความ Push

อีกตัวเลือกหนึ่งในการดึงดูดผู้ใช้นอกการดำเนินการของคุณ คุณสามารถเรียกใช้ Actions API เพื่อส่งข้อความ Push ไปยังผู้ใช้ Assistant ไม่ได้ตั้งเวลาการแจ้งเตือนเหล่านี้โดยอัตโนมัติ ซึ่งต่างจากการอัปเดตประจำวัน คุณจึงส่งการแจ้งเตือนได้ตามต้องการ

ในขั้นตอนนี้ คุณจะได้เรียนรู้วิธีใช้ข้อความ Push ใน "การดำเนินการ" โดยเพิ่ม Intent ที่ยกเลิกชั้นเรียนรายการใหม่และส่งการแจ้งเตือนไปยังผู้ใช้ที่แจ้งเกี่ยวกับการยกเลิกชั้นเรียน นอกจากนี้ คุณจะต้องตั้งค่าคอมโพเนนต์ 3 รายการต่อไปนี้ที่จำเป็นต่อการส่งการแจ้งเตือนด้วย

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

หลังจากทำตามวิธีการเหล่านี้ คุณจะต้องเพิ่มกล่องโต้ตอบต่อไปนี้ในการสนทนาของการดำเนินการ

7c9d4b633c547823.png

วิธีนี้จะดึงดูดผู้ใช้ได้อย่างไร

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

ข้อความ Push เป็นเครื่องมือเพื่อการมีส่วนร่วมที่มีประโยชน์ แต่ไม่จำเป็นต้องรวมไว้ในการดำเนินการทั้งหมด พิจารณาเคล็ดลับเหล่านี้เมื่อตัดสินใจว่าจะเพิ่มข้อความ Push ลงในการดำเนินการหรือไม่

  • วางแผนตัวอย่างกำหนดการสำหรับข้อความ Push หากคุณวางแผนที่จะส่งข้อความ Push เพียง 1 รายการต่อวัน ให้ลองใช้การอัปเดตรายวันแทน
  • ตรวจสอบว่าข้อความ Push จะให้ข้อมูลที่เป็นประโยชน์ทุกครั้งที่ได้รับข้อความ การแจ้งเตือนของคุณยังสามารถทำ Deep Link ไปยัง Intent ของการดำเนินการรายการใดรายการหนึ่งได้ด้วย ดังนั้นโปรดตรวจสอบว่า Intent นั้นมีประโยชน์และเกี่ยวข้อง
  • บอกให้ชัดเจนเมื่อขอให้ผู้ใช้สมัครรับข้อความ Push เข้าใจสิ่งที่จะได้รับจากข้อความ Push แต่ละรายการ และทราบว่าระบบจะส่งการแจ้งเตือนบ่อยเพียงใด

เปิดใช้ Actions API

  1. เปิดคอนโซล Google Cloud แล้วเลือกชื่อโปรเจ็กต์ Actions ในเมนูแบบเลื่อนลง

d015c1515b99e3db.png

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

6d464f49c88e70b4.png

สร้างบัญชีบริการ

Actions API ต้องมีการตรวจสอบสิทธิ์ คุณจึงต้องสร้างบัญชีบริการเพื่อส่งคำขอ ทําตามขั้นตอนต่อไปนี้เพื่อสร้างและติดตั้งคีย์บัญชีบริการสําหรับ Actions API

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

d9bd79d35691de3a.png

เปิดใช้ Firestore

หากต้องการส่งการแจ้งเตือนไปนอกการสนทนา คุณต้องมีวิธีจัดเก็บรหัสผู้ใช้ซึ่งสามารถอ้างอิงจากรหัสการแจ้งเตือนได้ ในตัวอย่างนี้ เราใช้ฐานข้อมูล Firestore เพื่อเก็บรหัสผู้ใช้ของผู้ใช้ที่สมัครใช้บริการ

ทำตามขั้นตอนต่อไปนี้เพื่อสร้างฐานข้อมูล Firestore สำหรับการดำเนินการ

  1. เลือกชื่อโปรเจ็กต์ Actions ในคอนโซล Firebase
  2. ในการนำทางด้านซ้าย ให้ไปที่พัฒนา > ฐานข้อมูล และคลิกสร้างฐานข้อมูล
  3. เลือกเริ่มในโหมดทดสอบ
  4. คลิกเปิดใช้

6dfc386413954caa.png

ตั้งค่า Dialogflow

ทำตามขั้นตอนต่อไปนี้ในคอนโซล Dialogflow เพื่อสร้างขั้นตอนการเลือกใช้ข้อความ Push

แจ้งให้ผู้ใช้สมัครใช้บริการ

  1. ตั้งค่า Intent ใหม่เพื่อจัดการผู้ใช้ที่ขอสมัครรับข้อความ Push สำหรับชั้นเรียนที่ยกเลิกแล้ว ในคอนโซล Dialogflow ให้คลิกปุ่ม + ถัดจาก Intent ในการนำทางด้านซ้ายเพื่อสร้าง Intent ใหม่
  2. ตั้งชื่อ Intent ใหม่นี้เป็น Setup Push Notifications
  3. เพิ่มนิพจน์ของผู้ใช้ต่อไปนี้ในส่วนวลีการฝึกอบรม
  • Subscribe to notifications
  • Send notification
  • Notify me
  • Send class notifications
  • Cancelled notifications
  1. ในส่วนการดำเนินการตามคำสั่งซื้อ ให้สลับตัวเลือกเปิดใช้การเรียกเว็บฮุคสำหรับ Intent นี้
  2. คลิกบันทึกที่ด้านบนของหน้า

3d99bc41d0492552.png

ดำเนินการตามการตัดสินใจของผู้ใช้

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

d37f550c5e07cb73.png

จัดการข้อความ Push

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

ทำตามขั้นตอนต่อไปนี้เพื่อเพิ่มความตั้งใจที่จะทริกเกอร์เมื่อผู้ใช้แตะข้อความ Push

  1. ในคอนโซล Dialogflow ให้คลิกปุ่ม + ถัดจาก Intent ในการนำทางด้านซ้ายเพื่อสร้าง Intent ใหม่
  2. ตั้งชื่อ Intent ใหม่นี้เป็น Class Canceled
  3. ในส่วนวลีการฝึก ให้เพิ่ม Cancelations เป็นนิพจน์ของผู้ใช้
  4. ในส่วนการดำเนินการตามคำสั่งซื้อ ให้สลับตัวเลือกเปิดใช้การเรียกเว็บฮุคสำหรับ Intent นี้
  5. คลิกบันทึกที่ด้านบนของหน้า

940379556f559631.png

ส่งการแจ้งเตือนทดสอบระหว่างการสนทนา

ในเวอร์ชันที่ใช้งานจริง คุณควรมีสคริปต์แยกต่างหากจากโค้ดการดำเนินการตามคำสั่งซื้อที่ส่งข้อความ Push ในตัวอย่างนี้ ให้สร้าง Intent ที่คุณเรียกใช้ได้เพื่อส่งข้อความ Push ขณะพูดกับการดำเนินการของคุณ Intent นี้มีไว้เพื่อแก้ไขข้อบกพร่องเท่านั้น ในทางปฏิบัติ ข้อความ Push ไม่ควรได้รับการจัดการตาม Fulfillment หรือการดำเนินการอื่นๆ ที่เป็นส่วนหนึ่งของการสนทนาของการดำเนินการของคุณ

ทำตามขั้นตอนต่อไปนี้เพื่อสร้างความตั้งใจสำหรับการทดสอบข้อความ Push

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

6967f5a997643eb8.png

เปิดข้อความ Push

ทำตามขั้นตอนต่อไปนี้เพื่อเปิดใช้ข้อความ Push สำหรับ Intent ที่ยกเลิกชั้นเรียน

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

1ac725231ed279a1.png

  1. ในคอนโซล Actions ให้คลิกแท็บพัฒนา และเลือกการดำเนินการในแถบนำทางด้านซ้าย
  2. คลิกชั้นเรียนถูกยกเลิกในรายการการดำเนินการ
  3. ในส่วนการมีส่วนร่วมของผู้ใช้ ให้สลับตัวเลือกคุณต้องการส่งข้อความ Push ไหม
  4. ตั้งชื่อเนื้อหาที่สื่อความหมายซึ่งอธิบายข้อความ Push บริบทจะเป็น "จะเป็นอะไรไหมถ้าฉันส่งข้อความ Push สำหรับ <ชื่อเนื้อหา>" ดังนั้นโปรดตรวจสอบว่าชื่อสื่อความหมายและอ่านออกเสียงอย่างถูกต้อง สำหรับตัวอย่างนี้ ให้ตั้งค่าชื่อเนื้อหาเป็น class cancelations
  5. คลิกบันทึกที่ด้านบนของหน้า

4304c7cd575f6de3.png

ใช้การดำเนินการตามคำสั่งซื้อ

หากต้องการใช้ Fulfillment ในเว็บฮุค ให้ทำตามขั้นตอนต่อไปนี้

โหลดทรัพยากร Dependency

b2f84ff91b0e1396.png ในไฟล์ index.js ให้อัปเดตฟังก์ชัน require() เพื่อเพิ่มแพ็กเกจ UpdatePermission จากแพ็กเกจ actions-on-google การนำเข้าจะมีลักษณะดังนี้

index.js

const {
  dialogflow,
  Suggestions,
  RegisterUpdate,
  UpdatePermission,
} = require('actions-on-google');

อัปเดตชิปคำแนะนำ

b2f84ff91b0e1396.png ในไฟล์ 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

b2f84ff91b0e1396.png ในไฟล์ 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');

เสนอให้ตั้งค่าการแจ้งเตือนการยกเลิกชั้นเรียน

b2f84ff91b0e1396.png ในไฟล์ 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 ในตัวอย่างนี้ คำตอบของคุณเป็นสตริงตัวยึดตำแหน่ง แต่ในเวอร์ชันที่พร้อมสำหรับการใช้งานจริงของการดำเนินการนี้ สคริปต์การแจ้งเตือนจะให้ข้อมูลแบบไดนามิกมากขึ้นเกี่ยวกับคลาสที่ถูกยกเลิก

b2f84ff91b0e1396.png ในไฟล์ 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 ควรอยู่ในสคริปต์แยกจากการดําเนินการตามคําสั่งซื้อ

b2f84ff91b0e1396.png ในไฟล์ 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

หากต้องการทดสอบการแจ้งเตือนในเครื่องมือจำลองการดำเนินการ ให้ทำตามขั้นตอนต่อไปนี้

  1. ในคอนโซล Actions ให้ไปที่แท็บทดสอบ
  2. พิมพ์ Talk to my test app ลงในช่อง Input แล้วกด Enter
  3. พิมพ์ Learn about classes แล้วกด Enter
  4. พิมพ์ Get notifications แล้วกด Enter
  5. หากคุณยังไม่ได้ให้สิทธิ์การดำเนินการในการส่งข้อความ Push ถึงคุณ ให้พิมพ์ yes แล้วกด Enter
  6. พิมพ์ yes แล้วกด Enter ตอนนี้บัญชี Google ของคุณควรสมัครรับข้อความ Push สำหรับการดำเนินการนี้แล้ว

3a8704bdc0bcbb17.png

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

634dfcb0be8dfdec.png

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

33cbde513c10122e.png

5. สร้างลิงก์ Assistant

ถึงตอนนี้เราได้พูดถึงฟีเจอร์การมีส่วนร่วมที่คุณสามารถนำไปใช้เพื่อทำให้ผู้ใช้กลับมาที่การดำเนินการของคุณอยู่เรื่อยๆ แต่ฟีเจอร์เหล่านั้นมีไว้เพื่อทำให้ผู้ใช้ค้นพบและใช้การดำเนินการของคุณ

คุณสร้างลิงก์ Assistant ที่จะลิงก์ผู้ใช้ในอุปกรณ์เคลื่อนที่ไปยังการดำเนินการใน Assistant ได้โดยตรง เนื่องจากลิงก์ Assistant เป็นไฮเปอร์ลิงก์มาตรฐาน คุณจึงเพิ่มลิงก์ดังกล่าวลงในเว็บไซต์หรือเนื้อหาทางการตลาดบนเว็บได้ เช่น บล็อกหรือโพสต์โซเชียลมีเดีย

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

วิธีนี้จะดึงดูดผู้ใช้ได้อย่างไร

การดึงดูดให้ผู้ใช้ไปที่ Action เป็นครั้งแรกอาจทำได้ยาก โดยเฉพาะเมื่อจำเป็นต้องเรียกใช้การดำเนินการใน Assistant อย่างชัดแจ้ง ลิงก์ Assistant จะช่วยลดความยุ่งยากนี้ด้วยการให้ลิงก์โดยตรงแก่ผู้ใช้ไปยังการดำเนินการของคุณ เมื่อผู้ใช้ติดตามลิงก์ Assistant ในอุปกรณ์ที่พร้อมใช้งาน Assistant ระบบจะนำผู้ใช้ไปที่การดำเนินการของคุณโดยตรง เมื่อผู้ใช้เปิดลิงก์ของคุณในอุปกรณ์ที่ไม่ใช่อุปกรณ์เคลื่อนที่หรืออุปกรณ์อื่นๆ ที่ไม่รองรับ Assistant ระบบจะยังคงนำไปที่ไดเรกทอรีการดำเนินการของคุณ (หากเผยแพร่ไว้) เพื่อให้ลิงก์ยังคงทำการตลาดให้การดำเนินการของคุณกับผู้ใช้เหล่านั้นได้

ลิงก์ Assistant อาจเป็นเครื่องมือสร้างการมีส่วนร่วมที่มีประโยชน์ คุณจึงควรสร้างลิงก์หากวางแผนจะโฆษณาการดำเนินการผ่านเว็บไซต์หรือโซเชียลมีเดีย โปรดคำนึงถึงเคล็ดลับต่อไปนี้ก่อนสร้างและแจกจ่ายลิงก์ Assistant

  • ลิงก์ Assistant จะใช้งานได้เมื่อเผยแพร่การดำเนินการของคุณแล้วเท่านั้น ขณะที่โปรเจ็กต์อยู่ในสถานะฉบับร่าง ลิงก์จะใช้ได้ในอุปกรณ์ของคุณเท่านั้น ระบบจะนำคนอื่นๆ ไปยังหน้า 404 ในไดเรกทอรีการดำเนินการ
  • คุณสามารถอนุญาตให้ผู้ใช้ทดสอบลิงก์ Assistant ก่อนเผยแพร่โดยเผยแพร่การดำเนินการของคุณในสภาพแวดล้อมเวอร์ชันอัลฟ่าหรือเบต้า โปรดทราบว่าเฉพาะผู้ใช้ที่เข้าร่วมเวอร์ชันอัลฟ่าหรือเบต้าเท่านั้นที่จะทดสอบลิงก์ Assistant ของคุณได้
  • ตรวจสอบว่าจุดประสงค์ปลายทางของลิงก์ Assistant สร้างความประทับใจแรกที่ดีให้แก่ผู้ใช้ใหม่ ความตั้งใจในการต้อนรับเป็นปลายทางเริ่มต้นสำหรับลิงก์ Assistant เนื่องจากควรทำหน้าที่แนะนำการดำเนินการได้ดีอยู่แล้ว

ทําตามขั้นตอนต่อไปนี้เพื่อสร้างลิงก์ Assistant สําหรับความตั้งใจในการต้อนรับ

  1. ในคอนโซล Actions ให้คลิกแท็บพัฒนา และเลือกการดำเนินการในแถบนำทางด้านซ้าย
  2. คลิก actions.intent.MAIN ในรายการการดำเนินการ
  3. ในส่วนลิงก์ ให้สลับตัวเลือกคุณต้องการเปิดใช้ URL สำหรับการกระทำนี้หรือไม่
  4. กำหนดชื่อลิงก์ที่สื่อความหมายซึ่งอธิบายการดำเนินการของคุณ ตั้งชื่อเป็นคู่คำ-คำสรรพนามง่ายๆ ที่อธิบายสิ่งที่ผู้ใช้จะทำได้จาก Action ของคุณ สำหรับตัวอย่างนี้ ให้ตั้งค่าชื่อลิงก์เป็น learn about Action Gym
  5. คัดลอกข้อมูลโค้ด HTML จากด้านล่างของหน้านี้และบันทึกไว้ใช้ภายหลัง
  6. คลิกบันทึกที่ด้านบนของหน้า

55341b8102b71eab.png

ทำให้เว็บไซต์ทดสอบใช้งานได้

หากต้องการทดสอบลิงก์ Assistant คุณสามารถใช้เครื่องมือ Firebase เพื่อทำให้เว็บไซต์ทดสอบใช้งานได้ควบคู่ไปกับการดำเนินการตามคำสั่งซื้อ เราสร้างเว็บไซต์ทดสอบง่ายๆ สำหรับตัวอย่างนี้ไว้แล้ว คุณแค่ต้องใส่ลิงก์ Assistant เท่านั้น

ไปที่ไดเรกทอรี /user-engagement-codelab-nodejs/start/public/ ของ Fulfillment แล้วเปิดไฟล์ index.html ในเครื่องมือแก้ไขข้อความ

b2f84ff91b0e1396.png ในไฟล์ 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>

จากนั้นเรียกใช้คำสั่งต่อไปนี้เพื่อทำให้เว็บไซต์ทดสอบใช้งานได้ใน Firebase

firebase deploy

เมื่อคำสั่ง ทำให้ใช้งานได้ ทำงานเสร็จแล้ว ให้จด URL ของโฮสติ้งในเอาต์พุต

b01e8d322fb5d623.png

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

599845d647f5b624.png

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

6. ขั้นตอนถัดไป

ยินดีด้วย

ตอนนี้คุณได้เรียนรู้เกี่ยวกับความสำคัญของการมีส่วนร่วมของผู้ใช้เมื่อพัฒนาการดำเนินการ ฟีเจอร์การมีส่วนร่วมของผู้ใช้ที่มีในแพลตฟอร์ม และวิธีการเพิ่มฟีเจอร์แต่ละรายการลงในการดำเนินการ

แหล่งข้อมูลการเรียนรู้เพิ่มเติม

สำรวจแหล่งข้อมูลเหล่านี้เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับการมีส่วนร่วมของผู้ใช้สำหรับการดำเนินการของคุณ

ติดตามเราบน Twitter @ActionsOnGoogle เพื่อติดตามประกาศล่าสุดของเรา และทวีตข้อความไปที่ #AoGDevs เพื่อแชร์สิ่งที่คุณสร้าง

แบบสำรวจความคิดเห็น

แต่ก่อนจากกัน โปรดกรอกแบบฟอร์มนี้เพื่อแสดงความคิดเห็นของคุณให้เราทราบ