Telegram боты
January 7, 2023

Telegram бот для iiko: мониторинг опозданий

Новый бот, который следит за опозданиями в реальном времени и отправляет оповещения контролёрам в Telegram.

Пример сообщений от бота контроля за опозданиями: ежедневный отчет и оповещение по факту потенциального опоздания одного из заказов.

Постановка задачи и поиск решения

Основная задача — бот должен постоянно мониторить все заказы, вовремя обнаруживать потенциальные опоздания и оповещать администраторов ресторанов (производств).

Администраторы следят в Telegram за оповещениями бота и при необходимости звонят гостям и информируют об опозданиях.

Возможны разные условия, что считать опозданием. После превышения расчетного времени доставки, за 10 минут до этого времени. Только если не назначен курьер. Или любые другие условия.

Пример того, что считать опозданием:

  • Это курьерская доставка, не самовывоз.
  • Остается 10 минут или меньше до обещанного (расчетного) времени доставки.
  • Заказ ещё не передан курьеру.

И какое действие выполнить при обнаружении такого опоздания? За 10 минут до обещанного времени доставки отправить уведомление в Telegram о том, что пора отправлять заказ на курьерскую доставку (назначить курьера и перевести в статус "В пути").

Кроме того, бот должен утром по местному времени отправлять в Telegram отчет "за вчера", где подсчитывать статистику: сколько было опозданий за день в разных интервалах: например, до 20 минут, от 20 до 40 минут, свыше 40 минут.

Разработка Телеграм бота

Все необходимые запросы к Айко для решения поставленной задачи можно выполнить с использованием одного интерфейса — Transport API (iikoCloud API).

Основная техническая сложность бота — для мониторинга опозданий потребуется постоянно (скажем, ежеминутно) обновлять список всех заказов, следить за изменениями статусов и выявлять опоздания. При этом противопоказано выгружать каждую минуту все заказы из Айко (у доставки с несколькими точками это легко может быть 5 Мб данных под вечер пятницы), нужно экономно использовать механизм выгрузки по ревизиям.

Кроме того, боту потребуется своя база данных, с быстрым кэшем, TTL и всем остальным. В базе данных будут накапливаться и обновляться сведения о заказах на основании выгрузки изменений из Айко.

Алгоритм работы бота в общем виде и последовательность вызовов iiko API:

  1. Авторизация в iiko Transport API — /api/1/access_token.
  2. Начало ежеминутного цикла. Получение изменений с момента указанной ревизии — /api/1/deliveries/by_revision. Ревизия (это есть метка времени) изменяется в цикле, с учетом возможных сбоев.
  3. Если есть изменения, то обновить информацию об измененных заказах в базе данных.
  4. Просмотр всех заказов в базе данных и проверка условий опоздания. Обещанное время — это метка времени completedBefore. Для разных условий могут потребоваться и другие метки: фактическое время доставки whenDelivered, время окончания приготовления whenCookingCompleted, время отправки курьеру whenSended (это не мы ошиблись с английским, так эта метка называется в API).
  5. Если найдено опоздание, отправить оповещение в Telegram группу, соответствующую ресторану (точке доставки), к которому относится заказ.
  6. Конец ежеминутного цикла.

Параллельно запускается ежедневный цикл, в котором формируется отчёт по опозданиям за вчерашний день. В этом же цикле очищается база данных — удаляются заказы в статусах Closed и Cancelled.

Тестируем и отлаживаем бота, исправляем обнаруженные ошибки и "особенности":

  • iiko иногда присылает заказы из прошлых месяцев, они не актуальны и могут вызвать ложные срабатывания бота.
  • Адрес, имя и телефон доставки не всегда проставляются корректно при создании заказа от внешнего источника (чуть позже, при обработке нового заказа в колл-центре, оператор исправит ошибки).

Инструкция по подключению бота

Чтобы подключить бота к сети доставки, нужно сделать следующее:

  1. Для всех точек (производств) сети доставки создать группы в Телеграм. В эти группы бот будет отправлять оповещения о потенциальных опозданиях и ежедневный отчет.
  2. В каждую созданную группу добавить бота @getmyid_bot, этот бот покажет идентификатор группы (Current chat ID).
  3. Прислать Семёну Фудову список идентификаторов групп и адресов соответствующих точек (производств), в произвольном формате, например:

    Chat-ID: -123456789 Адрес точки: ул. Телеграммная, д. 5
  4. Во все созданные группы добавить бота @PIZZA-SUSHI-REPORTER (настоящее имя бота сообщит Семён Фудов). Это и есть бот контроля за опозданиями, от его имени будут приходить оповещения и ежедневный отчет.

Результат

Задача решена, получен следующий результат:

  1. В реальном времени осуществляется мониторинг опозданий. Если обнаружено потенциальное опоздание, бот присылает оповещение администратору ресторана в Telegram.
  2. Каждое утро по местному времени бот отправляет отчет об опозданиях "за вчера".

Подведение итогов

Семён Фудов умеет разрабатывать Telegram ботов для самых разных задач. У нас уже работают боты, которые:

  1. Собирают внутренние логи Семёна Фудова для мониторинга производительности.
  2. Оповещают курьеров доставки о новых назначенных заказах.
  3. Выгружают данные о продажах для импорта во внешние системы анализа данных (Power BI и др.)
  4. Находят опоздания и отправляют SMS сообщения клиентам с извинениями и подарками внутри.
  5. Ежедневно отправляют прогнозы расхода заготовок.
  6. И теперь — в реальном времени оповещают администраторов ресторанов об опозданиях.

Если у вас есть идея разработать собственного Телеграм бота для ресторана, доставки или кафе — пишите на почту hello@fudov.ru или боту поддержки @FudovSupportBot, обсудим!