---
title: "Google Calendar и n8n: встречи без дублей | Nodbot"
source_url: "https://nodbot.ru/integrations/google-calendar/"
canonical_url: "https://nodbot.ru/integrations/google-calendar/"
language: "ru"
content_type: "IntegrationGuide"
section: "integrations"
generated_at: "2026-05-30"
word_count_source: 1197
---

# Интеграция Google Calendar и n8n: встречи без дублей и ошибок timezone

## AI summary

Problem/Solution-гайд по Google Calendar и n8n: как проверять занятость, создавать встречи без дублей, учитывать timezone и не отправлять лишние приглашения клиентам.

## Best used for

Страница полезна, когда нужно внедрить интеграцию в n8n как production workflow: с проверками, idempotency, тестами, LLM-readable описанием и понятным runbook.

## Key topics

- freeBusy
- timezone
- idempotency key
- event_id
- sendUpdates
- booking workflow

## Source outline


# Интеграция Google Calendar и n8n: встречи без дублей и ошибок timezone

Обновлено: 2026-05-30

Импортируйте JSON в n8n, замените credentials, IDs, правила доступа и production-политики под вашу инфраструктуру.

- Проблема и решение
- Архитектура workflow
- Контракт данных
- Code Node и проверки
- Готовый workflow JSON
- Пошаговая настройка
- Тесты перед production
- Production-риски
- Полезные ссылки
- Критерии готовности
Проблема: автоматическая запись на встречу через Google Calendar кажется простой, пока workflow не создаёт два event, не путает часовой пояс клиента и не отправляет лишнее приглашение всем участникам.

Решение: интеграция Google Calendar и n8n должна сначала нормализовать входной слот, проверить freeBusy, посчитать idempotency key, найти уже созданный event и только потом создавать или обновлять встречу. Такой подход закрывает не демонстрационный happy path, а реальную production-боль: повторы, права доступа, пустые поля, API-ошибки и ручной контроль там, где автоматизация может навредить.


## Проблема: почему простая связка ломает процесс

Интеграция нужна не ради факта подключения сервиса к n8n. Пользователь ищет конкретный ответ: как настроить сценарий так, чтобы данные не дублировались, права не были избыточными, а результат можно было проверить без ручного расследования execution logs.

Для этой страницы основной объект — calendar event . Входной контракт должен явно фиксировать lead_id, calendar_id, start, end, timezone, attendees. Если эти поля приходят нестабильно, автоматизация начинает угадывать, а угадывание в production почти всегда превращается в дубли, потерю данных или лишние уведомления.

Поэтому workflow строится вокруг детерминированных проверок: сначала validation и idempotency, потом запрос к API, потом запись результата и только после этого уведомление человека или downstream-системы.


## Архитектура workflow для n8n

Такой workflow удобно сопровождать: каждая нода отвечает за один слой ответственности, а не смешивает mapping, API-запрос, retry и уведомления в одном Code Node.


## Контракт входных данных

Payload можно расширять, но нельзя делать обязательные поля “по настроению”. Если источник не передал внешний ID, timezone, владельца или другой ключевой атрибут, workflow должен остановиться с понятной ошибкой до записи во внешний сервис.


## Code Node: нормализация, mapping и guard-условия

Этот скрипт n8n не заменяет бизнес-логику внешнего сервиса. Его задача — привести данные к стабильному контракту, сформировать idempotency key и не пропустить опасный payload дальше по цепочке.


## Готовый workflow JSON: скачать и импортировать

В архиве страницы есть импортируемый workflow JSON и тестовый payload. После импорта замените credentials, URL, IDs, папки, владельцев, лимиты и правила доступа. Не запускайте сценарий на production-данных, пока не проверены повторы, пустые значения и ошибки API.


## Пошаговая настройка связки

- Создайте отдельный календарь или process calendar для продаж/записей, а не пишите сразу в личные календари менеджеров.
- Подключите Google Calendar credential в n8n и ограничьте доступ только нужными календарями.
- Перед созданием event добавьте freeBusy-проверку и ветку отказа, если слот занят.
- Сохраняйте Google event_id обратно в CRM, Postgres или таблицу mapping, чтобы повторный запуск обновлял встречу.
- В тестах отключите реальные приглашения или используйте test attendees, чтобы не отправить клиентам мусорные invite.
Откройте каждую ноду, замените credentials и IDs, включите dry-run там, где доступно, затем выполните сценарий на тестовом объекте. Для write-действий добавьте отдельный флаг approval или manual step.


## Тесты перед production

Минимальный smoke test:

- тот же lead_id и slot повторно
- занятый слот в календаре
- другой timezone клиента
- пустой attendees
- ошибка OAuth или invalid calendar_id
Отдельно проверьте, что retry n8n не создаёт второй объект во внешнем сервисе. Для критичных действий используйте durable storage: Postgres, CRM custom field, Google Sheet mapping или другой слой с уникальным ключом.


## Production-риски

- Не сохраняется event_id — retry создаёт дубль встречи.
- Timezone берётся из сервера n8n, а не из входного контракта.
- sendUpdates включён в тестах и отправляет клиентам лишние приглашения.
- AI выбирает время без deterministic freeBusy-проверки.
- Recurring event изменяется целиком вместо одного instance.

## Полезные ссылки и смежные материалы

- n8n Google Calendar node
- Google Calendar API Freebusy
- Google Sheets integration
- Telegram alerts
Внутренняя перелинковка помогает быстро перейти от общего integration-гайда к готовым workflow, а внешние ссылки ведут на официальную документацию API и n8n-нод.


## Критерии готовности

- Повторный payload не создаёт второй event.
- Занятый слот возвращает понятный отказ или альтернативы.
- event_id и idempotency_key сохраняются вне execution data.
- Есть отдельные правила для timezone, attendees, Meet и sendUpdates.
- Ошибки 401/403/429 уходят в alert или DLQ.
