คุณสามารถใช้วิธีการในคอลเล็กชัน Watches เพื่อ รับการแจ้งเตือนเมื่อข้อมูลในแบบฟอร์มมีการเปลี่ยนแปลง หน้านี้ให้ภาพรวมเชิงแนวคิดและวิธีการตั้งค่าและรับการแจ้งเตือนแบบพุช
ภาพรวม
ฟีเจอร์ข้อความ Push ของ Google Forms API ช่วยให้แอปพลิเคชันสมัครรับข้อมูล การแจ้งเตือนได้เมื่อมีการเปลี่ยนแปลงข้อมูลในแบบฟอร์ม ระบบจะส่งการแจ้งเตือนไปยังหัวข้อ Cloud Pub/Sub โดยปกติภายในไม่กี่นาทีหลังจากการเปลี่ยนแปลง
หากต้องการรับการแจ้งเตือนแบบพุช คุณต้องตั้งค่าหัวข้อ Cloud Pub/Sub และ ระบุชื่อหัวข้อนั้นเมื่อสร้างการดูสำหรับประเภทเหตุการณ์ที่เหมาะสม
ด้านล่างนี้คือคำจำกัดความของแนวคิดหลักที่ใช้ในเอกสารนี้
- เป้าหมายคือที่ที่ระบบส่งการแจ้งเตือน เป้าหมายที่รองรับ มีเพียงหัวข้อ Cloud Pub/Sub เท่านั้น
- ประเภทเหตุการณ์คือหมวดหมู่ของการแจ้งเตือนที่แอปพลิเคชันของบุคคลที่สาม สามารถสมัครรับข้อมูลได้
- การดูคือคำสั่งให้ Forms API ส่ง การแจ้งเตือนสำหรับประเภทเหตุการณ์ที่เฉพาะเจาะจงในแบบฟอร์มที่เฉพาะเจาะจงไปยังเป้าหมาย
เมื่อสร้างการดูประเภทเหตุการณ์ในแบบฟอร์มหนึ่งๆ แล้ว เป้าหมายของการดูนั้น (ซึ่งเป็นหัวข้อ Cloud Pub/Sub) จะได้รับการแจ้งเตือนจากเหตุการณ์เหล่านั้นในแบบฟอร์มนั้นจนกว่าการดูจะหมดอายุ นาฬิกาของคุณจะใช้งานได้ 1 สัปดาห์ แต่คุณ สามารถขยายระยะเวลาได้ทุกเมื่อก่อนที่ระยะเวลาจะหมดอายุโดยส่งคำขอไปที่ watches.renew()
หัวข้อ Cloud Pub/Sub จะได้รับการแจ้งเตือนเกี่ยวกับแบบฟอร์มที่คุณดูได้ด้วยข้อมูลเข้าสู่ระบบที่คุณระบุเท่านั้น เช่น หากผู้ใช้เพิกถอน สิทธิ์จากแอปพลิเคชันของคุณหรือสูญเสียสิทธิ์เข้าถึงแบบฟอร์มที่ดู ระบบจะไม่ส่งการแจ้งเตือนอีกต่อไป
ประเภทเหตุการณ์ที่ใช้ได้
ปัจจุบัน Google Forms API มีเหตุการณ์ 2 หมวดหมู่ดังนี้
EventType.SCHEMAซึ่งจะแจ้งเตือนเกี่ยวกับการแก้ไขเนื้อหาและการตั้งค่าของแบบฟอร์มEventType.RESPONSESซึ่งจะแจ้งเตือนเมื่อมีการส่งคำตอบในแบบฟอร์ม (ทั้งใหม่และ อัปเดต)
การตอบกลับการแจ้งเตือน
การแจ้งเตือนจะได้รับการเข้ารหัสด้วย JSON และมีข้อมูลต่อไปนี้
- รหัสของแบบฟอร์มที่ทริกเกอร์
- รหัสของนาฬิกาที่ทริกเกอร์
- ประเภทของเหตุการณ์ที่ทริกเกอร์การแจ้งเตือน
- ฟิลด์อื่นๆ ที่ Cloud Pub/Sub ตั้งค่า เช่น
messageIdและpublishTime
การแจ้งเตือนไม่มีข้อมูลแบบฟอร์มหรือการตอบกลับโดยละเอียด หลังจากได้รับ การแจ้งเตือนแต่ละครั้ง คุณจะต้องเรียกใช้ API แยกต่างหากเพื่อดึงข้อมูลล่าสุด ดูวิธีดำเนินการนี้ได้ที่การใช้งานที่แนะนำ
ข้อมูลโค้ดต่อไปนี้แสดงตัวอย่างการแจ้งเตือนสำหรับการเปลี่ยนแปลงสคีมา
{
"attributes": {
"eventType": "SCHEMA",
"formId": "18Xgmr4XQb-l0ypfCNGQoHAw2o82foMr8J0HPHdagS6g",
"watchId": "892515d1-a902-444f-a2fe-42b718fe8159"
},
"messageId": "767437830649",
"publishTime": "2021-03-31T01:34:08.053Z"
}
ข้อมูลโค้ดต่อไปนี้แสดงตัวอย่างการแจ้งเตือนสำหรับคำตอบใหม่
{
"attributes": {
"eventType": "RESPONSES",
"formId": "18Xgmr4XQb-l0ypfCNGQoHAw2o82foMr8J0HPHdagS6g",
"watchId": "5d7e5690-b1ff-41ce-8afb-b469912efd7d"
},
"messageId": "767467004397",
"publishTime": "2021-03-31T01:43:57.285Z"
}
ตั้งค่าหัวข้อ Cloud Pub/Sub
ระบบจะส่งการแจ้งเตือนไปยังหัวข้อ Cloud Pub/Sub คุณรับการแจ้งเตือนจาก Cloud Pub/Sub ได้ใน Webhook หรือโดยการสำรวจปลายทางการสมัครรับข้อมูล
หากต้องการตั้งค่าหัวข้อ Cloud Pub/Sub ให้ทำดังนี้
- ทำตามข้อกำหนดเบื้องต้นของ Cloud Pub/Sub
- ตั้งค่าไคลเอ็นต์ Cloud Pub/Sub
- ตรวจสอบราคา Cloud Pub/Sub และเปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ Google Cloud Console
สร้างหัวข้อ Cloud Pub/Sub ได้ 3 วิธีดังนี้
- การใช้คอนโซล Google Cloud
- การใช้เครื่องมือบรรทัดคำสั่ง (สำหรับการใช้งานแบบเป็นโปรแกรมอย่างง่าย) หรือ
- โดยใช้ Cloud Pub/Sub API
สร้างการสมัครใช้บริการใน Cloud Pub/Sub เพื่อบอก Cloud Pub/Sub วิธีส่งการแจ้งเตือน
สุดท้ายนี้ ก่อนที่จะสร้างการดูที่กำหนดเป้าหมายไปยังหัวข้อ คุณต้อง ให้สิทธิ์ แก่บัญชีบริการการแจ้งเตือนของฟอร์ม (forms-notifications@system.gserviceaccount.com) เพื่อเผยแพร่ไปยังหัวข้อของคุณ
สร้างนาฬิกา
เมื่อมีหัวข้อที่บัญชีบริการแจ้งเตือนแบบพุชของ Forms API สามารถเผยแพร่ได้แล้ว คุณจะสร้างการแจ้งเตือนได้โดยใช้เมธอด watches.create() เมธอดนี้จะตรวจสอบว่าบัญชีบริการการแจ้งเตือนแบบพุชเข้าถึงหัวข้อ Cloud Pub/Sub ที่ระบุได้หรือไม่ และจะล้มเหลวหากเข้าถึงหัวข้อไม่ได้ เช่น หากไม่มีหัวข้อหรือคุณไม่ได้ให้สิทธิ์เผยแพร่ในหัวข้อนั้น
Python
Node.js
ลบนาฬิกา
Python
Node.js
การให้สิทธิ์
เช่นเดียวกับการเรียก API ของฟอร์มทั้งหมด การเรียกไปยัง watches.create() ต้อง
ได้รับอนุญาตด้วยโทเค็นการให้สิทธิ์ โทเค็นต้องมีขอบเขต
ที่ให้สิทธิ์เข้าถึงระดับอ่านแก่ข้อมูลเกี่ยวกับ
การแจ้งเตือนที่ส่ง
- สำหรับการเปลี่ยนแปลงสคีมา หมายถึงขอบเขตใดก็ตามที่ให้สิทธิ์เข้าถึงแบบอ่านแก่ แบบฟอร์ม โดยใช้ forms.get()
- สำหรับคำตอบ หมายถึงขอบเขตใดก็ตามที่ให้สิทธิ์เข้าถึงแบบอ่านสำหรับ คำตอบของแบบฟอร์ม เช่น การใช้ forms.responses.list()
หากต้องการให้ระบบส่งการแจ้งเตือน แอปพลิเคชันต้องเก็บการให้สิทธิ์ OAuth จากผู้ใช้ที่ได้รับอนุญาตซึ่งมีขอบเขตที่จำเป็น หากผู้ใช้ยกเลิกการเชื่อมต่อแอปพลิเคชัน การแจ้งเตือนจะหยุดลงและระบบอาจระงับนาฬิกาพร้อมข้อผิดพลาด หากต้องการกลับมาได้รับการแจ้งเตือนอีกครั้งหลังจากได้รับสิทธิ์อีกครั้ง โปรดดูหัวข้อ ต่ออายุนาฬิกา
แสดงรายการการดูแบบฟอร์ม
Python
Node.js
ต่ออายุการดู
Python
Node.js
การควบคุม
ระบบจะควบคุมการแจ้งเตือน โดยนาฬิกาแต่ละเรือนจะได้รับการแจ้งเตือนอย่างน้อย 1 รายการทุกๆ 30 วินาที เกณฑ์ความถี่นี้อาจมีการเปลี่ยนแปลง
การควบคุมอัตราทำให้การแจ้งเตือนเดียวอาจสอดคล้องกับหลายเหตุการณ์ กล่าวคือ การแจ้งเตือนจะระบุว่ามีเหตุการณ์อย่างน้อย 1 รายการเกิดขึ้น นับตั้งแต่การแจ้งเตือนครั้งล่าสุด
จำกัดสูงสุด
โปรเจ็กต์ Cloud Console แต่ละโปรเจ็กต์ จะมีได้ดังนี้สำหรับแบบฟอร์มและประเภทกิจกรรมที่กำหนด
- ดูได้สูงสุด 20 ครั้ง
- ดูได้สูงสุด 1 เครื่องต่อผู้ใช้ปลายทาง
นอกจากนี้ แต่ละแบบฟอร์มจะจำกัดการดู 50 ครั้งต่อประเภทเหตุการณ์ใน ทั้งหมดในโปรเจ็กต์ Cloud Console ทั้งหมดได้ทุกเมื่อ
ระบบจะเชื่อมโยงนาฬิกากับผู้ใช้ปลายทางเมื่อมีการสร้างหรือต่ออายุด้วย ข้อมูลเข้าสู่ระบบสำหรับผู้ใช้รายนั้น ระบบจะระงับนาฬิกาหากผู้ใช้ปลายทางที่เชื่อมโยง สูญเสียสิทธิ์เข้าถึงแบบฟอร์มหรือเพิกถอนสิทธิ์เข้าถึงแบบฟอร์มของแอป
ความน่าเชื่อถือ
โดยผู้ชมแต่ละคนจะได้รับการแจ้งเตือนอย่างน้อย 1 ครั้งหลังจากแต่ละเหตุการณ์ในทุกกรณี ยกเว้น ในกรณีพิเศษ ในกรณีส่วนใหญ่ ระบบจะส่งการแจ้งเตือน ภายในไม่กี่นาทีหลังจากเกิดเหตุการณ์
ข้อผิดพลาด
หากระบบส่งการแจ้งเตือนสำหรับนาฬิกาไม่สำเร็จอย่างต่อเนื่อง สถานะของนาฬิกาจะเปลี่ยนเป็น SUSPENDED และระบบจะตั้งค่าฟิลด์ errorType ของนาฬิกา หากต้องการรีเซ็ตสถานะของนาฬิกาที่ถูกระงับเป็น ACTIVE และรับการแจ้งเตือนต่อ โปรดดูต่ออายุนาฬิกา
การใช้งานที่แนะนำ
- ใช้หัวข้อ Cloud Pub/Sub เดียวเป็นเป้าหมายของการดูหลายรายการ
- เมื่อได้รับการแจ้งเตือนเกี่ยวกับหัวข้อหนึ่งๆ รหัสแบบฟอร์มจะรวมอยู่ใน เพย์โหลดการแจ้งเตือน ใช้กับประเภทเหตุการณ์เพื่อดูว่าควรดึงข้อมูลใด และดึงข้อมูลจากรูปแบบใด
- หากต้องการดึงข้อมูลที่อัปเดตหลังจากได้รับการแจ้งเตือนที่มี
EventType.RESPONSESให้เรียกใช้ forms.responses.list()- ตั้งค่าตัวกรองในคำขอเป็น
timestamp > timestamp_of_the_last_response_you_fetched
- ตั้งค่าตัวกรองในคำขอเป็น
- หากต้องการดึงข้อมูลที่อัปเดตแล้วหลังจากได้รับการแจ้งเตือนที่มี
EventType.SCHEMAให้เรียกใช้ forms.get()