Кафе, сайт и розыгрыши в мессенджере: как это работает вместе
Розыгрыши среди гостей вели вручную: номерки записывали, оплату сверяли в переписке. Собрал связку «сайт плюс бот плюс админка», где номерок покупают в чате, а победителя можно перепроверить.
Коротко (TL;DR)
- Кафе национальной кухни в регионе. Сначала сделал сайт статикой на своём сервере: меню наборами блюд с фото, реальные условия доставки, юридические страницы и разметка заведения общепита.
- Поверх сайта поставил бота в мессенджере MAX: номерок для розыгрыша покупается прямо в переписке, а у владельца есть админка с сеткой номерков, бронью на 15 минут, отметкой оплат и рассылкой подписчикам.
- Главная страница похудела с 1603 КБ до 303 КБ, загрузка упала с 3203 мс до 1826 мс. Розыгрыш прогнал вручную на 35 номерках, для администратора написал памятку.
Сайт кафе обычно делают один раз и забывают. Он висит, показывает меню и телефон, а работа идёт мимо него — в переписке, в звонках, в тетрадке у администратора. Расскажу, как из сайта получился инструмент, в который владелец заходит каждый день, и что для этого пришлось достроить сверху.
Сайт: меню, доставка и документы
Начал с базы. Сайт собрал статикой — то есть страницы отдаются готовыми файлами, без базы данных и тяжёлого движка. Для кафе это правильный выбор: меню меняется не каждый час, зато страница открывается быстро и почти не ломается. Поставил на свой сервер, подключил защищённое соединение с сертификатом, который продлевается сам.
Меню перестроил: вместо перечисления позиций — наборы блюд с фотографиями и описаниями, чтобы человек понимал, что именно получит. Добавил реальные условия доставки и настоящее время работы. Звучит скучно, но именно на этих пунктах теряются заказы: человек не понял, довезут ли до него, и ушёл.
Отдельно закрыл юридическую часть, потому что сайт принимает контакты людей. Написал политику обработки персональных данных и публичную оферту, добавил чекбокс согласия к форме, баннер про cookie и реквизиты в подвале. Без этого сайт работает ровно до первой претензии.
Чтобы кафе находили
Дальше — чтобы сайт вообще показывался в поиске. Прописал мета-теги на страницах: это короткие описания, которые видит человек в выдаче до того, как кликнет. Добавил гео-теги региона — подсказку поисковику, где физически находится заведение.
Поверх этого поставил разметку заведения общепита. Это невидимый для посетителя блок данных, из которого поисковик понимает: перед ним кафе, у него есть адрес, часы работы и меню. Такие карточки в выдаче выглядят богаче обычной синей ссылки. Плюс карта сайта и файл robots, чтобы страницы обходились целиком и в нужном порядке.
Бот вместо формы заказа
Сайт сам по себе кафе даёт немного. Поэтому вторым слоем сделал бота в мессенджере MAX. У него команды и кнопки, приём файлов, а главное — покупка номерка для розыгрыша прямо в переписке. Человек не уходит на сторонний сайт, не регистрируется, не вводит пароль. Открыл чат, выбрал номер, оплатил.
Розыгрыш здесь не развлечение, а повод вернуться. Кафе получает список тех, кто уже проявил интерес, — и может написать им ещё раз, когда появится новое меню.
К боту сделал мини-приложение — окно, которое открывается внутри мессенджера и показывает ту же сетку номерков. Кому удобнее кнопками в чате, тот остаётся в чате. Кому удобнее видеть сетку целиком, открывает мини-приложение. Данные общие.
Админка, в которую владелец заходит сам
Самая важная часть проекта — панель для владельца. Через неё создаётся розыгрыш, видна сетка номерков, отмечаются оплаты, собирается дашборд с текущим состоянием и уходит рассылка подписчикам бота.
Отдельно продумал бронь. Когда человек выбирает номерок, тот резервируется на 15 минут. За это время он переводит деньги, админ подтверждает — номерок закрепляется. Не успел, деньги не пришли — номерок возвращается в общий доступ. Без такой брони два человека спокойно оплачивают один и тот же номер, и дальше разбирается уже владелец, а не программа.
Оплата на старте — перевод по системе быстрых платежей и ручное подтверждение админом. Это сознательное решение: запустить быстро, без подключения эквайринга и долгих согласований. Эквайринг заложен как надстройка — когда оборот это оправдает, он встанет на готовое место, а логика брони и сетки не изменится.
Как доказывается честность розыгрыша
Розыгрыш всегда упирается в один вопрос: откуда участники знают, что победителя не назначили заранее. Поэтому окно выбора победителя сделал с контрольной строкой. Это короткий набор символов, который считается из исходных данных розыгрыша. Он публикуется вместе с результатом, и по нему любой желающий может перепроверить, что итог не подкручивали задним числом.
Технически это мелочь. По смыслу — то, без чего механика не работает: за номерок платят только тогда, когда верят в результат.
Перед сдачей прогнал розыгрыш вручную на 35 номерках: бронь, оплаты, отмена по таймауту, выбор победителя, проверка строки. Для администратора написал памятку на каждый день, чтобы запуск не требовал моего участия.
Стек и один пойманный баг
Под капотом: статика и nginx с сертификатом на автопродлении, бэкенд розыгрышей на FastAPI и SQLite, службы systemd, чтобы всё поднималось само после перезагрузки, и отдельный воркер на длинных запросах к API мессенджера.
На этом воркере и поймал главный баг. Мессенджер держит соединение и отвечает до 30 секунд, а у HTTP-клиента стоял таймаут 20 секунд. Клиент рвал связь раньше, чем приходил ответ, — и бот молча терял события. Выглядело как случайные пропажи сообщений, а причина была в двух числах, которые не сошлись.
Картинки перевёл в формат WebP с запасным JPEG для старых браузеров и добавил предзагрузку главной картинки первого экрана — чтобы она появлялась сразу, а не через секунду после текста.
Цифры и что осталось открытым
| Что мерил | Было | Стало |
|---|---|---|
| Вес страницы | 1603 КБ | 303 КБ (минус 81%) |
| Первый экран | 700 КБ | 230 КБ |
| Загрузка | 3203 мс | 1826 мс |
| Логотип | 517 КБ | 81 КБ |
При повторном заходе картинки берутся из кэша браузера, то есть заново не скачиваются вообще. Вёрстку проверил на трёх ширинах: 375, 768 и 1440 пикселей — телефон, планшет, компьютер. Кнопки плюс и минус в корзине были 24 на 24 пикселя, пальцем в такие не попасть, — увеличил.
Открытых хвостов на момент сдачи два: два фото блюд пока стоят заглушками и ждут съёмки, а регистрация мини-приложения в кабинете разработчика мессенджера делается на стороне заказчика. Об обоих написал прямо, а не оставил всплывать потом.
Частые вопросы
Зачем кафе бот, если есть сайт?
Сайт человек открывает, когда ищет. Бот остаётся у него в списке чатов и позволяет написать первым — про новое меню, про розыгрыш, про доставку. Это разные задачи, и вместе они работают лучше, чем порознь.
Почему оплата вручную, а не сразу картой?
Чтобы запуститься быстро. Перевод по системе быстрых платежей и подтверждение админом работают с первого дня и не требуют согласований. Эквайринг закладывался как надстройка — логика брони и сетки под него уже готова.
Что даёт контрольная строка у розыгрыша?
Возможность перепроверить результат. Строка считается из исходных данных и публикуется вместе с именем победителя. Если бы итог меняли задним числом, строка не сошлась бы.
Сайт статикой — это не устарело?
Наоборот. Для меню и описаний тяжёлый движок не нужен, а статика открывается быстрее и её почти нечему ломать. Всё динамическое — розыгрыши, оплаты, рассылки — живёт отдельным сервисом и подключается к боту.
Сможет ли администратор вести всё это без меня?
Для этого и написана памятка. Создание розыгрыша, отметка оплат, выбор победителя и рассылка делаются кнопками в панели. Розыгрыш я прогнал вручную целиком, чтобы инструкция описывала реальный порядок действий, а не предполагаемый.
Коротко о главном
Сайт кафе — это фундамент: меню, доставка, часы работы, документы и разметка, по которой заведение находят. Но фундамент сам по себе никого не кормит. Работать он начинает тогда, когда сверху появляется то, чем пользуются каждый день.
В этом проекте такой надстройкой стали бот с номерками и админка, в которую владелец заходит сам: создал розыгрыш, отметил оплаты, выбрал победителя, разослал новость подписчикам. Плюс честные мелочи — бронь на 15 минут, контрольная строка, памятка администратору, — без которых механика разваливается на первой же спорной ситуации.
Если у вас офлайновое заведение и сайт, который просто висит, — расскажите, как устроена ваша работа, и я предложу, что к нему достроить, чтобы им начали пользоваться. Напишите в Telegram, MAX или VK.
Всё о мессенджере MAX в одном месте
Эта статья — часть кластера материалов о MAX: разработка ботов и мини-аппов, продвижение канала, воронки, отраслевые сценарии и кейсы с реальными результатами.
Что я делаю для бизнеса
- Боты в Telegram, MAX, VK
- Автоматизация процессов и CRM
- Аналитика и дашборды
- Сайты и лендинги под ключ
Бесплатно: чек-лист «Готов ли ваш бизнес к 152-ФЗ»
12 пунктов, которые проверяют готовность за час: данные, согласия, уведомление в РКН, локализация, защита. Отметьте, что уже сделано, и увидите дыры, за которые сейчас штрафуют.
Готовы обсудить вашу задачу?
Бесплатная консультация — разберём, как внедрить это в вашем бизнесе под ключ. Без форм, пишите напрямую.
Разборы, кейсы и практика — без воды. Выходит регулярно, читать 3–5 минут.


