Я занимаюсь внедрением и автоматизацией уже несколько лет. Через мои руки прошли десятки проектов на Битрикс24, amoCRM и самописных решениях. Когда в арсенале появился n8n, грань между «надо писать скрипт» и «делается за 15 минут» окончательно стёрлась.
Ниже — четыре типовых сценария работы с Google Таблицами, которые я использую в проектах регулярно. Никакой воды, только логика работы и ключевые моменты, на которых обычно спотыкаются новички.
Сценарий 1. Сбор данных из разных источников в одну таблицу
Контекст. Клиент использует несколько каналов для приёма заявок: форма на сайте, Telegram-бот, заявки из VK и прочие мессенджеры. Раньше менеджеры вручную сводили всё в один реестр. Естественно, часть заявок терялась, дублировалась, ответы задерживались.
Реализация. Я поднимаю простой workflow на трёх узлах.
- Webhook. Это точка входа. На стороне сайта или бота настраивается отправка POST-запроса на URL, который генерирует n8n. В теле запроса передаются поля: имя, контакт, источник.
- Google Sheets (Append). Узел получает распарсенные данные и добавляет новую строку в указанную таблицу. Важный момент: слежу за соответствием полей. Если в Webhook приходит поле client_name, а в таблице столбец называется Имя, использую промежуточный узел Set для переименования.
- Telegram. Отправка уведомления ответственному. В сообщение вывожу ключевые поля и ссылку на строку в таблице (если реализовано).
На что обратить внимание. Если источник — Google Форма, я не использую Webhook. Проще взять Google Sheets Trigger с событием Row Added. Он надёжнее и не требует настройки передачи данных на стороне формы. Но есть нюанс: триггер срабатывает с задержкой до минуты, для мгновенных уведомлений это не подходит.
Сценарий 2. Ежедневная сводка по продажам с выводом в чат
Контекст. Руководитель отдела продаж хочет видеть сводку за вчерашний день в 9:00 в общем чате Telegram. Не ссылку на таблицу, а готовый текст с цифрами и краткими выводами.
Реализация. Workflow запускается по расписанию.
- Schedule Trigger (Cron). Выражение 0 9 * * * — запуск в 9 утра каждый день.
- Google Sheets (Get Rows). Забираю данные из таблицы с продажами. В настройках узла использую фильтр по колонке с датой, чтобы не тащить всю таблицу, а только строки за вчерашний день. Это критично для производительности.
- Code (JavaScript). Пишу короткий скрипт, который агрегирует данные: считает сумму по колонке «Сумма оплаты», определяет менеджера с максимальным значением, проверяет наличие нулевых или аномально низких показателей.
- GigaChat (AI). Скармливаю агрегированные данные и промпт: «На основе этих цифр напиши короткую сводку на 3-4 предложения. Стиль — деловой, без эмоций. Упомяни общую сумму, лидера и аномалии, если они есть».
- Telegram. Отправляю сгенерированный текст в чат.
Почему не сразу AI без Code. Я предпочитаю сначала агрегировать данные в коде, а нейросети отдавать уже готовую структуру. Это снижает вероятность галлюцинаций и делает ответ стабильным. AI здесь выступает как «копирайтер», а не как «аналитик».
Сценарий 3. Двусторонняя синхронизация таблицы и внешней базы
Контекст. У клиента есть производственная база на MySQL, куда складские работники вносят актуальные остатки. Отдел продаж работает в Google Таблице, потому что «им так удобно». Задача — чтобы данные в таблице обновлялись автоматически и не требовали ручного экспорта.
Реализация. Workflow с периодическим запуском и логикой сравнения.
- Schedule Trigger. Запуск каждый час.
- MySQL Node. Выполняет SELECT по таблице остатков.
- Google Sheets (Get Rows). Забирает текущее содержимое листа.
- Code. Сравниваю два массива по ключевому полю, например product_id. На выходе формирую три списка: «добавить», «обновить», «удалить».
- Switch. В зависимости от наличия элементов в списках направляю поток на соответствующие узлы:
Google Sheets (Append) — для новых позиций.
Google Sheets (Update) — для изменения существующих.
Google Sheets (Delete) — для удаления (если нужно).
Подводный камень. Узел Update в Google Sheets требует указания номера строки. Поэтому в Code я дополнительно формирую маппинг product_id -> row_index. Без этого обновление не сработает.
Сценарий 4. Мониторинг критических значений
Контекст. В таблице ведётся учёт расходных материалов. Когда позиция заканчивается, ответственный должен получить мгновенное уведомление, чтобы успеть заказать новую партию.
Реализация. Workflow на основе триггера изменения данных.
- Google Sheets Trigger (On Row Updated). Срабатывает при любом изменении в отслеживаемом диапазоне.
- IF. Проверяю условие: {{ $json.Остаток }} <= {{ $json.Минимальный_запас }}.
- Telegram. Если условие истинно — уведомление с указанием позиции и текущего остатка.
Нюанс. Триггер On Row Updated срабатывает на любое изменение ячейки. Если сотрудник несколько раз подряд меняет значение, уведомление уйдёт несколько раз. Чтобы избежать спама, я добавляю узел Wait с задержкой в 1 минуту и проверку флага «уведомление уже отправлялось» в отдельной служебной колонке таблицы.
Пара слов о производительности
Когда работаешь с таблицами на несколько тысяч строк, скорость выполнения workflow начинает падать. Что я делаю в таких случаях:
- Фильтрация на стороне запроса. В узле Google Sheets использую параметр Filter с формулой, чтобы забирать только нужные строки. Например, Date = date '2026-04-12'.
- Отказ от лишних узлов. Каждый узел — это накладные расходы. Если можно сделать операцию в одном Code вместо цепочки из Set + IF + Merge, делаю в Code.
- Schedule вместо Webhook для регулярных задач. Webhook-триггеры держат соединение открытым и потребляют больше ресурсов, чем Cron-задачи.