Делаем телеграм-бота, который по артикулу WB (nmId) или ссылке показывает, по каким фразам карточка ранжируется, с позицией в органике и фактом рекламы.
Ограничения: без продавцких токенов, без Jam. Берём только публичные/фронтовые JSON (DevTools), autosuggest, безопасный скрапинг SERP и catalog-ads.
Что уже реализовано (Node.js, TypeScript):
BFS по подсказкам (autosuggest) + нормализация;
валидация фраз страницами SERP …/exactmatch/…search?query=&page= (парсинг products[*].id/name/brand и позиция нашего nmId);
проверка рекламы отдельным вызовом
https://catalog-ads.wildberries.ru/api/v5/search?k... (если наш nmId среди рекламных — помечаем ⚡; CPM чаще null, знаем);
троттлинг Bottleneck (~0.45 RPS/хост), axios-retry (экспонента + джиттер);
Redis TTL-кэш (suggest/serp/card/ads), базовый скоринг;
Telegram UX: nmId-only → отдаём топ-5 + «Показать больше».
Проблемы:
Фраз меньше, чем у конкурентов (они показывают ~×3–×4 больше).
Время первого ответа: конкурент отдаёт топ-5 «мгновенно», а мы ждём BFS/валидацию.
Гипотеза, к которой идём: мгновенный ответ из индекса/кэша (OpenSearch с russian+shingle(2,3) и Redis Top-K), а глубокий сбор — в фоне.
Просим подсказать:
Правильная схема прединдекса для «nmId → фразы (2–3-граммы, синонимы, словоформы) → быстрый top-K», какие анализаторы/настройки используете в OpenSearch/ES для русского? (шинглы vs edge_ngram, стоп-слова, нормализация).
Параметры SERP-валидации (страницы, dest/spp/lang/curr) и толерантный парсер версий (v18/v4): что сейчас стабильно работает в проде? (мы используем exactmatch-роуты из фронта, как советуют гайды/разборы DevTools).
Реклама: подтверждаем факт через catalog-ads …/api/v5/search?keyword=; видели ли вы стабильные поля CPM публично, или считаем null и живём с эвристикой?
Морфология: что надёжнее для продакшена под русский — pymorphy2 сервисом или достаточно токенизации + шинглов?
Антибот и скорость: какой RPS/хост и backoff даёт наилучший «урожай» без 429/403? Имеет ли смысл пул IP/прокси при соблюдении robots/ToS?
Архитектура очередей (BullMQ): как лучше строить пайплайн (collect → verify → rank → persist), чтобы мгновенно отдавать топ-5 и фоново донаполнять?
Контекст для читателей: мы используем публичные фронтовые данные, подсмотренные в DevTools (как в профильных разборах), и не трогаем seller API; цель — легальный, «мягкий» сбор с кэшем и троттлингом.
Habr
Будем признательны за рабочие настройки анализаторов, примеры маппингов, витрины индекса и цифры по RPS/TTL из реальной практики.