Classroom में डेटा में बदलाव होने पर सूचनाएं पाने के लिए, Registrations
कलेक्शन पर दिए गए तरीकों का इस्तेमाल किया जा सकता है.
इस लेख में, पुश नोटिफ़िकेशन पाने का तरीका बताया गया है. साथ ही, इसकी खास जानकारी भी दी गई है.
Classroom के पुश नोटिफ़िकेशन की खास जानकारी
Classroom API की पुश नोटिफ़िकेशन की सुविधा की मदद से, Classroom API का इस्तेमाल करने वाले ऐप्लिकेशन, Classroom में डेटा में बदलाव होने पर सूचनाएं पाने की सदस्यता ले सकते हैं. सूचनाएं, Cloud Pub/Sub विषय पर डिलीवर की जाती हैं. आम तौर पर, बदलाव होने के कुछ मिनटों के अंदर ही सूचनाएं डिलीवर हो जाती हैं.
पुश नोटिफ़िकेशन पाने के लिए, आपको Cloud Pub/Sub का कोई विषय सेट अप करना होगा. साथ ही, सूचनाओं के सही फ़ीड के लिए रजिस्ट्रेशन बनाते समय, उस विषय का नाम देना होगा.
इस दस्तावेज़ में इस्तेमाल किए गए मुख्य कॉन्सेप्ट की परिभाषाएं यहां दी गई हैं:
- डेस्टिनेशन वह जगह होती है जहां सूचनाएं भेजी जाती हैं.
- फ़ीड, सूचनाओं का एक टाइप है. तीसरे पक्ष का ऐप्लिकेशन, इसकी सदस्यता ले सकता है. उदाहरण के लिए, "कोर्स 1234 के लिए रोस्टर में बदलाव".
- रजिस्ट्रेशन, Classroom API को दिया जाने वाला निर्देश है. इससे किसी खास फ़ीड से सूचनाओं को डेस्टिनेशन पर डिलीवर किया जाता है.
किसी फ़ीड के लिए रजिस्ट्रेशन करने के बाद, उस रजिस्ट्रेशन के Cloud Pub/Sub विषय को उस फ़ीड से सूचनाएं मिलती रहेंगी, जब तक उसकी समयसीमा खत्म नहीं हो जाती. आपका रजिस्ट्रेशन एक हफ़्ते के लिए होता है. हालांकि, इसकी समयसीमा खत्म होने से पहले, इसे कभी भी बढ़ाया जा सकता है. इसके लिए, registrations.create()
से इसी तरह का अनुरोध करें.
आपके Cloud Pub/Sub विषय को सिर्फ़ उन संसाधनों के बारे में सूचनाएं मिलती हैं जिन्हें रजिस्ट्रेशन करते समय दिए गए क्रेडेंशियल की मदद से देखा जा सकता है. उदाहरण के लिए, अगर उपयोगकर्ता आपके ऐप्लिकेशन से अनुमति रद्द कर देता है या उसे शिक्षक के तौर पर हटा दिया जाता है, तो सूचनाएं नहीं भेजी जातीं.
फ़ीड के प्रकार
Classroom API फ़िलहाल, तीन तरह के फ़ीड उपलब्ध कराता है:
- हर डोमेन में डोमेन के लिए रोस्टर में हुए बदलाव फ़ीड होता है. इससे, जब छात्र-छात्राएं और शिक्षक उस डोमेन के कोर्स में शामिल होते हैं और उनसे बाहर निकलते हैं, तो सूचनाएं दिखती हैं.
- हर कोर्स में कोर्स के लिए रोस्टर में हुए बदलाव फ़ीड होता है. इसमें, छात्र-छात्राओं और शिक्षकों के कोर्स में शामिल होने और उससे बाहर निकलने पर सूचनाएं दिखती हैं.
- हर कोर्स में कोर्स के लिए कोर्स वर्क में हुए बदलाव फ़ीड होता है. इस फ़ीड से, उस कोर्स में कोर्स वर्क या छात्र-छात्राओं के सबमिट किए गए ऑब्जेक्ट बनाने या उनमें बदलाव करने पर सूचनाएं मिलती हैं.
Cloud Pub/Sub टॉपिक सेट अप करना
सूचनाएं, Cloud Pub/Sub के विषयों पर डिलीवर की जाती हैं. Cloud Pub/Sub से, आपको webhook पर सूचनाएं मिल सकती हैं. इसके अलावा, सदस्यता एंडपॉइंट को पोल करके भी सूचनाएं मिल सकती हैं.
Cloud Pub/Sub टॉपिक सेट अप करने के लिए, आपको ये काम करने होंगे:
- पक्का करें कि आपने Cloud Pub/Sub के लिए ज़रूरी शर्तें पूरी कर ली हों.
- Cloud Pub/Sub क्लाइंट सेट अप करें.
- Cloud Pub/Sub की कीमत देखें और अपने Developer Console प्रोजेक्ट के लिए बिलिंग की सुविधा चालू करें.
Developer Console में (सबसे आसान तरीका), कमांड लाइन टूल (कार्यक्रम के हिसाब से आसानी से इस्तेमाल करने के लिए) या Cloud Pub/Sub API का इस्तेमाल करके, Cloud Pub/Sub टॉपिक बनाएं. ध्यान दें कि Cloud Pub/Sub में सिर्फ़ सीमित संख्या में टॉपिक बनाए जा सकते हैं. इसलिए, सभी सूचनाएं पाने के लिए एक टॉपिक का इस्तेमाल करने से, यह पक्का होता है कि आपके ऐप्लिकेशन के लोकप्रिय होने पर, आपको स्केलिंग से जुड़ी समस्याएं न आएं.
Cloud Pub/Sub में सदस्यता बनाएं, ताकि Cloud Pub/Sub को सूचनाएं डिलीवर करने का तरीका बताया जा सके.
आखिर में, पुश नोटिफ़िकेशन के लिए रजिस्टर करने से पहले, आपको अपने विषय पर पब्लिश करने के लिए, पुश नोटिफ़िकेशन सेवा खाते (
classroom-notifications@system.gserviceaccount.com
) को अनुमति देनी होगी.
ध्यान दें: अगर आपने पुश नोटिफ़िकेशन सेवा खाते को अपने Cloud Pub/Sub विषय पर पब्लिश करने की अनुमति दी है, तो आपके Developer Console प्रोजेक्ट से अनुरोध करने वाले उपयोगकर्ता यह पता लगा पाएंगे कि वह विषय मौजूद है. साथ ही, वे उस पर सूचनाएं पाने के लिए रजिस्टर कर पाएंगे. कई ऐप्लिकेशन, OAuth क्लाइंट आईडी को क्लाइंट साइड पर सेव करते हैं. इसलिए, असली उपयोगकर्ता आपके Developer Console प्रोजेक्ट से अनुरोध कर सकते हैं. अगर यह शर्त आप पर लागू होती है और आपको इस बात की चिंता है कि एंड-उपयोगकर्ता आपके Cloud Pub/Sub विषय पर अनचाही सूचनाएं भेज सकते हैं या वे उन Cloud Pub/Sub विषयों के नाम जान सकते हैं जिनका इस्तेमाल पुश नोटिफ़िकेशन के लिए किया जाता है, तो आपको किसी दूसरे Developer Console प्रोजेक्ट से पुश नोटिफ़िकेशन के लिए रजिस्टर करना चाहिए.
सूचनाएं पाने के लिए अपना ऐप्लिकेशन रजिस्टर करना
जब आपके पास ऐसा विषय हो जिस पर Classroom API पुश नोटिफ़िकेशन सेवा खाता पब्लिश कर सकता है, तो registrations.create()
तरीके का इस्तेमाल करके, नोटिफ़िकेशन के लिए रजिस्टर किया जा सकता है. registrations.create()
तरीका यह पुष्टि करता है कि पुश नोटिफ़िकेशन सेवा खाते से, दिए गए Cloud Pub/Sub विषय को ऐक्सेस किया जा सकता है. अगर पुश नोटिफ़िकेशन सेवा खाता, विषय तक नहीं पहुंच पाता है, तो यह तरीका काम नहीं करता. उदाहरण के लिए, अगर विषय मौजूद नहीं है या आपने उसे उस विषय पर पब्लिश करने की अनुमति नहीं दी है.
अनुमति देना
Classroom API को किए जाने वाले सभी कॉल की तरह, registrations.create()
को किए जाने वाले कॉल के लिए भी अनुमति वाले टोकन की ज़रूरत होती है. पुष्टि करने वाले इस टोकन में, पुश नोटिफ़िकेशन का स्कोप (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()
के साथ किया जा सकता है.