А когда цена на такси упадет: Телеграм бот для отслеживания стоимости поездки
О чем статья?
Я бы хотел рассказать о своем опыте написания чат-ботов в Телеграм.
Однажды летом я сидел и думал: что такого можно написать для решения какой-либо задачи? Да и вообще, каким проектом себя занять? Хотелось создать решение не только для себя, но и для других пользователей.
И вот, мой взор пал на разработку Телеграм бота на Python.
Предыстория
Начинал вливаться в программирование пару лет назад, и начинал с Python. Затем верстал сайты, пробовал мобильные приложения, а в универе пишу C#.
Верстка сайтов показалась прикольной вначале, но я так и не смог втянуться. Мобильные приложения попробовал и понял, что тоже – не мое. C# классный язык для понимания алгоритмов и в целом того, как нужно программировать, но делать что-то на нем… идея однозначно отпала.
Иронично, что по итогу я выбрал тот язык, с которого начинал – Python. Он показался мне более масштабным, чем вышеперечисленные, ведь он есть буквально везде: от web-разработки серверной части, до геймдева.
Но все же, мой взор пал на разработку Телеграм бота. Это показалось совсем новым для меня, а Taxi Watcher – моим первым ботом (но о нем позже).
Боты в Телеграм – великолепное решение! Одна платформа, и столько выбора: куча тг-каналов, самые разные боты, ну и мессенджер, в конце концов. Главное – аудитория есть, и ее много.
Ниша выбрана, а что писать то?
Мне давно интересно было развернуть какой-либо проект на сервере, управлять пользовательскими данными при помощи структур, анализировать действия пользователя и т. д.
И вот, прилетает идея: мол, а что, если сделать бота, который бы отслеживал стоимость поездки на Яндекс Такси? Начал гуглить, нашел API, написал базовый скрипт и… он заработал! Так я и начал оборачивать этот скрипт в обертку – в бот.
Сущность Taxi Watcher
Бот отследит стоимость поездки на такси и уведомит, как только цена упадет до заданного лимита.
Пользователь задает лимит поездки, за который хочет уехать, затем устанавливает адреса поездки: откуда и куда, прямо через геопозицию в Телеграм. Процесс отслеживания начинается сразу.
Также я написал инструкцию, где чуть подробнее расписан гайд по использованию, а также сделал еще более подробную и поместил в «Часто задаваемые вопросы».
Взаимодействие с ботом
Нажимая «Начать», пользователь сразу видит короткое описание бота, и как взаимодействовать с ним. Ах, сколько раз я переписывал стартовое сообщение в надежде сделать его простым и доступным. Надеюсь, у меня это действительно получилось.
Нажав «Отправить точку отправления», пользователь отправляет геопозицию прямо из Телеграм.
Затем то же самое делает для точки назначения (просто перемещая точку).
Важно:
Адреса не хранятся в постоянной памяти и могут быть очищены пользователем принудительно. Оно никуда не передаются, кроме как для построения маршрута.
Дополнительно я добавил короткий видос с тем, как это сделать (ну что прям точно разобрался).
Подбор тарифа происходит таким образом: сначала идет отправка к другому API для получения информации о доступных тарифах в регионе, формируется ответ и отображаются доступные. Если тарифов нет, бот скажет об этом.
Также, я сформировал список ошибок, которые могут возникнуть, и там же варианты решения.
Затем заполняется шаблон картинки с информацией о поездке.
И вот, как только стоимость упадет, бот пришлет такое уведомление. Сразу со сформированной ссылкой для перехода в приложение, с уже заданными адресами.
Не всегда цена в ответе Yandex API совпадает с тем, что в приложении, поэтому я добавил ссылку «Другая цена», которая ведет на страницу с часто задаваемыми вопросами, где описаны возможные причины этого.
Кнопки
Отдельного внимания (я считаю) заслуживают кнопки-подсказки. Я их сделал логичными, удобными и нужными. Например, как только стоимость упадет, появятся кнопки с предложением переустановить адрес и лимит, а также возможность просмотреть данные, которые оставил пользователь (адреса, заданный лимит и выбранный тариф).
Их появление подстраивается под пользователя и всплывают только тогда, когда они нужны.
Вот основные:
- Установка лимита и адреса предлагается только в том случае, если они еще не были установлены
- При нажатии на «Статус отслеживания» отображается статус: отслеживается или нет, а также текущая стоимость поездки на данный момент
- Если есть кнопка «Очистить данные» (или «Очистить отслеживаемые данные»), то есть данные об адресах, лимите и тарифе, которые оставлял пользователь
Дизайн
Сначала это был просто бот, ответы которого формировались чисто текстом. Но потом я подумал: ведь можно сделать немного красивее, добавив картинки.
Также мне было просто в прикол делать промо, в который я накидал свои дизайнерские наработки. Возможно, это не вышло так стильно, как это можно было бы сделать (потому что нет единого дизайн-кода, в принципе дизайнерского подхода как такового), но тем не менее: мне понравилось дизайнить, и это клево.
Резюме
Мне будет интересно услышать мнение о проекте, возможные улучшения и в целом оценку его перспективы, так что делитесь ими в комментариях :)
Бот доступен тут.
Ссылки
Документация (для пользователя)
Интересная задумка. Как вариант, можно ещё предупреждать пользователя о маловероятных ценах. То есть, если человек установил, что хочет уехать на бизнесе за 200 руб., бот мог бы сразу написать, что, статистически, такая цена маловероятна и следует повысить планку.
Да, это действительно хорошая идея и, отчасти, это уже реализовано. Яндекс API возвращает минимальную стоимость по этому маршруту и бот уведомляет, что стоимость может не достигнуть лимита
Предложил бы функционал графика цены по времени дня/неделе. Но тут надо задать адрес а потом копить стату, иначе надо пылесосить все данные с Яндекса :)
Например, я езжу в офис и обратно - в какое время самая низкая цена и когда она начинает расти? Может быть мне уезжать раньше или позже, чтобы сэкономить
Это вообще прикольная задумка
Придерусь, вот я собрался куда-то ехать - я понятия не имею, сколько это стоит. Логичней сначала задать точки, получить текущую и минимальную цены, а потом задать свою.
Логичным действием в этом случае будет открыть приложение для вызова такси и заказать поездку. Так и узнаёте сколько она будет стоить, возможно цена вас устроит, и необходимости использовать бота не будет