{
  "name": "Nodbot - Google Calendar booking with freeBusy and idempotency",
  "nodes": [
    {
      "parameters": {},
      "id": "node-1",
      "name": "Webhook / CRM trigger",
      "type": "n8n-nodes-base.noOp",
      "typeVersion": 1,
      "position": [
        200,
        300
      ],
      "notes": "принимает слот от формы, CRM или booking-виджета"
    },
    {
      "parameters": {},
      "id": "node-2",
      "name": "Normalize event",
      "type": "n8n-nodes-base.noOp",
      "typeVersion": 1,
      "position": [
        420,
        300
      ],
      "notes": "проверяет start/end, attendees и policy"
    },
    {
      "parameters": {},
      "id": "node-3",
      "name": "Idempotency lookup",
      "type": "n8n-nodes-base.noOp",
      "typeVersion": 1,
      "position": [
        640,
        300
      ],
      "notes": "ищет созданный event по ключу"
    },
    {
      "parameters": {},
      "id": "node-4",
      "name": "Google Calendar freeBusy",
      "type": "n8n-nodes-base.noOp",
      "typeVersion": 1,
      "position": [
        860,
        300
      ],
      "notes": "проверяет занятость календаря"
    },
    {
      "parameters": {},
      "id": "node-5",
      "name": "Create or update event",
      "type": "n8n-nodes-base.noOp",
      "typeVersion": 1,
      "position": [
        1080,
        300
      ],
      "notes": "создаёт или обновляет встречу"
    },
    {
      "parameters": {},
      "id": "node-6",
      "name": "Respond + audit",
      "type": "n8n-nodes-base.noOp",
      "typeVersion": 1,
      "position": [
        1300,
        300
      ],
      "notes": "возвращает status и event_id"
    }
  ],
  "connections": {
    "Webhook / CRM trigger": {
      "main": [
        [
          {
            "node": "Normalize event",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Normalize event": {
      "main": [
        [
          {
            "node": "Idempotency lookup",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Idempotency lookup": {
      "main": [
        [
          {
            "node": "Google Calendar freeBusy",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Calendar freeBusy": {
      "main": [
        [
          {
            "node": "Create or update event",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create or update event": {
      "main": [
        [
          {
            "node": "Respond + audit",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "pinData": {},
  "meta": {
    "templateCredsSetupCompleted": false,
    "description": "Problem/Solution-гайд по Google Calendar и n8n: как проверять занятость, создавать встречи без дублей, учитывать timezone и не отправлять лишние приглашения клиентам."
  },
  "tags": [
    "nodbot",
    "integration",
    "production"
  ]
}