התראות

במסמך הזה מוסבר איך להשתמש בהתראות דחיפה שמעדכנות את האפליקציה כשיש שינוי במשאב.

סקירה כללית

ממשק ה-API של Admin SDK מספק התראות דחיפה שמאפשרות לעקוב אחרי שינויים במשאבים. אפשר להשתמש בתכונה הזו כדי לשפר את הביצועים של את האפליקציה שלך. כך תוכלו לחסוך בעלויות הנוספות של הרשת והחישובים שנדרשים כדי לבדוק אם המשאבים השתנו. בכל פעם שמתבצע שינוי במשאב שנמצא במעקב, Admin SDK API שולח התראה לאפליקציה.

כדי להשתמש בהתראות, צריך לבצע שתי פעולות:

  • הגדרה של כתובת ה-URL המקבלת או ה-webhook של מכשיר הקריאה החוזרת (callback).

    זהו שרת HTTPS שמטפל בהודעות ההתראות של ה-API שמופעל כשיש שינוי במשאב.

  • מגדירים (ערוץ התראות) לכל נקודת קצה של משאב שרוצים שעון.

    בערוץ מצוינים פרטי הניתוב של הודעות ההתראות. כחלק מהגדרת הערוץ, עליך לציין את כתובת האתר הספציפית שבה שרוצים לקבל התראות. בכל פעם שהמשאב של הערוץ משתנה, נשלחת הודעת התראה מ-Admin SDK API בתור POST בקשה לכתובת ה-URL הזו.

בשלב הזה, Admin SDK API תומך בהתראות לגבי שינויים ב- משאב הפעילויות.

יצירת ערוצי התראות

כדי לבקש התראות, צריך להגדיר ערוץ התראות לכל משאב שאחריו רוצים לעקוב. אחרי שמגדירים את ערוצי ההתראות למעלה, ה-Admin SDK API יודיע לאפליקציה כאשר משאב כלשהו שנצפה שינויים.

שליחת בקשות לשעון

לכל משאב של Admin SDK API ניתן לצפייה משויך method watch ב-URI בצורה הבאה:

https://www.googleapis.com/API_NAME/API_VERSION/RESOURCE_PATH/watch

כדי להגדיר ערוץ התראות עבור הודעות על שינויים משאב מסוים, לשלוח בקשת POST watch של המשאב.

כל ערוץ התראות משויך גם למשתמש מסוים וגם למשאב מסוים (או לקבוצת משאבים). בקשת watch הפעולה תצליח, אלא אם המשתמש הנוכחי או חשבון שירות הוא הבעלים של המשאב הזה או שיש לו הרשאה לגשת אליו.

דוגמאות

הפורמט הכללי של כל בקשות המעקב למשאב הפעילויות הוא:

POST https://admin.googleapis.com/admin/reports/v1/activity/users/userKey or all/applications/applicationName/watch
Authorization: Bearer auth_token_for_current_user
Content-Type: application/json

{
  "id": "01234567-89ab-cdef-0123456789ab", // Your channel ID.
  "type": "web_hook",
  "address": "https://mydomain.com/notifications", // Your receiving URL.
  ...
  "token": "target=myApp-myFilesChannelDest", // (Optional) Your channel token.
  "payload": true, // (Optional) Whether to include the payload (message body) in notifications.
  "expiration": 3600 // (Optional) Your requested channel expiration time.
}

אפשר להשתמש בפרמטרים userKey, applicationName, eventName ו-filters כדי לקבל התראות רק לגבי אירועים, משתמשים או אפליקציות ספציפיים.

הערה: כדי להבהיר את הנושא, הדוגמאות הבאות לא כוללות את גוף הבקשה.

לעקוב אחרי כל הפעילויות של האדמינים:

POST https://admin.googleapis.com/admin/reports/v1/activity/users/all/applications/admin/watch

לצפייה בכל הפעילויות במסמכים:

POST https://admin.googleapis.com/admin/reports/v1/activity/users/all/applications/docs/watch

מעקב אחר פעילות אדמין של משתמש ספציפי:

POST https://admin.googleapis.com/admin/reports/v1/activity/users/liz@example.com/applications/admin/watch

צפייה באירוע ספציפי, כמו שינוי סיסמה של משתמש:

POST https://admin.googleapis.com/admin/reports/v1/activity/users/all/applications/admin/watch?eventName=CHANGE_PASSWORD

מעקב אחר שינויים במסמך ספציפי:

POST https://admin.googleapis.com/admin/reports/v1/activity/users/all/applications/docs/watch?eventName=EDIT&filters==doc_id=123456abcdef

מאפיינים נדרשים

בכל בקשה ל-watch, צריך לספק את השדות הבאים:

  • מחרוזת של מאפיין id שמזהה באופן ייחודי את ערוץ ההתראות החדש הזה בפרויקט. מומלץ להשתמש מזהה ייחודי אוניברסלי UUID או כל מזהה דומה מחרוזת ייחודית. אורך מקסימלי: 64 תווים.

    ערך המזהה שהגדרתם יופיע שוב בכותרת ה-HTTP‏ X-Goog-Channel-Id של כל הודעת התראה שתקבלו לגבי הערוץ הזה.

  • מחרוזת מאפיין type שהוגדרה לערך web_hook.

  • מחרוזת של מאפיין address שמוגדרת לכתובת ה-URL שמקשיבה להתראות בערוץ ההתראות הזה ומגיבה להן. הדבר את כתובת ה-URL לקריאה חוזרת של webhook, והיא חייבת להשתמש ב-HTTPS.

    לתשומת ליבך, ל-Admin SDK API יש אפשרות לשלוח התראות אל את כתובת ה-HTTPS הזו רק אם מותקן אישור SSL חוקי בשרת האינטרנט שלך. אישורים לא חוקיים כוללים:

    • אישורים בחתימה עצמית
    • אישורים שחתומים על ידי מקור לא מהימן
    • אישורים שבוטלו.
    • אישורים שיש להם נושא שלא תואם לשם המארח היעד.

מאפיינים אופציונליים

אפשר גם לציין את השדות האופציונליים הבאים בבקשה watch:

  • מאפיין token שמציין מחרוזת שרירותית שישמש כאסימון ערוץ. אפשר להשתמש בערוץ ההתראות למטרות שונות. לדוגמה, אפשר להשתמש כדי לאמת שכל הודעה נכנסת היא עבור ערוץ נוצרה כדי לוודא שההתראה לא מזויפת — או לנתב את ההודעה ליעד הנכון במסגרת בהתאם למטרה של הערוץ הזה. אורך מקסימלי: 256 תווים.

    האסימון כלול כותרת HTTP אחת (X-Goog-Channel-Token) בכל התראה הודעה שהאפליקציה שלך מקבלת עבור הערוץ הזה.

    אם אתם משתמשים באסימונים של ערוצי התראות, מומלץ:

    • שימוש בפורמט קידוד שניתן להרחבה, כמו פרמטרים של שאילתות של כתובות URL. לדוגמה: forwardTo=hr&createdBy=mobile

    • אין לכלול מידע אישי רגיש כמו אסימוני OAuth.

  • מחרוזת המאפיין expiration שהוגדרה היא חותמת זמן של Unix (באלפיות שנייה) של התאריך והשעה שבהם רוצים ש-Admin SDK API יפעל להפסיק לשלוח הודעות עבור ערוץ ההתראות הזה.

    אם לערוץ יש מועד תפוגה, הוא נכלל בערך של כותרת ה-HTTP X-Goog-Channel-Expiration (בטקסט קריא לאנשים) ) בכל הודעת התראה שמקבלת עבור הערוץ הזה.

פרטים נוספים על הבקשה מופיעים בשיטה watch של המשאב Activities במסמך העזרה של ה-API.

צפייה בתגובה

אם הבקשה watch יוצרת ערוץ התראות בהצלחה, היא מחזירה את קוד הסטטוס 200 OK של HTTP.

גוף ההודעה בתגובה לצפייה מכיל מידע על ערוץ ההתראות שיצרתם, כפי שמוצג בדוגמה הבאה.

{
  "kind": "api#channel",
  "id": "reportsApiId", // ID you specified for this channel.
  "resourceId": "o3hgv1538sdjfh", // ID of the watched resource.
  "resourceUri": "https://admin.googleapis.com/admin/reports/v1/activity/userKey/applications/applicationName", // Version-specific ID of the watched resource.
  "token": "target=myApp-myFilesChannelDest", // Present only if one was provided.
  "expiration": 3600, // Actual expiration time as Unix timestamp (in ms), if applicable.
}

בנוסף למאפיינים ששלחתם כחלק מהבקשה, המידע המוחזר כולל גם את הערכים resourceId ו-resourceUri כדי לזהות את המשאב שנמצא במעקב בערוץ ההתראות הזה.

אפשר להעביר את המידע שהוחזר לערוץ התראות אחר פעולות, כמו מצבים שבהם רוצים להפסיק לקבל התראות.

פרטים נוספים על התגובה מופיעים בשיטה watch של המשאב Activities בהפניית ה-API.

סנכרון ההודעה

אחרי שיוצרים ערוץ התראות כדי לצפות במשאב, נשלחת הודעת sync על ידי Admin SDK API כדי לציין ש ההתראות מתחילות. ה-HTTP X-Goog-Resource-State ערך הכותרת של ההודעות האלה הוא sync. בהתאם לרשת בעיות תזמון, ייתכן שתקבלו את ההודעה sync עוד לפני שקיבלת את התשובה בשיטה watch.

אפשר להתעלם מההתראה sync, אבל אפשר להשתמש בו. לדוגמה, אם אתם מחליטים שאתם לא רוצים לשמור את הערוץ, תוכלו להשתמש בערכים X-Goog-Channel-ID ו-X-Goog-Resource-ID בקריאה כדי להפסיק לקבל התראות. אפשר גם להשתמש התראה אחת (sync) לביצוע אתחול כהכנה לקראת אירועים מאוחרים יותר.

הפורמט של sync הודעות שאליהן נשלח על ידי Admin SDK API כתובת ה-URL המקבלת מוצגת למטה.

POST https://mydomain.com/notifications // Your receiving URL.
X-Goog-Channel-ID: channel-ID-value
X-Goog-Channel-Token: channel-token-value
X-Goog-Channel-Expiration: expiration-date-and-time // In human-readable format. Present only if the channel expires.
X-Goog-Resource-ID: identifier-for-the-watched-resource
X-Goog-Resource-URI: version-specific-URI-of-the-watched-resource
X-Goog-Resource-State: sync
X-Goog-Message-Number: 1

להודעות סנכרון תמיד יש ערך 1 בכותרת ה-HTTP X-Goog-Message-Number. לכל התראות נוספות בערוץ הזה יהיה מספר הודעה גדול יותר מהקודם, אבל מספרי ההודעות לא יהיו ברצף.

חידוש ערוצי התראות

לערוץ התראות יכול להיות מועד תפוגה, והערך שלו נקבע לפי הבקשה שלכם או לפי מגבלות פנימיות או הגדרות ברירת מחדל של Admin SDK API (המערכת משתמשת בערך המחמיר יותר). תאריך התפוגה של הערוץ, אם יש לו כזה, נכלל כחותמת זמן של Unix (באלפיות השנייה) במידע שמוחזר על ידי השיטה watch. בנוסף, התאריך ושעת התפוגה נכללים (בפורמט קריא לאנשים) בכל הודעת התראה שהאפליקציה מקבלת לגבי הערוץ הזה כותרת HTTP X-Goog-Channel-Expiration.

בשלב זה אין דרך אוטומטית לחדש ערוץ התראות. מתי התוקף של הערוץ עומד לפוג, עליכם להחליף אותו בערוץ חדש על ידי שליחת קריאה השיטה watch. כמו תמיד, צריך להשתמש בערך ייחודי עבור מאפיין id של הערוץ החדש. שימו לב: סביר להניח להיות 'חפיפה'. פרק זמן שבו שני ערוצי ההתראות של פעילים.

קבלת התראות

בכל פעם שמשאב שנצפה משתנה, האפליקציה שלכם מקבלת הודעת התראה שמתארת את השינוי. Admin SDK API שולח את התגים האלה הודעות בתור HTTPS POST כבקשות לכתובת ה-URL שציינת נכס address להודעה הזו .

איך לפרש את הפורמט של הודעת ההתראה

כל הודעות ההתראות כוללות קבוצה של כותרות HTTP עם תחיליות X-Goog-. סוגים מסוימים של התראות יכולים לכלול גם גוף ההודעה.

כותרות

הודעות התראה שפורסמו על ידי Admin SDK API לכתובת ה-URL המקבלת כוללות את כותרות ה-HTTP הבאות:

שם תיאור
מוצג תמיד
X-Goog-Channel-ID מזהה UUID או מחרוזת ייחודית אחרת שסיפקתם לזיהוי ערוץ ההתראות הזה.
X-Goog-Message-Number מספר שלם שמזהה את ההודעה הזו בערוץ ההתראות הזה. הערך הוא תמיד 1 עבור הודעות sync. ההודעה המספרים גדלים עבור כל הודעה נוספת בערוץ, אבל לא ברצף.
X-Goog-Resource-ID ערך אטום שמזהה את המשאב במעקב. המזהה הזה הוא יציבות בכל גרסאות API.
X-Goog-Resource-State מצב המשאב החדש שהפעיל את ההתראה. ערכים אפשריים: sync או שם אירוע.
X-Goog-Resource-URI מזהה ספציפי לגרסת ה-API של המשאב שנצפה.
לפעמים
X-Goog-Channel-Expiration התאריך והשעה של תפוגת ערוץ ההתראות, בפורמט שקריא לבני אדם. מוצג רק אם מוגדר.
X-Goog-Channel-Token אסימון ערוץ ההתראות שהוגדר על ידי האפליקציה שלך, וגם שאפשר להשתמש בו כדי לאמת את מקור ההתראה. מוצג רק אם הוא מוגדר.

הודעות התראות על פעילויות מכילות את המידע הבא בגוף הבקשה:

נכס תיאור
kind מזהה את המשאב הזה כמשאב Activity. ערך: המחרוזת הקבועה "admin#reports#activity".
id המזהה הייחודי של רשומת הפעילות.
id.time שעת התרחשות הפעילות. הערך הוא בפורמט תאריך ושעה לפי ISO 8601. השעה היא התאריך המלא בתוספת שעות, דקות ושניות בפורמט YYYY-MM-DDThh:mm:ssTZD. לדוגמה, 2010-04-05T17:30:04+01:00.
id.uniqueQualifier מגדיר ייחודי אם ליותר מאירוע אחד יש את אותה שעה.
id.applicationName שם האפליקציה שאליה שייך האירוע. הערכים האפשריים כוללים:
id.customerId המזהה הייחודי של חשבון Google Workspace.
actor המשתמש שמבצע את הפעולה.
actor.callerType סוג המחבר שביצע את הפעילות הרשומה בדוח. בגרסה הזו של ה-API, השדה callerType הוא בקשת הישות USER או OAuth 2LO שביצעה את הפעולה שמופיעה בדוח .
actor.email כתובת האימייל הראשית של המשתמש שמדווח על הפעילויות שלו.
actor.profileId המזהה הייחודי של המשתמש ב-Google Workspace.
ownerDomain הדומיין של מסוף Admin או של בעלי המסמך של האפליקציה Docs. זהו הדומיין שמושפע מהאירוע בדוח.
ipAddress כתובת ה-IP של המשתמש שמבצע את הפעולה. זוהי כתובת ה-IP של המשתמש בזמן ההתחברות ל-Google Workspace. ייתכן שהיא תשקף את המיקום הפיזי של המשתמש, וייתכן שלא. לדוגמה, כתובת ה-IP יכולה להיות כתובת שרת ה-proxy של המשתמש או כתובת של רשת וירטואלית פרטית (VPN). ה-API תומך ב-IPv4 וב-IPv6.
events[] אירועי פעילות בדוח.
events[].type סוג האירוע. השירות או התכונה ב-Google Workspace שהאדמין משנה מזוהים במאפיין type, שמזהה אירוע באמצעות המאפיין eventName.
events[].name שם האירוע. זהו השם הספציפי של הפעילות שדווחה על ידי ה-API. כל eventName קשור לשירות או לתכונה ספציפיים של Google Workspace, שממשק ה-API מארגן לפי סוגי אירועים.
לגבי פרמטרים של בקשות eventName באופן כללי:
  • אם לא מציינים eventName, הדוח מחזיר את כל המופעים האפשריים של eventName.
  • כשמבקשים eventName, התשובה של ה-API מחזירה את כל הפעילויות שמכילות את eventName. יכול להיות שלפעילויות שחוזרות יהיו מאפייני eventName אחרים בנוסף למאפיין המבוקש.
events[].parameters[] צמדים של ערכי פרמטרים לאפליקציות שונות.
events[].parameters[].name שם הפרמטר.
events[].parameters[].value ערך המחרוזת של הפרמטר.
events[].parameters[].intValue ערך המספר השלם של הפרמטר.
events[].parameters[].boolValue ערך בוליאני של הפרמטר.

דוגמאות

הודעות ההתראה על אירועים של משאבי Activity הן בפורמט הכללי הבא:

POST https://mydomain.com/notifications // Your receiving URL.
Content-Type: application/json; utf-8
Content-Length: 0
X-Goog-Channel-ID: reportsApiId
X-Goog-Channel-Token: 398348u3tu83ut8uu38
X-Goog-Channel-Expiration: Tue, 29 Oct 2013 20:32:02 GMT
X-Goog-Resource-ID:  ret08u3rv24htgh289g
X-Goog-Resource-URI: https://admin.googleapis.com/admin/reports/v1/activity/userKey/applications/applicationName
X-Goog-Resource-State:  eventName
X-Goog-Message-Number: 10

{
  "kind": "admin#reports#activity",
  "id": {
    "time": datetime,
    "uniqueQualifier": long,
    "applicationName": string,
    "customerId": string
  },
  "actor": {
    "callerType": string,
    "email": string,
    "profileId": long
  },
  "ownerDomain": string,
  "ipAddress": string,
  "events": [
    {
      "type": string,
      "name": string,
      "parameters": [
        {
          "name": string,
          "value": string,
          "intValue": long,
          "boolValue": boolean
        }
      ]
    }
  ]
}

דוגמה לאירוע של פעילות אדמין:

POST https://mydomain.com/notifications // Your receiving URL.
Content-Type: application/json; utf-8
Content-Length: 596
X-Goog-Channel-ID: reportsApiId
X-Goog-Channel-Token: 245t1234tt83trrt333
X-Goog-Channel-Expiration: Tue, 29 Oct 2013 20:32:02 GMT
X-Goog-Resource-ID:  ret987df98743md8g
X-Goog-Resource-URI: https://admin.googleapis.com/admin/reports/v1/activity/users/all/applications/admin?alt=json
X-Goog-Resource-State:  CREATE_USER
X-Goog-Message-Number: 23

{
  "kind": "admin#reports#activity",
  "id": {
    "time": "2013-09-10T18:23:35.808Z",
    "uniqueQualifier": "-0987654321",
    "applicationName": "admin",
    "customerId": "ABCD012345"
  },
  "actor": {
    "callerType": "USER",
    "email": "admin@example.com",
    "profileId": "0123456789987654321"
  },
  "ownerDomain": "apps-reporting.example.com",
  "ipAddress": "192.0.2.0",
  "events": [
    {
      "type": "USER_SETTINGS",
      "name": "CREATE_USER",
      "parameters": [
        {
          "name": "USER_EMAIL",
          "value": "liz@example.com"
        }
      ]
    }
  ]
}

תגובה להודעות

כדי לציין הצלחה, אפשר להחזיר כל אחד מקודי הסטטוס הבאים: 200, 201, 202, 204, או 102

אם השירות משתמש בספריית הלקוח של Google API ומחזירה את ה-Admin SDK API, 500, 502, 503 או 504 ניסיונות חוזרים עם השהיה מעריכית לפני ניסיון חוזר (exponential backoff). כל קוד סטטוס אחר של החזרה נחשב לכשל בהודעה.

הסבר על אירועי התראות של Admin SDK API

בקטע הזה אנחנו מפרטים על הודעות ההתראות שאפשר לקבל לקבל כשהם משתמשים בהתראות עם Admin SDK API.

התראות ה-push של Reports API מכילות שני סוגים של הודעות: הודעות סנכרון והתראות על אירועים. סוג ההודעה מצוין בכותרת ה-HTTP X-Goog-Resource-State. הערכים האפשריים להתראות לגבי אירועים זהים לאלה של השיטה activities.list. לכל אפליקציה יש אירועים ייחודיים:

עצירת ההתראות

המאפיין expiration קובע מתי ההתראות ייפסקו באופן אוטומטי. כדי להפסיק לקבל התראות מערוץ מסוים לפני שתוקף ההרשאה שלו יפוג, אפשר להפעיל את השיטה stop ב-URI הבא:

https://www.googleapis.com/admin/reports_v1/channels/stop

בשיטה הזו צריך לספק לפחות את המאפיינים id ו-resourceId של הערוץ, כפי שמתואר בדוגמה הבאה. הערה: אם ה-Admin SDK API כולל כמה סוגים של משאבים שיש להם watch methods, יש רק אחת stop.

רק משתמשים עם ההרשאה המתאימה יכולים להפסיק את השידור של ערוץ. הקפידו במיוחד על הדברים הבאים:

  • אם הערוץ נוצר על ידי חשבון משתמש רגיל, רק אותו משתמש מאותו לקוח (שזוהה לפי מזהי הלקוח מסוג OAuth 2.0 מאסימוני האימות) שיצר את הערוץ יכול להפסיק אותו.
  • אם הערוץ נוצר על ידי חשבון שירות, כל משתמש מאותו לקוח יכול להפסיק את הערוץ.

דוגמת הקוד הבאה מראה איך להפסיק לקבל התראות:

POST https://www.googleapis.com/admin/reports_v1/channels/stop
  
Authorization: Bearer CURRENT_USER_AUTH_TOKEN
Content-Type: application/json

{
  "id": "4ba78bf0-6a47-11e2-bcfd-0800200c9a66",
  "resourceId": "ret08u3rv24htgh289g"
}