Расширение для 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» (расширение для браузера). Внутренние инструменты, созданные с нуля, — в разделе о разработке веб-приложений.



