[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "create", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-158433683", "adfox_url": "//ads.adfox.ru/228129/getCode?p1=bxbwd&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid21=&puid22=&puid31=&fmt=1&pr=" } } ]
{ "author_name": "Daria Khokhlova", "author_type": "self", "tags": ["\u0431\u043e\u0442\u044b","telegram","\u0431\u043e\u0442\u044b_telegram","\u0431\u043e\u0442\u044b_\u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c","\u0431\u043e\u0442\u044b_\u0434\u043b\u044f_\u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c","\u043f\u043e\u0438\u0441\u043a_\u0431\u0443\u0440\u0433\u0435\u0440\u043e\u0432","\u0433\u043b\u0430\u0432\u0431\u0443\u0440\u0433\u0435\u0440"], "comments": 51, "likes": 13, "favorites": 7, "is_advertisement": false, "section_name": "default", "id": "9823" }
Daria Khokhlova
4 265

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Эпилог

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

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

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

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

#боты #Telegram #боты_telegram #боты_телеграм #боты_для_телеграм #поиск_бургеров #главбургер

Статьи по теме
Письмо в редакцию: Как я за один день сделал игрового бота для Telegram
20 примечательных «умных» ботов для Telegram: игры, работа, общение
18 бизнес-ботов для Telegram: финансы, путешествия, языки
Популярные материалы
Показать еще
{ "is_needs_advanced_access": false }

Комментарии Комм.

0 новых

Популярные

По порядку

Прямой эфир

Голосовой помощник выкупил
компанию-создателя
Подписаться на push-уведомления