ดึงดูดผู้ใช้ด้วยการดําเนินการสําหรับ Google Assistant

1. ภาพรวม

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

นี่คือโมดูล Codelab ขั้นสูงที่มีไว้สําหรับผู้อ่านที่มีประสบการณ์ในการสร้าง Actions for Google Assistant อยู่แล้ว หากคุณยังไม่มีประสบการณ์ด้านการพัฒนาก่อนหน้านี้กับ Actions on Google เราขอแนะนําเป็นอย่างยิ่งให้คุณทําความคุ้นเคยกับแพลตฟอร์มดังกล่าวโดยทําตาม Codelab เบื้องต้นของเรา (ระดับ 1, ระดับ 2 และระดับ 3) โมดูลขั้นสูงเหล่านี้จะแนะนําชุดฟีเจอร์ที่ช่วยคุณขยายฟังก์ชันการทํางานและเพิ่มจํานวนผู้ชมได้

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

Codelab ครอบคลุมฟีเจอร์การมีส่วนร่วมของผู้ใช้และแนวทางปฏิบัติแนะนําสําหรับ Actions on Google

a3fc0061bd01a75.png 961ef6e27dc73da2.png

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

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

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

สิ่งที่คุณจะได้เรียนรู้

  • การมีส่วนร่วมของผู้ใช้คืออะไรและทําไมความสําเร็จจึงประสบความสําเร็จ&#39
  • วิธีแก้ไขการดําเนินการเพื่อเพิ่มการมีส่วนร่วมของผู้ใช้
  • ฟีเจอร์การมีส่วนร่วมของผู้ใช้ที่จะใช้ในการดําเนินการประเภทต่างๆ
  • วิธีใช้ 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 Gym.&quot การดําเนินการดังกล่าวจะให้ข้อมูลเกี่ยวกับยิม รวมถึงรายการคลาสที่หมุนในแต่ละวัน การดําเนินการที่ให้ข้อมูลเช่นนี้เป็นตัวเลือกที่ดีสําหรับฟีเจอร์การมีส่วนร่วมของผู้ใช้ทั้งหมดเนื่องจากรายการชั้นเรียนที่หมุนเวียนหมุนเวียนจะให้ข้อมูลที่เป็นประโยชน์ที่แตกต่างกันในแต่ละวัน

แผนภาพต่อไปนี้แสดงขั้นตอนการสนทนาของตัวอย่างยิมของ Action&#39

e2d6e4ad98948cf3.png

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

ดาวน์โหลดไฟล์ฐาน

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

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

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

ทําตามขั้นตอนต่อไปนี้เพื่อตั้งค่าโปรเจ็กต์การดําเนินการและ Agent ของ Dialogflow

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

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

เมื่อโปรเจ็กต์การดําเนินการและ Agent ของ Dialogflow พร้อมแล้ว ให้ทําให้ไฟล์ index.js ในเครื่องใช้งานได้โดยใช้ Firebase Functions CLI

เรียกใช้คําสั่งต่อไปนี้จากไดเรกทอรี /user-engagement-codelab-nodejs/start/functions/ ของการโคลนไฟล์ฐาน

firebase use <PROJECT_ID>
npm install
firebase deploy

อีกสักครู่ คุณควรเห็น "ใช้งานเสร็จสมบูรณ์" ซึ่งระบุว่าคุณทําให้เว็บฮุคใช้งานได้กับ Firebase เรียบร้อยแล้ว

เรียกดู URL การทําให้ใช้งานได้

คุณต้องระบุ Dialogflow โดยใช้ URL ไปยังฟังก์ชันระบบคลาวด์ หากต้องการเรียก URL นี้ ให้ทําตามขั้นตอนต่อไปนี้

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

1741a329947975db.png

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

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

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

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

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

หากต้องการทดสอบการดําเนินการในเครื่องจําลองการดําเนินการ ให้ทําดังนี้

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

60acf1ff87b1a87f.png

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

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

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

f48891c8118f7436.png

แล้วผู้ใช้จะมีส่วนร่วมได้อย่างไร

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

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

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

เปิดรับข้อมูลอัปเดตรายวัน

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

ทําตามขั้นตอนต่อไปนี้เพื่อเปิดใช้การอัปเดตประจําวันสําหรับ Intent Class List

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

c00885cc30e14d68.png

ตั้งค่า Dialogflow

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

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

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

5c70faa02151da0.png

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

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

b871c2bdadac8abc.png

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

หากต้องการดําเนินการตามคําสั่งซื้อในเว็บฮุค ให้ทําตามขั้นตอนต่อไปนี้

ทรัพยากร 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',
};

เพิ่มการดําเนินการตามคําสั่งซื้อสําหรับความตั้งใจใหม่

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

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

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

  1. ในคอนโซลการดําเนินการ ให้ไปที่ทดสอบ
  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 ตามเวลาที่ระบุไว้ให้อัปเดต โปรดทราบว่าการแจ้งเตือนนี้อาจใช้เวลา 2-3 นาทีจึงจะปรากฏ แตะการแจ้งเตือน ซึ่งจะทํา Deep Link ไปยัง Intent ของรายการชั้นเรียนได้โดยตรงใน Assistant ซึ่งจะแสดงรายการคลาสที่กําลังจะเกิดขึ้น

ไฟล์ 8582482eafc67d5b.png

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

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

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

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

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

7c9d4b633c547823.png

แล้วผู้ใช้จะมีส่วนร่วมได้อย่างไร

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

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

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

เปิดใช้ Actions API

  1. เปิด Google Cloud Console และเลือกชื่อโปรเจ็กต์การดําเนินการในเมนูแบบเลื่อนลง

D015c1515b99e3db.png

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

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. ในคอนโซล Firebase ให้เลือกชื่อโปรเจ็กต์การดําเนินการ
  2. ในการนําทางด้านซ้าย ให้ไปที่พัฒนา &gt ฐานข้อมูล แล้วคลิกสร้างฐานข้อมูล
  3. เลือกเริ่มต้นในโหมดทดสอบ
  4. คลิก Enable

6dfc386413954caa.png

ตั้งค่า Dialogflow

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

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

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

3d99bc41d0492552.png

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

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

D37f550c5e07cb73.png

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

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

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

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

940379556f559631.png

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

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

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

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

6967f5a997643eb8.png

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

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

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

ไฟล์ 1ac725231ed279a1.png

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

4304c7cd575f6de3.png

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

หากต้องการดําเนินการตามคําสั่งซื้อในเว็บฮุค ให้ทําตามขั้นตอนต่อไปนี้

ทรัพยากร 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]));
    };
  };
});

เพิ่มการดําเนินการตามคําสั่งซื้อสําหรับความตั้งใจใหม่

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

เมื่อคุณได้รับสิทธิ์แล้ว ให้นํารหัสผู้ใช้จากอาร์กิวเมนต์ออบเจ็กต์ conv##39 มาบันทึกไว้ในฐานข้อมูล และคุณจะส่ง User-ID นี้ไปยัง Actions API ได้ในภายหลัง ซึ่งเป็นวิธีที่ Assistant จะกําหนดว่าใครได้รับการแจ้งเตือนบ้าง

สุดท้าย เพิ่มการดําเนินการตามความตั้งใจของ 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. ในคอนโซลการดําเนินการ ให้ไปที่แท็บการทดสอบ
  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

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

33cbde513c10122e.png

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

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

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

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

แล้วผู้ใช้จะมีส่วนร่วมได้อย่างไร

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

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

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

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

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

55341b8102b71eab.png

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

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

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

b2f84ff91b0e1396.png วางข้อมูลโค้ด HTML ของลิงก์ Assistant ในองค์ประกอบเนื้อหาในไฟล์ index.html ไฟล์ควรมีลักษณะเหมือนข้อมูลโค้ดด้านล่าง

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

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

599845d647f5b624.png

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

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

ยินดีด้วย

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

ทรัพยากรการเรียนรู้เพิ่มเติม

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

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

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

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