Бот доставки еды
▍Telegram-бот доставки для сети ресторанов: меню с фото, оплата и трекинг курьера в одном окне.
Контекст
Сеть ресторанов под NDA принимала доставку по телефону и через агрегаторы. Своего канала не было: гость звонил, оператор вручную собирал заказ, диктовал сумму и перезванивал по статусу. В пик кухня и колл-центр захлёбывались, а маржа уходила в комиссию площадок.
Задача была не «сделать ещё одно приложение», а перенести весь путь заказа туда, где аудитория уже сидит — в Telegram. Меню с фото, корзина, оплата и понимание «где мой курьер» должны жить в одном окне, без установки, регистрации и звонков.
Задача
- 01Меню с фото, категориями и стоп-листом по позициям
- 02Корзина и оплата прямо в боте, без переходов на сайт
- 03Трекинг курьера на карте со статусом «в пути»
- 04Повторный заказ в один тап из истории
- 05Заказы должны мгновенно падать на кухню без оператора
Решение
Меню и корзина
Карточки блюд с фото, ценой и весом, категории каруселью. Сборка корзины — инлайн-кнопками «+/−», итог и доставка пересчитываются на лету и видны до оплаты.
Оплата в два тапа
Telegram Payments поверх YooKassa: подтянутый адрес, инвойс прямо в чате, оплата картой или сохранённым способом. От «оформить» до «оплачено» — два касания, без ввода данных заново.
Курьер на карте
После сборки заказа бот шлёт живой статус: «принят → готовится → курьер в пути» с мини-картой и честным ETA. Точку курьера обновляем по live-локации, без звонков «вы где».
Повтор в один тап
История заказов с кнопкой «повторить»: бот собирает ту же корзину, проверяет стоп-лист и сразу ведёт к оплате. Любимый заказ можно закрепить избранным.
Webhook на кухню
Оплаченный заказ уходит вебхуком на кухонный экран и в учётную систему. Повар видит состав, время и адрес; стоп-лист с кухни мгновенно скрывает позицию в меню бота.
Архитектура
Бот написан на aiogram с FSM-сценарием заказа: состояние корзины и шага оплаты живёт в Redis, заказы и история — в PostgreSQL. Оплата идёт через Telegram Payments с провайдером YooKassa, а подтверждение платежа ловится отдельным вебхуком, чтобы кухня видела только реально оплаченные заказы.
Кухня и бот связаны двусторонним вебхуком: оплаченный заказ улетает на кухонный экран, а смена статуса и стоп-лист возвращаются обратно и обновляют сообщение в чате. Трекинг курьера — отдельный воркер, который пишет live-локацию и пересчитывает ETA по трафику Яндекс.Карт.
Результаты
- повторных заказов
- до оплаты
- нагрузки на колл-центр
- приём заказов без оператора
Что не получилось с первого раза
- ✕Сначала статус заказа гнали отдельными сообщениями: «готовится», потом «в пути», потом «у двери» — и чат превращался в простыню из десяти уведомлений на один заказ, люди жаловались на спам. Переписали на одно сообщение, которое редактируется по месту: меняется текст, мини-карта и кнопка, а пуш приходит только на смену этапа.
- ✕Стоп-лист поначалу синхронизировали с кухней раз в пять минут по таймеру — в обеденный пик гость успевал оплатить блюдо, которое только что закончилось, и заказ приходилось отменять с возвратом. Перевели стоп-лист на мгновенный вебхук с кухни плюс финальную проверку наличия прямо перед выставлением счёта.
“Колл-центр перестал быть узким горлышком: больше трети заказов теперь повторные и приходят сами, без единого звонка. Гости пишут, что заказывать «стало как переписываться с другом».
Команда
Что дальше
- →Программа лояльности с бонусами за повторы
- →Предзаказ ко времени и расписание доставки
- →Подписка на бизнес-ланч с автосписанием

