คุณสามารถใช้เมธอดในคอลเล็กชัน Registrations
เพื่อรับการแจ้งเตือนเมื่อมีการเปลี่ยนแปลงข้อมูลใน Classroom
บทความนี้จะอธิบายภาพรวมเชิงแนวคิดพร้อมวิธีการง่ายๆ ในการเริ่มรับการแจ้งเตือนแบบพุช
ภาพรวมของข้อความ Push ของ Classroom
ฟีเจอร์ข้อความ Push ของ Classroom API ช่วยให้แอปพลิเคชันที่ใช้ Classroom API สามารถสมัครรับการแจ้งเตือนเมื่อมีการเปลี่ยนแปลงข้อมูลใน Classroom ระบบจะส่งการแจ้งเตือนไปยังหัวข้อ Cloud Pub/Sub โดยปกติภายในไม่กี่นาทีหลังจากการเปลี่ยนแปลง
หากต้องการรับข้อความ Push คุณต้องตั้งค่าหัวข้อ Cloud Pub/Sub และระบุชื่อหัวข้อนั้นเมื่อสร้างการลงทะเบียนสําหรับฟีดการแจ้งเตือนที่เหมาะสม
คําจํากัดความของแนวคิดหลักที่ใช้ในเอกสารประกอบมีดังนี้
- ปลายทางคือตำแหน่งที่ระบบจะส่งการแจ้งเตือน
- ฟีดคือการแจ้งเตือนประเภทหนึ่งที่แอปพลิเคชันของบุคคลที่สามสามารถสมัครรับข้อมูลได้ เช่น "การเปลี่ยนแปลงบัญชีรายชื่อสำหรับหลักสูตร 1234"
- การลงทะเบียนคือคำสั่งให้ Classroom API ส่งการแจ้งเตือนจากฟีดหนึ่งไปยังปลายทาง
เมื่อคุณสร้างการลงทะเบียนฟีดแล้ว หัวข้อ Cloud Pub/Sub ของการลงทะเบียนดังกล่าวจะได้รับการแจ้งเตือนจากฟีดนั้นจนกว่าจะหมดอายุ การลงทะเบียนจะมีอายุ 1 สัปดาห์ แต่คุณขยายเวลาได้ทุกเมื่อก่อนที่การลงทะเบียนจะหมดอายุโดยส่งคำขอที่เหมือนกับ registrations.create()
หัวข้อ Cloud Pub/Sub ของคุณจะได้รับการแจ้งเตือนเกี่ยวกับทรัพยากรที่คุณดูได้ด้วยข้อมูลเข้าสู่ระบบที่ระบุไว้เมื่อสร้างการลงทะเบียนเท่านั้น เช่น หากผู้ใช้เพิกถอนสิทธิ์จากแอปพลิเคชันของคุณหรือถูกนำออกจากการเป็นครู ระบบจะไม่ส่งการแจ้งเตือนอีกต่อไป
ประเภทของฟีด
ปัจจุบัน Classroom API มีฟีด 3 ประเภท ได้แก่
- โดเมนแต่ละโดเมนจะมีฟีดการเปลี่ยนแปลงข้อมูลรายชื่อสำหรับโดเมน ซึ่งจะแสดงการแจ้งเตือนเมื่อนักเรียนและครูเข้าร่วมและออกจากหลักสูตรในโดเมนนั้น
- แต่ละหลักสูตรจะมีฟีดการเปลี่ยนแปลงข้อมูลสำหรับหลักสูตร ซึ่งจะแสดงการแจ้งเตือนเมื่อนักเรียนและครูเข้าร่วมและออกจากหลักสูตรนั้น
- แต่ละหลักสูตรจะมีฟีดการเปลี่ยนแปลงงานในหลักสูตรสำหรับหลักสูตร ซึ่งจะแสดงการแจ้งเตือนเมื่อมีการสร้างหรือแก้ไขงานในหลักสูตรหรือออบเจ็กต์งานที่นักเรียนส่งในหลักสูตรนั้น
การตั้งค่าหัวข้อ Cloud Pub/Sub
ระบบจะส่งการแจ้งเตือนไปยังหัวข้อ Cloud Pub/Sub จาก Cloud Pub/Sub คุณจะได้รับการแจ้งเตือนใน Webhook หรือโดยการพูลข้อมูลปลายทางการสมัครใช้บริการ
หากต้องการตั้งค่าหัวข้อ Cloud Pub/Sub คุณต้องทําดังนี้
- ตรวจสอบว่าคุณมีคุณสมบัติตรงตามข้อกําหนดเบื้องต้นของ Cloud Pub/Sub
- ตั้งค่าไคลเอ็นต์ Cloud Pub/Sub
- ตรวจสอบราคาของ Cloud Pub/Sub และเปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ใน Developer Console
สร้างหัวข้อ Cloud Pub/Sub ใน Developer Console (วิธีที่ง่ายที่สุด) ผ่านเครื่องมือบรรทัดคำสั่ง (สำหรับการใช้งานแบบเป็นโปรแกรมอย่างง่าย) หรือใช้ Cloud Pub/Sub API โปรดทราบว่า Cloud Pub/Sub อนุญาตหัวข้อได้จํากัด ดังนั้นการใช้หัวข้อเดียวเพื่อรับการแจ้งเตือนทั้งหมดจะช่วยให้คุณไม่พบปัญหาการปรับขนาดหากแอปพลิเคชันได้รับความนิยม
สร้างการสมัครใช้บริการใน Cloud Publi/Sub เพื่อบอก Cloud Publi/Sub ว่าจะส่งการแจ้งเตือนอย่างไร
สุดท้าย ก่อนลงทะเบียนเพื่อรับ Push Notifications คุณต้องให้สิทธิ์บัญชีบริการ Push Notifications (
classroom-notifications@system.gserviceaccount.com
) เพื่อเผยแพร่ไปยังหัวข้อ
หมายเหตุ: หากคุณให้สิทธิ์บัญชีบริการ Push Notifications เผยแพร่ไปยังหัวข้อ Cloud Pub/Sub ผู้ใช้ที่ส่งคำขอจากโปรเจ็กต์คอนโซลของนักพัฒนาแอปจะทราบว่าหัวข้อดังกล่าวมีอยู่และลงทะเบียนรับการแจ้งเตือนจากหัวข้อนั้นได้ แอปพลิเคชันจำนวนมากจัดเก็บรหัสไคลเอ็นต์ OAuth ไว้ฝั่งไคลเอ็นต์ ดังนั้นผู้ใช้ปลายทางจึงอาจส่งคำขอจากโปรเจ็กต์ใน Developer Console ได้ หากคุณอยู่ในสถานการณ์นี้และกังวลว่าผู้ใช้ปลายทางจะส่งการแจ้งเตือนที่ไม่ต้องการไปยังหัวข้อ Cloud Pub/Sub หรือทราบชื่อหัวข้อ Cloud Pub/Sub ที่คุณใช้สำหรับ Push Notifications คุณควรพิจารณาลงทะเบียนรับ Push Notifications จากโปรเจ็กต์คอนโซลของนักพัฒนาแอปอื่น
ลงทะเบียนแอปพลิเคชันเพื่อรับการแจ้งเตือน
เมื่อคุณมีหัวข้อที่บัญชีบริการข้อความ Push ของ Classroom API เผยแพร่ได้ คุณจะลงทะเบียนรับการแจ้งเตือนได้โดยใช้เมธอด registrations.create()
เมธอด registrations.create()
จะตรวจสอบว่าบัญชีบริการ Push Notification สามารถเข้าถึงหัวข้อ Cloud Pub/Sub ที่ระบุได้ วิธีการจะดำเนินการไม่สำเร็จหากบัญชีบริการ Push Notification เข้าถึงหัวข้อไม่ได้ เช่น หัวข้อนั้นไม่มีอยู่หรือคุณยังไม่ได้ให้สิทธิ์เผยแพร่ในหัวข้อนั้น
การให้สิทธิ์
การเรียก registrations.create()
ต้องได้รับการให้สิทธิ์ด้วยโทเค็นการให้สิทธิ์ เช่นเดียวกับการเรียกใช้ Classroom API ทั้งหมด โทเค็นการตรวจสอบสิทธิ์นี้ต้องมีขอบเขตข้อความ Push (https://www.googleapis.com/auth/classroom.push-notifications
) และขอบเขตอื่นๆ ที่จําเป็นในการดูข้อมูลเกี่ยวกับการแจ้งเตือนที่ส่ง
- สำหรับฟีดการเปลี่ยนแปลงข้อมูลผู้เล่น หมายถึงขอบเขต "ข้อมูลผู้เล่น" หรือ (ตามหลักการแล้ว) ตัวแปรที่อ่านอย่างเดียวของข้อมูลผู้เล่น (
https://www.googleapis.com/auth/classroom.rosters.readonly
หรือhttps://www.googleapis.com/auth/classroom.rosters
) - สำหรับฟีดการเปลี่ยนแปลงงานในหลักสูตร หมายความว่าขอบเขตงานในหลักสูตรเวอร์ชัน "นักเรียน" หรือ (ตามหลักการแล้ว) ตัวแปรที่อ่านอย่างเดียว (
https://www.googleapis.com/auth/classroom.coursework.students.readonly
หรือhttps://www.googleapis.com/auth/classroom.coursework.students
)
หากต้องการให้ระบบส่งการแจ้งเตือน แอปพลิเคชันต้องเก็บการให้สิทธิ์ OAuth จากผู้ใช้ที่ได้รับอนุญาตซึ่งมีขอบเขตที่จําเป็น หากผู้ใช้ยกเลิกการเชื่อมต่อแอปพลิเคชัน การแจ้งเตือนจะหยุดลง โปรดทราบว่าปัจจุบันระบบยังไม่รองรับการมอบสิทธิ์ทั่วทั้งโดเมนเพื่อวัตถุประสงค์นี้ หากคุณพยายามลงทะเบียนรับการแจ้งเตือนโดยใช้สิทธิ์ที่มอบทั่วทั้งโดเมนเท่านั้น คุณจะได้รับข้อผิดพลาด @MissingGrant
การรับการแจ้งเตือน
การแจ้งเตือนจะเข้ารหัสด้วย JSON และมีข้อมูลต่อไปนี้
- ชื่อคอลเล็กชันที่มีทรัพยากรที่เปลี่ยนแปลง สําหรับการแจ้งเตือนเกี่ยวกับการเปลี่ยนแปลงบัญชีรายชื่อ จะเป็น
courses.students
หรือcourses.teachers
สำหรับการเปลี่ยนแปลงงานในหลักสูตร ตัวเลือกจะเป็นcourses.courseWork
หรือcourses.courseWork.studentSubmissions
- ตัวระบุของทรัพยากรที่มีการเปลี่ยนแปลงในแผนที่ แผนที่นี้ออกแบบมาเพื่อจับคู่อาร์กิวเมนต์กับเมธอด
get
ของทรัพยากรที่เหมาะสม สําหรับการแจ้งเตือนเกี่ยวกับการเปลี่ยนแปลงบัญชีรายชื่อ ฟิลด์courseId
และuserId
จะสร้างขึ้นและสามารถส่งไปยัง courses.students.get() หรือ courses.teachers.get() โดยไม่ต้องแก้ไข ในทํานองเดียวกัน การเปลี่ยนแปลงในคอลเล็กชัน courses.courseWork จะมีฟิลด์courseId
และid
ที่ส่งไปยัง courses.courseWork.get() โดยไม่ต้องแก้ไขได้ และการเปลี่ยนแปลงในคอลเล็กชัน courses.courseWork.studentSubmissions จะมีฟิลด์courseId
,courseWorkId
และid
ที่ส่งไปยัง courses.courseWork.studentSubmissions.get() โดยไม่ต้องแก้ไขได้
ข้อมูลโค้ดต่อไปนี้แสดงตัวอย่างการแจ้งเตือน
{
"collection": "courses.students",
"eventType": "CREATED",
"resourceId": {
"courseId": "12345",
"userId": "45678"
}
}
การแจ้งเตือนยังมีแอตทริบิวต์ข้อความ registrationId
ซึ่งมีตัวระบุสำหรับการลงทะเบียนที่ทําให้การแจ้งเตือนเกิดขึ้น ซึ่งสามารถใช้ร่วมกับ registrations.delete()
เพื่อยกเลิกการลงทะเบียนจากการแจ้งเตือน