Как стать автором
Обновить
301.21
Альфа-Банк
Лучший мобильный банк по версии Markswebb

Мне 34, я был в 67 странах, и у меня есть для вас лайфхак (часть 2)

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров56K

Это не опечатка. Фото из последней поездки есть на обложке статьи. С момента написания прошлой статьи — за 2 месяца, я успел совершить большой тур по США и Мексике благодаря своему боту (на моём месте могли быть и вы). Так что в первую очередь почитайте о боте в первой части «Мне 34, я был в 65 странах и у меня есть для вас лайфхак».

Как я сел в лужу, но поднялся и переписал бота

Для понимания контекста сначала поделюсь, как выглядят сообщения после подписки через мой Telegram-бот:

Я сгенерировал ещё раз подписку на билеты в Нью-Йорк и нашёл рейс, которым я летел в США. Тогда бот выглядел по-другому, но сообщение из канала реальное
Я сгенерировал ещё раз подписку на билеты в Нью-Йорк и нашёл рейс, которым я летел в США. Тогда бот выглядел по-другому, но сообщение из канала реальное

Моя ошибка номер один — я не учёл антиспам-блокировками Telegram.

Когда в бот начали приходить пользователи, оказалось, что сообщения по клиентскому протоколу MtProto можно отправлять с интервалом, иначе отправку сообщений блокируют на несколько минут (на сколько времени точно — тоже неизвестно). Соответственно, пользователи начали жаловаться, что кому‑то доходят сообщения, а кому‑то нет.

Решением этой проблемы стало архитектурное — теперь Python-часть приложения отвечает только за чтение, а пересылает сообщения Telegram-бот. Из-за этого появилась вторая проблема.

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

create table subscriptions (
    subscription_id serial primary key,
    subscriber varchar not null,
    subscription varchar not null,
    keyword varchar not null,
    unique(subscriber, subscription, keyword)
)

Чем плох подход с таким кодом:

  • Subscriber должен быть отдельной сущностью, так как в итоге нам для общения с ботом нужно хранить ещё Telegram Chat ID. Да и, вероятно, появятся ещё характеристики, например, заблокированный юзер, возможно, какие-то платные функции или что-то подобное.

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

  • Keyword, как ни странно, тоже сущность. Она уже напрашивалась, когда я добавил возможность искать по двум словам, указав их через пробел. Чуть позже напишу, какие идеи появились для расширения keyword.

Дополнительная проблема, которая вытекает из первой — я не собирал Telegram Chat ID, чтобы пересылкой сообщений занимался бот.

По логину через bot API нельзя отправлять сообщения. Это нужно, чтобы бот мог писать только тем, кто ему уже писал. Для этого пришлось сделать отдельную команду, запоминающую Telegram Chat ID.

Если вы пользуетесь чатом из моей первой статьи, перейдите на версию 2.0
Если вы пользуетесь чатом из моей первой статьи, перейдите на версию 2.0

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

Новый процесс создания подписки на рассылки от бота по ключевым словам
Новый процесс создания подписки на рассылки от бота по ключевым словам

Выводы, которые я сделал из ошибок в боте

  • Даже в пет-проекте хорошо подумайте над моделями в приложении.

  • Если работаете с внешней системой, хорошо её протестируйте на разные варианты использований, в том числе под нагрузкой.

Киллер-фичи из версии 2.0

Как я уже рассказывал, я использую бот для путешествий и поиска билетов. И если уже сейчас у меня запросы в духе «а не поехать ли мне в самостоятельный тур по Кении, Танзании и Эфиопии», то в разные моменты жизни у меня были другие запросы. Например, год назад я страдал от разбитого сердца и хотел поехать куда угодно за сумму не больше 40 000 рублей (просто развеяться). Лет 5 назад я работал в компании, где отпуск строго согласовывался заранее, и мой запрос был — полететь куда‑нибудь в январе.

Мой бот для этого мало подходит, потому что есть поиск только по ключевым словам. А сумма и дата — вещь гибкая. Поэтому я добавил поиск по сумме (даты по тексту оказалось совсем нетривиально искать — ещё покумекаю и попробую доработать этот момент).

Вот как теперь можно поискать что угодно по сумме:

Ищем билеты по максимальной сумме в Telegram-канале
Ищем билеты по максимальной сумме в Telegram-канале

Ещё я добавил команду /changelog, чтобы можно было посмотреть, что нового появилось:

Удобный способ посмотреть список обновлений бота
Удобный способ посмотреть список обновлений бота

Как люди ищут в боте Dyson, сантехника и мометы футбольных матчей

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

  • Стажировки, курсы, вакансии и обучение

  • Билеты на концерты (на конкретный концерт или по исполнителю)

  • Вещи с барахолок (привет, Dyson, но не только — ищут Apple, Oculus и т. д.)

  • Квартиры или услуги для релокантов

  • Моменты во время трансляции спортивного матча

  • Скидки и распродажи

И для визуалов я выгрузил из моего бота рейтинг Telegram-каналов по количеству подписок на них:

Путешествия и правда на первом месте, следом идёт тематика барахолок и (неожиданно) кастинги и крипта
Путешествия и правда на первом месте, следом идёт тематика барахолок и (неожиданно) кастинги и крипта
Ещё пользователи мониторят вакансии всех видов, секретики из IT и мира финансов
Ещё пользователи мониторят вакансии всех видов, секретики из IT и мира финансов
Здесь этот же список текстом (ну вдруг захотите вступить или настроить бот)

Название группы

Описание

samokatus (https://t.me/samokatus)

Группа для поиска авиабилетов и отелей

vandroukiru (https://t.me/vandroukiru)

Группа о путешествиях и выгодных предложениях для путешественников

baraholka_ge (https://t.me/baraholka_ge)

Барахолка для пользователей из Грузии

travelradar (https://t.me/travelradar)

Канал для путешественников о путешествиях

baraholka_batumi_home (https://t.me/baraholka_batumi_home)

Барахолка для аренды и продажи недвижимости в Батуми

piratesru (https://t.me/piratesru)

Выгодные предложения и скидки на авиабилеты и туры

loukoster_com (https://t.me/loukoster_com)

Информация о лоукостерах и дешёвых авиабилетах

vandrouki_ru (https://t.me/vandrouki_ru)

Российская версия группы о выгодных предложениях и путешествиях

fly2trip (https://t.me/fly2trip)

Полезные советы и лайфхаки для путешественников

ticketskz (https://t.me/ticketskz)

Выгодные предложения на билеты в Казахстане

aero_tur (https://t.me/aero_tur)

Туры и авиабилеты по выгодным ценам

vandroukikz (https://t.me/vandroukikz)

Группа о путешествиях и выгодных предложениях для Казахстана

aviatickets_kz (https://t.me/aviatickets_kz)

Авиабилеты по выгодным ценам в Казахстане

charterticketsme (https://t.me/charterticketsme)

Предложения на чартерные рейсы и авиабилеты

hotprice (https://t.me/hotprice)

Горящие предложения и скидки на разные товары и услуги

halyavshikitravel (https://t.me/halyavshikitravel)

Бесплатные и супервыгодные предложения для любителей путешествовать

nachemodanah (https://t.me/nachemodanah)

Канал выгодных туров, билетов и предложений для путешествий

rabotakastingi (https://t.me/rabotakastingi)

Предложения о работе и кастинги

travel_from_siberia (https://t.me/travelfromsiberia)

Путешествия и туры из Сибири

tbank_education (https://t.me/tbankeducation)

Образование и курсы

p2plightning (https://t.me/p2plightning)

Группа для обсуждения P2P и криптовалютных технологий

aviasales_uz (https://t.me/aviasales_uz)

Предложения на авиабилеты в Узбекистане

charteraviabilet (https://t.me/charteraviabilet)

Чартерные рейсы и авиабилеты

balichatmarket (https://t.me/balichatmarket)

Рынок и барахолка для пользователей из Бали

aaaviasaleskz (https://t.me/aaaviasaleskz)

Авиабилеты по выгодным ценам в Казахстане

myeventhunters (https://t.me/myeventhunters)

Организация мероприятий и охота за выгодными билетами на мероприятия

step2traveltours (https://t.me/step2traveltours)

Туристические предложения и туры

westwindcap (https://t.me/westwindcap)

Инвестиции и финансовые консультации

eventhuntertalk (https://t.me/eventhuntertalk)

Общение и обсуждение мероприятий

pepperru (https://t.me/pepperru)

Скидки и акции на различные товары и услуги

luckywings (https://t.me/luckywings)

Выгодные авиабилеты и туры

biletnizhniynovgorod (https://t.me/biletnizhniynovgorod)

Выгодные предложения на билеты в Нижнем Новгороде

nerdsmedia (https://t.me/nerdsmedia)

Медиа, технологии и IT новости

gogetajob (https://t.me/gogetajob)

Предложения работы и вакансии

ezmoddev (https://t.me/ezmoddev)

Обсуждение разработки и программирования

travel_tema (https://t.me/travel_tema)

Темы, советы и новости для путешественников

alikzbs_aliexpress (https://t.me/alikzbs_aliexpress)

Выгодные предложения и скидки на AliExpress в Казахстане

fa_electronics (https://t.me/fa_electronics)

Электроника и гаджеты

travelbelka (https://t.me/travelbelka)

Путешествия и выгодные предложения на туры

slivaker_it (https://t.me/slivaker_it)

Секреты и инсайды из мира IT

onlinetour (https://t.me/onlinetour)

Онлайн-туры и виртуальные путешествия

vandroukitours (https://t.me/vandroukitours)

Путешествия и туры по всему миру

travelsandal (https://t.me/travelsandal)

Туристические предложения и лайфхаки для путешествий

bombila_dpr (https://t.me/bombila_dpr)

Вакансии и предложения о работе для водителей (бомбил) в Донецкой Народной Республике

Вы тоже можете развить вашу фантазию и найти свой вариант применения бота.

Ещё ко мне пришёл человек за сотрудничеством на тему аналитики брендов. Ему хотелось в профильных группах реагировать на комментарии, относящиеся к конкретной компании, то есть сделать аналог Brand analytics. Так что бизнес‑кейсы применения моего бота тоже возможны.

Какие ещё фичи я планирую добавить

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

  • Поиск по датам. Тут фича сложна тем, что в тексте сложно искать даты. Кроме того, что они могут быть в разных форматах, сообщение может быть типа «Бали в январе». И как с этим быть? Искать в каких‑то интервалах? Не совсем понятно, как человек будет это использовать — искать конкретную дату, интервал, одну дату или несколько — вылет и прилёт. Вариант использования — я хочу всё равно куда, но в даты отпуска.

Я открыт для предложений. Пишите в комментарии, если есть вопросы или что‑то не работает.

Полезные ссылки

lashnag — мой Telegram, если возникнут срочные вопросы.

UPD

Продолжение тут


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

Статьи, которые могут быть интересны:

Подписывайтесь на блог и Телеграм-канал Alfa Digital — там мы постим новости, опросы, видео с митапов, краткие выжимки из статей, иногда шутим.

Теги:
Хабы:
Всего голосов 47: ↑18 и ↓29-7
Комментарии78

Полезные ссылки

Программисты всё вымирают и вымирают

Уровень сложностиПростой
Время на прочтение19 мин
Количество просмотров138K
Всего голосов 332: ↑322 и ↓10+374
Комментарии583

Дореволюционный Энциклопедический словарь Брокгауза и Ефрона

Уровень сложностиПростой
Время на прочтение13 мин
Количество просмотров5.3K
Всего голосов 50: ↑49 и ↓1+67
Комментарии19

Не всё так просто с луддитами, как кажется

Уровень сложностиПростой
Время на прочтение24 мин
Количество просмотров20K
Всего голосов 139: ↑131 и ↓8+147
Комментарии136

Кнопки в автомобиле — это уже роскошь

Уровень сложностиПростой
Время на прочтение26 мин
Количество просмотров21K
Всего голосов 86: ↑84 и ↓2+96
Комментарии610

Великобритания, долги, Южные моря и Исаак Ньютон

Уровень сложностиПростой
Время на прочтение12 мин
Количество просмотров8.4K
Всего голосов 41: ↑40 и ↓1+52
Комментарии35

Информация

Сайт
digital.alfabank.ru
Дата регистрации
Дата основания
1990
Численность
свыше 10 000 человек
Местоположение
Россия