# Прайс-лист в Telegram-боте: 6 шагов до своего калькулятора цены

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

Источник: https://vibeceh.ru/cases/prajs-v-telegram-bote-klient-poluchaet-aktualnuyu-cenu-sam
Автор: Сергей Мазур · опубликовано 2026-08-12

Я открыл прайс лист из Google Таблицы в Telegram-боте: клиент сам выбирает размер колеса, вид сезонной работы и отдельные допуслуги, а после просмотра отправляет запрос на расчёт. У меня теперь есть калькулятор шиномонтажа, который не даёт называть цену на глаз и показывает клиенту актуальные условия.

Делюсь этим с удовольствием. Ниже пошаговая инструкция: шесть шагов, к каждому готовый промпт. Копируй их, описывай свою работу и собирай похожую вещь для автосервиса, салона, клиники или магазина, как [таблицы прайсов для бригады](/guides/prais-na-raboty-v-tablice). Тебе не понадобится писать код.

А началось всё с повторяющихся вопросов про одну и ту же цену.

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

Раньше прайс жил в файле и переписке. Я открывал его, искал нужную строку, объяснял, что входит в пакет, а что считается отдельно. Если клиент называл другой размер колеса или добавлял балансировку, приходилось пересчитывать всё заново.

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

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

## Как прайс в Telegram убрал повторные объяснения цены клиенту?

Клиент открывает Telegram-бота, выбирает раздел шиномонтажа, размер колеса и пакет работ, а отдельные операции отмечает отдельно. После этого он видит актуальную цену или отправляет запрос на расчёт. Я перестал каждый раз объяснять стоимость на глаз и перепроверять, входит ли балансировка в пакет.

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

В боте меню выглядит проще, чем мой старый файл:

- сезонная смена;
- пакеты работ;
- балансировка;
- датчики;
- хранение;
- рассчитать стоимость.

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

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

Главное изменение для меня простое: я перестал называть цену на глаз, когда меняется размер колеса или добавляется операция. Пакет остаётся пакетом, а отдельные работы видны отдельными строками.

## Почему свой прайс удобнее готового сервиса?

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

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

В готовом сервисе уже есть меню и кнопки. Это плюс. Не нужно собирать базовую механику. Но услуга может быть устроена не так, как у тебя. Например, в тарифе есть пакет, а отдельно добавить хранение нельзя или оно прячется в другом сценарии.

В своей сборке я не зашивал прайс в меню. Если появляется новая сезонная услуга, я добавляю строку в таблицу. Если меняется цена, меняю ячейку. Кнопки и логика остаются прежними.

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

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

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

## Из чего состоит прайс в Telegram-боте?

Схема состоит из Telegram-бота, Google Таблицы и Apps Script. Клиент нажимает кнопку в Telegram, скрипт получает запрос через webhook, читает нужный диапазон таблицы и отправляет ответ обратно. Прайс хранится в таблице, поэтому цену можно менять без переписывания меню.

![Схема связи клиента, Telegram-бота и Google Таблицы с удивлённым котом.](https://s3.regru.cloud/crossmark/statejnik/images/guides/prajs-v-telegram-bote-klient-poluchaet-aktualnuyu-cenu-sam/kadr-1.webp)

Схема выглядит так:

```text
Клиент
  ↓
Telegram-бот
  ↓
Webhook
  ↓
Google Apps Script
  ↓
Google Таблица
  ↓
Ответ в Telegram
```

Telegram здесь только интерфейс. Он показывает кнопки и принимает нажатия. Источник актуальной цены находится в таблице.

Google Таблица может содержать лист `Прайс` с такими колонками:

```text
Раздел | Код услуги | Услуга | Размер колеса | Цена | Единица | Входит в пакет | Активна
```

Пример строки:

```text
Сезонная смена | seasonal_17 | Сезонная смена колёс | R17 | 2400 | комплект | да | да
```

Apps Script получает сообщение от Telegram через `doPost`, разбирает нажатую кнопку и обращается к нужному диапазону. Для кнопки «Балансировка» используется один идентификатор, для «Хранение» другой. Скрипт не ищет цену по случайному номеру строки, а смотрит на раздел или код услуги.

Когда в веб-приложение приходит HTTP POST-запрос, Apps Script направляет его в функцию doPost, которая возвращает ответ ([Веб-приложения Apps Script](https://developers.google.com/apps-script/guides/web?hl=ru)).  
> - Google for Developers, [Веб-приложения Apps Script](https://developers.google.com/apps-script/guides/web?hl=ru)

Webhook нужен, чтобы Telegram отправлял обновления на HTTPS-адрес опубликованного Apps Script. После чтения таблицы скрипт вызывает `sendMessage` и возвращает клиенту ответ.

Я отдельно держу лист `Заявки`. Туда попадают запросы на расчёт: дата, время, выбранный размер колеса, пакет, допуслуги, имя и контакт клиента. Прайс и заявки не смешиваются.

## Сколько стоит собрать прайс и что поставить?

Для сборки нужны Visual Studio Code и помощник Claude Code. Они ставятся один раз, установка занимает около пятнадцати минут. Claude Pro стоит $20 в месяц или $200 в год, и Claude Code уже входит в этот тариф. Бесплатный доступ есть, но его лимит зависит от нагрузки и не обещает фиксированное число сообщений.

Сначала поставь VS Code. Это редактор, в котором видна папка проекта и файлы. Писать программу руками не придётся.

Второй инструмент - Claude Code. Он встраивается в редактор и работает внутри проекта. Ты описываешь задачу обычными словами, а помощник создаёт файлы, меняет их и объясняет результат. Инструменты ставятся один раз. Потом можно собирать другую автоматизацию, меняя только описание задачи.

Для Claude Pro официально указана цена $20 в месяц или $200 в год. В тариф входит Claude Code. Это не цена в рублях для России: Россия отсутствует в списке поддерживаемых стран Anthropic, а официальной российской цены и штатной оплаты российской картой нет.

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

При активной работе возможны дополнительные usage credits после исчерпания лимита тарифа. Поэтому $20 в месяц лучше считать базовой стоимостью, а не обещанием, что расходы никогда не вырастут.

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

Через @BotFather создай бота командой `/newbot`. В ответ Telegram выдаст токен. Это пароль от бота. Не вставляй его в открытый код, таблицу или сообщение подрядчику.

## Как создать прайс-лист из таблицы и подключить его к Telegram-боту?

Сначала подготовь лист с разделом, услугой, размером колеса и ценой. Потом создай бота через @BotFather, опиши помощнику схему, подключи Apps Script, добавь кнопки и проверь ответы на нескольких размерах колеса. Собирать лучше по шагам, чтобы после каждой операции видеть, что именно работает.

![Кот одобрительно показывает лапу рядом с тремя шагами сборки прайс-бота.](https://s3.regru.cloud/crossmark/statejnik/images/guides/prajs-v-telegram-bote-klient-poluchaet-aktualnuyu-cenu-sam/kadr-2.webp)

Создай [Google Таблицу](/concepts/google-tablicy) с листами `Прайс` и `Заявки`. В `Прайс` добавь строки для сезонной смены, пакетов работ, балансировки, датчиков и хранения.

   

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

Открой @BotFather, отправь `/newbot`, задай имя и username. Полученный токен сохрани отдельно, не в открытой ячейке.

   

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

Открой папку проекта в VS Code и попроси сначала разобрать задачу, а не сразу писать всё целиком.

   

В ответ появится план проекта. Если помощник предлагает зашить цены в код, останови его. Источник цены должен оставаться в Google Таблице.

Создай проект Apps Script из Google Таблицы. Дай ему доступ к таблице, опубликуй как веб-приложение с запуском от имени владельца и получи HTTPS-адрес.

   

Помощник подготовит функции `doPost`, чтение свойств и обращение к таблице. После публикации webhook проверь отдельно: один запрос должен давать один ответ.

Теперь нужны кнопки разделов, размер колеса, пакет и допуслуги.

   

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

Не ограничивайся кнопкой `/start`. Пройди несколько комбинаций: другой размер колеса, пакет без допуслуг, пакет с балансировкой, хранение отдельно, запрос на расчёт и повторное нажатие.

   

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

## Что появилось в папке, когда прайс заработал?

В проекте появляются файлы Apps Script, настройки свойств и таблица с листами прайса и заявок. Telegram обращается к опубликованному webhook, Apps Script читает нужный диапазон и возвращает ответ. Токен, ID таблицы и секрет webhook хранятся в свойствах проекта, а не в открытом коде.

Обычно внутри получается несколько частей:

- файл с обработчиком `doPost`;
- функции чтения прайса;
- функции отправки сообщений и кнопок;
- обработка запроса на расчёт;
- настройки Script Properties;
- Google Таблица с листами `Прайс` и `Заявки`;
- адрес опубликованного веб-приложения;
- секрет webhook.

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

`SPREADSHEET_ID` указывает, какую таблицу читать. `TELEGRAM_TOKEN` даёт скрипту доступ к боту. `WEBHOOK_SECRET` помогает отличить настоящий запрос Telegram от случайного обращения к адресу.

Не вставляй эти значения в открытый JavaScript. Если токен попадёт не туда, его можно отозвать через @BotFather и выпустить новый.

## Что делать, если бот показывает старую цену или присылает два ответа?

Сначала проверь, не обрабатывается ли один update дважды, не остался ли старый webhook и не упёрлась ли таблица в лимит. Затем проверь диапазоны, доступ Apps Script, токен и длину сообщения. Последней проверь временную зону: Telegram передаёт данные без готового часового пояса бизнеса, поэтому его задают явно.

![Мужчина закрывает лицо ладонью рядом со схемой защиты от повторных ответов бота.](https://s3.regru.cloud/crossmark/statejnik/images/guides/prajs-v-telegram-bote-klient-poluchaet-aktualnuyu-cenu-sam/kadr-3.webp)

**Бот отвечает два раза.** Telegram может повторно доставить update, если обработчик не подтвердил его вовремя или произошёл сбой. Сохраняй `update_id`, `message_id` и `chat_id`, а уже обработанный update не принимай повторно.

**Ответ приходит с задержкой или повторяется позже.** Долгое чтение таблицы и расчёт внутри webhook могут привести к timeout. Сначала запиши update, быстро верни успешный ответ, а тяжёлую обработку выполняй отдельно.

**Бот перестал показывать цены при нагрузке.** Google Sheets API ограничивает число чтений и записей. Не читай весь лист на каждый клик. Используй кеш прайса и обновляй его при изменении таблицы или через заданный интервал.

**Цена съехала или пропала строка.** Не ищи услугу по номеру строки. Используй уникальный `service_id`, проверяй пустые цены, повторы ID и активность строки.

**Google сообщает об отсутствии доступа.** Проверь, под каким аккаунтом запускается Apps Script, есть ли у него доступ к таблице и подтверждены ли разрешения. Если менялись права, переподключи аккаунт.

**Токен стал недействительным.** Telegram-токен можно отозвать через @BotFather. Ошибка `401 Unauthorized` означает, что нужно проверить значение в свойствах проекта и заново настроить webhook после замены.

**Большой раздел не отправляется.** В одном текстовом сообщении Telegram нельзя передать больше 4096 символов. Показывай прайс по разделам, добавь страницы или разбивай ответ.

**Время заявки отображается неправильно.** Telegram не знает часовой пояс бизнеса автоматически. Задай часовой пояс явно, храни время в едином формате и не определяй его по IP клиента.

## Что выбрать: свой бот, готовый сервис или прежний файл?

Свой бот подходит, когда прайс часто меняется, пакетные работы нужно разделять с допуслугами, а правила хочется менять самостоятельно. BotPad Pro стоит 650 ₽ в месяц или 6240 ₽ в год при оплате за год. Самостоятельная сборка требует Claude Pro за $20 в месяц и собственного времени.

| Вариант | Стоимость | Что получаешь | Ограничения |
|---|---:|---|---|
| Свой бот | Claude Pro $20 в месяц | Своя логика, Google Таблица, кнопки, заявки | Нужно самому проверять ошибки и лимиты |
| BotPad Pro | 650 ₽ в месяц или 6240 ₽ в год | Готовый конструктор сценариев, Telegram, Google Sheets, webhook | Логика зависит от возможностей сервиса |
| Прежний способ | Отдельной платы нет | Файл, переписка и ручное объяснение цены | Версии прайса расходятся, клиент ждёт ответа |

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

Claude Pro стоит $20 в месяц или $200 в год. Официальной рублёвой цены для России нет, и Россия не входит в список поддерживаемых стран Anthropic. В таблице сравнения поэтому оставляю именно доллары, без выдуманного пересчёта.

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

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

## Что сделать сегодня, если ты не разбираешься в технологиях?

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

Маршрут такой:

1. Создай лист `Прайс` и внеси сезонную смену, пакеты работ, балансировку, датчики и хранение.
2. Добавь уникальный код каждой услуги.
3. Создай лист `Заявки`.
4. Получи токен через @BotFather и убери его в свойства проекта.
5. Установи VS Code и Claude Code.
6. Отправь помощнику промпт с описанием своей рутины.
7. Проверь цены для нескольких размеров колеса.
8. Только после этого добавь запрос на расчёт.

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

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

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

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

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

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

Можно. Ты описываешь задачу словами, а Claude Code создаёт и меняет файлы проекта. Самостоятельно всё равно придётся подготовить таблицу, создать Telegram-бота, дать доступ Apps Script и проверить результат. Программирование для этого маршрута не требуется, но проверка обязательна.

Google Таблица может быть источником цены без отдельной платы за саму таблицу в описанной схеме. Бесплатный Claude тоже существует, но для сборки автоматизации его лимит зависит от нагрузки и количества сообщений. Telegram-бот имеет ограничения скорости, а Apps Script и Google Sheets работают в пределах своих квот.

Готовый шаблон не обязателен. Минимальная структура состоит из раздела, кода услуги, названия, размера колеса, цены, единицы измерения и признака активности. Отдельно нужен лист заявок. Важно не название шаблона, а понятные уникальные коды услуг и отсутствие повторяющихся строк.

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

Создай разделы в Google Таблице, подключи их к кнопкам Telegram-бота и размести ссылку на бота на сайте, в соцсетях или в переписке. Клиент должен сам открыть бота и нажать Start. Telegram-бот не может первым начать обычный диалог с пользователем.

Добавь в таблицу продукцию, цену, единицу и активность позиции. В боте сделай кнопки разделов, а после просмотра добавь «Запросить расчёт». Данные заявки записывай в отдельный лист, не смешивая их с прайсом.

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

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

Нет. Telegram лучше считать интерфейсом, а Google Таблицу источником актуальной цены. Для клиентов без Telegram оставь телефон, форму или другой канал. Иначе часть людей не увидит прайс и не попадёт в очередь заявок.

- [Telegram Bot API](https://core.telegram.org/bots/api)
- [From BotFather to 'Hello World](https://core.telegram.org/bots/tutorial)
- [Веб-приложения Apps Script](https://developers.google.com/apps-script/guides/web?hl=ru)
- [Properties Service Apps Script](https://developers.google.com/apps-script/guides/properties)
- [Чтение и запись значений Google Таблиц](https://developers.google.com/workspace/sheets/api/guides/values?hl=ru)
- [Квоты сервисов Apps Script](https://developers.google.com/apps-script/guides/services/quotas?hl=ru)
- [Usage limits Google Sheets](https://developers.google.com/workspace/sheets/api/limits)
- [Тарифы Claude](https://support.claude.com/en/articles/11049762-choose-a-claude-plan)
- [Лимиты Claude Code](https://support.claude.com/en/articles/14552983-models-usage-and-limits-in-claude-code)
- [Где доступен Claude](https://support.claude.com/ru/articles/8461763-%D0%B3%D0%B4%D0%B5-%D1%8F-%D0%BC%D0%BE%D0%B3%D1%83-%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C-%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF-%D0%BA-claude)
- [Тарифы BotPad](https://botpad.ru/)
- [Duplicate update received](https://github.com/php-telegram-bot/core/issues/659)
- [Telegram webhook и повторные попытки после тайм-аута](https://github.com/openclaw/openclaw/issues/16763)
- [Лимиты Google Таблиц при нагрузке](https://habr.com/ru/companies/amvera/articles/844092/)
- [Проблемы со сдвигами диапазонов в таблицах](https://habr.com/en/articles/1007960/)
- [Ошибка OAuth доступа к Google Sheets](https://github.com/n8n-io/n8n/issues/24413)
- [Bots: An introduction for developers](https://core.telegram.org/bots)

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