Как я собрал скелет бота для заказа такси в Telegram

В день запуска ботов в Telegram я за 3 часа собрал бота, который присылает температуру воздуха в ответ на геолокацию пользователя. С того же дня я бредил вызовом такси через бота в Telegram, так как API службы такси у меня был под рукой.

Моя цель – не просто рассказать, как я собрал бота для вызова такси, а поделиться этим процессом с другими, чтобы то время, которое я потратил на реализацию алгоритма не тратили остальные. Вследствие этой работы любая служба такси, при наличии API, может за 5 минут настроить шаблон этого бота под себя. Или владелец бота с большим количеством пользователей сможет быстро подключать к себе службу такси.

Проектирование и реализация

Первое, что я сделал – нарисовал на бумаге простой автомат по вызову такси и состоянию заказа. Я хотел сделать просто и быстро, чтобы понять, сколько ресурсов уйдет на такую задачу с нуля. Так как у меня был доступ к API службы такси, нужно было реализовать только логику.

В своем процессе я зафиксировал минимальную функциональность – заказ на сейчас и оплата наличными. Функционально бот умеет получать только геолокацию без распознавания текстовых адресов. Такую минимальную функциональность с проектированием, реализацией и тестированием я собрал за 8 часов.



Позже, на этапе получения адреса от пользователя, я добавил и распознавание текста через Yandex Speech API, чтобы можно было отправить название объекта или адрес вместо геолокации. Но так как используемый мной API заказа такси работает в своем специфическом формате получения адреса, эта функция не добавлена в сборку.

Следующим шагом я перенес с бумаги описанный процесс и логику в админу облачной ОС Corezoid и подключил к процессу собственно API Telegram. Уже на этом этапе можно было протестировать получение сообщений из Telegram в процесс. Следующим шагом я, в таком же порядке, создал процесс заказа такси.

Вот так выглядел автомат, описывающий состояния пользователей бота Telegram, в черновике и каким он стал в Corezoid.



После создания скелета процесса заказа такси я создал отдельные процессы: отправка сообщения в Telegram, обработка геолокации и работа с API службы такси. 5 минут ушло на их тестирование и исправление ошибок. Затем перешел к созданию дашборда.

Реалтайм дашборд и анализ

Основным элементом в Corezoid является функция Callback, в терминах Telegram это называется Webhook. Эта функция позволяет процессу ждать реакцию пользователя. Реакций в этом конкретном процессе может быть несколько: отправка пользователем геолокации или отмена заказа (при бездействии или по команде /cancel). В дальнейшем функцию Callback система использует для мониторинга количества шагов пользователей в режиме реального времени. Это позволяет визуализировать воронку прохождения клиентами процесса заказа такси. За счет обработки каждого шага можно анализировать, на каком процессе клиент отвалился, и модерировать процесс.



Так как Corezoid автоматически собирает статистику по каждому состоянию процесса, вы можете зайти и посмотреть детальную статистику каждого состояния пользователя и заказа.



Дашборд – это один из инструментов оптимизации процесса. Если вы собираетесь использовать этот процесс, то уже не нужно будет ничего строить – дашборды идут «из коробки». Там Вы увидите, сколько пользователей подключили бота, сколько используют, сколько не используют. Можете уведомлять отдельных клиентов о каком-то обновлении или пробуждать спящих.




Можете найти в Telegram контакт @utaxibot и зайти в этот дашборд. Когда вы в боте введете команду /order, то увидите, как работает реалтайм дашборд.

Как использовать шаблон

Я отвязал бота от существующего API службы такси. Так что вы можете скопировать себе папку с шаблоном и подключить локальный сервис заказа такси через API. Просто введите ключ своего бота Telegram с одной стороны и API службы такси с другой.

Шаг 1. Логинимся в 2 клика на сorezoid.com

Шаг 2. Копируем папку с процессом.



Шаг 3. Регистрируем своего Telegram-бота в чате @BotFather и привязываем его ключ к процессу в Corezoid.



Шаг 4. Подключаем API службы такси согласно документации.
Требования к API заказа такси писали исходя из того API, что использовал я. Но Corezoid всё равно, какой API вы используете, можно самостоятельно прописать маппинг входящих и исходящих данных, так что у вас могут быть любые свои параметры.

Я предлагаю не просто использовать Сorezoid как конструктор для создания процессов, а использовать готовый шаблонный процесс.

И самое главное – Сorezoid может работать с любым фронтендом, который поддерживает режим работы через webhook/callback. Так что этот процесс будет работать и с другими системами взаимодействия с клиентом (Slack, Telegram, SiteHeart, SMS и др.). Вы можете подключить хоть Twitter Direct Message API, и этот же процесс будет работать через Twitter.

Я планирую постепенно дорабатывать функциональность бота, например, в ближайшее время добавлю: распознавание текста; оптимизацию работы с десктопными клиентами; заказ на несколько адресов и другое. Но, как альтернативный канал, бота можно использовать уже сейчас.

Приквел

Я работаю в ПриватБанке и модерирую бизнес-логику Приват24 с помощью Corezoid. Я не разработчик и не имею ни малейшего представления о коде.

Изначально Corezoid разрабатывалась как система исключительно для решения рабочих вопросов банка – управления эскалациями. В процессе эксплуатации она трансформировалась в систему управления состояниями объектов и процессами, а потом стало ясно, что Corezoid отлично подходит на роль бекэнда для фронт-офисных систем, в том числе для мессенджеров.

Платформ для создания бекэнда не так много. Недавно на Хабре я наткнулся на эту статью, где ребята хорошо начали разговор о конструкторах для Telegram-ботов. Сегодня я продолжил этот разговор и показал гибкую платформу с дашбордами «из коробки». Энтузиасты теперь смогут вызывать себе такси прямо в Telegram.

Кликайте сюда, если хотите использовать мой шаблон. Или сюда, если хотите ознакомиться с документацией Corezoid и разобраться, как собрать других ботов.
Поделиться публикацией
Похожие публикации
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама
Комментарии 27
  • 0
    Попробовал уже кто? Преимущество этого метода еще и в том, что бота не надо нигде хостить и париться про высокие нагрузки — все в облаке.
    • 0
      Подскажите, кто знает, какие API систем для заказа такси есть в свободном доступе?
      Знаю что у UBER есть API, но оно не позволяет работать с заказами, там только функционал для работы с приглашениями в систему.
      • +1
        Насколько я знаю, в свободном доступе таких APIшек нет. Но по опыту, если обратиться в более менее крупную службу, у них API будет
        • 0
          • 0
            Отлично! Можете организовать себе дополнительный канал за пару минут, или Евгений это сделает))
            • 0
              Сделать просто, сложнее потом заставить пользователей пользоваться этим ботом ))
      • +4
        Я работаю в ПриватБанке и модерирую бизнес-логику Приват24 с помощью Corezoid. Я не разработчик и не имею ни малейшего представления о коде.

        Да ну? :-D
        • +1
          Вот так всегда.
          • 0
            Помню приват в твиттере постил что-то типа «наш новый Corezoid лишит работы тысячи кодеров». Неужто правда получилось?
            • 0
              Ну, могу сказать на примере Приват24. Раньше сервис поддерживало 34 разработчика. После перехода на Corezoid осталось всего 4 разработчика + 8 бизнес аналитиков
              • 0
                А остальные разработчики переключились на разработку Corezoid? :)
                • 0
                  Не) Разработкой Corezoid занимаются отдельные инженеры. А разработчиков направили на вакантные места на других проектах, благо, в банке работы хватает)
                  • +1
                    То есть Приват24 уже не стоит приоритетом разработки? Вам бы нормального юзабилити дизайнера найти, интерфейс застрял в 2005 году
              • 0
                Вопрос по Corezoid. Я что-то не увидел нигде расценок… плохо смотрел?
                P.S. Sorry, ошибся веткой
                • 0
                  В самом низу на сайте corezoid.com написано. До 100 000 тактов в месяц — бесплатно. То есть зависит от размера процесса и нагрузки. Такт — переход из одного узла в другой. На этом примере переход из «new user» в «order» — это 1 такт.

                  • 0
                    Значит не заметил. Спасибо за информацию.
                • 0
                  Все как всегда. Разработку сокращают, зато увеличивается количество маркетологов, аналитиков, продукт менеджеров и тд. Куда делось сакральное значение слова «инженер».
                  • +1
                    А инженеры как раз и создали Corezoid, чтоб «простые смертные» смогли делать часть рутинной работы за них
            • 0
              эм где поменять надпись:

              Заказ такси для городов:
              Киев, Москва, Воронеж

              Отправляйте коордианты «Откуда» и «Куда»:
              иконка «Отправить» -> «Location»

              /order — Заказать такси
              /cancel — Отменить заказ.
              • 0
                В главном узле «TaxiBot — MAIN», после проверки команды /start, процесс отправляет инфу про бота. Там и меняем)

                • 0
                  отличн, нашел. пробую как клиент заказать, но все перестаёт работать на этапе координатов. Отсылаю координаты, а он пишет мол адрес не распознан.
                  • 0
                    Координаты надо передавать вот так

                    Входящие параметры:

                    location — объект, содержащий координаты, по которым нужно получить адрес: `{ «latitude»:«48.410530», «longitude»:«35.086102» }
                    Тогда все работает.

                    Проверь, у тебя так?
              • 0
                «Есть люди, которые легко могли бы программировать, но для которых это неприемлемо социально».

                В статье описывается разработка с помощью визуальных средств.
                • 0
                  rogalskiy это же офигительно! Давайте еще шаблонов!

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.