Битва Ботов За Визу

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


Я не занимаюсь разработкой ботов на заказ и не могу помочь вам с получением визы.

Если вы ищете готовых ботов - исходных код некоторых выложен на GitHub. Используйте их на свой страх и риск.


Понятно, что часто очереди и длительное ожидание возникают там, где сильно ограничен ресурс. Но и сама система, организующая электронную очередь, выстроена неидеально.

Кейс с получением визы

Решили мы с женой получить туристические визы в одну страну. Подготовили все документы, оплатили пошлину. Но вот незадача - ближайший прием оказался через 1,5 года. И если так подумать: страна, куда хотелось бы попасть туристом, недополучает туристические доходы, а мы не получаем впечатления, за которыми планировали съездить.

В интернете много сайтов, которые предлагают перенести твою запись и значительно сократить время ожидания. Как это работает? Просто кто-то написал бота, который отслеживает свободные окна, и имея твои личные данные и доступ в твой ЛК, он переносит запись на ближайшее время.

Справедливо может возникнуть вопрос: а откуда появляются свободные окна? Это может быть подключение новых сотрудников (как временное, так и постоянное), может быть кто-то отменил или перенес свою запись, а может быть изначально для записи была открыта только часть возможных интервалов.

Что мы можем предположить про работу визовых центров?

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

  1. Все публичные услуги визового центра - типовые, а значит и время, которое закладывается на оказание услуги, довольно стандартно.
  2. Визовые центры оказывают услуги как в живой очереди, так и по записи. Если кто-то из специалистов, работающих с записями, уходит в отпуск/заболевает - можно либо временно увеличить ресурс, либо перераспределить его с живой очереди (при записи мы берем на себя обязательства, что клиент будет обслужен в конкретное время, а в живой очереди мы на себя обязательства не берем).
  3. Если живой очереди нет, как и нет возможности расширять ресурс, то изначально проще (с точки зрения визового центра) выделять меньшее количество возможных интервалов для посещения, чтобы нивелировать риски и человеческий фактор.

Проблема с записью

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

Но имеем, что имеем. Нам удается записаться на дату - через 1,5 года от текущей.

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

Рождение очередного бота

После гугления и поиска по GitHub’у, мне удалось найти несколько скриптов, написанных на питоне, которые уведомляли бы тебя по e-mail’у, когда появлялась свободная дата. Скрипты были достаточно простыми, а поднимать питон на виртуалке не хотелось. Решил, что перенесу логику из скрипта в тот инструмент, который у меня уже есть.

Ранее я уже писал про n8n (open-source альтернатива Zapier’у). Утилита предоставляет тебе кучу возможностей, в том числе и запуск автоматизаций по расписанию.

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

Визовый центр очень сильно намудрил с авторизацией, установил re-captcha, и в принципе сделал многое, чтобы было крайне затруднительно написать бота на базе CURL. Поэтому я настроил интеграцию n8n + browserless, что позволило мне писать ботов с использованием Pupeeter. По факту, эта штука запускает Chrome в режиме headless и позволяет взаимодействовать со страницей как-будто ты открыл ее в браузере. Соответственно, все содержимое грузится как положено, а если добавить немного рандома, то и re-captcha перестает быть проблемой.

Бот быстро разросся, так как в n8n ты очень быстро накидываешь логику. Получилась примерно такая картина:

Visa workflow

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

Битва ботов

Battle of bots

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

И в течении месяца бот нашел и забронировал интервал, тем самым сократив время ожидания с 1,5 лет до 4х недель.

Как могло быть иначе?

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

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

  1. Есть клиенты, которых устраивает время ожидания, а также фиксированная дата приема и время. Для них ничего менять не нужно.
  2. Есть клиенты, которые хотели бы перенести свое бронирование на более ранний период, с пожеланиями по конкретному дню недели и времени (например, человек может работать сутки через сутки, без возможности пропустить рабочую смену).
  3. Есть клиенты, которые хотели бы перенести свое бронирование на более ранний период и готовы подстроиться.

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

В случае, если запись могла быть перенесена - центр мог бы прислать уведомление на email и посетителю в течении Х часов нужно было бы перейти по ссылке для подтверждения (либо отказаться от переноса).

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

Сэкономил ли визовый центр, не став реализовывать такую логику? Нет. Из-за наплыва ботов им пришлось внедрять re-captcha, реализовывать кастомную логику по работе с токеном, реализовывать блокировку аккаунтов, которые регулярно и часто логиняться и т.д.

Сложно ли реализовать логику переносов внутри системы? Нет. Можно начать с простого выбора:

  • Дата и время записи устраивает;
  • Хочу перенести бронирование на более ранний период, готов подстроиться.

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