نود Google Calendar در n8n
نود Google Calendar در n8n به شما کمک میکند رویدادهای تقویم گوگل را بهصورت خودکار ایجاد، ویرایش، جستجو و مدیریت کنید؛ یا با دریافت تغییرات، ورکفلوهای زمانبندی و هماهنگسازی را بسازید. اگر در پروژهها با رزرو جلسه، یادآوریها، برنامهریزی تیمی یا همگامسازی رویدادها با CRM و ابزارهای پیامرسان سروکار دارید، این نود یکی از کاربردیترین گزینههاست.
معرفی نود در n8n
نود Google Calendar یک نود یکپارچهسازی (Integration) با سرویس Google Calendar است که به شما اجازه میدهد عملیات رایج روی رویدادها و تقویمها را انجام دهید و در برخی سناریوها با تریگرها، تغییرات را دریافت کنید.
- کارکرد اصلی: مدیریت رویدادها (Events) و تقویمها (Calendars) در Google Calendar
- دستهبندی نود: Integration (و در صورت استفاده از تریگرهای مرتبط: Trigger)
- اهمیت در ورکفلوها: خودکارسازی هماهنگی جلسات، ساخت یادآوری، همگامسازی بین ابزارها، کاهش خطای انسانی و صرفهجویی زمان
موارد استفاده
۱) ساخت جلسه از روی فرم یا تیکت
وقتی کاربر فرمی را پر میکند (مثلاً درخواست جلسه مشاوره)، یک رویداد در تقویم ساخته میشود و جزئیات جلسه به ایمیل/تلگرام ارسال میگردد.
- نودهای پیشنهادی: Webhook → Set/Date & Time → Google Calendar (Create Event) → Gmail/Telegram
۲) همگامسازی رویدادها با CRM
هر رویداد جدید یا تغییر در زمان جلسه در تقویم، در CRM ثبت یا بهروزرسانی میشود تا تیم فروش همیشه اطلاعات دقیق داشته باشد.
- نودهای پیشنهادی: Google Calendar Trigger → HubSpot/Salesforce → Slack
۳) جلوگیری از رزرو همزمان (Double Booking)
قبل از ایجاد جلسه، بازه زمانی را در تقویم بررسی کنید. اگر آزاد بود رویداد بسازید و اگر نبود، زمانهای پیشنهادی را برگردانید.
- نودهای پیشنهادی: Webhook → Google Calendar (Get Many/Search Events) → IF → Google Calendar (Create Event) / Respond to Webhook
۴) گزارش روزانه جلسات برای تیم
هر روز صبح لیست رویدادهای امروز خوانده میشود و به شکل خلاصه برای تیم ارسال میگردد.
- نودهای پیشنهادی: Cron → Google Calendar (Get Many Events) → Function → Slack/Email
۵) تولید خودکار لینک جلسه آنلاین
در زمان ساخت رویداد، اطلاعات جلسه آنلاین (مثل Google Meet) به رویداد اضافه میشود و لینک آن برای شرکتکنندگان ارسال میگردد.
- نودهای پیشنهادی: Google Calendar (Create Event با Conference Data) → Gmail
پارامترها و تنظیمات
نام فیلدها ممکن است بسته به نسخه n8n کمی متفاوت باشد، اما مفاهیم و کاربردها ثابت هستند. در n8n معمولاً ابتدا Resource و Operation را انتخاب میکنید و سپس فیلدهای اختصاصی همان عملیات نمایش داده میشود.
۱) Authentication (احراز هویت)
- Credentials (نوع: Credential)
اتصال به حساب Google. معمولاً بهصورت OAuth2 انجام میشود.
مثال عملی: اتصال به حساب company@gmail.com برای دسترسی به تقویم تیم فروش.
- Scopes (نوع: انتخابی/تنظیمات Credential)
سطح دسترسی به تقویم. برای ایجاد/ویرایش رویدادها باید scope مناسب (مانند دسترسی خواندن/نوشتن) فعال باشد.
نکته: اگر فقط خواندن نیاز دارید، اسکوپ محدودتر انتخاب کنید تا امنیت بیشتر شود.
۲) Resource و Operation
- Resource (نوع: گزینهای)
انتخاب نوع شیء: معمولاً Event یا Calendar.
مثال: Resource = Event برای ساخت/جستجوی رویدادها.
- Operation (نوع: گزینهای)
عملیات موردنظر روی Resource، مانند Create، Update، Delete، Get، Get Many/Search.
مثال: Operation = Create برای ساخت رویداد جدید.
۳) پارامترهای رایج برای Event
- Calendar یا Calendar ID (نوع: String)
شناسه تقویم مقصد. میتواند Primary یا یک Calendar ID خاص باشد.
مثال: primary یا calendarId مثل company.com_abcdef123@group.calendar.google.com
- Event ID (نوع: String)
برای عملیات Get/Update/Delete لازم است.
مثال: از خروجی Create Event مقدار id را بگیرید و در Update استفاده کنید.
- Summary / Title (نوع: String)
عنوان رویداد.
مثال: جلسه دمو محصول با مشتری A
- Description (نوع: String)
توضیحات رویداد، مناسب برای افزودن لینکها، دستور جلسه، شماره تماس.
مثال: دستور جلسه: معرفی ویژگیها + پرسش و پاسخ
- Location (نوع: String)
آدرس یا موقعیت.
مثال: تهران، خیابان… یا Online
- Start (نوع: DateTime)
زمان شروع. بهتر است با فرمت ISO 8601 باشد.
مثال: 2026-02-01T10:00:00+03:30
- End (نوع: DateTime)
زمان پایان.
مثال: 2026-02-01T10:30:00+03:30
- Time Zone (نوع: String)
منطقه زمانی رویداد. اگر تنظیم نشود، ممکن است از تنظیمات تقویم/اکانت استفاده شود.
مثال: Asia/Tehran
نکته: در سناریوهای بینالمللی، تنظیم صریح Time Zone از خطاهای یکساعته جلوگیری میکند.
- All-day Event (نوع: Boolean)
اگر رویداد تمامروز است، به جای dateTime معمولاً date استفاده میشود.
مثال: یک تعطیلی شرکت یا رویداد نمایشگاهی.
- Attendees (نوع: Array of Objects)
لیست شرکتکنندگان با ایمیل.
مثال: [{“email”:”user1@domain.com”},{“email”:”user2@domain.com”}]
نکته: برای ارسال دعوتنامه، معمولاً باید گزینه ارسال آپدیتها نیز فعال باشد.
- Send Updates (نوع: گزینهای)
مشخص میکند دعوتنامه/آپدیتها برای شرکتکنندگان ارسال شود یا نه.
مثال: all برای ارسال به همه، none برای عدم ارسال.
- Reminders (نوع: Object)
یادآورها (پاپآپ، ایمیل) با دقیقه قبل از شروع.
مثال: 30 دقیقه قبل Popup و 24 ساعت قبل Email.
- Recurrence (نوع: Array of String)
قوانین تکرارشونده با فرمت RRULE.
مثال: [“RRULE:FREQ=WEEKLY;BYDAY=MO,WE;COUNT=10”]
- Conference Data (نوع: Object)
برای ساخت لینک جلسه آنلاین (مانند Google Meet) هنگام ایجاد رویداد.
مثال: فعالسازی ایجاد کنفرانس و گرفتن meetLink از خروجی.
نکته: ممکن است نیازمند تنظیمات و مجوزهای بیشتر در Google باشد.
- Visibility (نوع: گزینهای)
سطح نمایش رویداد: default/public/private.
مثال: private برای جلسات داخلی حساس.
۴) پارامترهای رایج برای عملیات Get Many/Search
- Time Min (نوع: DateTime)
شروع بازه جستجو.
مثال: 2026-02-01T00:00:00+03:30
- Time Max (نوع: DateTime)
پایان بازه جستجو.
مثال: 2026-02-01T23:59:59+03:30
- Query (q) (نوع: String)
جستجو در عنوان/توضیحات.
مثال: “Demo” برای پیدا کردن جلسات دمو
- Single Events (نوع: Boolean)
اگر true باشد، رویدادهای تکرارشونده به رخدادهای منفرد تبدیل و لیست میشوند.
مثال: برای گزارش روزانه جلسات تکرارشونده، این گزینه معمولاً باید فعال باشد.
- Order By (نوع: گزینهای)
مرتبسازی، مثلاً بر اساس startTime.
مثال: startTime برای نمایش جلسات به ترتیب زمان.
- Max Results (نوع: Number)
حداکثر تعداد آیتمها.
مثال: 50
نکات مهم هنگام پیکربندی
- فرمت تاریخ و زمان را ISO 8601 نگه دارید و Time Zone را صریح تنظیم کنید، مخصوصاً اگر دادهها از سیستمهای دیگر میآید.
- برای جلوگیری از تداخل زمانی، قبل از Create Event یک جستجوی بازهای انجام دهید و نتیجه را شرطی کنید.
- اگر با شرکتکنندگان کار میکنید، گزینه Send Updates را آگاهانه انتخاب کنید تا ناخواسته ایمیل انبوه ارسال نشود.
- در رویدادهای تمامروز، معمولاً باید از date (بدون ساعت) استفاده شود؛ در غیر اینصورت ممکن است رویداد در یک روز دیگر نمایش داده شود.
ورودیها و خروجیها
ورودی (Input)
ورودی نود از آیتمهای n8n میآید. شما میتوانید فیلدها را ثابت وارد کنید یا با Expression از دادههای نودهای قبلی استفاده کنید (مثل {{$json.email}} یا {{$json.start}}).
نمونه ورودی برای ساخت رویداد (ساختار پیشنهادی داده قبل از ورود به نود):
{ "calendarId": "primary", "summary": "جلسه دمو محصول", "description": "لینک پرونده مشتری: https://crm.example.com/deal/123", "start": "2026-02-01T10:00:00+03:30", "end": "2026-02-01T10:30:00+03:30", "timeZone": "Asia/Tehran", "attendees": [ { "email": "customer@example.com" }, { "email": "sales@example.com" } ], "sendUpdates": "all"}
خروجی (Output)
خروجی معمولاً آبجکت رویداد ساخته/دریافتشده از Google Calendar است. فیلدهای مهمی که در اتوماسیونها زیاد استفاده میشوند شامل id، htmlLink، start، end، attendees و در صورت ساخت کنفرانس، لینک جلسه (مثل hangoutLink یا ورودیهای conferenceData) است.
نمونه خروجی خلاصهشده:
{ "id": "7p9k3a1b2cdefg", "status": "confirmed", "htmlLink": "https://www.google.com/calendar/event?eid=....", "summary": "جلسه دمو محصول", "description": "لینک پرونده مشتری: https://crm.example.com/deal/123", "start": { "dateTime": "2026-02-01T10:00:00+03:30", "timeZone": "Asia/Tehran" }, "end": { "dateTime": "2026-02-01T10:30:00+03:30", "timeZone": "Asia/Tehran" }, "attendees": [ { "email": "customer@example.com", "responseStatus": "needsAction" }, { "email": "sales@example.com", "responseStatus": "accepted" } ], "hangoutLink": "https://meet.google.com/abc-defg-hij"}
نکات پیشرفته و ترفندها
۱) جلوگیری از ساخت رویداد تکراری با کلید یکتا
یک شناسه یکتا برای جلسه بسازید (مثلاً ترکیب ایمیل + تاریخ) و آن را در Description یا یک فیلد قابل جستجو ذخیره کنید. قبل از ایجاد رویداد، با Query آن را جستجو کنید؛ اگر وجود داشت، Update انجام دهید.
- ترکیب پیشنهادی: Set (ساخت uniqueKey) → Google Calendar (Search) → IF → Create/Update
۲) مدیریت Time Zone و تبدیل زمان
اگر زمان از سیستم دیگری میآید (مثلاً UTC)، قبل از ارسال به Google Calendar آن را تبدیل کنید. استفاده از نودهای Date & Time یا Function برای تبدیل زمان، خطاهای رایج را کم میکند.
۳) ساخت کنفرانس (Google Meet) و ارسال لینک در کانالهای مختلف
پس از Create Event، لینک جلسه را از خروجی بردارید و با نودهایی مثل Gmail، Slack یا WhatsApp Cloud API ارسال کنید. برای تیمهای عملیاتی، ارسال لینک در پیامرسان سرعت هماهنگی را بالا میبرد.
۴) صفحهبندی و مدیریت حجم داده
در Get Many اگر تعداد رویدادها زیاد است، Max Results را مدیریت کنید و در صورت نیاز، بازه زمانی را کوچکتر کنید (مثلاً روزانه/هفتگی) تا اجرای ورکفلو سبکتر شود.
۵) الگوی استاندارد “بررسی آزاد بودن زمان”
- یک بازه زمانی پیشنهادی از ورودی بگیرید
- رویدادهای آن بازه را جستجو کنید
- اگر خروجی خالی بود Create Event
- اگر پر بود، زمانهای جایگزین تولید و پاسخ دهید
محدودیتها و خطاها
محدودیتها
- وابستگی کامل به مجوزهای OAuth و اسکوپها؛ اگر اسکوپ کافی نباشد، عملیات Create/Update/Attendees انجام نمیشود.
- برخی امکانات پیشرفته Google Calendar (جزئیات بسیار خاص conference providerها یا سیاستهای سازمانی) ممکن است به تنظیمات اکانت/Workspace وابسته باشد و صرفاً از طریق نود قابل حل نباشد.
- محدودیت نرخ درخواست (Rate Limit) از سمت Google؛ در حجم بالا باید با فاصلهگذاری یا تجمیع درخواستها کار کرد.
خطاهای رایج و راهحلها
- 403 Forbidden / insufficientPermissions
علت: اسکوپ یا دسترسی کافی نیست، یا تقویم متعلق به اکانت دیگری است.
راهحل: Credential را بررسی کنید، اسکوپ خواندن/نوشتن را فعال کنید، و مطمئن شوید اکانت به آن تقویم دسترسی دارد.
- 400 Bad Request (Invalid start time / end time)
علت: فرمت تاریخ/زمان اشتباه است یا end قبل از start قرار گرفته.
راهحل: از ISO 8601 استفاده کنید، Time Zone را مشخص کنید، و محاسبه end را دقیق انجام دهید.
- 404 Not Found (Calendar not found / Event not found)
علت: Calendar ID یا Event ID اشتباه است یا دسترسی وجود ندارد.
راهحل: Calendar ID را از لیست تقویمها استخراج کنید و Event ID را از خروجی نودهای قبلی بهصورت داینامیک پاس دهید.
- 409 Conflict
علت: تداخل یا وضعیت همزمانی در بهروزرسانی یا دادههای تکراری در برخی سناریوها.
راهحل: قبل از Create جستجو کنید، یا در Update از منطق قفل نرم (مثل بررسی آخرین زمان آپدیت) استفاده کنید.
ایده ها
- سیستم رزرو خودکار: دریافت درخواست از فرم، بررسی خالی بودن زمان، ساخت رویداد، ارسال لینک Google Meet و یادآوری پیامکی
- داشبورد مدیر: استخراج جلسات امروز/این هفته و ارسال گزارش خلاصه به Slack/Email با لینک مستقیم هر رویداد
- هماهنگی تیم پشتیبانی: وقتی تیکت به وضعیت “نیاز به تماس” میرود، جلسه پیگیری در تقویم کارشناس ساخته شود
- کنترل SLA: اگر رویداد پیگیری مشتری تا ۴۸ ساعت آینده وجود نداشت، هشدار برای تیم ارسال شود
- همگامسازی تقویمهای داخلی و خارجی: کپی رویدادهای یک تقویم به تقویم دیگر با فیلتر (مثلاً فقط جلسات با برچسب Demo)
