Эй, кто тут опять притащил в мастерскую чат-бота, таблицу и кипу заявок? Заходи, сейчас покажу, как я это собираю так, чтобы менеджер не ловил клиентов сачком по перепискам.
Если коротко, автоматическая обработка заявок из Telegram в Google Sheets через n8n нужна, когда хочется перестать копировать сообщения руками. Клиент пишет в бота, данные сразу летят в таблицу, новая строка получает статус, менеджер видит контакт, а дальше можно подключить уведомления, дедупликацию, сортировку по источнику и даже умную классификацию.
Ниже будет нормальный прикладной маршрут: схема workflow, таблица узлов, пример структуры листа, чек-лист запуска, частые косяки и ответы на вопросы, которые мне обычно прилетают уже после первой боевой недели.
Быстрый ответ
- Принимаем сообщение или контакт в Telegram-боте.
- В n8n вытаскиваем имя, username, телефон, текст заявки, дату и служебный идентификатор.
- Проверяем, не существует ли уже такая заявка по телефону, username или lead_id.
- Если запись новая, добавляем строку в Google Sheets. Если старая, обновляем статус или комментарий.
- Параллельно отправляем уведомление менеджеру и ставим контрольный статус: «новая», «в работе», «закрыта».
| Как было руками | Как работает через n8n |
|---|---|
| Открываешь Telegram, копируешь имя и текст | Telegram Trigger ловит событие сразу после сообщения |
| Вставляешь данные в таблицу и молишься, чтобы не промахнуться строкой | Google Sheets сам получает подготовленные поля в нужные колонки |
| Путаешь дубли и теряешь историю | Workflow проверяет совпадение по ключу и обновляет существующую запись |
| Менеджер замечает новую заявку, когда уже поздно | Бот или внутренний чат получает уведомление сразу после записи |
Оглавление
- Где эта связка реально экономит время
- Какая схема работает у меня чаще всего
- Какие поля стоит хранить в Google Sheets
- Какие узлы понадобятся в n8n
- Пошаговая сборка сценария
- Как не плодить дубли
- Как добавить статусы и уведомления
- Когда стоит подключать ИИ
- Частые косяки на старте
- Чек-лист перед запуском
- FAQ
Где эта связка реально экономит время
Я чаще всего ставлю такую автоматизацию там, где заявки прилетают в мессенджер быстрее, чем кто-то успевает открыть CRM. Это студии, ремонт, локальные услуги, производство под заказ, онлайн-школы, консультации, запись на демо, мелкая розница с доставкой. Пока человек пишет в Telegram, бизнес уже хочет видеть заявку в таблице, отмечать ответственного и не забывать созвон.
Google Sheets тут заходит как понятный всем экран. Менеджер видит строки, владелец смотрит статусы, а я со своей стороны спокойно докручиваю логику в n8n. Для меня n8n — автоматизация, которую удобно растить вместе с процессом: сегодня у тебя одна таблица и один менеджер, а завтра уже статусы, дедупликация, напоминания и отдельный поток ошибок.
Промежуточный вывод: если у вас заявки уже живут в Telegram, а учёт до сих пор держится на памяти менеджера, такая связка окупается очень быстро.
Какая схема работает у меня чаще всего
Мой базовый маршрут обычно выглядит так: человек пишет боту, Telegram Trigger подхватывает событие, дальше Edit Fields собирает чистую структуру данных, IF фильтрует мусор и служебные команды, Google Sheets ищет совпадение по ключу, а потом либо добавляет новую строку, либо обновляет старую. Финальным узлом я почти всегда ставлю уведомление менеджеру в Telegram или отдельный внутренний чат.
Схема в одну строчку выглядит так:
Telegram Trigger → Edit Fields → IF → Google Sheets Lookup → IF → Append / Update → Telegram Notification
Если проект уже оброс мясом, я добавляю ещё два слоя. Первый — отдельный поток ошибок через Error Trigger, чтобы не узнавать о поломке спустя три дня. Второй — маленький блок нормализации: привести телефон к одному формату, обрезать пустые хвосты у текста, проставить created_at и источник заявки.
Какие поля стоит хранить в Google Sheets
Не надо превращать лист в музей случайных колонок. Для нормальной обработки заявок я обычно оставляю такой набор:
- lead_id — внутренний идентификатор заявки;
- created_at — дата и время создания;
- username — username пользователя, если он есть;
- name — имя или подпись контакта;
- phone — номер, если бот попросил контакт;
- message — сам текст заявки;
- source — откуда пришёл человек: бот, реклама, канал, форма;
- status — новая, в работе, ждём ответ, закрыта;
- manager_comment — короткая заметка для команды.
Если хочется чуть больше порядка, можно добавить city, tag, priority и last_update. Но я бы не пытался в первый же вечер собрать суперкомбайн. Чем стройнее таблица на старте, тем проще потом жить.
Какие узлы понадобятся в n8n
| Узел | Что делает | Зачем нужен в заявках |
|---|---|---|
| Telegram Trigger | Ловит входящие события от бота | Стартует workflow сразу после нового сообщения |
| Edit Fields | Собирает и переименовывает нужные поля | Делает данные аккуратными перед записью в таблицу |
| IF | Разветвляет логику | Отделяет новую заявку от дубля или пустого события |
| Google Sheets | Читает, добавляет и обновляет строки | Хранит заявки и статусы в одном месте |
| Telegram | Отправляет сообщения | Шлёт уведомления менеджеру или ответ клиенту |
| Error Trigger | Ловит ошибки другого workflow | Помогает не прозевать падение сценария |
Пошаговая сборка сценария
1. Создаём бота и подключаем его к n8n
Сначала поднимаем Telegram-бота и добавляем токен в credentials. Тут важен один практический момент: пока тестируете цепочку, не перепутайте тестовый и боевой режим workflow. Это один из тех приколов, из-за которых люди полчаса смотрят на пустой canvas и думают, что бот умер.
2. Готовим таблицу
В Google Sheets заранее создаём первую строку с заголовками колонок. Я обычно делаю лист под названием Leads и сразу задаю понятные поля. В n8n первая строка воспринимается как заголовок, так что названия колонок лучше продумать заранее и не менять по десять раз уже после запуска.
3. Нормализуем входящие данные
После Telegram Trigger я ставлю Edit Fields и собираю структуру руками: имя, username, текст, номер телефона, дата, lead_id. Если в боте есть кнопка «Поделиться контактом», телефон приходит куда чище, чем когда пользователь печатает его сам в свободной форме. Для текста заявки я ещё люблю делать trim, чтобы убрать мусор по краям.
4. Проверяем дубли
Вот тут начинается взрослая жизнь. Если просто писать каждое сообщение в новую строку, через неделю таблица станет похожа на гараж после переезда. Я обычно ищу дубль по одному главному ключу и одному запасному: например, по телефону и username, либо по lead_id и телефону. Дальше IF решает, куда вести поток: в append или update.
5. Пишем строку или обновляем существующую
Для новых заявок добавляем строку, для старых меняем статус, комментарий или время последнего касания. На практике это очень удобно: клиент дописал ещё одно сообщение, а вы не плодите вторую, третью и четвёртую карточку на одного и того же человека.
6. Уведомляем менеджера
После записи я отправляю короткое сообщение в рабочий чат: имя, телефон, суть заявки, ссылка на строку или хотя бы lead_id. Формат сообщений лучше сразу держать простым. Когда люди увлекаются сложной разметкой, Telegram начинает капризничать на спецсимволах, и уведомление ломается в самый неподходящий момент.
Промежуточный вывод: основной секрет тут не в красоте workflow, а в том, чтобы на входе привести данные к одному виду и сразу решить судьбу дублей.
Как не плодить дубли
Если честно, дубли — это самая частая головная боль в такой автоматизации. И лечится она не героизмом менеджера, а нормальной логикой. Вот что реально работает:
- держите уникальный ключ заявки;
- приводите телефон к одному формату;
- не создавайте пустые строки после удалённых записей в таблице;
- для повторного обращения обновляйте запись, а не клонируйте её;
- добавьте колонку last_update, чтобы видеть последнее касание.
Есть ещё один технический нюанс. Когда лист в Google Sheets устроен неровно, с дырками и странными разрывами, автоматическое добавление строк начинает жить своей жизнью. Я потому и люблю держать таблицу аккуратной: одна шапка, понятные колонки, никаких художеств посреди листа.
Как добавить статусы и уведомления
Голая запись в таблицу — это ещё не обработка заявок. Нужен маршрут после попадания строки в лист. Я обычно делаю три простых статуса: «новая», «в работе», «закрыта». Иногда добавляю «перезвонить» и «ждём ответ клиента».
Дальше можно пойти двумя дорогами:
- либо менеджер меняет статус руками в Google Sheets;
- либо n8n сам двигает статус по событиям, например после ответа клиенту или внутреннего уведомления.
Тут же удобно прикрутить напоминания. Если заявка висит в статусе «новая» дольше нужного времени, workflow шлёт пинок в Telegram. Когда команда небольшая, такой пинок экономит кучу нервов и не даёт горячим лидам остыть.
Когда стоит подключать ИИ
Я не сторонник лепить нейросеть на каждый винтик. Но в этой теме ИИ действительно полезен, когда входящие заявки приходят в свободной форме и надо быстро понять смысл текста. Например, модель может вытащить город, тип услуги, желаемую дату, бюджет и срочность, а потом положить это в отдельные колонки.
Ещё один удачный сценарий — короткое summary для менеджера. Вместо огромного полотна текста он получает пару внятных строк: что хочет клиент, насколько срочно и кому это лучше отдать. Для небольшого отдела продаж это прям приятный апгрейд.
Но я бы запускал такой блок только после того, как уже стабильно работает базовая автоматизация. Сначала заявка должна долетать, сохраняться и находиться по ключу. А уже потом можно навешивать умные штуки.
Частые косяки на старте
- Бот молчит. Чаще всего проблема в режиме теста, webhook или токене.
- Данные пишутся криво. Обычно виноват этап нормализации: разные форматы телефона, пустые поля, неверные названия колонок.
- Один лид попадает в лист несколько раз. Значит, логика поиска дубля либо слабая, либо ключ выбран неудачно.
- Уведомление не уходит. Проверьте chat_id и форматирование текста сообщения.
- При наплыве заявок всё тормозит. Тут уже надо смотреть на очередь, лимиты и поведение production-исполнений.
Я ещё советую сразу сделать отдельный workflow на ошибки. Когда основной сценарий падает, вы получите сообщение в свой чат и не узнаете о проблеме от разгневанного менеджера через полдня.
Чек-лист перед запуском
- У бота есть токен и он отвечает на стартовую команду.
- В n8n заведены credentials для Telegram и Google Sheets.
- В таблице создан лист с заголовками колонок.
- В Edit Fields собраны только нужные поля.
- Настроена проверка дублей.
- Есть ветка append и ветка update.
- После записи летит уведомление менеджеру.
- Подключён Error Trigger или отдельное сообщение об ошибке.
- Вы проверили сценарий на новых и повторных заявках.
FAQ
Подойдёт ли такая схема вместо CRM?
Для малого потока заявок — вполне. Если команда растёт, появляются воронки, отчёты и несколько отделов, тогда уже логично думать о CRM. Но на старте Google Sheets плюс n8n часто закрывают задачу очень достойно.
Можно ли обойтись одним Telegram и таблицей?
Можно, но руками вы быстро упрётесь в хаос. n8n как раз и нужен, чтобы соединить входящий поток, логику проверки, запись, обновление и уведомления в один маршрут.
Что лучше брать как уникальный ключ?
Идеально — свой lead_id. На практике ещё помогают телефон, username и связка из нескольких полей. Главное, чтобы правило совпадения было стабильным.
Нужно ли писать код?
В простом сценарии часто хватает стандартных узлов. Код пригодится, если захотите сложную нормализацию, хитрую дедупликацию или нестандартную маршрутизацию.
Можно ли писать не только текст, но и файлы?
Да, можно. Telegram передаёт разные типы сообщений, а дальше вы уже решаете, складывать ли файл в облако, вытаскивать ли из него данные и что отправлять в таблицу.
Подходит ли это для нескольких менеджеров?
Да, если заранее продумать столбцы ответственного, статуса и времени последнего касания. Тогда каждый видит свой кусок работы, а не копается в общей куче.
Вывод
Если смотреть по-ремесленному, вся идея тут простая: заявка не должна жить только в чате. Её надо превратить в запись, назначить ей статус, сохранить историю и дать команде быстрый доступ. Связка Telegram, Google Sheets и n8n делает именно это.
Я бы запускал такую систему в три захода. Сначала приём и запись. Потом проверка дублей и статусы. Потом уведомления, напоминания и, если нужно, ИИ-блок для классификации. Такой путь работает спокойно, предсказуемо и с понятным результатом уже на первом этапе.
Когда всё собрано толково, менеджеры меньше ковыряются в рутине, владелец видит поток заявок в таблице, а клиент не теряется между «щас отвечу» и «ой, я забыл». Для мастерской автоматизации это уже отличный расклад.