אפשר להשתמש בשיטות באוסף Watches כדי לקבל התראות על שינויים בטפסים. בדף הזה מפורטת סקירה כללית מושגים והוראות להגדרה ולקבלה של התראות.
סקירה כללית
תכונת ההתראות ב-Google Forms API מאפשרת לאפליקציות להירשם לקבלת התראות כשנתונים משתנים בטפסים. ההתראות נשלחות לנושא ב-Cloud Pub/Sub, בדרך כלל תוך כמה דקות מרגע השינוי.
כדי לקבל התראות, צריך להגדיר נושא ב-Cloud Pub/Sub ולציין את שם הנושא כשיוצרים שעון לסוג האירוע המתאים.
בהמשך מפורטות הגדרות למושגים מרכזיים המופיעים בתיעוד הזה:
- יעד הוא מקום שאליו נשלחות הודעות. היעד היחיד שנתמך הוא נושא Cloud Pub/Sub.
- סוג אירוע הוא קטגוריית ההתראות שאפליקציית צד שלישי יכולה להירשם אליהן.
- שעון הוא הוראה ל-Forms API לשלוח התראות לגבי סוג אירוע מסוים בטופס מסוים ליעד.
אחרי שיוצרים שעון לסוג אירוע בטופס מסוים, קהל היעד של השעון (שהוא נושא ב-Cloud Pub/Sub) מקבל התראות מהאירועים שבטופס הזה עד שתוקף השעון יפוג. השעון פועל למשך שבוע, אבל אפשר להאריך אותו בכל שלב לפני שהתוקף שלו פג. לשם כך צריך לשלוח בקשה אל watches.renew().
לנושא ב-Cloud Pub/Sub מתקבלות התראות רק לגבי טפסים שאפשר להציג באמצעות פרטי הכניסה שאתם מספקים. לדוגמה, אם המשתמש מבטל את ההרשאה מהאפליקציה או מאבד את גישת העריכה לטופס שנצפה, לא יישלחו יותר התראות.
סוגי אירועים זמינים
בשלב זה, יש שתי קטגוריות של אירועים ב-Google Forms API:
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) או באמצעות סקר של נקודת קצה (endpoint) של מינוי.
כדי להגדיר נושאים ב-Cloud Pub/Sub, מבצעים את הפעולות הבאות:
- להשלים את הדרישות המוקדמות ל-Cloud Pub/Sub.
- הגדרת לקוח Cloud Pub/Sub
- בודקים את המחירון של Cloud Pub/Sub ומפעילים את החיוב בפרויקט ב-Developer Console.
אפשר ליצור נושאים ב-Cloud Pub/Sub באחת משלוש דרכים:
- באמצעות מסוף המפתחים (הכי קל)
- באמצעות כלי שורת הפקודה (לשימוש פרוגרמטי פשוט) או
- באמצעות Cloud Pub/Sub API.
יצירת מינוי ב-Cloud Pub/Sub כדי להנחות את Cloud Pub/Sub לשלוח את ההתראות שלכם.
לסיום, לפני שיוצרים שעונים שמטרגטים את הנושא, צריך להעניק הרשאה לחשבון השירות של ההתראות ב-Forms (forms-notifications@system.gserviceaccount.com) לפרסום בנושא שלכם.
יצירת שעון
אחרי שיוצרים נושא מחשבון שירות ההתראות של Forms API, אפשר ליצור בו התראות באמצעות method watches.create(). השיטה הזו מאמתת שאפשר לגשת לנושא Cloud Pub/Sub שסופק באמצעות חשבון שירות ההתראות, והיא לא מצליחה להגיע לנושא, למשל אם הנושא לא קיים או שלא נתתם לו הרשאה לפרסם בנושא הזה.
Python
Node.js
מחיקת שעון
Python
Node.js
הרשאה
כמו כל הקריאות ל-Forms API, גם הקריאות ל-watches.create()
חייבות להיות מאושרות באמצעות אסימון הרשאה. האסימון חייב לכלול היקף שמעניק גישת קריאה לנתונים לגבי ההתראות שנשלחות.
- כשמדובר בשינויי סכימה, מדובר בכל היקף עם גישת קריאה לטפסים דרך forms.get().
- בתשובות, פירוש הדבר הוא כל היקף שמעניק גישת קריאה לתשובות לטפסים, למשל דרך forms.responses.list().
כדי שההתראות יישלחו, האפליקציה צריכה לקבל מענק OAuth של המשתמש המורשה עם ההיקפים הנדרשים. אם המשתמש ינתק את האפליקציה, ההתראות ייפסקו וייתכן שהשעון יושעה עם הודעת שגיאה. חידוש השעון תוכלו לקרוא שוב את ההתראות אחרי קבלת ההרשאה מחדש.
הצגת רשימה של שעונים של טופס
Python
Node.js
חידוש של שעון
Python
Node.js
ויסות נתונים
ההתראות מווסתות – כל שעון יכול לקבל התראה אחת לכל היותר בכל 30 שניות. סף התדירות הזה עשוי להשתנות.
עקב הגבלת רוחב הפס, התראה יחידה עשויה להתייחס למספר אירועים. במילים אחרות, התראה מציינת אירוע אחד או יותר שהתרחשו מאז ההתראה האחרונה.
מגבלות
בכל שלב, עבור טופס וסוג אירוע מסוימים, כל פרויקט במסוף Cloud יכול לכלול:
- עד 20 צפיות בסך הכול
- עד שעון אחד לכל משתמש קצה
בנוסף, בכל שלב, כל טופס מוגבל ל-50 צפיות לכל סוג אירוע בסך הכול בכל הפרויקטים במסוף Cloud.
שעון משויך למשתמש קצה כשהוא נוצר או מתחדש עם פרטי הכניסה עבור אותו משתמש. שעון מושעה אם משתמש הקצה המשויך מאבד את הגישה לטופס או מבטל את הגישה של האפליקציה לטופס.
אמינות
כל צפייה מקבלת הודעה לפחות פעם אחת לאחר כל אירוע בכל הנסיבות מלבד החריגות. ברוב המקרים, ההתראה נשלחת תוך דקות ספורות לאחר האירוע.
שגיאות
אם ההתראות מהשעון לא מתקבלות כל הזמן, מצב השעון הופך ל-SUSPENDED
והשדה errorType
של השעון מוגדר. כדי לאפס את מצב השעון ל-ACTIVE
ולהמשיך לקבל התראות, קראו את המאמר חידוש השעון.
שימוש מוצע
- להשתמש בנושא אחד ב-Cloud Pub/Sub כיעד של שעונים רבים.
- כשמקבלים התראה בנושא מסוים, מזהה הטופס נכלל במטען הייעודי (payload) של ההתראות. כדאי להשתמש בה בשילוב עם סוג האירוע כדי לדעת אילו נתונים לאחזר ומאיזה טופס לאחזר אותם.
- כדי לאחזר נתונים מעודכנים אחרי התראה באמצעות
EventType.RESPONSES
, צריך לקרוא ל-forms.responses.list().- מגדירים את המסנן של הבקשה לערך
timestamp > timestamp_of_the_last_response_you_fetched
.
- מגדירים את המסנן של הבקשה לערך
- כדי לאחזר נתונים מעודכנים אחרי התראה באמצעות
EventType.SCHEMA
, צריך לקרוא ל-forms.get().