Написать в Telegram@Odilient

БРАУЗЕРНОЕ РАСШИРЕНИЕ

Под NDA

Автоматизация Amazon Relay

Расширение для Chrome и инструменты на Node.js для биржи грузов Amazon Relay: отслеживание новых рейсов и изменения ставок, фильтрация по локации и времени забора, а также автобронирование.

Логистика
Отрасль
2 месяца
Срок
2022
Год
С чего всё началось

Задача

Перевозчики на Amazon Relay борются за грузы на общей бирже: выгодные рейсы разбирают за секунды, а ставки меняются прямо на глазах. Вручную это означало весь день обновлять страницу, вчитываться в каждую карточку — расстояние, время погрузки, пункт назначения — и надеяться нажать «Book» первым. Цель — поручить браузеру следить за биржей, отбирать грузы и бронировать их по понятным правилам, которые задаёт оператор.

Что мы сделали

Решение

Мы разработали расширение для Chrome, которое читает собственные JSON-ответы биржи грузов вместо парсинга карточек и запускает настраиваемый цикл с тремя режимами: оповещения о новых грузах и росте ставок, поиск с подсветкой и автобронирование до заданного лимита. Фильтры учитывают расстояние, запас времени до погрузки, крайнее время отправления, а также списки штатов США, ZIP-кодов или объектов. Позже появился клиент на Node.js, который опрашивал биржу и бронировал грузы без окна браузера.

Технологии
JavaScriptChrome Extensions APINode.jsjQueryBootstrapMoment.jsWebpack
За кулисами

Как всё создавалось

Расширение для Chrome для биржи грузов Amazon Relay

Amazon Relay — площадка, где перевозчики находят и бронируют грузы для логистической сети Amazon. На её бирже грузов публикуются рейсы с пунктами отправления и назначения, расстоянием, остановками, временем погрузки и ставкой, и эти предложения постоянно меняются. Для перевозчика, работающего на американской бирже, мы создали инструменты автоматизации: они следят за биржей, выводят вперёд грузы, подходящие под правила оператора, и по команде бронируют их. Сначала это было расширение для Chrome, затем — клиент на Node.js, работающий без браузера.

Работа прошла три итерации с апреля по июнь 2022 года.

Ключевые возможности

  • Работа с собственными данными биржи — скрипт, который внедряется ещё до загрузки страницы, оборачивает window.fetch, клонирует ответы API биржи и передаёт JSON расширению. Фильтры работают со структурированными полями (ставка, общее расстояние, число остановок, время первой погрузки, а также штат, ZIP-код и объект каждой остановки), а не с текстом, вытащенным из карточек.
  • Три режима работы — Simple alert следит за новыми грузами и за ростом ставки выше заданного порога в долларах. Search находит и подсвечивает грузы, прошедшие фильтры. Auto book бронирует подходящие грузы, пока не наберётся заданное максимальное количество.
  • Фильтры задаёт оператор — минимальное и максимальное расстояние, запас в минутах до первой погрузки, крайние дата и время отправления и фильтр по локации: штат США, пятизначный ZIP-код или код объекта — как белый список или как список исключений. Полные названия штатов приводятся к двухбуквенным кодам, поэтому «Illinois» и «IL» находят одни и те же грузы.
  • Управляемый цикл обновления — расширение отключает встроенное автообновление биржи, само обновляет её с настраиваемой скоростью плюс случайная задержка и через MutationObserver дожидается отрисовки карточек, прежде чем их проверять.
  • Визуальные и звуковые сигналы — новые грузы подсвечиваются и поднимаются наверх, у грузов с выросшей ставкой появляется бейдж с размером прибавки, а самый выгодный новый вариант прокручивается в зону видимости и раскрывается. Новый груз, изменение цены и успешное бронирование сопровождаются разными звуками.
  • Fast Book — необязательный режим: он переименовывает кнопку Book и подтверждает диалог бронирования тем же нажатием, убирая лишний шаг, когда важна скорость.
  • Горячая клавиша и защита вкладки — одна клавиша запускает и останавливает цикл, а фоновый скрипт помечает вкладки как невыгружаемые, чтобы Chrome не «заморозил» биржу, оставленную работать в фоне.

Архитектура и технологический стек

Браузерное расширение

Расширение для Chrome на Manifest V2 написано на JavaScript. Контент-скрипт встраивает панель управления над списком доступных рейсов; она собрана на jQuery и Bootstrap, а дату и время выбирают в пикере на Moment.js. Второй скрипт внедряется на этапе document_start как web-accessible resource и выполняется в контексте самой страницы — только там можно увидеть вызовы fetch, которые делает биржа. Каждый ответ биржи он передаёт контент-скрипту через window.postMessage.

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

Итерации

В первой версии, в апреле 2022 года, подписи для операторов были на русском, а переключатель мобильного вида сохранялся в Chrome sync storage. В майской версии 2022 года панель переработали, названия режимов перевели на английский, а в фоновый скрипт добавили защиту вкладки от выгрузки.

Клиент на Node.js без браузера

В июне 2022 года мы добавили клиент на Node.js, который обращается к тому же API биржи без окна браузера. Он повторяет сохранённый поиск оператора — с параметрами вроде радиуса от точки отправления, типов оборудования, минимальной ставки за милю и максимального числа остановок — через интервалы со случайным разбросом. Когда появляется результат, клиент сверяет остановки со списком исключённых кодов объектов, отправляет запрос на бронирование и прекращает опрос.

Каждый профиль поиска — это пара файлов, конфигурация окружения и тело запроса, которые передаются в командной строке, поэтому несколько профилей могут работать отдельными процессами. Клиент использует node-fetch и dotenv, собирается Webpack и авторизуется собственной сессией Relay оператора, которая задаётся в локальной конфигурации.

Как устроена автоматизация

Раз фильтры работали с перехваченными ответами API, они не зависели от вёрстки карточек, а ставки можно было сравнивать как числа, не разбирая строки с валютой. Случайный интервал, лимит на количество и явные кнопки Start и Stop оставляли оператору контроль над тем, насколько агрессивно работает инструмент. Клиент на Node.js избавил от необходимости держать открытым окно браузера, на котором держалось расширение: его панель даже напоминает операторам не убирать биржу с экрана.

Наша роль

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

Смежные работы

Этот проект — часть нашей работы по внедрению ИИ и автоматизации. Другие инструменты поверх Amazon — в кейсах «Инструменты для продавцов Amazon» и «Виджеты заказов и доставки для Amazon» (расширение для браузера). Внутренние инструменты, созданные с нуля, — в разделе о разработке веб-приложений.

Создадим вместе

Хотите что-то вроде Автоматизация Amazon Relay?

Расскажите, что должен делать ваш продукт. Мы определим объём работ, распишем сроки и пришлём фиксированную цену — бесплатно и без обязательств продолжать.

Бесплатная консультация Без обязательств Быстрый ответ