Письмо в редакцию: История создания «Главбургера» — бота для Telegram, который ищет бургерные поблизости Статьи редакции

В редакцию ЦП пришло письмо от Дмитрия Сонько, руководителя команды разработки в компании Luuk, в котором он рассказал о процессе создания собственного бота для мессенджера Telegram под названием «Главбургер». Бот умеет находить бургерные неподалёку и ранжировать их по удалённости.

Привет читателям ЦП. На фоне всё большей популярности ботов для Telegram, я хочу рассказать про своё творение. «Главбургер» — telegram.me/GlavburgerBot — бот, который показывает, где неподалёку можно отведать бургеров.

Не так давно у меня была идея сделать агрегатор заведений, который знает всё про рестораны, где готовят бургеры. Бургеры я люблю, особенно хорошие. Потом анонсировали платформу для создания ботов, и я понял — вот оно, пора действовать. Изучив документацию по API ботов, я создал бота, задал ему имя, описание — и понеслось.

Использовать механизм веб-хуков или запрашивать обновления вручную

Раз бот должен взаимодействовать с пользователем интерактивно и быстро отвечать на его запросы, то ответ очевиден — веб-хук. Как уже было сказано, для функционирования хуков на сервере, где будет установлен обработчик, должен быть SSL-сертификат. На помощь пришел StartSSL и статьи с «Хабрахабра» о его получении, чего вполне достаточно для работы.

Где брать данные для выдачи

На помощь пришла компания «Яндекс» в лице менеджера проектов Ксении Аникеевой и их замечательный API«Карт». Бот ищет заведения в базе, и если результатов недостаточно, обращается за помощью к «Яндексу» и дополняет результаты выдачи.

Результаты выдачи

Получить одно заведение — хорошо, а получить несколько с возрастанием по удалённости — куда лучше.

После того, как человек отправляет боту свою геолокацию, бэкенд делает запрос в базе данных с координатами, ограничивает выборку радиусом в два километра. Если в результат попало меньше десяти заведений, делает поиск по «Яндексу», дополняет выборку, сортирует по удалённости и выводит первое заведение.

Кроме того, бот определяет расстояние до заведения и, учитывая среднюю скорость пешего человека, рассчитывает время ходьбы до него. Используя другой API «Яндекса» для генерации статических карт, мы создаём изображения с двумя точками — точкой местоположения пользователя и местоположением заведения. Через собственный «сокращатель» ссылок генерируем ссылку на «Яндекс.Карты» с уже выбранным заведением для получения большей информации о ресторане.

Соответственно, пока в результате поиска есть заведения, человек может отправить команду /more и получать следующие позиции.

Немного технических подробностей

Я давно хотел попробовать платформу Jelastic Сloud. Бот размещен на ней, удобно сделаны правила для вертикального и горизонтального масштабирования системы.

В качестве базы данных используется PostrgeSQL с расширением PostGIS для удобной работы с геоданными.

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

MongoDB используется для хранения «сырых» данных, получаемых от «Яндекса» и Telegram, результатов отправки сообщений. Помогает быстро строить необходимую аналитику и, в случае необходимости, перестраивать формат базы данных без необходимости делать новые запросы.

В результате работы был написан небольшой враппер (wrapper, программа, которая из себя вызывает одну или несколько других программ — прим. ред.) для фреймворка Yii2, позволяющий быстро подключить функциональность отправки сообщений.

Эпилог

Разработка бота от первого коммита в репозитории до его представления публике заняла почти месяц вечеров. Сначала обработка хуков, потом изучение матчасти по геокодированию, вычислению длин градусов долготы и широты, переводу их в километры на плоскости и обратно. Парсинг результатов «Яндекса», формирование выдачи, её сортировка, опять геокодирование.

На мой взгляд, бот получился довольно полезный и интересный, как минимум для меня, с точки зрения новых технологий и подходов. Сама платформа для ботов однозначно будет развиваться, потенциала у неё много, но пока это больше игрушка для гиков, нежели новое средство ведения бизнеса.

На ум приходит пачка потенциальных решений, от вызова такси и заказа еды на дом до реализации неких систем технической поддержки а-ля Jivosite (на «Хабрахабре» уже есть статья про это). Наблюдать за её развитием я буду точно, друзья и знакомые уже постоянно предлагают идеи новых ботов. Буду рад любому фидбэку по боту, советы, замечания, предложения. Рассмотрено будет всё.

Отдельное спасибо редакции ЦП. Прошлая моя публикация на «Бирже труда» помогла мне найти интересную работу в крутой компании.

0
45 комментариев
Написать комментарий...
Александр Зеленин

статьи про "создание бота на телеграме" похожи как одна - пересказ статьи на хабре, разбавленный своими целями создания бота. Порог входа настолько низкий, что создать бота может каждый.
А вот придумать действительно интересного бота трудно. Больше половины ботов уровня "еще одна сущность вместо поисковой выдачи/еще один способ получения новостей". "Потому что могу".
Если что, данный бот кинул мне ссылку на ближайший Макдональдс. Фейспалм. Ждем следующих статей, в которых слово "гамбургерная" заменено на "бар", "блинная", "скамейка", "театр/кинотеатр", "парк", "фонтан", "супермаркет".

Ответить
Развернуть ветку
Дмитрий Сонько

Именно потому, что "порог входа настолько низкий", люди создают ботов. Правда странно? Особенно странно, что пытаются популяризировать использование платформы опять-же из-за того, что порог входа настолько низкий. Больше ботов = больше разработчиков = интереснее решения = больше клиентов.

Ответить
Развернуть ветку
Александр Зеленин

да не странно что создают. Странно, что об этом пишутся статьи. "Письмо в редакцию: Как я создал свою первую страницу на html". Просто надо адекватно смотреть на вещи. Перефразирую фразу Армстронга: то, что является большим шагом для человека, является маленьким шажком для человечества.
Без шуток: бот из статьи пишется за два(!) часа. А если постараться/поспорить на деньги, то можно и за полчаса все сделать. То есть в создании бота нет ни технической ценности, ни практической.

Ответить
Развернуть ветку
Дмитрий Сонько

Я рад за вас и Армстронга, что еще сказать. Но именно благодарю таким маленьким шагам и их примерам и идет развитие в целом. Фразы типа "это каждый школьник может сделать за полчаса" тут не совсем уместно, ибо кто-то делает, а кто-то только говорит. Удачи!

Ответить
Развернуть ветку
Александр Зеленин

а, это вы автор :-) ок. Оставляю за вами право отстаивать свое детище. Только ведите диалог в корректном, конструктивном ключе, ибо фразы типа "кто-то делает, а кто-то только говорит. Удачи!" - это фразы обиды, поскольку в них видится намек на "сделай сам", "чего добился ты" и "давай до свидания".

Ответить
Развернуть ветку
Дмитрий Сонько

Я приму к сведению ваше замечание.

Ответить
Развернуть ветку

Комментарий удален модератором

Развернуть ветку

Комментарий удален модератором

Развернуть ветку
Светочка Алексеева

Все круто, но зачем это здесь?

Ответить
Развернуть ветку
Тревожный лолипоп

Бот - это прекрасно. Но можно же установить Фламп и найти бургерные хоть поблизости, хоть по рейтингу, хоть в районе Чертаново. Смузи, к сожалению, не ищет.

Ответить
Развернуть ветку
Pavel Doronin

На самом деле идея ботов прекрасна тем, что ленивому пользователю не нужно ничего устанавливать и не покидать приложения с друзьями и коллегами. Можно сократить количество нажатий пальцем до получения нужной информации. А у некоторых ботов можно спросить информацию относительно человеческим языком, как если бы это был ещё один контакт в листе (который знает ответы на все вопросы в рамках компетенции) — например, бот ImageSearch у Яндекса (Павел Дуров приводил пример его работы в твиттере: запросы Pavel Durov и Happy Pavel Durov). Мне недавно нужно было показать другу, как выглядит нужный мне переходник, я просто перешёл в другой чат, попросил у бота Яндекса картинку и тут же переслал её другу. В другом сценарии я бы открыл браузер, ввеёл там запрос, дождался выдачи, сохранил картинку, открыл Telegram и прикрепил бы её к чату. Тут всё вышло быстрее. Возможности создавать ботов всего полтора месяца, а она уже позволяет такие эксперименты, что я чую, через год это может стать новым революционным путём получения информации.

Ответить
Развернуть ветку

Комментарий удален модератором

Развернуть ветку
Pavel Doronin

Кирилл, я бы не торопился с «пфф». Я тоже застал этих ботов (и погоду, и курсы валют). Никто и не говорит, что идея новая. Просто тогда, когда эта идея появилась, особых инструментов для её использования не было: ICQ Light, mIRC и мультипротокольная Miranda? Давайте посмотрим немного шире. Сейчас боты дают нам совсем другие возможности:
Во-первых, они работают в мобильной парадигме. То есть, могут доставлять контент прямо нам в карман, прямо в руку (а также в часы и в очки).
Во-вторых, сегодня боты работают с медиа-контентом и геолокацией. Ещё пара-тройка месяцев и они смогут работать с голосом и камерой. С развитием носимых устройств боты смогут работать и с другими параметрами, получаемыми датчиками.
В-третьих, возможности обработки запросов на стороне сервера сейчас намного богаче: всё идёт к тому, что запросы можно будет отправлять не в специально подготовленных для бота командах, а на живом человеческом языке (возможно, с обучением индивидуальным языковым привычкам).

С точки зрения новостной ленты в пределах недели, статья про «Главбургер» или ImageBot Яндекса не так впечатляет. Но с точки зрения общего развития платформы ботов, я считаю, это важные шаги.

Ответить
Развернуть ветку

Комментарий удален модератором

Развернуть ветку
Дмитрий Сонько

Если будет спрос у пользователей - можно доработать. И рейтинг по флампу/афише/етк и поиск смузи в Чертаново.

Ответить
Развернуть ветку
Alexander Shakun

А где исходнички то можно посмотреть?

Ответить
Развернуть ветку
Ст

Интересно)

Ответить
Развернуть ветку
eden lane

Решение с Хабра - отвратительное. История валится в одну кучу, менеджеру приходится в пределах одного окна вести диалог с несколькими клиентами - уверен, что ситуации "Извините, это не вам" будут не редки.
Телеграм API для ботов - это отличный молоток, но не надо всем видеть гвозди.

Ответить
Развернуть ветку
Олег Карнаухов

Зачем менеджеру сидеть через телеграм?) менеджер имеет веб-интерфейс где у него отдельные диалоги. А вот у клиента уже один чат.

Ответить
Развернуть ветку
eden lane

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

Ответить
Развернуть ветку
Дмитрий Сонько

В чем проблема сделать виджет? Клиент пишет в чат на сайте, бэкенд смотрит какой из ботов сейчас свободен. Если свободных ботов нет, создает нового. Отправляет от имени главного бота сообщение менеджеру мол "Николай. Вам новое сообщение от клиента с сайта. Установите контакт с ботом @support452bot для начала диалога" Николай пишет боту старт, ему приходят сообщения с сайта. В ответ он пишет боту, хук это ловит и отправляет сообщения на сайт. Вся проблема была именно в том, что в рамках одного диалога менеджеру придется вести энное количество клиентов, что не совсем удобно.

Ответить
Развернуть ветку
eden lane

Про виджет было к другому комментарию - про то, что менеджеры сидят через веб-интерфейс, а операторы - через оф. клиенты.

Если свободных ботов нет, создает нового.

Ну вот вы правда считатее, что это нормальная практика - писать бота для создания ботов ? Есть уверенность, что телеграм не будет банить за такое поведение ?

Ответить
Развернуть ветку
Дмитрий Сонько

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

Ответить
Развернуть ветку
Дмитрий Сонько

У нас была идея реализации подобного в одном из наших сервисов, но столкнулись с той-же кучей сообщений. Задал вопрос поддержке телеграма, можно ли реализовать авто создание ботов, под каждого нового написавшего свой бот. Тогда это избавило бы от многих проблем, но поддержка ответила решительным нет. Создание ботов только руками и создание через другого бота (бот пишет botfather) тоже невозможно. Для небольшой компании можно конечно руками сгенерировать себе ботов и использовать их. Когда все заняты показывать на сайте сообщение вида "все операторы заняты". Для небольшого проекта 10-20 ботов думаю будет вполне достаточно.

Ответить
Развернуть ветку
Александр Зеленин

можно юзать telegram-cli для того, что не может бот.

Ответить
Развернуть ветку
Дмитрий Сонько

В любом случае, нужно самому регистрировать телеграм аккаунты. Основная проблема в этом. Дабы не было мусора в чате, должна быть схема 1 пользователь сайта - 1 бот (или телеграм аккаунт) - менеджер. Чтобы в одном чате у менеджера был один пользователь, а не десять.

Ответить
Развернуть ветку
Александр Зеленин

я уже не помню - регистрация бота требует человеческого вмешательства, которого не сможет выполнить автомат? telegram-cli же это полноценный клиент, а, значит, сам сможет пообщаться с BotFather.

Ответить
Развернуть ветку
Дмитрий Сонько

Хмм, кстати довольно интересный вариант. Обязательно попробуем!

Ответить
Развернуть ветку
eden lane

Ну что же вы делаете, остановитесь. Не предназначен Телеграм для подобного.
Учитывая потребность, вполне вероятно, что в одной из следующих версий проработают и это, но пока все вот эти придумки - жуткие костыли.

Ответить
Развернуть ветку

Комментарий удален модератором

Развернуть ветку
Fucking Zyrg

как называется ваш бот?

Ответить
Развернуть ветку
Валерий Балашенко

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

Ответить
Развернуть ветку
Pavel Doronin

Отличный бот. Удобно, что распознаёт «еще» и «ещё», но я бы сделал кнопку с такой функцией, чтобы не набирать каждый раз это слово. Либо выдавать другой вариант при получении эмодзи с бургером 🍔 (а при получении мороженого или суши адаптировать выдачу)

Ответить
Развернуть ветку
Дмитрий Сонько

С кнопкой быстрого ответа я промахнулся да, сделаю! Промахнулся еще с одним. Botan.io на днях открыли доступ к платформе, принял участие в написании пхп сдк https://github.com/botanio/sdk к нему и забыл у себя его вставить 😞Сегодня плюс 160 новых пользователей у бота, а я их не трекаю😢

Ответить
Развернуть ветку
Александр Зеленин

честно говоря, не понял сути ботана. Я правильно понимаю, что это просто логгер с оберткой на базе appmetrics?

Ответить
Развернуть ветку
Дмитрий Сонько

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

Ответить
Развернуть ветку
anntttoooonnnnn

как определяется геолокация пользователей?

Ответить
Развернуть ветку
Иван Головин

Что за ад "отправьте свою геолокацию"? Что я должен отправить, в каком виде и откуда я должен это узнать?

Ответить
Развернуть ветку
Иван Головин

Поясняю: это имеенно то, что мне ответил этот бот при попытке им воспользоваться :-(

Ответить
Развернуть ветку
Александр Зеленин

на мобильном устройстве можно отправить location из того же меню, где вы шлете картинки или видео.

Ответить
Развернуть ветку
Дмитрий Сонько

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

Ответить
Развернуть ветку
Иван Головин

Достаточно будет написать в сообщении бота ровно то, что было написано в предыдущем комменте, и проблемы не будет :-) но кто вам сказал, что в Upside Down Cake есть бургеры?! :-)

Ответить
Развернуть ветку
Дмитрий Сонько

Так говорит Яндекс. На текущий момент база его.
Насчет предыдущего сообщения не совсем понял, что именно достаточно написать?

Ответить
Развернуть ветку
Иван Головин

"свое местонахождение (а не "геолокацию"!) можно отправить из того же меню, из которого вы прикрепляете картинки"

Ответить
Развернуть ветку
Иван Головин

и да, учитывайте, что одно из важных преимуществ телеграма - то, что им можно пользоваться с десктопа :-) и многие, поверьте, это делают

Ответить
Развернуть ветку
Дмитрий Сонько

Готово. Насчет версий с десктопа, буду добавлять распознавание адреса и перевод его в координаты

Ответить
Развернуть ветку
Иван Головин

dadata.ru может вам в этом помочь

Ответить
Развернуть ветку
Дмитрий Сонько

В курсе про этом сервис, но мне больше нравится геокодер от яндекса

Ответить
Развернуть ветку

Комментарий удален модератором

Развернуть ветку
Бизнес Механика

"Бот хеджирующий бургерные по геолокации"- программный код ищущий в другом программном коде координаты заведений где продают бутерброды.

Ответить
Развернуть ветку
Дмитрий Сонько

Я думаю тут более правильная формулировка "проксирующий", хеджирование все таки несколько иное понятие

Ответить
Развернуть ветку
Читать все 45 комментариев
null