Шаблон n8n — это готовый workflow в формате JSON: вы копируете его, вставляете на пустой холст n8n сочетанием Ctrl+V или загружаете через меню Import from File, и все узлы со связями встают на место. Пароли и ключи в шаблоне не лежат, поэтому после импорта у вас остаётся три шага. Выберите свои учётные данные в каждом узле, где стоит значок замка. Замените адреса-заглушки вроде example.ru на свои. Опубликуйте воркфлоу, если он запускается вебхуком или расписанием: тестовый адрес вебхука живёт, только пока открыт редактор. Ниже восемь шаблонов под задачи малого бизнеса: Telegram-бот с нейросетью, обмен с 1С через OData, приём оплаты с проверкой подписи, заявки в Google Таблицу без дублей, сводка по расписанию, сделки в CRM, запись событий в PostgreSQL и база знаний для ИИ-агента. Все восемь собраны и проверены импортом в n8n версии 2.43 в октябре 2026 года.

Как поставить шаблон за две минуты

Откройте JSON нужного шаблона, нажмите «Скопировать», создайте в n8n пустой воркфлоу и вставьте на холст. Тот же JSON можно сохранить в файл и загрузить через меню с тремя точками → Import from File: результат один.

  1. Пройдите по узлам с замком и выберите свои учётные данные. Если их ещё нет, n8n предложит создать прямо из узла.
  2. Найдите заглушки: example.ru, ZAMENITE_NA_ID, ВАШ_СЕКРЕТ, ВАШ_CHAT_ID. Всё, что так подписано, ждёт ваших значений.
  3. Запустите воркфлоу кнопкой Execute и посмотрите, что пришло на выход каждого узла. Красный узел покажет ошибку прямо в своём окне.
  4. Опубликуйте воркфлоу, если он стартует сам: по вебхуку, по расписанию или от Telegram. В старых версиях n8n эта кнопка называлась Active.

Мы проверили, что n8n принимает каждый шаблон: каждый узел существует в версии 2.43, параметры подходят под свою версию узла, связи ведут куда надо. А вот запуск с вашими сервисами мы сделать за вас не можем, поэтому первый прогон смотрите сами.

Telegram-бот с нейросетью: команды и свободный текст

Бот отвечает на /start и /price готовым текстом, а всё остальное отдаёт ИИ-агенту на DeepSeek. У агента память на десять последних сообщений, и ключом памяти служит chat id: два человека, которые пишут боту одновременно, не путаются.

Схема: Telegram Trigger → Команда? (Switch на три выхода) → Приветствие, Прайс или ИИ-администратор → Ответ ИИ. К агенту снизу подключены модель DeepSeek и Память по чату.

Что поменять. Токен бота от BotFather выберите в Telegram Trigger и трёх узлах ответа, ключ DeepSeek в узле модели. Прайс и системное сообщение агента написаны под салон, перепишите их под свой бизнес: цены агент берёт только оттуда.

Где ломается. Telegram Trigger работает только по HTTPS с публичным адресом, так что на ноутбуке без туннеля бот молчит. И второе: команда с подписью бота в группе приходит как «/price@имя_бота», Switch её не узнает. Для групп меняйте условие на «начинается с».

JSON шаблона: скопировать и вставить на холст
{
  "name": "Telegram-бот с нейросетью: команды и ИИ-ответы",
  "nodes": [
    {
      "parameters": {
        "content": "## Telegram-бот с нейросетью\nКоманды /start и /price отвечают заготовкой, всё остальное уходит ИИ-агенту на DeepSeek с памятью на 10 сообщений по chat id.\n\nПосле импорта: токен бота в Telegram Trigger и трёх узлах ответа, ключ DeepSeek в узле модели, свой прайс и системное сообщение.",
        "width": 520,
        "height": 200
      },
      "id": "a847d435-475a-55a0-b35a-7a5b71978840",
      "name": "Заметка 541668",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -40,
        -260
      ]
    },
    {
      "parameters": {
        "updates": [
          "message"
        ],
        "additionalFields": {}
      },
      "id": "a65e1274-b944-5c4f-9f85-b733724213bd",
      "name": "Telegram Trigger",
      "type": "n8n-nodes-base.telegramTrigger",
      "typeVersion": 1.2,
      "position": [
        0,
        0
      ]
    },
    {
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "loose",
                  "version": 2
                },
                "conditions": [
                  {
                    "id": "e090313c-e450-586e-90b9-2a45d7f2c050",
                    "leftValue": "={{ $json.message.text }}",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "rightValue": "/start"
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "start"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "loose",
                  "version": 2
                },
                "conditions": [
                  {
                    "id": "66582772-0f62-5ca7-b590-011998623a27",
                    "leftValue": "={{ $json.message.text }}",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "rightValue": "/price"
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "price"
            }
          ]
        },
        "options": {
          "fallbackOutput": "extra",
          "renameFallbackOutput": "ИИ"
        }
      },
      "id": "5a9c77d8-6ee4-544c-a833-34d24e8cbad2",
      "name": "Команда?",
      "type": "n8n-nodes-base.switch",
      "typeVersion": 3.2,
      "position": [
        220,
        0
      ]
    },
    {
      "parameters": {
        "chatId": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
        "text": "Здравствуйте! Я запишу вас на стрижку. Цены — /price, или просто напишите, когда удобно прийти.",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "id": "8571f1ec-49f4-5f4e-ac8b-e9a978a61eb0",
      "name": "Приветствие",
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        480,
        -180
      ]
    },
    {
      "parameters": {
        "chatId": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
        "text": "Мужская стрижка — 1 200 ₽\nЖенская стрижка — 1 800 ₽\nОкрашивание — от 3 500 ₽",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "id": "c21a63e3-378e-5b2c-8fbd-6f9813ac4c54",
      "name": "Прайс",
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        480,
        0
      ]
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "={{ $json.message.text }}",
        "options": {
          "systemMessage": "Ты администратор салона. Отвечай коротко, на «вы». Твоя задача — записать человека: узнать услугу, дату и телефон. На вопросы не о салоне вежливо возвращай к записи. Цены называй только из списка: мужская стрижка 1 200 ₽, женская 1 800 ₽, окрашивание от 3 500 ₽. Не обещай скидок и свободное время, которого не знаешь."
        }
      },
      "id": "75c9b79b-ec67-574d-96b4-031b9422d6a4",
      "name": "ИИ-администратор",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 2.2,
      "position": [
        480,
        200
      ]
    },
    {
      "parameters": {
        "model": "deepseek-chat",
        "options": {
          "temperature": 0.3
        }
      },
      "id": "a20e18bb-e704-5218-9591-2b38f2ec262b",
      "name": "DeepSeek",
      "type": "@n8n/n8n-nodes-langchain.lmChatDeepSeek",
      "typeVersion": 1,
      "position": [
        400,
        420
      ]
    },
    {
      "parameters": {
        "sessionIdType": "customKey",
        "sessionKey": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
        "contextWindowLength": 10
      },
      "id": "a3d46611-3e48-58d7-8548-2c5f0920c700",
      "name": "Память по чату",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "typeVersion": 1.3,
      "position": [
        580,
        420
      ]
    },
    {
      "parameters": {
        "chatId": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
        "text": "={{ $json.output }}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "id": "1c7ff3f5-c586-562a-b9d4-29d4182f649f",
      "name": "Ответ ИИ",
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        840,
        200
      ]
    }
  ],
  "connections": {
    "Telegram Trigger": {
      "main": [
        [
          {
            "node": "Команда?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Команда?": {
      "main": [
        [
          {
            "node": "Приветствие",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Прайс",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "ИИ-администратор",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ИИ-администратор": {
      "main": [
        [
          {
            "node": "Ответ ИИ",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "DeepSeek": {
      "ai_languageModel": [
        [
          {
            "node": "ИИ-администратор",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Память по чату": {
      "ai_memory": [
        [
          {
            "node": "ИИ-администратор",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "pinData": {},
  "active": false,
  "meta": {
    "templateCredsSetupCompleted": false,
    "source": "promtbaza.com/voprosy/shablony-n8n"
  }
}

Скачать telegram-bot-s-neyrosetyu.json

Промт: Телеграм-бот на n8n в DeepSeek: схема нод, которую можно собрать за вечер
Спроектируй телеграм-бота в n8n без написания кода. Нужна схема, которую я соберу мышкой.

Что делает бот: [ЗАДАЧА: принимает заявки на стрижку — показывает услуги с ценами, спрашивает дату и телефон, складывает заявку в Google-таблицу и присылает мне уведомление]
Команды: [КОМАНДЫ: /start, /price, /zapis]
Где живёт n8n: [ХОСТИНГ: облачный n8n.cloud, домен выдан сервисом]
Мой уровень: [УРОВЕНЬ: n8n открывал пару раз, код не пишу]

Дай по шагам:

1. Регистрация бота у BotFather и куда именно вставить токен: название типа credentials в n8n и поле в нём.

2. Схема нод по порядку. Для каждой: точное название ноды как она подписана в интерфейсе, что выбрать в её настройках, что вписать в поля. Ветвление опиши явно — какая нода куда ведёт при каком условии.

3. Хранение заявки: какая нода, как связать с таблицей, какие колонки завести.

4. Свободные вопросы: как подключить ИИ-ноду для сообщений, не совпавших с командами, и какой системный промпт в неё положить, чтобы бот не уходил от темы записи.

5. Проверка: как убедиться, что вебхук поднялся, и что смотреть в Executions, если бот молчит.

6. Три места, где чаще всего ломается у новичка, и признак каждой поломки.

Не предлагай варианты «или можно сделать так» — дай один рабочий путь. Не пиши JavaScript в Code-ноде: смысл в том, чтобы обойтись без кода.

Открыть карточку: пример результата и разбор

Обмен n8n с 1С через OData: заказы в трекер

Каждые 15 минут в рабочее время шаблон забирает из 1С проведённые заказы за сутки, создаёт по каждому задачу в трекере и ставит в заказе пометку «Передан в трекер». Отбор идёт на стороне 1С, через $filter, а не в n8n: так вы не тянете всю базу ради трёх новых документов.

Схема: Каждые 15 минут → Заказы из 1С (HTTP Request, GET) → По одному заказу (Split Out) → Задача в трекере (POST) → Пометить в 1С (PATCH).

Что поменять. Адрес публикации OData вместо 1c.example.ru, логин и пароль 1С в Basic Auth, адрес и токен трекера. Имена объектов зависят от конфигурации: в Управлении торговлей это Document_ЗаказКлиента, в других базах название своё, его видно в $metadata.

Где ломается. PATCH меняет только перечисленные поля, а PUT затирает остальные, поэтому для пометки нужен именно PATCH. Отчёты через OData не отдаются вообще, только объекты и регистры. И пользователю 1С нужны права на запись, иначе последний узел вернёт 403.

JSON шаблона: скопировать и вставить на холст
{
  "name": "Обмен n8n с 1С через OData: заказы в трекер",
  "nodes": [
    {
      "parameters": {
        "content": "## Заказы из 1С → задачи в трекере\nКаждые 15 минут в рабочее время забирает проведённые заказы за сутки без пометки «Передан», создаёт задачу и ставит пометку в комментарий заказа (PATCH меняет одно поле и не трогает остальные).\n\nПосле импорта: адрес публикации OData, логин и пароль 1С (Basic Auth), адрес и токен трекера.",
        "width": 560,
        "height": 220
      },
      "id": "b6a84d49-e76a-56d2-9eb5-b76564ccaca6",
      "name": "Заметка 19fa84",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -40,
        -260
      ]
    },
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 */15 9-18 * * 1-5"
            }
          ]
        }
      },
      "id": "a774a63f-26f0-5236-a730-6e1a5b526945",
      "name": "Каждые 15 минут",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [
        0,
        0
      ]
    },
    {
      "parameters": {
        "url": "https://1c.example.ru/base/odata/standard.odata/Document_ЗаказКлиента",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpBasicAuth",
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "$format",
              "value": "json"
            },
            {
              "name": "$filter",
              "value": "=Posted eq true and Date ge datetime'{{ $now.minus({days: 1}).toFormat(\"yyyy-MM-dd'T'HH:mm:ss\") }}' and substringof('Передан', Комментарий) eq false"
            },
            {
              "name": "$select",
              "value": "Ref_Key,Number,Date,СуммаДокумента,Комментарий"
            },
            {
              "name": "$top",
              "value": "100"
            }
          ]
        },
        "options": {}
      },
      "id": "06386d36-c412-5151-b685-f90c0d6e2375",
      "name": "Заказы из 1С",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        220,
        0
      ]
    },
    {
      "parameters": {
        "fieldToSplitOut": "value",
        "options": {}
      },
      "id": "19f555db-024a-5a19-ae75-fe39588b9305",
      "name": "По одному заказу",
      "type": "n8n-nodes-base.splitOut",
      "typeVersion": 1,
      "position": [
        440,
        0
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://tracker.example.ru/api/tasks",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n  \"title\": \"Заказ {{ $json.Number }} от {{ $json.Date.slice(0, 10) }}\",\n  \"description\": \"Сумма: {{ $json.СуммаДокумента }} ₽\",\n  \"external_id\": \"{{ $json.Ref_Key }}\"\n}",
        "options": {}
      },
      "id": "d078a379-64a3-5112-973c-4085dc74cf70",
      "name": "Задача в трекере",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        660,
        0
      ]
    },
    {
      "parameters": {
        "method": "PATCH",
        "url": "=https://1c.example.ru/base/odata/standard.odata/Document_ЗаказКлиента(guid'{{ $('По одному заказу').item.json.Ref_Key }}')?$format=json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpBasicAuth",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n  \"Комментарий\": \"{{ $('По одному заказу').item.json.Комментарий }} Передан в трекер\"\n}",
        "options": {}
      },
      "id": "912fb90f-209f-580e-8aa5-9cf3d0cbbdc8",
      "name": "Пометить в 1С",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        880,
        0
      ]
    }
  ],
  "connections": {
    "Каждые 15 минут": {
      "main": [
        [
          {
            "node": "Заказы из 1С",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Заказы из 1С": {
      "main": [
        [
          {
            "node": "По одному заказу",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "По одному заказу": {
      "main": [
        [
          {
            "node": "Задача в трекере",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Задача в трекере": {
      "main": [
        [
          {
            "node": "Пометить в 1С",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "pinData": {},
  "active": false,
  "meta": {
    "templateCredsSetupCompleted": false,
    "source": "promtbaza.com/voprosy/shablony-n8n"
  }
}

Скачать obmen-s-1s-cherez-odata.json

Промт: Обмен n8n с 1С через OData
Спроектируй обмен между n8n и 1С через опубликованный REST-интерфейс OData. Ноды для 1С в n8n нет, работать будем нодой HTTP Request.

Моя задача: [ЗАДАЧА: забирать новые заказы покупателей и создавать по ним задачи в трекере]
Конфигурация: [1С: Управление торговлей, OData опубликован, доступ по логину и паролю]
Как часто: [РАСПИСАНИЕ: каждые 15 минут в рабочее время]
Объём: [ОБЪЁМ: 30-80 документов в день]

Что нужно:

1. Адрес запроса к нужному объекту и вид авторизации в ноде HTTP Request. Покажи, как выглядит путь к документам и к справочникам — они адресуются по-разному.
2. Отбор на стороне 1С, а не в n8n: как запросить только документы за период и только непроведённые. Тянуть всё и фильтровать после — это лишний трафик и нагрузка на базу.
3. Постраничная выдача: чем ограничить размер ответа и как забрать следующую порцию. При 80 документах в день это не жмёт, но на первой выгрузке за год жмёт сразу.
4. Запись обратно: какими методами создаётся новый объект, какими обновляется существующий, и чем отличаются полная и частичная замена. Мне нужно проставлять признак обработки, не затирая остальные поля.
5. Отдельным списком — **чего через OData получить нельзя в принципе**. Это сэкономит мне день: я успел заложить в схему получение отчёта и хочу знать заранее, что так не выйдет.
6. Что делать с тем, что недоступно: какой механизм на стороне 1С публикуется для нестандартной логики и асинхронного обмена.

Отсечка. Не предлагай выгрузку через файлы обмена и COM-соединение — нужен HTTP. Не советуй писать обработку внутри 1С там, где хватает OData: правка конфигурации требует согласования, а это недели. Не пересказывай, как публиковать OData, он уже опубликован.

Проверка перед выдачей: пройди по моей задаче и скажи, какие её части OData закрывает целиком, какие частично, а какие не закрывает вовсе. Если что-то не закрывает — назови это прямо, а не предлагай обходной путь как равноценный.

Открыть карточку: пример результата и разбор

Вебхук оплаты: подпись, быстрый ответ и защита от повторов

Платёжный сервис присылает уведомление, шаблон сверяет подпись, сразу отвечает 200 и уже потом отмечает заказ в таблице и пишет покупателю. Подпись не сошлась — ответ 401, и дальше ничего не происходит.

Схема: Вебхук → Подпись (Crypto, HMAC-SHA256) → Подпись сошлась? → Ответ 200 или Ответ 401 → Без повторов (Remove Duplicates по order_id) → Отметить оплату (Google Sheets) → Письмо покупателю (Gmail).

Что поменять. Секрет из кабинета платёжного сервиса и правило, по которому он склеивает строку для подписи: в шаблоне это order_id, amount и status через двоеточие, у вашего сервиса порядок свой. Таблицу и почту выберите в последних узлах.

Где ломается. У вебхука два адреса. Тестовый живёт, пока открыт редактор, рабочий появляется после публикации воркфлоу, и в кабинет платёжки нужно вписать рабочий. Повторная доставка того же заказа бывает почти у всех сервисов, без узла «Без повторов» покупатель получит два письма.

JSON шаблона: скопировать и вставить на холст
{
  "name": "Вебхук оплаты: проверка подписи и защита от повторов",
  "nodes": [
    {
      "parameters": {
        "content": "## Приём уведомления об оплате\nСверяет HMAC-подпись, сразу отвечает 200 (или 401), отсекает повторную доставку того же order_id, отмечает заказ в таблице и пишет покупателю.\n\nПосле импорта: секрет из кабинета платёжного сервиса в узле «Подпись», правило склейки строки — по его документации; таблица и Gmail. Рабочий адрес появится после публикации.",
        "width": 560,
        "height": 230
      },
      "id": "2ee4c148-d9a9-55ac-a68e-2a07f0569164",
      "name": "Заметка 890b83",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -40,
        -280
      ]
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "payment",
        "responseMode": "responseNode",
        "options": {}
      },
      "id": "4ec90246-06c1-5ac1-a345-e315aac35390",
      "name": "Вебхук",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        0,
        0
      ],
      "webhookId": "47512390-8e5d-5577-840a-ef7e7ea4930f"
    },
    {
      "parameters": {
        "action": "hmac",
        "type": "SHA256",
        "value": "={{ $json.body.order_id }}:{{ $json.body.amount }}:{{ $json.body.status }}",
        "dataPropertyName": "expected",
        "secret": "ВАШ_СЕКРЕТ_ИЗ_КАБИНЕТА"
      },
      "id": "04a13125-d40f-5b4e-a436-a4f8ff76021b",
      "name": "Подпись",
      "type": "n8n-nodes-base.crypto",
      "typeVersion": 1,
      "position": [
        220,
        0
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "loose",
            "version": 2
          },
          "conditions": [
            {
              "id": "bd79613a-2653-5aad-832d-e3323ed5d4a2",
              "leftValue": "={{ $json.expected }}",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "rightValue": "={{ $json.body.signature }}"
            },
            {
              "id": "868b7943-b810-5912-8cc4-270b121425f9",
              "leftValue": "={{ $json.body.order_id }}",
              "operator": {
                "type": "string",
                "operation": "exists",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        }
      },
      "id": "69ebc5a0-458f-5b43-944e-71e7b21fdd11",
      "name": "Подпись сошлась?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        440,
        0
      ]
    },
    {
      "parameters": {
        "respondWith": "noData",
        "options": {
          "responseCode": 200
        }
      },
      "id": "d470a9d1-c473-511b-a7ab-611d3fb57371",
      "name": "Ответ 200",
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.1,
      "position": [
        660,
        -100
      ]
    },
    {
      "parameters": {
        "respondWith": "noData",
        "options": {
          "responseCode": 401
        }
      },
      "id": "c3282488-5255-594f-8f55-f6e5d6f87454",
      "name": "Ответ 401",
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.1,
      "position": [
        660,
        120
      ]
    },
    {
      "parameters": {
        "operation": "removeItemsSeenInPreviousExecutions",
        "logic": "removeItemsWithAlreadySeenKeyValues",
        "dedupeValue": "={{ $json.body.order_id }}",
        "options": {}
      },
      "id": "9d047347-8569-582f-9a48-7e07b2b8c144",
      "name": "Без повторов",
      "type": "n8n-nodes-base.removeDuplicates",
      "typeVersion": 2,
      "position": [
        880,
        -100
      ]
    },
    {
      "parameters": {
        "operation": "update",
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "https://docs.google.com/spreadsheets/d/ZAMENITE_NA_ID_SVOEY_TABLICY/edit"
        },
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Заказы"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "order_id": "={{ $json.body.order_id }}",
            "status": "оплачен",
            "paid_at": "={{ $now.toISO() }}"
          },
          "matchingColumns": [
            "order_id"
          ],
          "schema": [
            {
              "id": "order_id",
              "displayName": "order_id",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "status",
              "displayName": "status",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "paid_at",
              "displayName": "paid_at",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            }
          ]
        },
        "options": {}
      },
      "id": "aad6c665-336b-5f1c-a515-9ce3fa79dfa1",
      "name": "Отметить оплату",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.5,
      "position": [
        1100,
        -100
      ]
    },
    {
      "parameters": {
        "sendTo": "={{ $('Вебхук').item.json.body.email }}",
        "subject": "=Оплата заказа {{ $('Вебхук').item.json.body.order_id }} получена",
        "emailType": "text",
        "message": "=Здравствуйте! Мы получили оплату {{ $('Вебхук').item.json.body.amount }} ₽ по заказу {{ $('Вебхук').item.json.body.order_id }}. Сообщим, когда отправим.",
        "options": {}
      },
      "id": "373d9fdc-32ac-58a1-868a-9024d3161ce3",
      "name": "Письмо покупателю",
      "type": "n8n-nodes-base.gmail",
      "typeVersion": 2.1,
      "position": [
        1320,
        -100
      ]
    }
  ],
  "connections": {
    "Вебхук": {
      "main": [
        [
          {
            "node": "Подпись",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Подпись": {
      "main": [
        [
          {
            "node": "Подпись сошлась?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Подпись сошлась?": {
      "main": [
        [
          {
            "node": "Ответ 200",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Ответ 401",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Ответ 200": {
      "main": [
        [
          {
            "node": "Без повторов",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Без повторов": {
      "main": [
        [
          {
            "node": "Отметить оплату",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Отметить оплату": {
      "main": [
        [
          {
            "node": "Письмо покупателю",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "pinData": {},
  "active": false,
  "meta": {
    "templateCredsSetupCompleted": false,
    "source": "promtbaza.com/voprosy/shablony-n8n"
  }
}

Скачать vebhuk-oplaty.json

Промт: Вебхук n8n: приём входящих
Помоги настроить приём вебхука в n8n и разобрать то, что приходит.

Кто присылает: [ОТПРАВИТЕЛЬ: платёжный сервис, уведомление об успешной оплате]
Что в запросе: [ТЕЛО: JSON с полями order_id, amount, status, signature]
Что должно произойти: [ДЕЙСТВИЕ: найти заказ в таблице, пометить оплаченным, отправить письмо покупателю]
Как отвечать отправителю: [ОТВЕТ: код 200 и пустое тело, иначе сервис будет повторять]

Что нужно:

1. Настройки ноды приёма: метод, путь, режим ответа. Объясни в одну строку разницу между тестовым и рабочим адресом — тестовый живёт, пока воркфлоу не опубликован, и об это спотыкаются при переносе на прод.
2. Проверка подлинности. Покажи, как сверить подпись из тела запроса до того, как что-то делать с данными. Если подпись не сошлась — какой код вернуть и почему не 200.
3. Разбор тела: как достать нужные поля и что будет, если поле не пришло. Мне нужна ветка на случай отсутствующего поля, а не падение в середине цепочки.
4. Ответ отправителю: где задаётся код и тело, и как отвечать сразу, не дожидаясь конца обработки. Платёжные сервисы ждут ответ секунды, а моя цепочка может идти дольше.
5. Повторные доставки. Один и тот же заказ придёт дважды — покажи, чем отсечь повтор, чтобы письмо не ушло покупателю два раза.

Отсечка. Не предлагай принимать запрос без проверки подписи, даже «для начала». Не советуй отвечать 200 на неподошедшую подпись, чтобы «сервис не спамил» — так теряются реальные сбои. Не пересказывай, что такое вебхук.

Проверка перед выдачей: пройди путь запроса от приёма до ответа и назови место, где обработка может занять больше отведённых секунд. Если такое место есть, покажи, как отдать ответ раньше остальной цепочки.

Открыть карточку: пример результата и разбор

Заявки с сайта в Google Таблицу без дублей

Форма сайта шлёт заявку на вебхук, шаблон собирает ключ из телефона, услуги и даты и пишет строку операцией «добавить или обновить». Повторный запуск той же заявки обновляет строку, а не плодит вторую.

Схема: Заявка с сайта (Webhook) → Поля и ключ (Edit Fields) → Строка по ключу (Google Sheets, Append or Update).

Что поменять. Ссылку на таблицу и имя листа. В шапке листа должна быть колонка key, остальные колонки называются как поля: name, phone, service, date, status.

Где ломается. Если ключом взять один телефон, человек с двумя услугами получит одну строку вместо двух: вторая заявка перезапишет первую. Поэтому ключ из трёх полей. И телефон в ключе чистится до последних десяти цифр, иначе «+7 999…» и «8 999…» дадут два разных ключа.

JSON шаблона: скопировать и вставить на холст
{
  "name": "Заявки с сайта в Google Таблицу без дублей",
  "nodes": [
    {
      "parameters": {
        "content": "## Заявки в таблицу без дублей\nКлюч собирается из телефона, услуги и даты: один человек с двумя услугами даёт две строки, а повторный запуск той же заявки обновляет строку, а не добавляет.\n\nПосле импорта: ссылка на таблицу, лист «Заявки» и колонка key в шапке.",
        "width": 520,
        "height": 200
      },
      "id": "35142c18-28a3-5686-9db9-5ff898c5826f",
      "name": "Заметка f92191",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -40,
        -260
      ]
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "lead",
        "options": {}
      },
      "id": "2d402b13-f0f1-509e-aa45-153a63e35573",
      "name": "Заявка с сайта",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        0,
        0
      ],
      "webhookId": "70c237d0-b08d-5610-aeb4-147da4240dac"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "k1",
              "name": "key",
              "type": "string",
              "value": "={{ $json.body.phone.replace(/\\D/g, '').slice(-10) }}|{{ $json.body.service }}|{{ $json.body.date }}"
            },
            {
              "id": "k2",
              "name": "name",
              "type": "string",
              "value": "={{ $json.body.name }}"
            },
            {
              "id": "k3",
              "name": "phone",
              "type": "string",
              "value": "={{ $json.body.phone }}"
            },
            {
              "id": "k4",
              "name": "service",
              "type": "string",
              "value": "={{ $json.body.service }}"
            },
            {
              "id": "k5",
              "name": "date",
              "type": "string",
              "value": "={{ $json.body.date }}"
            },
            {
              "id": "k6",
              "name": "status",
              "type": "string",
              "value": "новая"
            }
          ]
        },
        "options": {}
      },
      "id": "4c3d6a03-ec82-58b2-b5fa-7e88f58ef194",
      "name": "Поля и ключ",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        220,
        0
      ]
    },
    {
      "parameters": {
        "operation": "appendOrUpdate",
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "https://docs.google.com/spreadsheets/d/ZAMENITE_NA_ID_SVOEY_TABLICY/edit"
        },
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Заявки"
        },
        "columns": {
          "mappingMode": "autoMapInputData",
          "value": {},
          "matchingColumns": [
            "key"
          ],
          "schema": []
        },
        "options": {}
      },
      "id": "e7b358bf-423a-59b3-934a-ffbe289815d1",
      "name": "Строка по ключу",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.5,
      "position": [
        440,
        0
      ]
    }
  ],
  "connections": {
    "Заявка с сайта": {
      "main": [
        [
          {
            "node": "Поля и ключ",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Поля и ключ": {
      "main": [
        [
          {
            "node": "Строка по ключу",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "pinData": {},
  "active": false,
  "meta": {
    "templateCredsSetupCompleted": false,
    "source": "promtbaza.com/voprosy/shablony-n8n"
  }
}

Скачать zayavki-v-tablicu-bez-dubley.json

Промт: Выгрузка из n8n в таблицу без дублей строк
Помоги настроить запись данных из n8n в таблицу так, чтобы повторные запуски не плодили дубли.

Что пишу: [ДАННЫЕ: заявки с сайта — имя, телефон, услуга, дата обращения, статус]
Куда: [ТАБЛИЦА: Google Таблицы, лист «Заявки», шапка уже есть]
Как часто: [ЧАСТОТА: по событию, 10-30 записей в день]
Что уже ломалось: [ПРОБЛЕМА: перезапустил воркфлоу при отладке — получил каждую заявку дважды]

Что нужно:

1. Выбор операции: добавление строки против обновления по ключу. Объясни разницу в одну строку и скажи, какая нужна мне, чтобы повторный запуск чинил строку, а не дублировал её.
2. Какое поле взять ключом. Телефон кажется очевидным, но один человек оставляет две заявки на разные услуги — покажи, как собрать ключ так, чтобы он был уникальным и при этом воспроизводимым при повторе.
3. Что делать, если строки с таким ключом ещё нет: операция должна создавать её, а не падать. Назови настройку, которая за это отвечает.
4. Соответствие полей и колонок: как задать, что куда пишется, и что произойдёт при добавлении новой колонки в шапку.
5. Порядок и пачки: приходит десять элементов, пишется десять строк. Скажи, что будет, если на третьем произойдёт ошибка, и как узнать, какие записи дошли.

Отсечка. Не предлагай чистить дубли после записи отдельным скриптом: это лечение симптома, а причина в операции. Не советуй писать в таблицу через код и внешнюю библиотеку — задача штатная для ноды. Не предлагай очищать лист перед каждой записью: в нём лежит работа людей.

Проверка перед выдачей: опиши, что произойдёт при трёх сценариях — первый запуск, повторный с теми же данными, повторный с изменённым статусом. Если в каком-то из них появляется лишняя строка, схема неверна: переделай и скажи, что поменял.

Открыть карточку: пример результата и разбор

Сводка заказов по будням в 9:15 по Москве

По будням в 9:15 шаблон забирает заказы за вчера из вашего API, считает число и сумму и присылает одну строку в Telegram.

Схема: Будни 9:15 (Schedule Trigger) → Заказы за сутки (HTTP Request) → Текст сводки (Code) → В чат (Telegram).

Что поменять. Адрес своего API заказов и токен, бота и chat id. Если поле суммы называется не total, поправьте одну строку в узле Code.

Где ломается. Cron в n8n состоит из шести полей, и первое — секунды: «0 15 9 * * 1-5». Привычная пятипольная строка «15 9 * * 1-5» прочитается со сдвигом. Часовой пояс задан в настройках самого воркфлоу, Europe/Moscow. Без него берётся пояс сервера, а на VPS это часто UTC, и сводка приходит в 12:15.

JSON шаблона: скопировать и вставить на холст
{
  "name": "Сводка заказов по будням в 9:15 по Москве",
  "nodes": [
    {
      "parameters": {
        "content": "## Сводка по расписанию\nCron в n8n — шесть полей, первое секунды: 0 15 9 * * 1-5 = будни 9:15. Пояс задан в настройках воркфлоу (Europe/Moscow), иначе возьмётся пояс сервера.\n\nПосле импорта: адрес и токен своего API заказов, бот и chat id.",
        "width": 520,
        "height": 200
      },
      "id": "841e8d93-4d0c-57e6-af75-a3d3d09246d3",
      "name": "Заметка f9fbf2",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -40,
        -260
      ]
    },
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 15 9 * * 1-5"
            }
          ]
        }
      },
      "id": "3ef6bab4-fa14-57cd-9f6d-707b9fb3372c",
      "name": "Будни 9:15",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [
        0,
        0
      ]
    },
    {
      "parameters": {
        "url": "https://shop.example.ru/api/orders",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "from",
              "value": "={{ $now.minus({days: 1}).startOf('day').toISO() }}"
            },
            {
              "name": "to",
              "value": "={{ $now.startOf('day').toISO() }}"
            }
          ]
        },
        "options": {}
      },
      "id": "daf69001-b5d7-5a70-a349-96d99663dc7c",
      "name": "Заказы за сутки",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        220,
        0
      ]
    },
    {
      "parameters": {
        "jsCode": "const zakazy = $input.all().map(i => i.json);\nconst summa = zakazy.reduce((s, z) => s + Number(z.total || 0), 0);\nconst den = $now.minus({ days: 1 }).toFormat('dd.MM');\nreturn [{ json: { text: `Заказы за ${den}: ${zakazy.length}, на ${summa.toLocaleString('ru-RU')} ₽` } }];"
      },
      "id": "ed2b05ec-6fff-5366-be59-ea156a5f013c",
      "name": "Текст сводки",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        440,
        0
      ]
    },
    {
      "parameters": {
        "chatId": "ВАШ_CHAT_ID",
        "text": "={{ $json.text }}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "id": "b3c20632-9d24-5720-aa90-020becb4bba4",
      "name": "В чат",
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        660,
        0
      ]
    }
  ],
  "connections": {
    "Будни 9:15": {
      "main": [
        [
          {
            "node": "Заказы за сутки",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Заказы за сутки": {
      "main": [
        [
          {
            "node": "Текст сводки",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Текст сводки": {
      "main": [
        [
          {
            "node": "В чат",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1",
    "timezone": "Europe/Moscow"
  },
  "pinData": {},
  "active": false,
  "meta": {
    "templateCredsSetupCompleted": false,
    "source": "promtbaza.com/voprosy/shablony-n8n"
  }
}

Скачать svodka-po-raspisaniyu.json

Промт: Запуск n8n по расписанию: разобрать cron
Собери расписание для ноды Schedule Trigger в n8n и проверь мою cron-строку.

Когда должно запускаться: [РАСПИСАНИЕ: каждый будний день в 9:15 утра по Москве]
Часовой пояс сервера: [ПОЯС: не знаю, n8n стоит на своём VPS]
Что делает воркфлоу: [ЗАДАЧА: собирает заказы за прошлые сутки и шлёт сводку в чат]
Моя строка сейчас: [CRON: 15 9 * * 1-5]

Что нужно:

1. Скажи, годится ли моя строка для n8n. В этой ноде cron состоит из шести элементов, и первый — секунды, а не минуты, как в привычном unix-cron. Пятиэлементная строка читается со сдвигом, и задача уезжает не на то время.
2. Дай правильную строку под моё расписание и разбери её по элементам: что стоит на каждом месте.
3. Разберись с часовым поясом. Он берётся по цепочке: сначала настройка воркфлоу, потом настройка инстанса, потом умолчание. Скажи, какое умолчание у self-hosted и что произойдёт с моим расписанием, если пояс нигде не задан.
4. Предложи вариант без cron, через обычные поля интервала — для моего случая это может быть надёжнее и читаться понятнее через полгода.
5. Что будет, если сервер лежал во время запуска. Назови три режима обработки пропущенных запусков и выбери один под мою задачу, объяснив выбор одной строкой.

Отсечка. Не предлагай внешний планировщик и системный crontab вместо ноды: воркфлоу должен управляться изнутри n8n. Не советуй ставить запуск чаще, чем нужно, «чтобы наверняка». Не объясняй, что такое cron вообще — нужна моя строка и мои ошибки в ней.

Проверка перед выдачей: пересчитай предложенную строку обратно в человеческие слова и сверь с моим расписанием. Если расходится хотя бы на минуту — исправь и скажи, где была ошибка. Отдельно напомни, что воркфлоу с этим триггером обязан быть сохранён и опубликован, иначе расписание не работает вовсе.

Открыть карточку: пример результата и разбор

Сделки в CRM через HTTP Request: пачки и повторы

Шаблон отправляет сделки в CRM пачками по десять с паузой в секунду, повторяет упавший запрос до трёх раз и не падает на ошибке. Код ответа идёт дальше, и вы видите рядом то, что отправили, и то, что ответил сервис.

Схема: Запуск вручную → Тестовые сделки → Создать сделку (HTTP Request) → Слить (Merge по позиции, со входом из тестовых сделок) → Создалась? → Готово или Разобрать ошибку.

Что поменять. Адрес метода, токен в Header Auth и поля тела под документацию своей CRM. Узел с тестовыми сделками замените тем, откуда сделки приходят на самом деле.

Где ломается. Ответ HTTP Request заменяет входные данные, поэтому без узла «Слить» вы теряете телефон клиента и не поймёте, какая сделка не создалась. Код 429 значит «слишком часто»: увеличьте паузу между пачками, а не число повторов.

JSON шаблона: скопировать и вставить на холст
{
  "name": "Сделки в CRM через HTTP Request: пачки, повторы, разбор ответа",
  "nodes": [
    {
      "parameters": {
        "content": "## Запрос к API CRM\nОтправляет пачками по 10 с секундной паузой, повторяет упавший запрос до трёх раз и не падает на ошибке: код ответа уходит дальше, и узел «Слить» держит рядом отправленное и ответ.\n\nПосле импорта: адрес метода и токен (Header Auth), свои поля вместо тестовых.",
        "width": 560,
        "height": 220
      },
      "id": "629a39c9-85ad-50f1-ad9e-bc57456a7a56",
      "name": "Заметка c7c4c8",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -40,
        -280
      ]
    },
    {
      "parameters": {},
      "id": "5c488717-4a52-54d7-a5a7-d10ce04d7a5b",
      "name": "Запуск вручную",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        0,
        0
      ]
    },
    {
      "parameters": {
        "mode": "raw",
        "jsonOutput": "={\n  \"name\": \"Иван Петров\",\n  \"phone\": \"+79990001122\",\n  \"amount\": 15000,\n  \"source\": \"сайт\"\n}",
        "options": {}
      },
      "id": "0f4a354b-899c-5161-b965-bfcbc154a7d8",
      "name": "Тестовые сделки",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        220,
        0
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://crm.example.ru/api/v1/deals",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n  \"title\": \"{{ $json.name }}\",\n  \"phone\": \"{{ $json.phone }}\",\n  \"amount\": {{ $json.amount }},\n  \"source\": \"{{ $json.source }}\"\n}",
        "options": {
          "batching": {
            "batch": {
              "batchSize": 10,
              "batchInterval": 1000
            }
          },
          "response": {
            "response": {
              "fullResponse": true,
              "neverError": true
            }
          }
        }
      },
      "id": "327fb9e5-337c-5dae-a643-2f62d0c02cf1",
      "name": "Создать сделку",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        440,
        100
      ],
      "retryOnFail": true,
      "maxTries": 3,
      "waitBetweenTries": 5000
    },
    {
      "parameters": {
        "mode": "combine",
        "combineBy": "combineByPosition",
        "options": {}
      },
      "id": "8caeee7f-d86c-50bd-a071-87395c330353",
      "name": "Слить",
      "type": "n8n-nodes-base.merge",
      "typeVersion": 3,
      "position": [
        660,
        0
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "loose",
            "version": 2
          },
          "conditions": [
            {
              "id": "578786fe-4c24-53a8-b9c2-3f41abfdf876",
              "leftValue": "={{ $json.statusCode }}",
              "operator": {
                "type": "number",
                "operation": "equals"
              },
              "rightValue": 201
            }
          ],
          "combinator": "and"
        }
      },
      "id": "fa9f74a0-63a5-5015-bb52-b2ded30f9c74",
      "name": "Создалась?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        880,
        0
      ]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "g1",
              "name": "deal_id",
              "type": "string",
              "value": "={{ $json.body.id }}"
            },
            {
              "id": "g2",
              "name": "phone",
              "type": "string",
              "value": "={{ $json.phone }}"
            }
          ]
        },
        "options": {}
      },
      "id": "7925b7a0-29b0-5afc-959a-676dd2ba2eab",
      "name": "Готово",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1100,
        -100
      ]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "e1",
              "name": "code",
              "type": "number",
              "value": "={{ $json.statusCode }}"
            },
            {
              "id": "e2",
              "name": "phone",
              "type": "string",
              "value": "={{ $json.phone }}"
            },
            {
              "id": "e3",
              "name": "error",
              "type": "string",
              "value": "={{ JSON.stringify($json.body) }}"
            }
          ]
        },
        "options": {}
      },
      "id": "5876aebf-c2d4-5dbf-a833-c387510a4823",
      "name": "Разобрать ошибку",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1100,
        120
      ]
    }
  ],
  "connections": {
    "Запуск вручную": {
      "main": [
        [
          {
            "node": "Тестовые сделки",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Тестовые сделки": {
      "main": [
        [
          {
            "node": "Создать сделку",
            "type": "main",
            "index": 0
          },
          {
            "node": "Слить",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Слить": {
      "main": [
        [
          {
            "node": "Создалась?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Создалась?": {
      "main": [
        [
          {
            "node": "Готово",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Разобрать ошибку",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Создать сделку": {
      "main": [
        [
          {
            "node": "Слить",
            "type": "main",
            "index": 1
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "pinData": {},
  "active": false,
  "meta": {
    "templateCredsSetupCompleted": false,
    "source": "promtbaza.com/voprosy/shablony-n8n"
  }
}

Скачать zapros-k-api-crm.json

Промт: Запрос к внешнему API из n8n
Помоги собрать запрос к внешнему API нодой HTTP Request в n8n.

Куда обращаюсь: [СЕРВИС: CRM, метод создания сделки]
Документация говорит: [ТРЕБОВАНИЯ: POST, тело JSON, заголовок с токеном, ответ 201 с телом созданной сделки]
Что отправляю: [ДАННЫЕ: имя клиента, телефон, сумма, источник — приходят с предыдущей ноды]
Сколько запросов: [ОБЪЁМ: 50-200 в день, пачками по 10-20]

Что нужно:

1. Настройки ноды под мой случай: метод, тип тела, где задаётся заголовок с токеном и почему его не стоит писать прямо в поле. Покажи, как подставить в тело значения с предыдущей ноды.
2. Что придёт на выход ноды и как до этого добраться дальше. Ответ сервиса заменяет собой входные данные, поэтому если мне нужен и ответ, и то, что я отправлял, — покажи, как сохранить оба.
3. Отправка пачкой: нода получает десять элементов и делает десять запросов. Скажи, чем ограничить темп, если у сервиса есть лимит, и что произойдёт с остальными девятью, когда третий вернёт ошибку.
4. Обработка ответов: как отличить успех от ошибки, что делать с кодом 429 и почему повтор с одинаковой паузой здесь хуже, чем растущая.
5. Проверка: как убедиться, что сделка создалась ровно одна, а не три, если нода была перезапущена вручную.

Отсечка. Не предлагай отключать проверку сертификата ради «чтобы заработало». Не советуй писать токен в теле запроса или в имени ноды. Не заменяй ноду кодом на JavaScript: задача штатная. Не предлагай отправлять всё одним запросом, если документация сервиса этого не описывает.

Проверка перед выдачей: сверь описанные тобой настройки с тем, что требует мой сервис по документации выше — метод, формат тела, ожидаемый код ответа. Если чего-то в моих вводных не хватает, чтобы собрать запрос, задай ровно один вопрос вместо предположения.

Открыть карточку: пример результата и разбор

События в PostgreSQL без дублей: ON CONFLICT и транзакция

Сервис присылает пачку событий, шаблон пишет её в таблицу events одной транзакцией. Упала одна вставка — откатывается вся пачка, и база не остаётся в состоянии «половина записана». Повтор того же event_id гасит ON CONFLICT DO NOTHING.

Схема: События (Webhook) → По одному событию (Split Out) → Записать (Postgres, Execute Query) → Ответ.

Что поменять. Подключение к базе. Таблице нужен уникальный индекс по event_id, без него ON CONFLICT не сработает. Пользователю базы хватит прав INSERT и SELECT на одну таблицу.

Где ломается. Значения передаются параметрами $1–$4, а не вклеиваются в текст запроса: так кавычка в payload не ломает SQL. Полезную нагрузку кладите в колонку jsonb целиком, если по её полям не ищете; ищете — выносите эти поля в свои колонки.

JSON шаблона: скопировать и вставить на холст
{
  "name": "События в PostgreSQL без дублей: ON CONFLICT и транзакция",
  "nodes": [
    {
      "parameters": {
        "content": "## События в Postgres\nПачка до 50 событий пишется одной транзакцией: упала одна вставка — откатывается вся пачка, состояния «половина записана» нет. Повтор того же event_id гасит ON CONFLICT DO NOTHING по уникальному индексу.\n\nПосле импорта: подключение к базе (пользователю нужны только INSERT и SELECT на events).",
        "width": 560,
        "height": 220
      },
      "id": "f410456d-31a4-52cc-b6c9-036133eabfd7",
      "name": "Заметка 7aa920",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -40,
        -280
      ]
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "events",
        "responseMode": "responseNode",
        "options": {}
      },
      "id": "14a8480d-3d2d-53af-b0c9-bb1c779e03ea",
      "name": "События",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        0,
        0
      ],
      "webhookId": "fdf1bec1-d7a0-58f4-83dd-831ee8182a7d"
    },
    {
      "parameters": {
        "fieldToSplitOut": "body.events",
        "options": {}
      },
      "id": "0f508037-065c-5362-820d-fd1efb555b7b",
      "name": "По одному событию",
      "type": "n8n-nodes-base.splitOut",
      "typeVersion": 1,
      "position": [
        220,
        0
      ]
    },
    {
      "parameters": {
        "operation": "executeQuery",
        "query": "INSERT INTO events (event_id, type, payload, created_at)\nVALUES ($1, $2, $3::jsonb, $4)\nON CONFLICT (event_id) DO NOTHING\nRETURNING event_id;",
        "options": {
          "queryReplacement": "={{ [$json.event_id, $json.type, JSON.stringify($json.payload), $json.created_at] }}",
          "queryBatching": "transaction"
        }
      },
      "id": "0d2c63b5-eff3-52c3-a614-7800e0f3a292",
      "name": "Записать",
      "type": "n8n-nodes-base.postgres",
      "typeVersion": 2.5,
      "position": [
        440,
        0
      ],
      "retryOnFail": true,
      "maxTries": 3,
      "waitBetweenTries": 3000
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ { \"written\": $input.all().length } }}",
        "options": {
          "responseCode": 200
        }
      },
      "id": "a5907bdb-aa85-5e73-9490-a558c77a3730",
      "name": "Ответ",
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.1,
      "position": [
        660,
        0
      ]
    }
  ],
  "connections": {
    "События": {
      "main": [
        [
          {
            "node": "По одному событию",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "По одному событию": {
      "main": [
        [
          {
            "node": "Записать",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Записать": {
      "main": [
        [
          {
            "node": "Ответ",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "pinData": {},
  "active": false,
  "meta": {
    "templateCredsSetupCompleted": false,
    "source": "promtbaza.com/voprosy/shablony-n8n"
  }
}

Скачать sobytiya-v-postgres.json

Промт: Запись из n8n в базу: транзакции и повторы
Помоги настроить запись данных из n8n в PostgreSQL.

Что пишу: [ДАННЫЕ: события из внешнего сервиса — event_id, тип, полезная нагрузка в JSON, время]
Таблица: [ТАБЛИЦА: events, есть уникальный индекс по event_id]
Объём: [ОБЪЁМ: 500-2000 событий в сутки, приходят пачками до 50]
Что беспокоит: [СТРАХ: сервис присылает одно событие несколько раз, и при обрыве связи мы не знаем, что записалось]

Что нужно:

1. Какую операцию ноды взять под мой случай и чем вставка отличается от вставки с обновлением при конфликте. У меня есть уникальный индекс — покажи, как использовать его, чтобы повтор не ломал запись и не плодил строки.
2. Полезная нагрузка приходит структурой. Скажи, в каком виде её класть в базу и что выбрать: отдельные колонки или одно поле. Дай критерий выбора, а не оба варианта.
3. Пачка из пятидесяти: запишется ли она одной операцией или пятьюдесятью, и что произойдёт при ошибке на тридцатой. Мне нужно понимать, окажется ли база в состоянии «половина записана».
4. Как узнать постфактум, какие события дошли. Назови проверочный запрос, который покажет разрыв в последовательности за сутки.
5. Учётные данные и доступ: где они задаются, почему не в самой ноде, и какой минимум прав нужен пользователю базы для этой задачи.

Отсечка. Не предлагай отключать уникальный индекс, чтобы «не мешал». Не советуй писать через ноду Code и собственное подключение: у ноды базы есть всё нужное. Не предлагай хранить всё одной строкой текста ради простоты — по этому полю потом придётся искать.

Проверка перед выдачей: опиши поведение схемы при трёх ситуациях — одно и то же событие пришло дважды, пачка оборвалась на середине, сервис прислал событие с пустой нагрузкой. Если хотя бы в одной база остаётся в непонятном состоянии, скажи об этом прямо и предложи, чем это закрыть.

Открыть карточку: пример результата и разбор

База знаний для ИИ-агента: PDF в pgvector

В шаблоне две ветки. Верхняя забирает PDF из папки Google Drive, режет на куски по 1 200 знаков с перекрытием 200 и кладёт в pgvector. Нижняя — чат: агент отвечает по инструкциям и сам решает, когда искать в базе.

Схема загрузки: Загрузить документы → Файлы в папке → Скачать → В базу знаний (с узлами Чтение PDF, Нарезка и Векторы). Схема чата: Вопрос в чате → Агент-консультант с Моделью и Поиском в инструкциях.

Что поменять. Папку Google Drive, подключение к Postgres с расширением pgvector и адрес Ollama. Модели в шаблоне nomic-embed-text для векторов и qwen2.5:7b для ответов, их можно заменить своими.

Где ломается. Векторы при загрузке и при поиске должны считаться одной и той же моделью, иначе поиск вернёт мусор. Хранилище подключено к агенту как инструмент (режим retrieve-as-tool): так агент ищет, только когда вопрос про инструкции. И при пополнении папки ветка загрузит старые файлы ещё раз, перед повторной загрузкой очищайте таблицу или ведите список загруженных.

JSON шаблона: скопировать и вставить на холст
{
  "name": "База знаний для ИИ-агента: PDF в pgvector и поиск как инструмент",
  "nodes": [
    {
      "parameters": {
        "content": "## База знаний (RAG)\nВерхняя ветка раз в месяц кладёт PDF из папки Google Drive в pgvector: куски по 1 200 знаков с перекрытием 200. Нижняя — чат: агент сам решает, когда искать в базе, потому что хранилище подключено как инструмент.\n\nПосле импорта: папка Drive, Postgres с расширением pgvector, Ollama с моделями nomic-embed-text и qwen2.5:7b (или свои).",
        "width": 620,
        "height": 230
      },
      "id": "a69b88c2-48ad-5aff-8185-702b277f01aa",
      "name": "Заметка 053b19",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -40,
        -300
      ]
    },
    {
      "parameters": {},
      "id": "87f48c2a-8108-56dc-9600-73c4c559fde2",
      "name": "Загрузить документы",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        0,
        0
      ]
    },
    {
      "parameters": {
        "resource": "fileFolder",
        "filter": {
          "folderId": {
            "__rl": true,
            "mode": "url",
            "value": "https://drive.google.com/drive/folders/ZAMENITE_NA_ID_PAPKI"
          }
        },
        "options": {}
      },
      "id": "d126d04d-e19c-58f6-b820-28d43eb763cc",
      "name": "Файлы в папке",
      "type": "n8n-nodes-base.googleDrive",
      "typeVersion": 3,
      "position": [
        220,
        0
      ]
    },
    {
      "parameters": {
        "operation": "download",
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.id }}"
        },
        "options": {}
      },
      "id": "2b44a912-595f-502e-bb81-5b15dc326949",
      "name": "Скачать",
      "type": "n8n-nodes-base.googleDrive",
      "typeVersion": 3,
      "position": [
        440,
        0
      ]
    },
    {
      "parameters": {
        "mode": "insert",
        "tableName": "instrukcii",
        "options": {}
      },
      "id": "24ddf3a9-4fc7-5a99-9ad7-f0e983cea08d",
      "name": "В базу знаний",
      "type": "@n8n/n8n-nodes-langchain.vectorStorePGVector",
      "typeVersion": 1.1,
      "position": [
        680,
        0
      ]
    },
    {
      "parameters": {
        "dataType": "binary",
        "textSplittingMode": "custom",
        "options": {}
      },
      "id": "049417bb-f25d-52da-bee1-d9e43f746e37",
      "name": "Чтение PDF",
      "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
      "typeVersion": 1.1,
      "position": [
        640,
        220
      ]
    },
    {
      "parameters": {
        "chunkSize": 1200,
        "chunkOverlap": 200,
        "options": {}
      },
      "id": "29baf37d-aede-5fde-a8d4-dbd277613530",
      "name": "Нарезка",
      "type": "@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter",
      "typeVersion": 1,
      "position": [
        640,
        400
      ]
    },
    {
      "parameters": {
        "model": "nomic-embed-text:latest"
      },
      "id": "2929df79-8093-53a1-b251-e482497a1da5",
      "name": "Векторы",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOllama",
      "typeVersion": 1,
      "position": [
        840,
        220
      ]
    },
    {
      "parameters": {
        "options": {}
      },
      "id": "7167680c-caa0-5e9e-bde9-02bf139120dc",
      "name": "Вопрос в чате",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "typeVersion": 1.1,
      "position": [
        0,
        640
      ]
    },
    {
      "parameters": {
        "options": {
          "systemMessage": "Ты отвечаешь монтажникам по инструкциям к оборудованию. Сначала ищи в базе инструкций, отвечай только по найденному и называй пункт инструкции. Не нашёл — так и скажи, не додумывай."
        }
      },
      "id": "796d15fe-be00-5cfe-b42c-0d1180da7764",
      "name": "Агент-консультант",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 2.2,
      "position": [
        300,
        640
      ]
    },
    {
      "parameters": {
        "model": "qwen2.5:7b",
        "options": {
          "temperature": 0.2
        }
      },
      "id": "39b73e4e-2656-5f8c-85ca-1cb7f2934da2",
      "name": "Модель",
      "type": "@n8n/n8n-nodes-langchain.lmChatOllama",
      "typeVersion": 1,
      "position": [
        200,
        860
      ]
    },
    {
      "parameters": {
        "mode": "retrieve-as-tool",
        "toolName": "poisk_v_instrukciyah",
        "toolDescription": "Ищет пункты инструкций по оборудованию: модель прибора, монтаж, ошибки, настройки.",
        "tableName": "instrukcii",
        "topK": 4,
        "options": {}
      },
      "id": "0b5a6e6f-8a31-5a11-8a21-4f04172ff103",
      "name": "Поиск в инструкциях",
      "type": "@n8n/n8n-nodes-langchain.vectorStorePGVector",
      "typeVersion": 1.1,
      "position": [
        460,
        860
      ]
    },
    {
      "parameters": {
        "model": "nomic-embed-text:latest"
      },
      "id": "14996865-6713-5e07-b388-efb1a492d4ac",
      "name": "Векторы для поиска",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOllama",
      "typeVersion": 1,
      "position": [
        460,
        1060
      ]
    }
  ],
  "connections": {
    "Загрузить документы": {
      "main": [
        [
          {
            "node": "Файлы в папке",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Файлы в папке": {
      "main": [
        [
          {
            "node": "Скачать",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Скачать": {
      "main": [
        [
          {
            "node": "В базу знаний",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Вопрос в чате": {
      "main": [
        [
          {
            "node": "Агент-консультант",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Чтение PDF": {
      "ai_document": [
        [
          {
            "node": "В базу знаний",
            "type": "ai_document",
            "index": 0
          }
        ]
      ]
    },
    "Нарезка": {
      "ai_textSplitter": [
        [
          {
            "node": "Чтение PDF",
            "type": "ai_textSplitter",
            "index": 0
          }
        ]
      ]
    },
    "Векторы": {
      "ai_embedding": [
        [
          {
            "node": "В базу знаний",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "Модель": {
      "ai_languageModel": [
        [
          {
            "node": "Агент-консультант",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Поиск в инструкциях": {
      "ai_tool": [
        [
          {
            "node": "Агент-консультант",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Векторы для поиска": {
      "ai_embedding": [
        [
          {
            "node": "Поиск в инструкциях",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "pinData": {},
  "active": false,
  "meta": {
    "templateCredsSetupCompleted": false,
    "source": "promtbaza.com/voprosy/shablony-n8n"
  }
}

Скачать baza-znaniy-dlya-agenta.json

Промт: База знаний для агента n8n
Спроектируй в n8n конвейер, который положит мои документы в векторное хранилище и подключит его к агенту как инструмент.

Что за документы: [ДОКУМЕНТЫ: 40 инструкций по оборудованию, PDF, от 2 до 30 страниц]
Откуда берутся: [ИСТОЧНИК: папка на Google Drive, пополняется раз в месяц]
Что агент должен уметь: [ЗАДАЧА: отвечать монтажникам на вопросы по конкретной модели прибора со ссылкой на пункт инструкции]
Где всё крутится: [СРЕДА: self-hosted n8n в Docker, рядом PostgreSQL]

Что нужно:

1. Цепочка нод от файла до хранилища: чем загружаем, чем режем на куски, чем считаем векторы, куда кладём. Назови ноды точными именами, как они подписаны в интерфейсе.
2. Выбор разбивки. У n8n есть разбивка по длине и рекурсивная; скажи, какая нужна под мой тип документов и почему, в одну строку. Для инструкций важно, чтобы кусок не рвался посреди пункта.
3. Размер куска и перекрытие — конкретные числа под мои документы, а не «зависит от задачи».
4. Какое хранилище взять под мою среду. У меня рядом уже стоит база — учти это, прежде чем предлагать отдельный сервис.
5. Каким режимом хранилище подключается к агенту именно как инструмент, а не как отдельная цепочка. Это разные режимы одной ноды, и от выбора зависит, сможет ли агент сам решать, когда искать.
6. Что делать при пополнении папки: перезаливать всё или добавлять. Назови, по какому полю различать уже загруженные документы.

Отсечка. Не предлагай хранилище в памяти: оно теряет данные при перезапуске контейнера, а у меня документы должны пережить рестарт. Не советуй платные облачные векторные базы, пока не исчерпаны те, что ставятся рядом. Не объясняй, что такое эмбеддинги — нужна схема, а не теория.

Проверка перед выдачей: пройди по цепочке от PDF до ответа агента и назови шаг, на котором чаще всего теряется ссылка на исходный документ. Если в схеме нет места, где сохраняется имя файла и номер страницы, добавь его и скажи об этом отдельно.

Открыть карточку: пример результата и разбор

Скачали чужой шаблон, и он не работает

В открытых каталогах тысячи шаблонов, и почти все они написаны под чужие сервисы: Slack вместо Telegram, HubSpot вместо amoCRM, английские названия полей. Импорт проходит, а первый же запуск краснеет. Чинить такой шаблон вам проще не руками, а вместе с нейросетью: отдайте ей JSON и опишите, что у вас по-другому.

Промт: Переделать чужой шаблон n8n под свою задачу
Разбери готовый шаблон n8n и переделай его под мою задачу. Шаблон рабочий, но собран под чужие сервисы.

Что делает шаблон: [ШАБЛОН: принимает письмо, вытаскивает вложение, распознаёт текст и кладёт в таблицу]
Ссылка или список нод: [НОДЫ: Gmail Trigger, Extract from File, OpenAI, Google Sheets]
Что нужно мне: [МОЯ ЗАДАЧА: то же самое, но почта на своём домене через IMAP, а таблица — база PostgreSQL]
Мои ограничения: [ОГРАНИЧЕНИЯ: self-hosted n8n, наружу ходит только через прокси, аккаунта Google нет вовсе]

Что нужно:

1. Разбор по нодам: что делает каждая и что из неё выходит дальше. Отдельно отметь ноды, которые в моём случае не нужны вовсе, — их чаще всего оставляют «на всякий случай», и они ломают цепочку.
2. Замены: чем заменить каждую чужую ноду под мои сервисы. Не просто название, а что изменится в данных на выходе: у замены другой формат, и следующая нода это почувствует.
3. Места стыка, где шаблон сломается после замены. Обычно это поля, которые следующая нода берёт по имени из предыдущей.
4. Что настроить в креденшалах для моей схемы: почта по IMAP и база требуют других данных, чем у оригинала.
5. Порядок сборки: какую ноду подключить первой и на каком шаге проверять, что данные идут, чтобы не отлаживать всё разом в конце.

Отсечка. Не предлагай завести аккаунт Google ради совместимости с шаблоном — его нет и не будет. Не советуй переписать всё с нуля: шаблон рабочий, задача — адаптировать. Не оставляй в схеме ноды, которые в моём случае ничего не делают.

Проверка перед выдачей: пройди цепочку после замен от первой ноды до последней и назови поле, которое перестанет приходить. Если такого поля нет — скажи, что проверил и стык чистый.

Открыть карточку: пример результата и разбор

Самая частая поломка после импорта — данные пропадают между узлами. Узел видит только то, что пришло на его вход, а не всё, что было раньше в цепочке, и выражение вроде {{ $json.phone }} на пятом узле возвращает пустоту. Обращайтесь к нужному узлу по имени, как это сделано в шаблонах выше.

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

Цепочка нод: [ЦЕПОЧКА: приём вебхука, затем фильтр по статусу, затем запрос к API, затем запись в таблицу]
Какое поле пропадает: [ПОЛЕ: email покупателя, приходит в теле вебхука]
Где обнаруживается пропажа: [ГДЕ: на записи в таблицу колонка пустая]
Как обращаюсь к полю сейчас: [ВЫРАЖЕНИЕ: json.email]

Что нужно:

1. Скажи, на какой ноде поле перестаёт существовать, и почему это происходит именно там. Данные между нодами ходят массивом объектов, обычное содержимое лежит под ключом json, файлы — под ключом binary. Нода, которая обращается наружу, отдаёт свой ответ, а не вход, и поле из вебхука до следующего шага само не доезжает.
2. Дай правильное выражение для моего случая: как обратиться к полю из ноды, которая стоит не прямо перед текущей.
3. Если поле нужно протащить через несколько шагов — покажи, как собрать его обратно в объект, а не тянуть выражением через всю цепочку. Длинная ссылка на ноду через три шага ломается при любой перестановке.
4. Что смотреть в выводе каждой ноды, чтобы увидеть потерю самому: где в интерфейсе видно, что на выходе элемент один, а на входе было десять.
5. Отдельно: что делать, если поле приходит не всегда. Нужна ветка со значением по умолчанию, а не пустая колонка в таблице.

Отсечка. Не предлагай собирать всё в одну ноду Code «чтобы не терялось»: это прячет проблему вместо решения. Не советуй закреплять тестовые данные и на этом успокоиться — закреплённые данные не воспроизводят боевые. Не объясняй, что такое JSON.

Проверка перед выдачей: пройди мою цепочку по шагам и назови ровно одну ноду, после которой поля больше нет. Если по описанию однозначно не определить — скажи, вывод какой ноды надо показать, и не гадай.

Открыть карточку: пример результата и разбор

Красный узел и непонятный текст ошибки разбирает отдельная карточка: вставьте в неё текст ошибки и JSON узла, и модель скажет, что поменять.

Промт: Разобрать ошибку в n8n и починить воркфлоу — ChatGPT
Разбери ошибку в воркфлоу n8n: где падает, почему и что чинить.

Текст ошибки: [ОШИБКА: ECONNREFUSED 127.0.0.1:5678 в ноде HTTP Request]
Схема флоу: [ФЛОУ: Webhook, дальше HTTP Request, дальше Set, дальше Telegram]
Где запущен n8n: [СРЕДА: Docker на VPS, self-hosted]
Что во входных данных упавшей ноды: [INPUT: order_id заполнен, email пустой]
Что уже пробовал: [ПОПЫТКИ: перезапускал воркфлоу, менял метод с GET на POST]

Что нужно:
1. Диагноз: какая нода падает и первопричина — настройки, expression, credentials, данные или окружение. Одна причина, а не список «возможно, это, а может, то».
2. Фикс по шагам: какие поля ноды открыть и что в них вписать.
3. Дело в expression — верни его целиком, а не описанием.
4. Как проверить, что починилось: какие данные закрепить через pin data и что должно прийти на выходе.
5. Страховка от повтора именно для этой ошибки: retry, error workflow, проверка поля перед использованием.

Отсечка. Не давай советов «проверьте настройки и логи» — данных не хватает, задай один вопрос и жди ответа. Не путай localhost внутри контейнера с хост-машиной. Не предлагай переустановить n8n вместо починки ноды. Ошибка про неопределённое поле — сначала проверь, вернула ли его предыдущая нода, и только потом правь expression.

Проверка перед выдачей: пройди флоу от триггера до упавшей ноды на моих входных данных и скажи, на каком шаге значение теряется. По описанию этого не видно — назови, какой кусок execution приложить.

Открыть карточку: пример результата и разбор

Где запустить шаблон

Путей три, и выбирать вам по тому, как шаблон стартует.

  • Облако n8n. Регистрация и сразу рабочий редактор с HTTPS. Вам удобно попробовать, но число запусков ограничено тарифом.
  • Свой компьютер. Подходит для шаблонов, которые вы запускаете руками: сделки в CRM, загрузка базы знаний. Вебхуки, Telegram и расписание без постоянно включённой машины и публичного адреса работать не будут.
  • Свой VPS. n8n работает круглые сутки, вебхуки получают адрес с HTTPS, Telegram видит бота. Для шести шаблонов из восьми это единственный нормальный вариант.

Как поставить n8n на сервер с Docker, доменом и HTTPS, разобрано по шагам в статье «Установка n8n на VPS». Если шаблон нужен как основа для ИИ-агента, загляните в разбор ИИ-агентов в n8n: там про системное сообщение, память и инструменты.

FAQ

Шаблоны n8n бесплатные?

Да. Все восемь шаблонов на этой странице бесплатные, их можно копировать и менять без ограничений. Сам n8n в версии для своего сервера тоже бесплатный, платить придётся за сервер и за ключи нейросетей.

Как импортировать шаблон в n8n?

Скопируйте JSON и вставьте на пустой холст сочетанием Ctrl+V, или сохраните его в файл и загрузите через меню Import from File. После импорта выберите свои учётные данные в узлах с замком и замените адреса-заглушки.

Будут ли шаблоны работать в старой версии n8n?

Шаблоны собраны под n8n 2.43. В версиях 1.x большинство узлов откроется, но узлы ИИ-агента могли называться и настраиваться иначе. Если узел не открылся, обновите n8n или пересоберите этот узел руками по схеме из описания.

Можно ли вместо DeepSeek подключить другую нейросеть?

Да. Удалите узел модели под агентом и подключите другой: OpenAI, Anthropic, Ollama или любой совместимый с OpenAI сервис. Системное сообщение и память переносить не нужно, они живут в самом агенте.

Где взять ещё шаблоны n8n?

Официальная библиотека на n8n.io/workflows содержит больше 13 тысяч шаблонов, почти все на английском и под зарубежные сервисы. Берите оттуда схему, а под свои сервисы переделывайте её промптом из раздела выше.