# Напоминания клиентам в Telegram-боте: 8 шагов до автосообщения перед визитом

> Как собрать напоминания клиентам о записи на занятия через Google Таблицу и Telegram-бота. Внутри пошаговая инструкция, промпты и разбор поломок.

Источник: https://vibeceh.ru/cases/napominaniya-klientam-v-telegram-bote-soobshchenie-do-propushchennogo-vizita
Автор: Сергей Мазур · опубликовано 2026-08-12

У меня появилась простая [система записи клиентов](/guides/zapis-klientov-v-tablicu-vmesto-gotovogo-prilozheniya): в ней видно занятие, количество мест, лист ожидания и порядок, в котором освобождённое место достаётся людям. Напоминание клиенту о записи можно добавить к этой схеме через Google Таблицу и Telegram-бота, чтобы перед визитом сообщение уходило без ручной переписки.

Делюсь этим с удовольствием. Ниже пошаговая инструкция из восьми основных действий, и к каждому действию есть готовый промпт. Копируй его в помощника, описывай свою работу обычными словами и собирай похожую вещь для фитнес-студии, салона, клиники, автосервиса или другой записи.

Постоянная переписка о свободных местах отнимала часы каждый день.

У меня расписание состоит из повторяющихся групповых занятий и отдельных тренировок. Я веду запись, тренеры проводят занятия, а свободные места появляются в последний момент из-за переносов и отмен. Если группа заполнена, клиент попадает в лист ожидания по времени заявки. Когда кто-то отменяет визит, первое место автоматически предлагается первому человеку в очереди.

Правило простое. Рутина вокруг него совсем не простая. Каждый день я записываю клиентов, проверяю вместимость группы, отвечаю на переносы и вручную сообщаю людям, что освободилось место. Иногда приходится писать нескольким людям по очереди, потому что первый уже не может прийти.

В какой-то момент я собрала экран с занятиями и количеством мест. Запись закрывается, когда группа заполнена, а очередь поднимается сама после отмены. Я не стала внедрять большую CRM. Собрала рабочую вещь под порядок своей студии.

Именно тогда стало понятно, что к записи можно пристроить следующий слой. Таблица уже знает дату и время занятия, Telegram умеет отправлять сообщение, а помощник может связать эти части словами, а не длинной разработкой.

## Что изменилось в записи клиентов после напоминаний?

В моей рабочей схеме запись клиентов стала прозрачнее: видно занятие, лимит мест, заполненность и лист ожидания. Напоминание о записи добавляется к этой же таблице и отправляется перед визитом. Точных цифр «до и после» я не считала, поэтому говорю о другом результате: ручные действия превращаются в понятные статусы и автоматические сообщения.

Главное изменение начинается ещё до сообщения. Я вижу, сколько мест осталось в группе. Если свободных мест нет, новая запись не проваливается в переписку, а уходит в очередь. Каждый человек получает место по времени заявки, а не потому, что я первой заметила его сообщение.

Когда появляется отмена, система поднимает первого клиента в листе ожидания. Это и есть честная очередь. Она не зависит от того, кто написал громче, напомнил о себе или оказался у меня перед глазами в нужный момент.

Напоминание перед занятием решает другую часть рутины. В таблице есть дата, время и `chat_id` клиента. Планировщик проверяет строки и отправляет сообщение примерно за сутки и примерно за час. После отправки в строке появляется отметка. Следующий запуск уже не считает это сообщение новым.

Я держу текст сервисным:

```text
Напоминание о занятии завтра в 15:00. Ждём тебя в группе.
```

В нём нет скидки, предложения другой услуги или просьбы записаться ещё раз. Это сообщение только о действующей записи. Если клиент не запускал бота, сообщение не уйдёт. Такой порядок нельзя обойти одним номером телефона.

## Почему свою систему нельзя сравнивать с готовым сервисом?

Готовый сервис предлагает заранее заданные правила, а собственную систему можно менять под расписание студии. Напоминания клиентам о записи и сообщение об освободившемся месте могут жить рядом, если таблица хранит нужные статусы. Своя система даёт другое: очередь и лимит группы работают по твоему порядку без ожидания поддержки.

![Кот сравнивает свою схему записи с готовым сервисом на двух карточках](https://s3.regru.cloud/crossmark/statejnik/images/guides/napominaniya-klientam-v-telegram-bote-soobshchenie-do-propushchennogo-vizita/kadr-1.webp)

Мне не нужно по очереди писать десяти людям, что появилось место. Очередь сама поднимается, а первое место предлагается первому человеку в списке. Это не означает, что самостоятельная сборка лучше готового сервиса во всём. У неё нет поддержки, гарантированной доставки и человека, который будет следить за поломками.

Зато правило можно сформулировать своими словами. Например: «При отмене предложи место первому клиенту в очереди, а если он не подтвердил, переходи к следующему». Или: «Не отправляй напоминание по отменённой записи». Помощник изменит логику под это условие.

В готовом сервисе похожие настройки иногда есть. Но заранее надо проверить, как именно он понимает группу, перенос, отмену и очередь. Слово «ожидание» в тарифе ещё не означает, что место будет предложено в нужном порядке.

Свою систему я не стала перегружать. Мне нужны занятия, вместимость, записи, очередь и сообщения. Не понадобились отчёты, маркетинговые цепочки и десятки экранов. Каждая лишняя функция добавляет место для ошибки.

Так маленькая автоматизация убирает повторяющуюся рутину. Маленькая автоматизация убирает одно повторяющееся действие: то, что каждый день приходится делать руками.

## Из чего состоит напоминание клиенту о визите?

Напоминание о визите собирается из шести частей: [Google Таблица](/concepts/google-tablicy) хранит запись, Telegram-бот принимает первое сообщение клиента, `chat_id` указывает получателя, Google Apps Script читает строки и вызывает `sendMessage`, планировщик запускает проверку, а отметки `sent_24h` и `sent_1h` не дают отправить одно сообщение повторно.

Если искать «боты напоминания telegram», схема выглядит сложнее, чем она есть. На деле здесь нет отдельного сервера. Таблица выступает рабочим списком, Apps Script запускается по таймеру, а Telegram получает обычный запрос.

У меня в таблице такие колонки:

```text
Клиент | Дата визита | Время | chat_id | sent_24h | sent_1h
```

`chat_id` появляется после того, как клиент сам открывает бота и отправляет ему `/start`. Имя, телефон и `@username` не заменяют этот идентификатор для надёжной отправки личного сообщения.

Telegram передаёт сообщение через метод `sendMessage`. В запросе нужны `chat_id` и `text`:

```json
{
  "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 внутри этого редактора, Telegram-аккаунт и бот, созданный через `@BotFather`. Инструменты ставятся один раз: скачай их, запусти, войди в аккаунт. Claude Pro стоит $20 в месяц официально, около 1 480 ₽ при оплате через посредника, но это не официальный тариф Anthropic.

VS Code можно воспринимать как папку с файлами и окном, где помощник работает с проектом. Самой писать код не требуется. Ты описываешь задачу словами, а помощник создаёт и меняет файлы.

Claude Code работает прямо внутри редактора. Он видит структуру проекта, задаёт вопросы и может объяснить ошибку. Если попросить «сделай напоминания клиентам», ответ получится слишком общим. Лучше сразу дать ему поля таблицы, правила отправки и ограничения.

Установка занимает около четверти часа: скачай VS Code, установи его, установи Claude Code, войди в аккаунт. На этом этапе я не стала разбираться в каждом окне. Поставила инструменты и вернулась к своей задаче.

Бот создаётся через официальный аккаунт `@BotFather` в Telegram. Отправь команду `/newbot`, задай имя и получи токен. Токен храни как пароль. Не вставляй его в открытую таблицу, скриншот или общий чат.

Подписка Claude Pro постоянная. Она не превращает Telegram и Google Apps Script в платные сервисы, но без неё Claude Code не входит в доступный набор инструментов. После лимита Pro могут появиться отдельные расходы по API.

## Как настроить напоминания в Telegram по шагам?

Сначала создай таблицу и бота, затем получи `chat_id`, проверь тестовую отправку, попроси помощника читать строки и вычислять моменты за 24 и 1 час, после этого добавь триггер и статусы отправки. Токен положи в свойства проекта. После каждого действия проверь одну тестовую запись глазами, а не собирай всё сразу.

![Собака наблюдает за восемью шагами настройки напоминаний в Telegram](https://s3.regru.cloud/crossmark/statejnik/images/guides/napominaniya-klientam-v-telegram-bote-soobshchenie-do-propushchennogo-vizita/kadr-2.webp)

Открой Google Таблицу и сделай первый лист с заголовками. Для фитнес-студии достаточно имени клиента, даты и времени занятия, `chat_id` и двух статусов.

   

Помощник должен вернуть понятную структуру и объяснить формат даты. В строке тестовой записи статусы оставь пустыми или поставь `нет`.

В Telegram открой `@BotFather`, отправь `/newbot`, укажи имя и получи токен. Скопируй его временно в закрытую заметку, не в таблицу.

Затем отправь боту `/start` со своего аккаунта. Без первого сообщения бот не сможет начать личный диалог. Для клиента действует то же правило: сначала открыть бота и написать ему.

Попроси помощника добавить функцию, которая читает входящее обновление Telegram через `getUpdates`, находит `message.chat.id` и записывает его в таблицу. Для простой схемы не смешивай этот способ с webhook.

   

В ответе должна появиться инструкция проверки. Отправь `/start` сама, запусти функцию и убедись, что в таблице появился числовой идентификатор.

Теперь проверь сам канал, не дожидаясь занятия. Помощник должен использовать метод `sendMessage` и взять токен из свойств проекта.

   

Правильный результат простой: сообщение приходит в твой чат один раз, а токен не виден среди файлов. Если сообщение не пришло, не переходи дальше. Сначала исправь этот шаг.

Попроси его брать только активные записи, у которых есть дата, время и `chat_id`. Отменённые и перенесённые строки нельзя считать готовыми к отправке.

   

Помощник выдаст логику чтения и список пропущенных строк. Проверь, что отменённое занятие не попадает в рабочий список.

Для каждой активной записи нужны момент визита минус 24 часа и момент визита минус 1 час. Добавь небольшое окно проверки, потому что триггер Apps Script может запускаться с небольшим смещением.

   

Посмотри журнал на тестовой записи. Ты должна видеть два расчётных момента и понимать, почему каждый из них пока не отправляется. Так собирают программы без программиста, и называется это [вайб-кодинг](/concepts/vajb-koding).

Apps Script должен запускать проверку примерно раз в минуту. Telegram сам не хранит отложенные сообщения, поэтому планировщик нужен в проекте.

   

После создания открой список триггеров. Там должен быть один запуск для функции проверки. Поставь тестовую запись на ближайший безопасный момент и проверь отправку отдельно.

После успешного ответа Telegram поставь `да` в `sent_24h` или `sent_1h`. При ошибке сохрани текст ошибки и не отмечай сообщение как отправленное.

   

В конце попроси помощника сохранить `BOT_TOKEN`, `SPREADSHEET_ID` и `SHEET_NAME` через `getScriptProperties()`. В открытом коде должны остаться только названия настроек, а не их значения.

Если после первого результата хочется продолжить, не проси помощника сразу «улучшить всё». Сначала проверь одну запись за сутки, одну за час, отменённую запись и запись без `chat_id`. После этого добавляй новые правила.

## Какие файлы появятся после сборки?

В проекте появятся части для настроек, чтения Google Таблицы, отправки Telegram-сообщений, вычисления времени и запуска по таймеру. Точные имена заранее не фиксируй: помощник создаст свой вариант. Тебе достаточно знать, где менять текст сообщения и названия настроек, а во внутреннюю логику кода без причины лезть не надо.

Обычно назначение частей выглядит так:

- настройки проекта: идентификатор таблицы, имя листа и имена свойств;
- чтение записей: поиск активных строк и проверка обязательных полей;
- Telegram: вызов `sendMessage` и подготовка текста;
- планировщик: запуск проверки по триггеру;
- статусы: отметки `sent_24h`, `sent_1h`, число попыток и ошибка;
- журнал: история запусков и неотправленных сообщений.

Текст напоминания меняется в части, где формируется `text`. Не ищи её глазами по всему проекту. Попроси помощника показать файл и конкретный участок, а затем проверь сообщение на тестовой записи.

Секреты лежат в свойствах проекта. В таблице остаётся `chat_id`, но токен бота туда переносить нельзя. Если токен уже попал в открытый код, перевыпусти его через `@BotFather`.

## Что делать, если напоминание не приходит?

Сначала проверь статус строки, дату, время, часовой пояс и наличие `chat_id`. Потом открой историю запусков Apps Script и посмотри код ошибки. Частые причины: клиент не написал боту, триггер остановился, Telegram вернул `429`, а после сетевого тайм-аута возник дубль. Токен проверяй отдельно и не публикуй его в коде.

![Безымянная женщина проверяет причины пропущенного напоминания по чек-листу](https://s3.regru.cloud/crossmark/statejnik/images/guides/napominaniya-klientam-v-telegram-bote-soobshchenie-do-propushchennogo-vizita/kadr-3.webp)

### Неверный часовой пояс

Telegram не передаёт боту часовой пояс клиента. Если таблица и проект считают время по-разному, сообщение придёт слишком рано или поздно. Для небольшой студии проще заранее выбрать одну часовую зону бизнеса и использовать её во всех расчётах.

### Нет `chat_id`

Телефон клиента в таблице не даёт боту адрес личного чата. Клиент должен открыть бота и отправить `/start`, после чего идентификатор надо сохранить рядом с его записью.

### Дубль после тайм-аута

Иногда запрос дошёл до Telegram, но ответ не вернулся. Повторная отправка может создать два одинаковых сообщения. Поэтому после тайм-аута нельзя бесконечно нажимать «повторить».

### Ошибка `429`

`429` означает, что Telegram ограничил частоту запросов. Отправляй сообщения последовательно, делай паузу и обрабатывай время ожидания из ответа. Для обычных напоминаний клиентам это не должно становиться постоянной проблемой.

### Остановился триггер

Проверь список триггеров и историю выполнений Apps Script. Если запусков нет, создай один триггер заново. Не создавай несколько одинаковых: они могут отправлять дубли.

### Токен в открытом коде

Токен даёт полный контроль над ботом. Если он попал в код, таблицу или журнал, его нельзя считать секретным. Перевыпусти токен через BotFather и перенеси новое значение в свойства проекта.

Самая неприятная поломка здесь связана с дубликатами после сетевого тайм-аута. Её не всегда заметишь самостоятельно: система может показать ошибку, хотя клиент уже получил сообщение. Поэтому журнал и уникальный ключ нужны не для красоты.

## Сколько стоит своя система против готового сервиса?

Самостоятельная сборка имеет 0 ₽ прямых расходов, если использовать бесплатные Telegram Bot API и Google Apps Script. Готовое решение начинается от 7 080 ₽ в год за SMAIPL «Новичок», от 19 188 ₽ за BotHelp PRO и составляет 35 988 ₽ за SaleBot «Бизнес». Claude Pro для сборки оплачивается отдельно: $20 в месяц официально.

| Вариант | Прямые расходы | Что получаешь | Ограничения |
|---|---:|---|---|
| Своя схема | 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 отдельно оплачивать его не надо.

Готовый сервис выигрывает поддержкой и готовым интерфейсом. Своя схема выигрывает гибкостью и отсутствием обязательной подписки на сервис. Но она не даёт гарантированной доставки. Клиент также должен сначала написать боту.

Сравнивай не только цену. Спроси себя, что важнее: быстро получить готовую запись или иметь возможность менять очередь, лимит и текст сообщения под свои занятия.

Если хочешь пройти такую сборку не в одиночку, на практикуме это делают руками на своей задаче. Там можно взять собственную рутину, описать её словами и пройти путь от таблицы до рабочей автоматизации:

## С чего начать сегодня, если технологии не для тебя?

Выбери одну повторяющуюся рутину и опиши её обычными словами: кто записывает клиента, где лежит дата, что считается отменой и какое сообщение должно уйти. Поставь VS Code и Claude Code, собери одну тестовую запись для одной группы занятий, а помощника попроси объяснять каждую ошибку простым языком.

Не начинай со всей студии. Возьми одну группу и одну запись. Проверь сценарий вручную:

1. клиент запускает бота;
2. `chat_id` попадает в таблицу;
3. дата и время читаются правильно;
4. тестовое сообщение приходит;
5. после отправки меняется статус;
6. повторный запуск не создаёт дубль.

Отдельно договорись с клиентом о сообщениях в Telegram. Сервисное уведомление о подтверждённом занятии не смешивай со скидками и продажами. Для рекламы нужно отдельное согласие.

Если ошибка звучит непонятно, не пытайся угадывать по названию. Напиши помощнику: «Объясни, что произошло, какой строкой таблицы это вызвано и что проверить руками». Так технология остаётся инструментом, а не новой профессией.

На практикуме этому учат руками на своей задаче. Ты не переписываешь чужой код, а собираешь вещь под собственную рутину и сразу проверяешь её на рабочих данных:

## Вопросы и ответы

Для этой схемы нужны Google Таблица, Google Apps Script, Telegram-бот, VS Code и Claude Code. Отдельное приложение для отправки не требуется: Apps Script запускает проверку по таймеру и обращается к Telegram через Bot API.

Текст о напоминании записи должен быть коротким и по делу: название занятия, дату, время и понятное действие при изменении записи. Например: «Напоминание о занятии завтра в 15:00. Если не получится прийти, напиши администратору». Не добавляй рекламу в обязательное сервисное сообщение.

В этой схеме предусмотрены два момента: примерно за сутки и примерно за час до занятия. Планировщик Apps Script запускается около раза в минуту, но время может немного смещаться. Секундную точность такая схема не гарантирует.

Да. Для личного сообщения 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](https://core.telegram.org/bots)
- [From BotFather to 'Hello World'](https://core.telegram.org/bots/tutorial)
- [Telegram Bot API](https://core.telegram.org/bots/api#sendmessage)
- [Bots FAQ](https://core.telegram.org/bots/faq)
- [Spreadsheet Service | Apps Script](https://developers.google.com/apps-script/reference/spreadsheet/)
- [Class Range | Apps Script](https://developers.google.com/apps-script/reference/spreadsheet/range#getvalues)
- [Installable Triggers | Apps Script](https://developers.google.com/apps-script/guides/triggers/installable)
- [Properties Service | Apps Script](https://developers.google.com/apps-script/reference/properties)
- [Quotas for Google Services | Apps Script](https://developers.google.com/apps-script/guides/services/quotas)
- [Plans & Pricing | Claude by Anthropic](https://claude.com/pricing)
- [What is the Pro plan? | Claude Help Center](https://support.claude.com/en/articles/8325606-what-is-the-pro-plan)
- [Использование Claude Code с планом Pro или Max](https://support.anthropic.com/ru/articles/11145838-использование-claude-code-с-вашим-планом-pro-или-max)
- [Тарифы SMAIPL](https://www.smaipl.ru/)
- [Тарифы BotHelp](https://bothelp.io/ru/pricing)
- [Тарифы SaleBot](https://salebot.pro/docs/nashi-uslugi-tarify)
- [Статья 18 закона «О рекламе»](https://www.consultant.ru/document/cons_doc_LAW_58968/f892dec1383709792452f18d36e7043306e2be0a/)
- [Spam FAQ Telegram](https://telegram.org/faq_spam)
- [Как я добавлял таймзоны в своего бота](https://habr.com/ru/articles/932818/)
- [Are there PTB exceptions where the sent message reaches the server anyway?](https://github.com/python-telegram-bot/python-telegram-bot/discussions/4630)

_Это собирательная история выпускников практикума, а не рассказ одного человека: так эта работа устроена в большинстве таких дел._
