В день запуска ботов в 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)


  1. rogalskiy Автор
    30.07.2015 22:42

    Попробовал уже кто? Преимущество этого метода еще и в том, что бота не надо нигде хостить и париться про высокие нагрузки — все в облаке.


  1. Bubniv
    31.07.2015 00:15

    Подскажите, кто знает, какие API систем для заказа такси есть в свободном доступе?
    Знаю что у UBER есть API, но оно не позволяет работать с заказами, там только функционал для работы с приглашениями в систему.


    1. rogalskiy Автор
      31.07.2015 09:06
      +1

      Насколько я знаю, в свободном доступе таких APIшек нет. Но по опыту, если обратиться в более менее крупную службу, у них API будет


    1. asurovtsev
      31.07.2015 10:48

      1. rogalskiy Автор
        31.07.2015 10:53

        Отлично! Можете организовать себе дополнительный канал за пару минут, или Евгений это сделает))


        1. asurovtsev
          01.08.2015 14:56

          Сделать просто, сложнее потом заставить пользователей пользоваться этим ботом ))


          1. rogalskiy Автор
            01.08.2015 14:59

            Ну, это уже маркетинг)


  1. malice
    31.07.2015 02:38
    +4

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

    Да ну? :-D


    1. BuriK666
      31.07.2015 09:26
      +1

      Вот так всегда.


    1. vlreshet
      31.07.2015 09:41

      Помню приват в твиттере постил что-то типа «наш новый Corezoid лишит работы тысячи кодеров». Неужто правда получилось?


      1. rogalskiy Автор
        31.07.2015 10:09

        Ну, могу сказать на примере Приват24. Раньше сервис поддерживало 34 разработчика. После перехода на Corezoid осталось всего 4 разработчика + 8 бизнес аналитиков


        1. Magister7
          31.07.2015 11:22

          А остальные разработчики переключились на разработку Corezoid? :)


          1. rogalskiy Автор
            31.07.2015 11:25

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


            1. EvRiaL
              02.08.2015 11:47
              +1

              То есть Приват24 уже не стоит приоритетом разработки? Вам бы нормального юзабилити дизайнера найти, интерфейс застрял в 2005 году


              1. stasparshin
                14.08.2015 18:21

                вполне себе интерфейс


        1. Magister7
          31.07.2015 11:30

          Вопрос по Corezoid. Я что-то не увидел нигде расценок… плохо смотрел?
          P.S. Sorry, ошибся веткой


          1. rogalskiy Автор
            31.07.2015 11:41

            В самом низу на сайте corezoid.com написано. До 100 000 тактов в месяц — бесплатно. То есть зависит от размера процесса и нагрузки. Такт — переход из одного узла в другой. На этом примере переход из «new user» в «order» — это 1 такт.


            1. Magister7
              31.07.2015 12:20

              Значит не заметил. Спасибо за информацию.


        1. SonkoDmitry
          31.07.2015 16:54

          Все как всегда. Разработку сокращают, зато увеличивается количество маркетологов, аналитиков, продукт менеджеров и тд. Куда делось сакральное значение слова «инженер».


          1. rogalskiy Автор
            31.07.2015 17:59
            +1

            А инженеры как раз и создали Corezoid, чтоб «простые смертные» смогли делать часть рутинной работы за них


  1. mention
    02.08.2015 04:41

    эм где поменять надпись:

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

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

    /order — Заказать такси
    /cancel — Отменить заказ.


    1. rogalskiy Автор
      02.08.2015 09:27

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


      1. mention
        02.08.2015 14:37

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


        1. rogalskiy Автор
          03.08.2015 15:07

          Координаты надо передавать вот так

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

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

          Проверь, у тебя так?


  1. vabue
    03.08.2015 13:30

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

    В статье описывается разработка с помощью визуальных средств.


  1. stasparshin
    14.08.2015 18:26

    rogalskiy это же офигительно! Давайте еще шаблонов!


    1. rogalskiy Автор
      17.08.2015 09:37

      некоторые шаблоны доступны на сайте admin.corezoid.com/folder/conv/1833 и, конечно, в будующем буду собирать еще