Бот доставки еды в MAX закрывает почти всё, ради чего рестораны заказывают отдельное мобильное приложение: клиент листает меню, набирает корзину, оплачивает и следит за курьером — не выходя из мессенджера. Ни установки приложения, ни регистрации, ни забытых паролей. Ниже — как устроен такой бот, из каких блоков он собирается, как подтягивать меню из iiko и R-Keeper, показывать статусы заказа и удерживать клиентов бонусами.
Почему мессенджер, а не мобильное приложение
У ресторана обычно три способа принимать онлайн-заказы, и у каждого есть цена:- Своё приложение — дорого в разработке, обновляется месяцами и требует бюджета на установки. Каждое изменение меню проходит через релиз и модерацию в App Store и Google Play.
- Агрегаторы — забирают заметную комиссию с каждого заказа и «прячут» вашего клиента: контакт остаётся у площадки, а не у вас.
- Телефон — оператор тратит по 5–7 минут на заказ, а в час пик клиенты висят на линии и уходят.
Что умеет бот доставки
По сути это полноценная система приёма заказов, работающая круглосуточно и связанная с учётной системой кухни. Базовый набор функций:- Фотокаталог — категории, снимки блюд, состав, вес, цена и КБЖУ; поиск и фильтры через inline-кнопки.
- Корзина — добавление и удаление позиций, изменение количества, автоматический пересчёт суммы.
- Оформление — выбор адреса (сохранённого или нового), времени доставки и комментария.
- Оплата — онлайн через ЮKassa, СБП, Тинькофф либо наличными/картой курьеру.
- Трекинг — статусы в реальном времени: принят, готовится, собран, в пути, доставлен.
- Повтор заказа — прошлый заказ повторяется одной кнопкой, любимые блюда хранятся в профиле.
- Лояльность — кешбэк баллами, промокоды, персональные скидки.
- Отзывы — автоопрос после доставки; негатив уходит напрямую менеджеру.
Каталог: фото, цены и кнопки
Каталог — первый экран бота, и от его удобства напрямую зависит, дойдёт ли клиент до оплаты. Задача — чтобы нужное блюдо находилось за два-три нажатия.Как устроен каталог
Сначала бот показывает категории кнопками: «Пицца», «Роллы», «Бургеры», «Напитки», «Десерты». После выбора выводится список блюд с фотографиями; на каждой карточке — название, вес, цена и кнопка «В корзину». Если позиций в категории много, они разбиваются постранично с кнопками «Далее» и «Назад». MAX Bot API умеет отправлять изображения через вложения, поэтому фото блюда, его описание и кнопки приходят одним сообщением — клиент сразу видит аппетитную картинку, состав и цену.def send_dish_card(chat_id, dish):
"""Карточка блюда: фото, описание, цена и кнопки."""
text = (
f"🍕 {dish['name']}\n\n"
f"Состав: {dish['ingredients']}\n"
f"Вес: {dish['weight']} г\n"
f"Цена: {dish['price']} ₽"
)
keyboard = [
[{"type": "callback", "text": f"В корзину — {dish['price']} ₽",
"payload": f"add_{dish['id']}"}],
[{"type": "callback", "text": "← Назад",
"payload": f"cat_{dish['category_id']}"},
{"type": "callback", "text": "Корзина",
"payload": "cart"}],
]
requests.post(
f"{API_URL}/messages",
headers=HEADERS,
json={
"chat_id": chat_id,
"text": text,
"attachments": [
{"type": "image", "payload": {"url": dish["photo_url"]}},
{"type": "inline_keyboard", "payload": {"buttons": keyboard}},
],
},
)Меню берётся из учётной системы
Каталог не зашивается в код. Названия, описания, фото, цены и доступность подтягиваются из iiko или R-Keeper. Поставили блюдо в стоп-лист — оно тут же пропадает из бота. Изменили цену — бот показывает новую без ручных правок.Корзина и оформление: три шага до заказа
От корзины до подтверждения должно быть не больше трёх шагов: адрес, оплата, подтверждение. Корзина. По кнопке «Корзина» клиент видит выбранные позиции с количеством и суммой. У каждой — кнопки «+», «−» и «Удалить», внизу — итог и кнопки «Оформить» и «Продолжить выбор». Здесь же бот предлагает дополнения (соус к пицце, напиток к бургеру) — это заметно поднимает средний чек. Адрес. Бот показывает сохранённые адреса («Дом», «Офис») в одно нажатие. Новый адрес клиент вводит текстом; бот проверяет его через геокодер и считает стоимость и время доставки. Если точка вне зоны — предлагает самовывоз. Оплата и подтверждение. Клиент выбирает способ оплаты кнопками: онлайн (ЮKassa), СБП, картой курьеру или наличными. При онлайн-оплате бот присылает ссылку на форму, а после успешного платежа подтверждает заказ и передаёт его на кухню через iiko или R-Keeper.def show_cart(chat_id, cart_items):
"""Содержимое корзины с кнопками управления количеством."""
lines = ["Ваша корзина:\n"]
total = 0
for item in cart_items:
subtotal = item["price"] * item["qty"]
total += subtotal
lines.append(f"{item['name']} × {item['qty']} — {subtotal} ₽")
lines.append(f"\nИтого: {total} ₽")
keyboard = []
for item in cart_items:
keyboard.append([
{"type": "callback", "text": "−", "payload": f"dec_{item['id']}"},
{"type": "callback", "text": f"{item['name']} ({item['qty']})",
"payload": f"info_{item['id']}"},
{"type": "callback", "text": "+", "payload": f"inc_{item['id']}"},
])
keyboard.append([
{"type": "callback", "text": "Оформить заказ", "payload": "checkout"},
{"type": "callback", "text": "Продолжить выбор", "payload": "menu"},
])
requests.post(
f"{API_URL}/messages",
headers=HEADERS,
json={
"chat_id": chat_id,
"text": "\n".join(lines),
"attachments": [{"type": "inline_keyboard",
"payload": {"buttons": keyboard}}],
},
)Интеграция с iiko и R-Keeper
Бот без связи с учётной системой — это красивая записная книжка: оператор всё равно переносит заказы руками, ошибается и теряет время. Настоящая интеграция означает, что заказ из бота сам попадает на кухню, а меню и цены синхронизируются в реальном времени. Что даёт связка с iiko:- Синхронизация меню — названия, описания, фото, цены и стоп-лист приходят из iiko автоматически.
- Приём на кухню — заказ из бота создаёт заказ в iiko; повар видит его на кухонном дисплее наравне с заказами из зала.
- Стоп-лист — закончился ингредиент — блюдо исчезает из каталога, и клиент не закажет то, чего нет.
- История заказов — хранится в iiko, бот может показать её и предложить повтор.
- Лояльность — баллы, кешбэк и промокоды ведутся в iiko, бот показывает баланс и применяет скидки.
Трекинг заказа: статусы от кухни до двери
«Где мой заказ?» — одна из главных причин звонков в доставку. Бот снимает эту нагрузку: клиент видит статус в реальном времени и получает push на каждом этапе.- Готовится — заказ принят кухней; бот показывает ориентировочное время и обновляет его при задержке.
- Собран — блюда упакованы, ищется курьер.
- В пути — курьер забрал заказ; бот сообщает имя и примерное время прибытия, а при интеграции с курьерской службой — и точку на карте.
- Доставлен — курьер отметил доставку; бот благодарит и чуть позже просит оценить заказ.
ORDER_STATUSES = {
"cooking": {"text": "Заказ готовится", "emoji": "👨🍳"},
"packed": {"text": "Заказ собран, ищем курьера", "emoji": "📦"},
"delivering": {"text": "Курьер в пути", "emoji": "🚗"},
"delivered": {"text": "Заказ доставлен", "emoji": "✅"},
}
def notify_order_status(chat_id, order_id, status, details=None):
"""Уведомляет клиента о смене статуса заказа."""
info = ORDER_STATUSES[status]
text = f"{info['emoji']} {info['text']}\nЗаказ #{order_id}\n"
if status == "cooking" and details:
text += f"Ориентировочное время: {details['eta_minutes']} мин"
elif status == "delivering" and details:
text += f"Курьер: {details['courier_name']}\n"
text += f"Будет у вас через ~{details['eta_minutes']} мин"
payload = {"chat_id": chat_id, "text": text, "notify": True}
if status == "delivered":
payload["attachments"] = [{
"type": "inline_keyboard",
"payload": {"buttons": [[
{"type": "callback", "text": "Оценить заказ",
"payload": f"rate_{order_id}"},
{"type": "callback", "text": "Повторить заказ",
"payload": f"reorder_{order_id}"},
]]},
}]
requests.post(f"{API_URL}/messages", headers=HEADERS, json=payload)Лояльность: кешбэк, промокоды и рефералы
Удержать клиента дешевле, чем привлечь нового, поэтому программа лояльности в боте окупается быстро. И работает она без участия оператора. Кешбэк баллами. С каждого заказа клиент получает баллы (обычно 5–10% от суммы). После доставки бот пишет: «Начислено 120 баллов, баланс: 450 ₽». При следующем заказе баллы можно списать — бот предложит это на этапе оплаты. Через синхронизацию с iiko баллы копятся и тратятся и в боте, и в зале. Промокоды и персональные акции. Клиент вводит код — скидка применяется автоматически. А через рассылки в MAX бот отправляет персональные предложения по истории заказов: любителю пиццы — новую пиццу, а не суши. Рефералы. Клиент делится персональной ссылкой на бота; за друга, сделавшего первый заказ, получает бонус. Это один из самых дешёвых каналов привлечения, а масштабируется он через рассылки по базе.Как бот влияет на бизнес
Бот — это инвестиция, и её эффект стоит измерять. На что обычно смотрят после внедрения:- Средний чек растёт за счёт допродаж, которые бот предлагает в корзине каждый раз (оператор по телефону — почти никогда).
- Нагрузка на операторов падает: приём заказов, трекинг и типовые ответы уходят боту, люди занимаются нестандартными ситуациями.
- Доля онлайн-заказов увеличивается — клиенты уходят с телефона в бота, потому что так быстрее.
- Скорость оформления — пара минут вместо 5–7 по телефону, повтор заказа — секунды.
- Повторные заказы возвращаются благодаря лояльности и кнопке «Повторить».
- Звонки «где заказ?» почти исчезают за счёт автоматического трекинга.
Архитектура: из чего собран бот
Это не один скрипт, а несколько модулей, каждый со своей зоной ответственности; масштабировать их можно независимо. Клиент в MAX
(выбирает блюда, оформляет, отслеживает)
│ MAX Bot API (webhook)
▼
Webhook-сервер
(приём обновлений, маршрутизация)
│ │ │ │
▼ ▼ ▼ ▼
Каталог Корзина Трекинг Лояльность
+ поиск + оплата + рассылки
│ │ │ │
▼ ▼ ▼ ▼
Middleware (бизнес-логика, валидация)
│ │
▼ ▼
iiko / R-Keeper ЮKassa / СБП
(меню, заказы, (платежи)
стоп-лист)- Webhook-сервер — принимает обновления MAX Bot API, определяет тип события и передаёт в нужный модуль.
- Каталог — меню с фото, категории, поиск и фильтры; синхронизация с iiko/R-Keeper.
- Корзина и оплата — расчёт итога, промокоды и скидки, создание платежа.
- Трекинг — статусы заказа и уведомления клиенту, расчёт ETA.
- Лояльность — начисление и списание баллов, промокоды, персональные предложения.
- Middleware — единая точка связи с учётной системой и платёжным провайдером; изолирует бота от конкретных сервисов.
Частые вопросы
Бот заменит мобильное приложение? Для малого и среднего бизнеса — да: каталог, корзина, оплата, трекинг и лояльность закрывают почти всё, а стоит и запускается это в разы быстрее приложения и без модерации в магазинах. Крупным сетям бот служит дополнительным каналом наряду с приложением и сайтом. Какие способы оплаты поддерживаются? Онлайн через ЮKassa, Тинькофф и СБП, а также наличные и карта курьеру. При онлайн-оплате бот присылает ссылку на форму и подтверждает заказ после платежа. Как быстро обновляется меню? С iiko или R-Keeper — автоматически и в реальном времени. Без интеграции — через админ-панель бота, где позицию или цену меняют за минуту. Можно ли подключить несколько точек? Да. Один бот обслуживает несколько ресторанов: по адресу клиента он определяет ближайшую точку, у каждой может быть своё меню, цены и зона доставки, а заказы маршрутизируются автоматически. Где разместить бота? На сервере с постоянным аптаймом и HTTPS. Проще всего — на Bothost, где бот и его модули работают рядом и всегда на связи.Коротко
Бот доставки еды в MAX даёт ресторану собственный канал заказов без комиссий агрегаторов и без дорогого приложения: клиент заказывает за пару минут, кухня получает заказ автоматически, а клиент видит статус в реальном времени. Начните с базового сценария — каталог, корзина, приём заказов — затем добавьте оплату, трекинг и лояльность. А чтобы бот работал стабильно и круглосуточно, разместите его на Bothost.
123 просмотров
0 лайков
0 комментариев
Комментарии (0)
Пока нет комментариев. Будьте первым!