דלגו לתוכן

חיבור Google Calendar

מדריך זה מראה כיצד לחבר את Google Calendar לסביבת עבודה. החיבור הוא לפי סביבת עבודה: הוא מסנכרן את האירועים של אותה סביבת עבודה אל Control Center, לקריאה בלבד. לתמונה המלאה ראו לוח שנה ותזמון.

  1. פתחו את לוח שנה בסרגל הצד.
  2. לחצו על הוסף חשבון לוח שנה בסרגל הצד של לוח השנה. (אותו קטע נמצא בהגדרות ← סביבת עבודה ← פרופיל וזהות, תחת Google Calendar.)
  3. בחרו כיצד לאשר:
    • שימוש באפליקציית ה-Google של Control Center — אין מה להגדיר. זו ברירת המחדל כשהבנייה שלכם כוללת כזו.
    • שימוש בלקוח Google Cloud משלי — הדביקו מזהה לקוח וסוד מהפרויקט שלכם (ראו הבאת לקוח Google משלכם).
  4. לחצו על חבר את Google Calendar. תיבת הדו-שיח מציגה קוד קצר וקישור לדף המכשיר של Google.
  5. פתחו את הדף הזה בכל מכשיר, הזינו את הקוד ואשרו את הגישה המבוקשת. תיבת הדו-שיח נסגרת מעצמה והאירועים שלכם מתחילים להסתנכרן.

השרת, ולא המכשיר שלכם, מריץ את החילוף הזה ושומר את אסימון הרענון שנוצר — ולכן הקוד מאושר ב“כל מכשיר” ולא דווקא באפליקציה הזו.

החשבון מחובר לסביבת העבודה הפעילה בלבד. החליפו סביבת עבודה ותראו במקום זאת את לוחות השנה של אותה סביבת עבודה.

זרימת החיבור מבקשת calendar.readonly וכן את כתובת האימייל שלכם — אותם היקפים עבור האפליקציה המובנית ועבור לקוח שאתם מדביקים. Control Center קורא אירועים; הוא אינו יוצר, עורך, מוחק או מגיב להזמנות ב-Google.

השרת הוא הבעלים של לוח הזמנים: הוא סורק את החשבונות המחוברים של כל סביבת עבודה כל שתי דקות וכותב את האירועים למסד הנתונים של סביבת העבודה. הלקוחות לעולם אינם מדברים עם Google — הם קוראים את מה שהשרת כתב.

הסריקה מצטברת. המעבר הראשון בכל לוח שנה מושך חלון מתגלגל (60 ימים אחורה, 90 ימים קדימה) ולוכד את אסימון הסנכרון של Google; מעברים מאוחרים יותר מציגים את האסימון הזה ומקבלים רק את מה שהשתנה, וזה מה שהופך קצב של שתי דקות לכדאי. החלון מעוגן מחדש בסנכרון מלא כל 24 שעות ובכל פעם ש-Google מבטל את תוקף האסימון.

אסימוני רענון יושבים בצד השרת ב-secrets.json תחת ספריית הנתונים של השרת, ונכתבים בהרשאת בעלים בלבד (0600) — לא במחזיק המפתחות של מערכת ההפעלה ולעולם לא במכשיר לקוח.

סביבת עבודה יכולה לחבר כמה חשבונות Google (למשל עבודה ואישי). חזרו על שלב החיבור עבור כל אחד מהם; האירועים שלהם ממוזגים לאותן תצוגות חודש / שבוע / סדר יום. כל חשבון מסתנכרן ומתרענן באופן עצמאי, וכל אחד יכול להתנתק בנפרד.

חיבור מחדש של חשבון שפג תוקפו

קטע בשם “חיבור מחדש של חשבון שפג תוקפו”

אם Google מבטלת באופן קבוע את האסימון של חשבון (הפעלה שבוטלה או שפג תוקפה מזמן), הסנכרון נעצר ו-Control Center מציג באנר חבר מחדש על לוח השנה, וכן התראת שולחן עבודה. לחצו על חבר מחדש ואשרו קוד חדש; הבאנר נעלם בסנכרון המוצלח הבא.

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

שרת שאין מחובר אליו ממשק גרפי מחבר את אותו חשבון מהטרמינל שלו:

חלון מסוף
GOOGLE_OAUTH_CLIENT_ID=<id> GOOGLE_OAUTH_CLIENT_SECRET=<secret> \
cc_server calendar connect --data-dir <dir> --workspace <workspace-id>

הוא מדפיס קוד וכתובת URL, ממתין לאישור, ואז שומר את האסימונים ומסנכרן בסריקה הבאה.

בנייה מהמקור אינה כוללת שום לקוח Google, ולכן יש חובה לספק מזהה וסוד — הגדירו GOOGLE_OAUTH_CLIENT_ID ו-GOOGLE_OAUTH_CLIENT_SECRET. אין דגל --google-client-id (דגלים לא מוכרים מתעלמים מהם). בלי זוג משתני הסביבה הפקודה מסתיימת בשגיאת לקוח חסר.

הבאת לקוח Google משלכם (פורקים ואירוח עצמי)

קטע בשם “הבאת לקוח Google משלכם (פורקים ואירוח עצמי)”

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

  1. בGoogle Cloud Console, הפעילו את Google Calendar API והגדירו את מסך ההסכמה של OAuth, תוך הוספת ההיקפים calendar.readonly, openid ו-email. כל עוד האפליקציה אינה מאומתת, הוסיפו את עצמכם כמשתמש בדיקה. הוספת calendar.events במסך ההסכמה אינה מפעילה אישור הגעה — Control Center לעולם אינו מבקש את ההיקף הזה.
  2. צרו מזהה לקוח OAuth מסוג האפליקציה TVs and limited input devices והעתיקו גם את מזהה הלקוח וגם את סוד הלקוח.
  3. ספקו אותם או לכל חיבור בנפרד (בחרו שימוש בלקוח Google Cloud משלי בתיבת הדו-שיח) או ברמת השרת עם GOOGLE_OAUTH_CLIENT_ID ו-GOOGLE_OAUTH_CLIENT_SECRET.

זוג ברמת השרת מחליף את הזוג המובנה בכל מקום, כולל מאחורי האפשרות “שימוש באפליקציית ה-Google של Control Center” — כך שבשרת שלכם, האפשרות הזו היא האפליקציה שלכם.

סוד הלקוח לעולם אינו יוצא מהשרת: שום תגובת RPC אינה נושאת אותו, וחשבון שמחובר דרך הלקוח של השרת עצמו שומר סמן במקום עותק של הזוג, כך שהחלפתו היא רק הפעלה מחדש עם ערך חדש.

תסמין סיבה סבירה
תיבת הדו-שיח אינה מציעה אפשרות מובנית הבנייה הזו אינה כוללת לקוח Google (בנייה מהמקור), או שהשרת הופעל עם חצי אחד בלבד מהזוג. נדרשים גם המזהה וגם הסוד
invalid_scope בעת תחילת הזרימה Calendar אינו מורשה עבור לקוח קוד מכשיר בפרויקט ה-Cloud הזה. השתמשו בפרויקט עם לקוח loopback או לקוח אינטרנט במקום
invalid_client מ-Google הלקוח אינו לקוח מסוג TVs and limited input devices, או שהמזהה והסוד הם משני לקוחות שונים
האישור מצליח אבל הסנכרון ריק החשבון שלכם אינו משתמש בדיקה במסך ההסכמה, או שההיקף calendar.readonly לא אושר
הקוד פג לפני שאישרתם אותו קודי מכשיר הם קצרי מועד. התחילו את החיבור מחדש כדי לקבל קוד חדש
“לא ניתן לעדכן את התשובה שלך” באישור הגעה צפוי: זרימת החיבור לעולם אינה מבקשת את calendar.events
הסנכרון נעצר עם אזהרת רענון בלוג השרת החשבון חובר עם לקוח שאינו מוגדר עוד. חברו את החשבון מחדש, או שחזרו את מזהה הלקוח והסוד האלה