А когда цена на такси упадет: Телеграм бот для отслеживания стоимости поездки

Taxi Watcher - Promo
Taxi Watcher - Promo

О чем статья?

Я бы хотел рассказать о своем опыте написания чат-ботов в Телеграм.

Однажды летом я сидел и думал: что такого можно написать для решения какой-либо задачи? Да и вообще, каким проектом себя занять? Хотелось создать решение не только для себя, но и для других пользователей.

И вот, мой взор пал на разработку Телеграм бота на Python.

Предыстория

Начинал вливаться в программирование пару лет назад, и начинал с Python. Затем верстал сайты, пробовал мобильные приложения, а в универе пишу C#.

Верстка сайтов показалась прикольной вначале, но я так и не смог втянуться. Мобильные приложения попробовал и понял, что тоже – не мое. C# классный язык для понимания алгоритмов и в целом того, как нужно программировать, но делать что-то на нем… идея однозначно отпала.

Иронично, что по итогу я выбрал тот язык, с которого начинал – Python. Он показался мне более масштабным, чем вышеперечисленные, ведь он есть буквально везде: от web-разработки серверной части, до геймдева.

Но все же, мой взор пал на разработку Телеграм бота. Это показалось совсем новым для меня, а Taxi Watcher – моим первым ботом (но о нем позже).

Боты в Телеграм – великолепное решение! Одна платформа, и столько выбора: куча тг-каналов, самые разные боты, ну и мессенджер, в конце концов. Главное – аудитория есть, и ее много.

Ниша выбрана, а что писать то?

Мне давно интересно было развернуть какой-либо проект на сервере, управлять пользовательскими данными при помощи структур, анализировать действия пользователя и т. д.

И вот, прилетает идея: мол, а что, если сделать бота, который бы отслеживал стоимость поездки на Яндекс Такси? Начал гуглить, нашел API, написал базовый скрипт и… он заработал! Так я и начал оборачивать этот скрипт в обертку – в бот.

Сущность Taxi Watcher

Бот отследит стоимость поездки на такси и уведомит, как только цена упадет до заданного лимита.

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

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

Взаимодействие с ботом

Действия на старте
Действия на старте

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

Отправка геопозиции
Отправка геопозиции

Нажав «Отправить точку отправления», пользователь отправляет геопозицию прямо из Телеграм.

Затем то же самое делает для точки назначения (просто перемещая точку).

Важно:

Адреса не хранятся в постоянной памяти и могут быть очищены пользователем принудительно. Оно никуда не передаются, кроме как для построения маршрута.

Дополнительно я добавил короткий видос с тем, как это сделать (ну что прям точно разобрался).

Выбор тарифа
Выбор тарифа

Подбор тарифа происходит таким образом: сначала идет отправка к другому API для получения информации о доступных тарифах в регионе, формируется ответ и отображаются доступные. Если тарифов нет, бот скажет об этом.

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

Информация о поездке
Информация о поездке

Затем заполняется шаблон картинки с информацией о поездке.

Стоимость достигла лимита
Стоимость достигла лимита

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

Не всегда цена в ответе Yandex API совпадает с тем, что в приложении, поэтому я добавил ссылку «Другая цена», которая ведет на страницу с часто задаваемыми вопросами, где описаны возможные причины этого.

Кнопки

Кнопки
Кнопки

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

Момент, когда пользователь начал отслеживание
Момент, когда пользователь начал отслеживание

Их появление подстраивается под пользователя и всплывают только тогда, когда они нужны.

Вот основные:

  • Установка лимита и адреса предлагается только в том случае, если они еще не были установлены
  • При нажатии на «Статус отслеживания» отображается статус: отслеживается или нет, а также текущая стоимость поездки на данный момент
  • Если есть кнопка «Очистить данные» (или «Очистить отслеживаемые данные»), то есть данные об адресах, лимите и тарифе, которые оставлял пользователь

Дизайн

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

Изображение на старте и информации о поездке
Изображение на старте и информации о поездке

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

Резюме

Мне будет интересно услышать мнение о проекте, возможные улучшения и в целом оценку его перспективы, так что делитесь ими в комментариях :)

Бот доступен тут.

Ссылки

Документация (для пользователя)

1515
15 комментариев

Интересная задумка. Как вариант, можно ещё предупреждать пользователя о маловероятных ценах. То есть, если человек установил, что хочет уехать на бизнесе за 200 руб., бот мог бы сразу написать, что, статистически, такая цена маловероятна и следует повысить планку.

2
Ответить

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

1
Ответить

Это вообще прикольная задумка

1
Ответить

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

1
Ответить

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

Ответить

Это крутой бот, который использует Гугл карты для построения маршрута на Я.Такси))

1
Ответить

Бот не использует Гугл карты.

Ответить