Бот доставки еды в MAX закрывает почти всё, ради чего рестораны заказывают отдельное мобильное приложение: клиент листает меню, набирает корзину, оплачивает и следит за курьером — не выходя из мессенджера. Ни установки приложения, ни регистрации, ни забытых паролей. Ниже — как устроен такой бот, из каких блоков он собирается, как подтягивать меню из iiko и R-Keeper, показывать статусы заказа и удерживать клиентов бонусами.

Почему мессенджер, а не мобильное приложение

У ресторана обычно три способа принимать онлайн-заказы, и у каждого есть цена:
  • Своё приложение — дорого в разработке, обновляется месяцами и требует бюджета на установки. Каждое изменение меню проходит через релиз и модерацию в App Store и Google Play.
  • Агрегаторы — забирают заметную комиссию с каждого заказа и «прячут» вашего клиента: контакт остаётся у площадки, а не у вас.
  • Телефон — оператор тратит по 5–7 минут на заказ, а в час пик клиенты висят на линии и уходят.
Бот в MAX снимает эти ограничения сразу по нескольким пунктам. Нулевой порог для клиента. Мессенджер уже стоит на телефоне — не нужно ничего скачивать и заводить аккаунт. Клиент открывает чат, выбирает блюда и платит за пару минут. А каждый лишний шаг в оформлении, как известно, режет конверсию. Быстрый запуск. Бота с каталогом, корзиной и приёмом заказов можно поднять за считанные недели, а не месяцы. Обновление меню — это просто изменение данных в учётной системе: новые позиции, цены и стоп-лист подтягиваются сами. Push без ограничений магазинов. Уведомления о статусе заказа, персональные акции и напоминания о повторном заказе доходят мгновенно, и открываемость у них в разы выше, чем у email-рассылок. Если бота ещё нет, начните с азов — как создать бота в MAX и настройка вебхуков MAX Bot API. А сам бот и его backend удобно держать на хостинге для ботов Bothost: процесс работает постоянно, webhook всегда онлайн.

Что умеет бот доставки

По сути это полноценная система приёма заказов, работающая круглосуточно и связанная с учётной системой кухни. Базовый набор функций:
  • Фотокаталог — категории, снимки блюд, состав, вес, цена и КБЖУ; поиск и фильтры через inline-кнопки.
  • Корзина — добавление и удаление позиций, изменение количества, автоматический пересчёт суммы.
  • Оформление — выбор адреса (сохранённого или нового), времени доставки и комментария.
  • Оплата — онлайн через ЮKassa, СБП, Тинькофф либо наличными/картой курьеру.
  • Трекинг — статусы в реальном времени: принят, готовится, собран, в пути, доставлен.
  • Повтор заказа — прошлый заказ повторяется одной кнопкой, любимые блюда хранятся в профиле.
  • Лояльность — кешбэк баллами, промокоды, персональные скидки.
  • Отзывы — автоопрос после доставки; негатив уходит напрямую менеджеру.
Технически всё это собирается на MAX Bot API: inline-кнопки для навигации, callback-кнопки для управления корзиной и отправка уведомлений методом отправки сообщений с флагом оповещения.

Каталог: фото, цены и кнопки

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

Как устроен каталог

Сначала бот показывает категории кнопками: «Пицца», «Роллы», «Бургеры», «Напитки», «Десерты». После выбора выводится список блюд с фотографиями; на каждой карточке — название, вес, цена и кнопка «В корзину». Если позиций в категории много, они разбиваются постранично с кнопками «Далее» и «Назад». 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, бот показывает баланс и применяет скидки.
С R-Keeper, 1С и МойСклад логика та же. Чтобы бот не зависел от конкретной системы, интеграцию строят через промежуточный слой — middleware. Тогда при переходе, например, с R-Keeper на iiko меняется только коннектор, а сам бот продолжает работать.

Трекинг заказа: статусы от кухни до двери

«Где мой заказ?» — одна из главных причин звонков в доставку. Бот снимает эту нагрузку: клиент видит статус в реальном времени и получает push на каждом этапе.
  • Готовится — заказ принят кухней; бот показывает ориентировочное время и обновляет его при задержке.
  • Собран — блюда упакованы, ищется курьер.
  • В пути — курьер забрал заказ; бот сообщает имя и примерное время прибытия, а при интеграции с курьерской службой — и точку на карте.
  • Доставлен — курьер отметил доставку; бот благодарит и чуть позже просит оценить заказ.
Статусы меняются автоматически: повар нажал «Готово» в iiko — клиенту ушло уведомление; курьер сменил статус в приложении диспетчеризации — бот написал «Заказ в пути».
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 — единая точка связи с учётной системой и платёжным провайдером; изолирует бота от конкретных сервисов.
Весь этот backend удобно разместить на Bothost: постоянный аптайм, HTTPS для webhook и хранение токенов в переменных окружения — то, что нужно рабочему боту доставки.

Частые вопросы

Бот заменит мобильное приложение? Для малого и среднего бизнеса — да: каталог, корзина, оплата, трекинг и лояльность закрывают почти всё, а стоит и запускается это в разы быстрее приложения и без модерации в магазинах. Крупным сетям бот служит дополнительным каналом наряду с приложением и сайтом. Какие способы оплаты поддерживаются? Онлайн через ЮKassa, Тинькофф и СБП, а также наличные и карта курьеру. При онлайн-оплате бот присылает ссылку на форму и подтверждает заказ после платежа. Как быстро обновляется меню? С iiko или R-Keeper — автоматически и в реальном времени. Без интеграции — через админ-панель бота, где позицию или цену меняют за минуту. Можно ли подключить несколько точек? Да. Один бот обслуживает несколько ресторанов: по адресу клиента он определяет ближайшую точку, у каждой может быть своё меню, цены и зона доставки, а заказы маршрутизируются автоматически. Где разместить бота? На сервере с постоянным аптаймом и HTTPS. Проще всего — на Bothost, где бот и его модули работают рядом и всегда на связи.

Коротко

Бот доставки еды в MAX даёт ресторану собственный канал заказов без комиссий агрегаторов и без дорогого приложения: клиент заказывает за пару минут, кухня получает заказ автоматически, а клиент видит статус в реальном времени. Начните с базового сценария — каталог, корзина, приём заказов — затем добавьте оплату, трекинг и лояльность. А чтобы бот работал стабильно и круглосуточно, разместите его на Bothost.

123 просмотров
0 лайков
0 комментариев