Делюсь этим с удовольствием. В статье пошаговая инструкция: восемь шагов, к каждому готовый промпт. Копируй их, описывай свою форму и собирай похожую вещь для салона, автосервиса, магазина, студии или агентства.
А началось всё с обычной заявки, которую пришлось искать по нескольким перепискам.
Что изменилось в работе клиники после автоматизации заявок?
Пациент может оставить заявку на сайте, позвонить или написать администратору. Раньше основная путаница возникала при переносе обращения между сайтом, Telegram и таблицей.
Теперь новая форма не растворяется в переписке. Я вижу, что именно беспокоит пациента, когда ему удобно прийти и кому нужно перезвонить. Администратор получает сообщение уже с контекстом, а не просто с номером телефона.
Связка не заменяет работу администратора. Бот не подбирает врача вместо человека и не разговаривает с пациентом. Он удерживает обращение в поле зрения до тех пор, пока в нём не появится запись, уточнение или повторный звонок.
Главное изменение: мне стало спокойнее из-за незакрытых обращений. Похожий подход описан в кейсе про план лечения пациентов, где следующий незавершённый шаг виден сразу. Непонятная заявка теперь остаётся в списке, пока с ней что-то не сделано.
Почему своё решение удобнее готового сервиса?

В готовом сервисе приходится подстраиваться под поля, статусы и порядок действий, которые придумали для всех. Для кого-то этого достаточно. В небольшой клинике часто нужна одна конкретная вещь: после первого контакта сразу видеть, что делать дальше.
В своей схеме я не стала добавлять отчёты, сложные карточки и лишние экраны. Оставила только то, что использую каждый день: жалоба пациента, контакт, статус, удобное время и следующий звонок.
Если понадобится новое поле, его не надо объяснять отдельному подрядчику через длинную переписку. Я описываю задачу обычными словами: добавить в таблицу причину отказа и показывать её администратору перед повторным звонком. Дальше помощник предлагает изменения, а я проверяю результат глазами.
Своё решение требует контроля. Нужно следить за токеном, доступами, дублями, квотами и резервным каналом. Готовый сервис часть этой работы берёт на себя. Поэтому выбор зависит не от моды, а от того, насколько простой и устойчивой должна быть рутина.
Из чего состоит связка заявка с сайта - Telegram - таблица?
Схема выглядит так:
Форма на сайте
-> POST-запрос
-> doPost(e) в Google Apps Script
-> новая строка в Google Таблице
-> sendMessage в TelegramФорма передаёт обычные поля. Например, имя, телефон, комментарий и выбранное время. Apps Script получает эти данные и раскладывает их по заранее заданным колонкам.
Для записи используется метод appendRow. Он добавляет массив значений в новую строку текущей области данных таблицы. Сообщение в Telegram собирается из тех же полей:
Новая заявка на первичный приём
Жалоба пациента: боль при жевании
Контакт: +7 900 000-00-00
Удобное время: после 18:00
Статус: новая
Следующий шаг: перезвонить пациентуОтдельный сервер для маленького скрипта в этой схеме не нужен. Публичным HTTPS-адресом может служить опубликованное веб-приложение Apps Script. Это не гарантия промышленной бесперебойной работы, а удобная простая схема для небольшого потока.
Webhook нужен, когда Telegram должен сам отправлять обновления на адрес скрипта. Для передачи заявок с сайта основным каналом остаётся POST формы, а Telegram нужен для уведомления администратора.
Все запросы к Telegram Bot API должны выполняться по HTTPS и иметь такой вид:
https://api.telegram.org/bot<token>/METHOD_NAME.
Что поставить перед сборкой и какие доступы подготовить?
Редактор Visual Studio Code нужен как папка проекта с окном для файлов. Самой писать код в нём не придётся.
Claude Code встраивается в редактор и работает прямо внутри него. Ты описываешь задачу словами, а помощник создаёт и меняет файлы. Инструменты ставятся один раз. Потом можно собирать другие автоматизации, меняя не программы, а описание задачи.
Подписка помощника обязательна для этой схемы. Помощник работает по подписке. Актуальную цену смотри на странице тарифов.
До сборки подготовь:
- Telegram-аккаунт;
- бота, созданного через
@BotFather; - токен бота;
- рабочий чат или группу;
chat_idполучателя;- Google-аккаунт;
- Google Таблицу;
- список колонок;
- доступ к настройкам формы сайта;
- возможность включить webhook;
- URL опубликованного веб-приложения Apps Script.
Токен не клади в публичный код и не отправляй в скриншоте. Тот, у кого он есть, получает полный контроль над ботом.
Как собрать отправку заявок в Telegram и таблицу по шагам?

Создай таблицу со статусами.
Сделай Google Таблицу и добавь первую строку с понятными заголовками.
created_at | lead_id | жалоба пациента | контакт | удобное время | способ связи | статус | следующий звонок | результат TelegramТакая структура удерживает не только саму заявку, но и действие после неё. Статус можно начать с вариантов
новая,уточнить,записан,перезвонить пациенту,закрыта.Создать структуру таблицы клиникиУ меня небольшая стоматологическая клиника. Создай структуру Google Таблицы для заявок на первичный приём. Нужны колонки: дата и время получения, lead_id, жалоба пациента, контакт, удобное время, способ связи, статус, следующий звонок, результат отправки в Telegram. Предложи короткие значения для статуса и следующего шага. Не добавляй лишние поля. Объясни простым языком, какую информацию я буду видеть в каждой колонке.
В ответ помощник даст структуру и предложит значения статусов. Проверь, что в ней есть жалоба, контакт и следующий шаг.
Опиши поля формы сайта.
Не угадывай названия полей. Посмотри, как они подписаны в настройках формы, и передай их помощнику.
Описать поля формыУ меня есть форма на сайте стоматологической клиники. Она собирает имя пациента, телефон, жалобу, удобное время и способ связи. Разбери эти поля и сопоставь их с колонками Google Таблицы: жалоба пациента, контакт, удобное время, способ связи. Если название поля может отличаться, покажи оба варианта и не угадывай значение. Отдельно предложи простой способ создать lead_id для каждой новой заявки.
Помощник должен показать соответствие полей. Если он придумал поле, которого нет на сайте, останови его и поправь описание.
Собери обработчик POST.
Попроси помощника принимать данные формы через
doPost(e)и сначала объяснить, какие файлы он изменит.Собрать обработчик POSTСобери для Google Apps Script обработчик doPost(e), который принимает POST-запрос от формы сайта стоматологической клиники. Он должен разобрать поля имени, телефона, жалобы, удобного времени и способа связи, создать постоянный lead_id и подготовить данные для записи в Google Таблицу. Сначала перечисли файлы и функции, которые собираешься создать или изменить. Не трогай настройки Telegram, пока не объяснишь структуру. Не вставляй длинный код в ответ, создай рабочие файлы проекта и объясни результат простыми словами.
Правильный результат - помощник объясняет, что POST принимает форма, а
doPost(e)становится входной точкой. Сам код построчно разбирать не нужно.Добавь запись новой строки.
Свяжи принятые поля с листом таблицы и сохрани результат до отправки уведомления.
Записать заявку в Google ТаблицуДобавь в обработчик запись новой заявки в Google Таблицу. Используй колонки: дата и время получения, lead_id, жалоба пациента, контакт, удобное время, способ связи, статус, следующий звонок, результат Telegram. Для новой заявки ставь статус новая, следующий шаг перезвонить пациенту, а результат Telegram pending. Используй appendRow или другой простой надёжный способ добавления строки. Не перезаписывай существующие заявки и не создавай новую строку при повторной обработке того же lead_id. Покажи пример одной строки и объясни, как проверить запись тестовой формой.
В таблице должна появиться одна новая строка. Повторная отправка с тем же
lead_idне должна создавать вторую заявку.Сформируй сообщение для Telegram.
Сделай сообщение коротким, чтобы администратор увидел главное без поиска по переписке.
Сформировать сообщение для TelegramДобавь формирование сообщения для рабочего Telegram-чата. В сообщении должны быть: новая заявка на первичный приём, жалоба пациента, контакт, удобное время, способ связи, статус и следующий шаг. Используй понятные подписи на русском языке. После формирования покажи мне пример сообщения на тестовых данных. Ограничь сообщение только информацией, которая нужна администратору для следующего действия.
Проверь глазами порядок полей. Первой должна быть причина обращения, а не техническое название функции.
Подключи токен и chat_id.
Получи токен через
@BotFather, добавь бота в нужную группу и подготовьchat_id. Для личного чата сначала открой диалог с ботом и нажмиStart.Подключить Telegram без публикации секретовПодключи отправку сообщения через Telegram Bot API методом sendMessage. Токен бота и chat_id не записывай прямо в открытый код: сохрани их в защищённых свойствах Apps Script и объясни, где они находятся. После подключения добавь проверку ответов 401, 403, 429 и неизвестного результата. При успешной отправке обновляй в таблице результат Telegram на sent, при явной ошибке на failed, а при таймауте на unknown. Не показывай токен в логах и сообщениях.
401обычно указывает на проблему с токеном,403на недоступного получателя,429на превышение скорости. Таймаут нельзя автоматически считать доказанной неудачей.Опубликуй веб-приложение.
В Apps Script выбери
Deploy, затемNew deployment, типWeb app. Скопируй полученный HTTPS-адрес.Проверить публикацию веб-приложенияПроверь проект Google Apps Script перед публикацией как Web app. Убедись, что есть doPost(e), обработчик возвращает успешный ответ быстро, а таблица и защищённые свойства доступны скрипту. Подготовь понятный список настроек публикации и тестовый POST-запрос без реальных персональных данных. Объясни, где взять итоговый HTTPS URL и куда его потом вставить в настройках формы сайта.
Если форма работает на Tilda, в настройках сайта включи Webhook, укажи HTTPS-адрес, включи
WEBHOOKв блоке формы и заново опубликуй страницу. Tilda ждёт ответ до пяти секунд и при неудаче делает ещё две попытки примерно через минуту.Свяжи форму с URL.
Вставь адрес веб-приложения в настройку формы, отправь тестовую заявку и проверь сразу три места: сайт, таблицу и Telegram.
Провести сквозную проверку заявкиПроведи сквозную проверку связки формы стоматологической клиники, Google Apps Script, Google Таблицы и Telegram. Составь тестовую заявку без настоящих персональных данных: жалоба пациента - чувствительность зуба, контакт - +7 900 000-00-00 (тестовый номер), удобное время - после 18:00, способ связи - телефон. Проверь, что создан один lead_id, одна строка появилась в таблице, сообщение пришло в нужный чат, статус стоит новая, следующий шаг - перезвонить пациенту, а результат Telegram изменился с pending на sent. Отдельно проверь повторную отправку и отсутствие дубля. Если что-то не совпало, назови симптом, вероятную причину и следующий шаг.
После первого результата помощника становится понятнее, что именно произошло: так собирают программы без программиста, и называется это вайб-кодинг. Не принимай результат на веру. Тестовая заявка должна пройти всю цепочку, а не просто показать зелёное сообщение на сайте.
Практикум полезен именно тем, что там эту связку собирают руками на собственной задаче: на той рутине, которая каждый день забирает внимание, а не на типовом интернет-магазине из учебника.
Практикум «Старт»
Три дня живой практики: от идеи до работающего проекта по ссылке
2 000 ₽старт 5 августа, 18:00 МСК
Что появилось в папке после успешной сборки?
В папке могут появиться:
- файл с планом задачи;
- файлы обработчика POST;
- настройки колонок;
- инструкция по публикации;
- копия конфигурации без секретных значений;
- журнал или структура статусов отправки.
Не меняй случайные строки только потому, что они выглядят непонятно. Сначала попроси помощника назвать файл и объяснить, за что он отвечает. Особенно не трогай токен, URL веб-приложения и название листа без резервной копии.
Что делать, если заявка не приходит или появляется дважды?

| Симптом | Проверка | Фраза для помощника |
|---|---|---|
| В личный чат ничего не приходит | Открой диалог с ботом, нажми Start, проверь chat_id и ответ 403. | Проверь, почему бот не отправляет сообщение в личный чат. Проверь, был ли выполнен Start, правильный ли chat_id и что означает ответ 403. Не повторяй отправку бесконечно. |
| Одна заявка появилась дважды | Сравни lead_id, время отправки и повторные вызовы webhook. | Найди причину дубля заявки. Сравни lead_id, update_id и время повторной доставки. Сделай так, чтобы повтор одного lead_id обновлял существующую строку, а не добавлял новую. |
| После ошибки 500 идут повторы | Проверь быстрый ответ webhook и журнал выполнений. | Проверь обработчик webhook на ответ 500 и медленные операции. Сделай быстрый успешный ответ, добавь дедупликацию по lead_id и update_id, а длительные действия вынеси в повторную обработку. |
| Появились 401, 403 или 429 | Проверь токен, доступ получателя и скорость отправки. | Разбери ответы Telegram 401, 403 и 429 в этой связке. Покажи, что проверить для каждого кода, добавь понятную запись ошибки в таблицу и не записывай токен в лог. |
| Заявки перестали записываться | Открой журнал Apps Script и проверь квоты, время выполнения и размер таблицы. | Проверь журнал Apps Script и найди, не упёрся ли проект в квоту, лимит времени или размер таблицы. Предложи архивирование старых заявок и повторную обработку тех, у кого статус failed. |
Telegram мог принять сообщение, а ответ не дошёл обратно. Не отправляй его повторно сразу. Сначала сохрани lead_id и поставь статус unknown, иначе в чате появятся дубли.
Последняя поломка неприятнее остальных: сообщение могло уйти, но результат отправки потерялся. Я бы не пыталась угадывать по чату. Попроси помощника внедрить статусы pending / sent / unknown / failed, сохранить lead_id и сделать отдельную проверку неизвестных результатов.
Сколько стоит своё решение и когда оно не подойдёт?
Техническая схема подходит при небольшом потоке обращений и понятном количестве действий на одну заявку. Apps Script для потребительского аккаунта имеет квоту URL Fetch calls 20 000 в день, максимальное время одного выполнения 6 минут и ограничения на одновременные запуски.
У Telegram есть ограничения скорости: в одном чате не стоит отправлять больше одного сообщения в секунду, а в группе бот не может отправлять больше 20 сообщений в минуту. Для одной заявки и одного рабочего чата это обычно не узкое место, но всплески требуют очереди.
Google Таблицы тоже не бесконечны. Для файла действует предел 10 миллионов ячеек. Старые обращения надо архивировать, а рабочий лист не превращать в бессрочную базу.
Таблица в экселе заявки может выглядеть привычнее, но для этой связки удобнее Google Таблица: Apps Script работает рядом с ней и добавляет строки напрямую. Если нужен резервный канал, строгий журнал действий, промышленный поток, распределение заявок между сотрудниками или полноценная CRM, простая схема перестанет быть достаточной.
Что сделать сегодня, если технологии пугают?
Начни с рутины, которая повторяется каждый день:
- Запиши, что беспокоит пациента и какие поля нельзя пропускать.
- Определи, куда администратору удобнее получать уведомление.
- Создай таблицу со статусом и следующим действием.
- Подготовь тестовую форму.
- Собери связку по одному шагу за раз.
- Проверь повторную отправку и недоступность Telegram.
На практикуме этому учат руками на собственной задаче. Там вайб-кодинг перестраивает конкретную работу и учит чинить её без ожидания программиста.
Практикум «Старт»
Три дня живой практики: от идеи до работающего проекта по ссылке
2 000 ₽старт 5 августа, 18:00 МСК
Вопросы и ответы
Вопросы и ответы
Как отправить заявку с сайта в Telegram?
Бот для автоматического приема заявок в телеграм работает так: форма сайта отправляет POST-запрос на URL веб-приложения Apps Script. Скрипт получает поля, записывает строку в Google Таблицу и вызывает Telegram Bot API методом sendMessage.
Где искать входящие обращения?
Они должны появляться в рабочем Telegram-чате и в Google Таблице. Если сообщения нет, сначала проверь журнал Apps Script и строку с той же заявкой в таблице.
Как посмотреть заявку в Telegram?
Открой рабочий чат, куда добавлен бот. В сообщении должны быть жалоба пациента, контакт, удобное время, статус и следующий звонок.
Нужен ли отдельный сервер?
Для небольшой связки можно использовать опубликованное веб-приложение Google Apps Script. Отдельный сервер понадобится, если поток, требования к надёжности или объём обработки выйдут за границы квот Apps Script.
Подходит ли форма Tilda?
Да, если форма умеет отправлять данные через Webhook. Tilda передаёт данные методом POST, требует HTTPS и ожидает ответ скрипта в течение пяти секунд.
Что такое webhook?
Webhook - это способ, при котором сервис сам отправляет обновление на указанный HTTPS-адрес. Telegram передаёт туда POST-запрос с данными обновления.
Зачем нужен chat_id?
chat_id указывает, в какой личный чат, группу или канал Telegram отправлять сообщение. Одного токена бота для отправки недостаточно.
Может ли бот написать первым?
Нет, в личном чате пользователь сначала должен открыть диалог с ботом и нажать Start. Для рабочих уведомлений удобнее заранее создать группу или канал и добавить туда бота.
Как сохранять заявку в Excel или Google Таблицу?
В этой схеме используется Google Таблица. Apps Script получает поля формы и добавляет их новой строкой через appendRow.
Что делать, если заявка появилась дважды?
Сравни lead_id, update_id и время повторной доставки. Добавь проверку постоянного lead_id, чтобы повторная обработка обновляла существующую строку, а не создавала новую.
Как подключить канал?
Создай Telegram-канал, добавь бота администратором с правом отправки сообщений и укажи идентификатор канала. После этого отправь тестовую заявку и проверь результат.
Какие интеграции нужны?
Минимальная связка состоит из формы сайта, Google Apps Script, Google Таблицы и Telegram Bot API. Для Tilda дополнительно включается Webhook.
Что произойдёт при недоступности Telegram?
Заявка должна сохраниться в таблице независимо от результата отправки. В колонке результата ставь unknown или failed, а затем отправляй уведомление через резервный канал.
Когда нужна CRM?
CRM нужна, когда появляются несколько менеджеров, распределение обращений, история контактов, отчёты, права доступа, задачи и требования к контролю продаж. Для небольшого потока может хватить таблицы и уведомлений.
Как проверить связку?
Отправь тестовую форму, проверь одну строку в таблице и одно сообщение в Telegram. Затем повтори отправку, проверь отсутствие дубля, ответы 401, 403, 429, журнал Apps Script и работу резервного канала.
Источники
- Telegram: Bots
- Telegram Bot API
- Telegram: Webhooks
- Telegram Bots Features
- Google Apps Script: Web Apps
- Google Apps Script: метод appendRow
- Google Apps Script: квоты
- Google Apps Script: устранение неполадок
- Tilda: Webhook для отправки данных формы
- Google Drive: ограничения Google Таблиц
- Telegram Bot API: проблема с отправкой пользователю
- Повторная отправка сообщений после таймаута
- Повторные вызовы webhook после ответа 500
- Отозванный токен бота
Это собирательная история выпускников практикума, а не рассказ одного человека: так эта работа устроена в большинстве таких дел.
Практикум «Старт»
Три дня живой практики: от идеи до работающего проекта по ссылке
2 000 ₽старт 5 августа, 18:00 МСК

