Менеджер стройфирмы отвечает клиентам в среднем через 3-4 часа после заявки. По нашей практике - половина лидов к этому времени уже договорилась с конкурентами или просто остыла. Оставила заявку импульсивно, никто не ответил быстро, пошла дальше.
Этот гайд - пошаговая сборка Telegram-бота в n8n с нуля. Бот принимает входящее сообщение, отправляет его в OpenAI и возвращает ответ клиенту за 2-3 секунды. Никакого программирования: конкретные настройки каждого блока, конкретные формулы, конкретные места где может пойти не так.
с нуля - n8n
Создаём Telegram-бота через @BotFather и получаем токен
Прежде всего нужен токен - это как ключ от замка, который даёт право вашему боту отправлять и получать сообщения.
- Открываете Telegram, находите @BotFather (синяя галочка - это официальный бот Telegram для создания ботов).
- Отправляете
/newbot. - BotFather спрашивает имя (публичное, например «Заявки на ремонт»).
- Затем username - заканчивается на
bot, напримерremont_zayavki_bot. - Получаете токен: строка вида
7441234567:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw.
Токен сохраняете - он понадобится при настройке n8n.
Дополнительно рекомендую сразу задать описание бота командой /setdescription в BotFather - клиент увидит его до первого сообщения. Например: «Здесь вы можете оставить заявку на ремонт или задать вопрос. Отвечаем в течение минуты».
Важно: не путайте токен бота (для Bot API) с вашим личным токеном Telegram-аккаунта. Это разные вещи.
Настраиваем Telegram Trigger в n8n: вставляем токен, выбираем тип обновления
Смысл этого шага: научить n8n «слушать» входящие сообщения в бот. Каждый раз когда клиент что-то напишет - n8n об этом узнает и запустит цепочку обработки.
Открываете n8n, создаёте новый сценарий (кнопка «+» в левом верхнем углу -> «New сценарий»).
Нажимаете «Add first step» -> в поиске набираете «Telegram» -> выбираете Telegram Trigger (это стартовый блок - точка входа в цепочку).
Настройки блока:
Credential: нажимаете «Create new credential» -> в поле «Access Token» вставляете токен бота -> Save.
Updates: выбираете «Сообщение» (входящее сообщение в личном чате). Если бот будет работать в группах - добавьте «Group Сообщение».
После сохранения блока внизу появится URL вебхука - это адрес, по которому Telegram будет присылать уведомления о новых сообщениях. Выглядит вроде https://your-n8n.com/webhook/abc123. n8n сам зарегистрирует его в Telegram. Проверить можно открыв в браузере: https://api.telegram.org/bot<ваш_токен>/getWebhookInfo - там должен быть ваш адрес.
Чтобы протестировать: нажмите «Test step» в n8n, напишите своему боту в Telegram. В n8n должен появиться входящий item с данными сообщения.
Структура входящих данных выглядит так:
{
"message": {
"message_id": 123,
"from": {"id": 987654321, "first_name": "Иван"},
"chat": {"id": 987654321, "type": "private"},
"text": "Хочу узнать стоимость ремонта кухни"
}
}
Текст сообщения: {{ $json.message.text }}. ID чата клиента: {{ $json.message.chat.id }}.
Добавляем блок OpenAI: вставляем API-ключ, выбираем модель
Смысл этого шага: подключить «мозг», который будет понимать вопрос клиента и генерировать первичный ответ. Не шаблонную отписку, а живой текст с учётом того, что именно спросили.
После Telegram Trigger добавляете блок OpenAI.
Credential: «Create new» -> в поле «API Key» вставляете ключ с platform.openai.com. Ключ начинается с sk-.
Resource: Chat Operation: Complete
Model: выбираете gpt-4o-mini. Это оптимальный выбор для большинства задач обработки заявок:
- Цена: $0.15 за 1 миллион токенов на входе, $0.60 на выходе
- Скорость: 2-3 секунды на ответ
- Качество: достаточно для первичной обработки обращений
Для задач где важна точность рассуждений (например, разбор сложной сметы) - gpt-4o ($2.50/$10 за 1 миллион токенов).
Сообщения -> Add сообщение:
- Role: system
- Content: системный промпт (описание ниже)
Ещё одно сообщение:
- Role: user
- Content:
{{ $('Telegram Trigger').item.json.message.text }}
Это выражение берёт текст сообщения из блока Telegram Trigger. Синтаксис $('Название блока').item.json.поле позволяет обращаться к данным любого предыдущего блока по имени.
Настраиваем системный промпт под стройфирму
Системный промпт - это инструкция для модели: кем ей быть, как отвечать, что знать о вашем бизнесе. Он передаётся при каждом запросе.
Вот рабочий пример для стройки:
Ты помощник по первичной обработке заявок строительной компании.
Правила:
1. Отвечай только на русском языке
2. Будь краток - уточняй одним вопросом, не задавай сразу пять
3. Если клиент описал объём работ - подтверди, что передашь замерщику
4. Не называй конкретные цены - отвечай «стоимость уточнит менеджер после замера»
5. Если вопрос непонятен - уточни одним вопросом
6. Не придумывай факты о компании которых не знаешь
Когда клиент оставляет заявку - собери: площадь объекта и тип работ.
Пример твоего ответа: «Здравствуйте! Вы оставили заявку на ремонт квартиры. Чтобы я мог сразу ориентировать по стоимости - уточните площадь объекта и тип работ».
Текст клиента передаётся через выражение. В n8n есть два варианта:
Короткий (если предыдущий блок - Telegram Trigger):
{{ $json.message.text }}
Полный (всегда работает):
{{ $('Telegram Trigger').item.json.message.text }}
Второй вариант надёжнее - он явно указывает из какого блока брать данные, независимо от того, что стоит между триггером и текущим блоком.
Можно добавить имя клиента в промпт для персонализации:
Имя клиента: {{ $('Telegram Trigger').item.json.message.from.first_name }}
Сообщение: {{ $('Telegram Trigger').item.json.message.text }}
Тогда бот обращается к клиенту по имени - это мелочь, но конверсия в ответ растёт.
Добавляем блок отправки ответа: ID чата берём из триггера, текст - из ответа OpenAI
Смысл этого шага: вернуть ответ GPT клиенту в тот же чат, откуда пришло сообщение.
Добавляете блок Telegram (не Trigger, а обычный Telegram).
Credential: тот же что в Trigger-блоке. Resource: Сообщение Operation: Send Сообщение
Chat ID: {{ $('Telegram Trigger').item.json.message.chat.id }}
Важно: нужно отвечать именно тому чату откуда пришло сообщение. ID чата берётся из данных триггера.
Text: {{ $json.message.content }}
Ответ OpenAI лежит в message.content. Полный путь: $('OpenAI').item.json.message.content, но если OpenAI - предыдущий блок, $json.message.content работает.
Additional Fields -> Parse Mode: Markdown
Это позволяет использовать жирный, курсив и код в ответах бота.
Сохраняете сценарий и нажимаете «Activate» (переключатель в правом верхнем углу). Без активации входящие сообщения обрабатываться не будут.
Пишете боту - получаете ответ. Цепочка работает.
Тест в реальном чате: проверяем историю запусков в n8n
После активации открываете бот в Telegram и отправляете несколько тестовых сообщений. Например: «Хочу узнать стоимость отделки загородного дома 150 кв.м».
В n8n слева есть кнопка «Executions» (иконка часов). Здесь показывается история всех запусков сценария:
- Зелёный - успешно
- Красный - ошибка
- Серый - отменён
Нажимаете на любой запуск и видите данные на каждом блоке: что пришло на вход, что вышло на выход. Это основной инструмент отладки - не нужно ничего угадывать, всё видно.
Частые проблемы на этом этапе:
Ошибка 401 от OpenAI: неверный API-ключ. Проверьте что скопировали полностью, без пробелов и лишних символов.
Ошибка 429 от OpenAI: превышен лимит запросов. Бесплатный план OpenAI ограничен 3 запросами в минуту и $5 стартового кредита. Пополните баланс или подождите минуту.
Бот не отвечает: проверьте что сценарий «Activated» (зелёный индикатор вверху справа). Неактивированный сценарий не принимает входящие.
Пустой ответ: путь к ответу OpenAI неверный. Откройте запуск, нажмите на блок OpenAI и проверьте структуру output - найдите где лежит текст ответа и скорректируйте выражение.
Добавляем память диалога - бот начинает понимать контекст переписки
Сейчас бот не помнит предыдущих сообщений - каждый запрос независим. Клиент написал «а вот это дешевле сделаете?» - бот не понимает о чём речь. Для добавления памяти используем AI Agent вместо прямого вызова OpenAI.
Бизнес-смысл: клиент не объясняет с нуля при каждом сообщении. Разговор выглядит как нормальная переписка, а не как форма с кнопками.
Удаляете блок OpenAI и добавляете AI Agent (ищете в поиске).
Настройки AI Agent:
- Prompt:
{{ $('Telegram Trigger').item.json.message.text }} - System Сообщение: ваш системный промпт (тот же что выше)
К AI Agent добавляете дочерний блок Window Buffer Memory (нажимаете на иконку Memory внизу AI Agent). Это блок «короткой памяти» - он хранит последние N реплик диалога:
- Session ID:
{{ $('Telegram Trigger').item.json.message.chat.id }}Это важно: используем ID чата как ключ сессии. У каждого клиента своя история диалога, разные клиенты не смешиваются. - Window Size: 10 (хранить 10 пар сообщений - около 20 реплик)
Ещё добавляете Chat Model к AI Agent:
- Подключаете тот же OpenAI credential
- Model: gpt-4o-mini
Теперь бот помнит последние 10 вопросов и ответов с конкретным клиентом. Написал «а об этом расскажи подробнее» - поймёт о чём речь.
Обновляете блок Telegram Send Сообщение: text теперь {{ $json.output }} (AI Agent возвращает ответ в поле output, а не message.content как прямой OpenAI).
Частые вопросы
Почему бот не отвечает после настройки?
Самая частая причина - сценарий не активирован. Кнопка «Active» в правом верхнем углу должна быть зелёной. Вторая причина - n8n запущен локально без публичного адреса: Telegram не может достучаться до вашего компьютера напрямую. Для разработки используйте ngrok (бесплатный туннель) или n8n Cloud.
Как ограничить бота только на своих сотрудников или проверенных клиентов?
Добавьте блок IF сразу после Telegram Trigger. Условие: {{ $json.message.chat.id }} equals 123456789 (нужный chat_id). Ветка «True» идёт дальше к OpenAI, ветка «False» - к блоку Telegram Send с текстом «Извините, бот работает только для клиентов компании». Список разрешённых ID можно хранить в Code-блоке или Google Sheets.
Как передать в OpenAI всю историю переписки, а не только последнее сообщение?
Используйте AI Agent + Window Buffer Memory вместо прямого блока OpenAI (описано в разделе выше). Альтернатива: хранить историю в переменных n8n или Redis и формировать массив сообщений вручную в Code-блоке.
Сколько стоит GPT-4o-mini при 1000 заявках в день?
Средняя заявка на ремонт - около 500 токенов на входе (промпт + вопрос клиента) и 200 токенов на выходе. 1000 заявок = примерно 700 000 токенов. Стоимость: $0.15 × 0.5 + $0.60 × 0.2 = $0.075 + $0.12 = около $0.20 в день, то есть $6 в месяц. Меньше чем один пропущенный клиент на ремонт квартиры. При использовании GPT-4o стоимость вырастет примерно в 15 раз.
Можно ли использовать Claude вместо OpenAI?
Да. Вместо блока OpenAI добавляете блок Anthropic или используете Anthropic как Chat Model в AI Agent. Ключ с console.anthropic.com. Модель: claude-3-5-haiku-20241022 (быстрый и дешёвый) или claude-sonnet-4-5 (мощнее). Путь к ответу немного другой - проверьте историю запусков чтобы найти нужное поле с текстом.
Что дальше
За один вечер реально поднять рабочую цепочку: заявка из Telegram -> GPT отвечает клиенту за 2-3 секунды -> менеджер видит горячий лид и подключается уже к подготовленному контакту.
Чтобы начать прямо сейчас: регистрируетесь на n8n Cloud (есть бесплатный план - 5 активных сценариев, этого хватит на старт), берёте $5 стартового кредита OpenAI, и идёте по шагам выше. Первый ответ бота на тестовое сообщение обычно удивляет - ждёшь формального автоответа, а получаешь живой диалог.
Следующий шаг в учебном плане: n8n: продвинутые паттерны - Code-блок, Switch, циклы и обработка ошибок.
Больше гайдов - ai-uchebnik.ru/uchebnik.
Если хотите следить за тем как предприниматели в России и СНГ применяют AI в своём бизнесе без программиста - подпишитесь на канал AI Компас. Там разбираем конкретные инструменты и сценарии под малый и средний бизнес.