Кейсы 5 мин чтения

Кафе, сайт и розыгрыши в мессенджере: как это работает вместе

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

кейсобщепитбот в MAXрозыгрыши

Коротко (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 минут.

Готовые решения под ключTurnkey solutionsSoluciones llave en mano交钥匙解决方案Түлхүүр гардуулах шийдэл 451 готовых IT-решений для бизнеса451 ready-made IT solutions for business451 soluciones IT listas para empresas451 个面向企业的现成 IT 解决方案Бизнест зориулсан 451 бэлэн IT шийдэл Автоматизация, боты, AI, 152-ФЗ и платформы · бесплатная консультацияAutomation, bots, AI, data privacy and platforms · free consultationAutomatización, bots, IA, privacidad de datos y plataformas · consulta gratis自动化、机器人、AI、数据合规与平台 · 免费咨询Автоматжуулалт, бот, AI, өгөгдлийн хамгаалалт ба платформ · үнэгүй зөвлөгөө Смотреть каталогView catalogVer catálogo查看目录Каталог үзэх