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

Мне не нужно по очереди писать десяти людям, что появилось место. Очередь сама поднимается, а первое место предлагается первому человеку в списке. Это не означает, что самостоятельная сборка лучше готового сервиса во всём. У неё нет поддержки, гарантированной доставки и человека, который будет следить за поломками.
Зато правило можно сформулировать своими словами. Например: «При отмене предложи место первому клиенту в очереди, а если он не подтвердил, переходи к следующему». Или: «Не отправляй напоминание по отменённой записи». Помощник изменит логику под это условие.
В готовом сервисе похожие настройки иногда есть. Но заранее надо проверить, как именно он понимает группу, перенос, отмену и очередь. Слово «ожидание» в тарифе ещё не означает, что место будет предложено в нужном порядке.
Свою систему я не стала перегружать. Мне нужны занятия, вместимость, записи, очередь и сообщения. Не понадобились отчёты, маркетинговые цепочки и десятки экранов. Каждая лишняя функция добавляет место для ошибки.
Так маленькая автоматизация убирает повторяющуюся рутину. Маленькая автоматизация убирает одно повторяющееся действие: то, что каждый день приходится делать руками.
Из чего состоит напоминание клиенту о визите?
Если искать «боты напоминания telegram», схема выглядит сложнее, чем она есть. На деле здесь нет отдельного сервера. Таблица выступает рабочим списком, Apps Script запускается по таймеру, а Telegram получает обычный запрос.
У меня в таблице такие колонки:
Клиент | Дата визита | Время | chat_id | sent_24h | sent_1hchat_id появляется после того, как клиент сам открывает бота и отправляет ему /start. Имя, телефон и @username не заменяют этот идентификатор для надёжной отправки личного сообщения.
Telegram передаёт сообщение через метод sendMessage. В запросе нужны chat_id и text:
{
"chat_id": 123456789,
"text": "Напоминание о визите завтра в 15:00"
}Bots can't start conversations with users. A user must either add them to a group or send them a message first.
Apps Script читает таблицу, сравнивает дату и время визита с текущим моментом и проверяет два окна: около 24 часов и около часа. Триггер не обещает отправку секунда в секунду, поэтому формулировка «примерно за час» честнее, чем точное обещание.
Что поставить перед сборкой бота?
VS Code можно воспринимать как папку с файлами и окном, где помощник работает с проектом. Самой писать код не требуется. Ты описываешь задачу словами, а помощник создаёт и меняет файлы.
Claude Code работает прямо внутри редактора. Он видит структуру проекта, задаёт вопросы и может объяснить ошибку. Если попросить «сделай напоминания клиентам», ответ получится слишком общим. Лучше сразу дать ему поля таблицы, правила отправки и ограничения.
Установка занимает около четверти часа: скачай VS Code, установи его, установи Claude Code, войди в аккаунт. На этом этапе я не стала разбираться в каждом окне. Поставила инструменты и вернулась к своей задаче.
Бот создаётся через официальный аккаунт @BotFather в Telegram. Отправь команду /newbot, задай имя и получи токен. Токен храни как пароль. Не вставляй его в открытую таблицу, скриншот или общий чат.
Подписка Claude Pro постоянная. Она не превращает Telegram и Google Apps Script в платные сервисы, но без неё Claude Code не входит в доступный набор инструментов. После лимита Pro могут появиться отдельные расходы по API.
Как настроить напоминания в Telegram по шагам?

Создай таблицу записи.
Открой Google Таблицу и сделай первый лист с заголовками. Для фитнес-студии достаточно имени клиента, даты и времени занятия,
chat_idи двух статусов.Структура таблицы для напоминанийСоздай для фитнес-студии структуру Google Таблицы для записей на занятия. Нужны колонки: Клиент, Дата визита, Время, chat_id, sent_24h, sent_1h. Добавь отдельную колонку Статус записи со значениями активна, перенесена, отменена. Объясни простым языком, какой формат даты и времени использовать. Не добавляй рекламные поля и не выдумывай дополнительные данные. Подготовь пример одной активной записи на групповое занятие и покажи строку заголовков.
Помощник должен вернуть понятную структуру и объяснить формат даты. В строке тестовой записи статусы оставь пустыми или поставь
нет.Создай бота через BotFather.
В Telegram открой
@BotFather, отправь/newbot, укажи имя и получи токен. Скопируй его временно в закрытую заметку, не в таблицу.Затем отправь боту
/startсо своего аккаунта. Без первого сообщения бот не сможет начать личный диалог. Для клиента действует то же правило: сначала открыть бота и написать ему.Получи и сохрани `chat_id`.
Попроси помощника добавить функцию, которая читает входящее обновление Telegram через
getUpdates, находитmessage.chat.idи записывает его в таблицу. Для простой схемы не смешивай этот способ с webhook.Получить chat_id клиентаВ проекте для фитнес-студии добавь функцию получения chat_id через Telegram getUpdates. Когда клиент отправляет боту /start, найди в обновлении значение message.chat.id и запиши его в таблицу рядом с именем клиента. Не записывай токен в исходный код и не меняй существующие данные записи. Объясни, как запустить проверку вручную и как понять, что chat_id записался в правильную строку. Если в таблице нельзя надёжно сопоставить клиента со строкой, сначала задай вопрос и предложи безопасный вариант.
В ответе должна появиться инструкция проверки. Отправь
/startсама, запусти функцию и убедись, что в таблице появился числовой идентификатор.Отправь тестовое сообщение.
Теперь проверь сам канал, не дожидаясь занятия. Помощник должен использовать метод
sendMessageи взять токен из свойств проекта.Тестовое сообщение в TelegramДобавь в проект функцию тестовой отправки Telegram-сообщения. Она должна взять BOT_TOKEN из свойств проекта, использовать chat_id из тестовой строки Google Таблицы и вызвать метод sendMessage с коротким текстом: Напоминание о занятии. Это тест. Не отправляй сообщения всем строкам и не вставляй токен в код, таблицу или URL. После отправки запиши результат выполнения в журнал и объясни, где его посмотреть.
Правильный результат простой: сообщение приходит в твой чат один раз, а токен не виден среди файлов. Если сообщение не пришло, не переходи дальше. Сначала исправь этот шаг.
Научи помощника читать строки.
Попроси его брать только активные записи, у которых есть дата, время и
chat_id. Отменённые и перенесённые строки нельзя считать готовыми к отправке.Читать активные записиСделай функцию чтения Google Таблицы для напоминаний о занятиях. Обрабатывай только строки со статусом записи активна, заполненными датой и временем визита и непустым chat_id. Для каждой строки верни имя клиента, дату, время, chat_id, sent_24h и sent_1h. Не считай текстовое отображение даты надёжным: преобразуй дату и время в единое значение даты-времени с учётом часового пояса проекта. Покажи в журнале причину пропуска строки, если не хватает данных. Не отправляй сообщения на этом шаге.
Помощник выдаст логику чтения и список пропущенных строк. Проверь, что отменённое занятие не попадает в рабочий список.
Вычисли два момента отправки.
Для каждой активной записи нужны момент визита минус 24 часа и момент визита минус 1 час. Добавь небольшое окно проверки, потому что триггер Apps Script может запускаться с небольшим смещением.
Вычислить время двух напоминанийДобавь к проекту расчёт двух моментов для каждой активной записи: за 24 часа до начала занятия и за 1 час до начала занятия. Текущий момент сравнивай с каждым расчётным временем через небольшое окно, чтобы учесть запуск планировщика с задержкой. Не отправляй напоминание задним числом для записи, которая начинается меньше чем через час, если отдельное правило этого не разрешает. Покажи в журнале рассчитанное время, тип напоминания и причину, почему строка готова или не готова к отправке.
Посмотри журнал на тестовой записи. Ты должна видеть два расчётных момента и понимать, почему каждый из них пока не отправляется. Так собирают программы без программиста, и называется это вайб-кодинг.
Добавь триггер по таймеру.
Apps Script должен запускать проверку примерно раз в минуту. Telegram сам не хранит отложенные сообщения, поэтому планировщик нужен в проекте.
Добавить планировщик напоминанийДобавь установочную функцию для триггера Google Apps Script. Триггер должен запускать проверку напоминаний примерно раз в минуту. При каждом запуске проект читает активные строки, вычисляет моменты за 24 часа и за 1 час до занятия, отправляет только готовые сообщения и записывает результат. Не создавай второй такой триггер при повторном запуске установочной функции. Покажи, где в Apps Script посмотреть созданный триггер и историю запусков. Объясни, что время может немного смещаться и что это не отправка секунда в секунду.
После создания открой список триггеров. Там должен быть один запуск для функции проверки. Поставь тестовую запись на ближайший безопасный момент и проверь отправку отдельно.
Записывай статусы отправки.
После успешного ответа Telegram поставь
давsent_24hилиsent_1h. При ошибке сохрани текст ошибки и не отмечай сообщение как отправленное.Статусы и безопасная отправкаДоработай отправку напоминаний для Google Таблицы и Telegram. Для каждого типа сообщения используй отдельный статус: sent_24h и sent_1h. Перед отправкой проверь, что статус ещё не да. После успешного ответа Telegram запиши да и время отправки. При ошибке сохрани код ошибки, текст и число попыток, но не ставь статус да. Для сетевого тайм-аута не делай бесконечные повторы: используй уникальный ключ записи и типа напоминания, например appointment_id плюс reminder_type, и объясни, как проверить спорную отправку вручную. Токен бери только из свойств проекта.
В конце попроси помощника сохранить
BOT_TOKEN,SPREADSHEET_IDиSHEET_NAMEчерезgetScriptProperties(). В открытом коде должны остаться только названия настроек, а не их значения.Если после первого результата хочется продолжить, не проси помощника сразу «улучшить всё». Сначала проверь одну запись за сутки, одну за час, отменённую запись и запись без
chat_id. После этого добавляй новые правила.
Какие файлы появятся после сборки?
Обычно назначение частей выглядит так:
- настройки проекта: идентификатор таблицы, имя листа и имена свойств;
- чтение записей: поиск активных строк и проверка обязательных полей;
- Telegram: вызов
sendMessageи подготовка текста; - планировщик: запуск проверки по триггеру;
- статусы: отметки
sent_24h,sent_1h, число попыток и ошибка; - журнал: история запусков и неотправленных сообщений.
Текст напоминания меняется в части, где формируется text. Не ищи её глазами по всему проекту. Попроси помощника показать файл и конкретный участок, а затем проверь сообщение на тестовой записи.
Секреты лежат в свойствах проекта. В таблице остаётся chat_id, но токен бота туда переносить нельзя. Если токен уже попал в открытый код, перевыпусти его через @BotFather.
Что делать, если напоминание не приходит?

Неверный часовой пояс
Telegram не передаёт боту часовой пояс клиента. Если таблица и проект считают время по-разному, сообщение придёт слишком рано или поздно. Для небольшой студии проще заранее выбрать одну часовую зону бизнеса и использовать её во всех расчётах.
Напоминание о занятии приходит не в то время. Проверь часовой пояс Google Таблицы и проекта Apps Script, сравни его с часовым поясом фитнес-студии и покажи, какое время система использует для записи. Не меняй настройки молча. Сначала объясни причину простыми словами, затем предложи исправление и тестовую запись.
Нет chat_id
Телефон клиента в таблице не даёт боту адрес личного чата. Клиент должен открыть бота и отправить /start, после чего идентификатор надо сохранить рядом с его записью.
Для активной записи Анны напоминание не отправилось. Проверь, есть ли в её строке chat_id, приходил ли от этого клиента /start и записал ли проект значение message.chat.id. Не отправляй сообщение повторно, пока причина не найдена. Сформируй короткую инструкцию для клиента, как открыть бота и запустить его.
Дубль после тайм-аута
Иногда запрос дошёл до Telegram, но ответ не вернулся. Повторная отправка может создать два одинаковых сообщения. Поэтому после тайм-аута нельзя бесконечно нажимать «повторить».
После сетевого тайм-аута напоминание могло уйти, но статус в таблице не изменился. Проверь журнал, уникальный ключ записи и тип напоминания. Не отправляй сообщение автоматически повторно. Покажи, как отметить результат после ручной проверки и как ограничить число повторных попыток.
Ошибка 429
429 означает, что Telegram ограничил частоту запросов. Отправляй сообщения последовательно, делай паузу и обрабатывай время ожидания из ответа. Для обычных напоминаний клиентам это не должно становиться постоянной проблемой.
При отправке напоминаний Telegram вернул ошибку 429. Найди в ответе время ожидания, добавь последовательную отправку с паузой и запиши ошибку в журнал. Не помечай неотправленные строки как отправленные. Покажи, как повторить проверку после паузы.
Остановился триггер
Проверь список триггеров и историю выполнений Apps Script. Если запусков нет, создай один триггер заново. Не создавай несколько одинаковых: они могут отправлять дубли.
Напоминания перестали отправляться, хотя активные строки и chat_id заполнены. Проверь наличие одного триггера для функции проверки, историю запусков, последнюю ошибку и квоты Apps Script. Не создавай второй триггер, пока не проверишь существующий. Составь последовательность исправления простым языком.
Токен в открытом коде
Токен даёт полный контроль над ботом. Если он попал в код, таблицу или журнал, его нельзя считать секретным. Перевыпусти токен через BotFather и перенеси новое значение в свойства проекта.
Проверь проект и найди места, где BOT_TOKEN может быть записан открытым текстом: исходники, таблица, URL, журнал и тестовые файлы. Не выводи сам токен в ответе. Перенеси секрет в свойства проекта Apps Script, очисти открытые значения и объясни, как перевыпустить токен через @BotFather, если он уже засветился.
Самая неприятная поломка здесь связана с дубликатами после сетевого тайм-аута. Её не всегда заметишь самостоятельно: система может показать ошибку, хотя клиент уже получил сообщение. Поэтому журнал и уникальный ключ нужны не для красоты.
Сколько стоит своя система против готового сервиса?
| Вариант | Прямые расходы | Что получаешь | Ограничения |
|---|---|---|---|
| Своя схема | 0 ₽ | Google Таблица, Telegram-бот, два напоминания | Нет поддержки и гарантированной доставки |
| SMAIPL «Новичок» | от 7 080 ₽ в год | Готовая платформа с ботами и интеграциями | Логику ещё надо настроить |
| BotHelp PRO | от 19 188 ₽ в год | Конструктор ботов, рассылки, интеграции | Цена зависит от активных подписчиков |
| SaleBot «Бизнес» | 35 988 ₽ в год | Бот, рассылки и лимит до 10 000 сообщений в сутки | Дополнительные функции оплачиваются отдельно |
У самостоятельной схемы есть цена, которую таблица не показывает. Это собственное время, возможный хостинг, дополнительные интеграции и ИИ-токены после исчерпания лимита Claude. Их сумма зависит от того, что именно добавляется.
Claude Pro стоит $20 в месяц по официальному прайсу Anthropic. Около 1 480 ₽ при оплате через посредника, но это не официальный тариф Anthropic. Для сборки Claude Code входит в Pro отдельно оплачивать его не надо.
Готовый сервис выигрывает поддержкой и готовым интерфейсом. Своя схема выигрывает гибкостью и отсутствием обязательной подписки на сервис. Но она не даёт гарантированной доставки. Клиент также должен сначала написать боту.
Сравнивай не только цену. Спроси себя, что важнее: быстро получить готовую запись или иметь возможность менять очередь, лимит и текст сообщения под свои занятия.
Если хочешь пройти такую сборку не в одиночку, на практикуме это делают руками на своей задаче. Там можно взять собственную рутину, описать её словами и пройти путь от таблицы до рабочей автоматизации:
Практикум «Старт»
Три дня живой практики: от идеи до работающего проекта по ссылке
2 000 ₽старт 5 августа, 18:00 МСК
С чего начать сегодня, если технологии не для тебя?
Не начинай со всей студии. Возьми одну группу и одну запись. Проверь сценарий вручную:
- клиент запускает бота;
chat_idпопадает в таблицу;- дата и время читаются правильно;
- тестовое сообщение приходит;
- после отправки меняется статус;
- повторный запуск не создаёт дубль.
Отдельно договорись с клиентом о сообщениях в Telegram. Сервисное уведомление о подтверждённом занятии не смешивай со скидками и продажами. Для рекламы нужно отдельное согласие.
Если ошибка звучит непонятно, не пытайся угадывать по названию. Напиши помощнику: «Объясни, что произошло, какой строкой таблицы это вызвано и что проверить руками». Так технология остаётся инструментом, а не новой профессией.
На практикуме этому учат руками на своей задаче. Ты не переписываешь чужой код, а собираешь вещь под собственную рутину и сразу проверяешь её на рабочих данных:
Практикум «Старт»
Три дня живой практики: от идеи до работающего проекта по ссылке
2 000 ₽старт 5 августа, 18:00 МСК
Вопросы и ответы
Вопросы и ответы
Какое приложение использовать для напоминаний клиентам?
Для этой схемы нужны Google Таблица, Google Apps Script, Telegram-бот, VS Code и Claude Code. Отдельное приложение для отправки не требуется: Apps Script запускает проверку по таймеру и обращается к Telegram через Bot API.
Как написать напоминание клиенту?
Текст о напоминании записи должен быть коротким и по делу: название занятия, дату, время и понятное действие при изменении записи. Например: «Напоминание о занятии завтра в 15:00. Если не получится прийти, напиши администратору». Не добавляй рекламу в обязательное сервисное сообщение.
Когда отправлять сообщение?
В этой схеме предусмотрены два момента: примерно за сутки и примерно за час до занятия. Планировщик Apps Script запускается около раза в минуту, но время может немного смещаться. Секундную точность такая схема не гарантирует.
Нужен ли chat_id?
Да. Для личного сообщения Telegram нужны chat_id и текст. Клиент сначала открывает бота и отправляет /start, после чего идентификатор сохраняется в таблице. Имени, телефона или @username недостаточно для надёжной отправки.
Как работает рассылка напоминаний клиентам?
Скрипт читает строки Google Таблицы, выбирает активные записи, сравнивает дату и время визита с текущим моментом и вызывает Telegram sendMessage. После успешной отправки он ставит отдельную отметку для сообщения за сутки или за час.
Подходит ли схема для маникюра?
Да, техническая схема подходит для маникюра, тренировок, консультаций, ремонта и других услуг с записью на дату и время. Меняются поля таблицы, текст сообщения и правила отмены. chat_id, статусы и планировщик остаются теми же.
Можно ли отправлять напоминание о записи на прием?
Да, если клиент заранее запустил бота, запись активна, а в таблице есть дата, время и chat_id. Для медицинских услуг отдельно проверь требования к персональным данным и не храни в такой таблице лишние сведения.
Как сделать напоминание клиенту о записи на маникюр?
Добавь в таблицу имя, дату, время, услугу, chat_id и статусы двух сообщений. В тексте укажи только подтверждённую запись и время визита. Если нужно предлагать другую услугу или скидку, это уже отдельная рекламная часть.
Нужен ли шаблон напоминания о записи?
Шаблоны напоминания клиентам можно начать с фразы: «Напоминаем: ты записана на занятие [дата] в [время]». В рабочей системе не оставляй квадратные скобки. Попроси помощника подставлять значения из строки таблицы и проверять, что дата и время не пустые.
Что такое напоминание клиенту о визите?
Это сервисное сообщение о уже существующей записи. В нём указывают дату, время и занятие или услугу. Оно не должно автоматически превращаться в предложение купить что-то ещё или записаться повторно.
Как отправить напоминание о записи на прием?
Сохрани запись в Google Таблице, получи от клиента chat_id, настрой функцию sendMessage и триггер Apps Script. Затем проверь тестовую строку и статус отправки. Без первого сообщения клиента бот не сможет начать личный диалог.
Можно ли сделать рассылку напоминание о записи без сервера?
Да. Для базовой схемы отдельный сервер не обязателен: Google Apps Script хранит код и запускает его по таймеру, Google Таблица хранит записи, Telegram принимает запросы. Это не означает гарантированную доставку или круглосуточную поддержку.
Сколько стоит подписка?
Claude Pro стоит $20 в месяц официально при помесячной оплате. Около 1 480 ₽ при оплате через посредника, но эта рублёвая сумма не является официальным тарифом Anthropic. Прямые расходы на Telegram Bot API и Google Apps Script в минимальной схеме составляют 0 ₽.
Что делать при пропуске сообщения?
Проверь статус записи, дату, время, часовой пояс, chat_id, историю запусков и текст ошибки. Затем отдельно проверь триггер и квоты Apps Script. Не ставь статус «отправлено» вручную, пока не понятно, получил ли сообщение Telegram.
Что делать, если клиент заблокировал бота?
Пометь канал клиента как недоступный и не повторяй отправку бесконечно. Для такого клиента используй другой согласованный канал, например звонок или SMS. После блокировки Telegram может вернуть ошибку, а запись не должна оставаться без контроля.
Источники
- Bots: An introduction for developers
- From BotFather to 'Hello World'
- Telegram Bot API
- Bots FAQ
- Spreadsheet Service | Apps Script
- Class Range | Apps Script
- Installable Triggers | Apps Script
- Properties Service | Apps Script
- Quotas for Google Services | Apps Script
- Plans & Pricing | Claude by Anthropic
- What is the Pro plan? | Claude Help Center
- Использование Claude Code с планом Pro или Max
- Тарифы SMAIPL
- Тарифы BotHelp
- Тарифы SaleBot
- Статья 18 закона «О рекламе»
- Spam FAQ Telegram
- Как я добавлял таймзоны в своего бота
- Are there PTB exceptions where the sent message reaches the server anyway?
Это собирательная история выпускников практикума, а не рассказ одного человека: так эта работа устроена в большинстве таких дел.
Практикум «Старт»
Три дня живой практики: от идеи до работающего проекта по ссылке
2 000 ₽старт 5 августа, 18:00 МСК

