Можливості

Що вміє AItransform — з прикладами, без обіцянок

Кожен пункт на цій сторінці працює в поточній версії сервісу. Приклади «запит → результат» узяті з живого демо-каталогу магазину мото-вело запчастин — можете повторити їх у демо на головній.

Віджет — покупець бачить це у віджеті API — доступно через POST /v1/search; у віджеті поки без окремого інтерфейсу

Розуміння запиту

Розуміє запит так, як його набрали

Розкладка, одруки, злиті чи розірвані слова, українські словоформи, бренди кирилицею, коди моделей, ціна в тексті — усе це обробляється на сервері до звернення в індекс. У відповіді API завжди видно, що саме сталося: поле match_mode і виправлений запит.

Неправильна розкладка RU/UK Віджет

Латинський запит майже нічого не знаходить? Рушій перенабирає його цілком у розкладках RU і UK і показує кращий варіант. Працює на сервері, тому однаково в будь-якому браузері. У відповіді API — match_mode: "layout" і поле corrected.

ijkjvшолом1 514 товарів, банер «Показано за запитом: шолом»

Розкладка в одному слові Віджет

Коли лише частина запиту набрана не в тій розкладці, перенабирається тільки латинське слово без збігів, а бренд чи код моделі поруч лишається як є. Код (kc3, ms180) ніколи не перенабирається.

ijkjv ls2шолом ls289 товарів; «rfh,.hfnjh delta» → «карбюратор delta», 84

Склейка та розбиття слів Віджет

«бензо пила» і «бензопила», «тросгазу» і «трос газу» — рушій пробує склеїти сусідні слова або розділити довге слово без збігів на два справжніх слова каталогу й бере варіант, який знаходить помітно більше. В API — match_mode: "compound". «мото шолом» лишається як є: 48 товарів проти 21 — замало, щоб склеїти.

бензо пилабензопила2 955 товарів; «тросгазу» → «трос газу», 425

Одруки — за довжиною слова

До 3 літер — без правок, 4–5 літер — одна, від 6 — до двох, понад 12 — знову одна. Короткі слова не «фантазують», довгі пробачають помилку. Якщо не знайдено нічого — останній шанс fuzzy з чесним банером «Точних збігів немає — показано схожі товари».

карбюратркарбюратор2 418 товарів

Прозоре виправлення

Виправлення ніколи не мовчазне: віджет показує банер «Показано за запитом: …» і підсвічує змінені слова. Слово, яке має власні результати, не виправляється силоміць — його товари залишаються, а кращий варіант API повертає окремо в полі suggestion. Бренд не переписується ніколи.

шолмшолом1 514 товарів, match_mode: corrected

Виправлення за контекстом Віджет

Кожне слово існує, але разом вони не зустрічаються — рушій замінює одне слово так, щоб пара знайшлася. Якщо написана пара має хоч кілька товарів, вони залишаються, а заміна пропонується як підказка.

стрічка запалюваннясвічка запалювання501 товар; «підкладка циліндра» → «прокладка циліндра», 742

Фонетичний міст до брендів

Бренд, набраний кирилицею, знаходиться без словників: фонетичні коди Beider-Morse і Double Metaphone порівнюють звучання слова з латинськими назвами в індексі. Вмикається для слів від 6 літер, коли точних збігів немає; match_mode: "phonetic".

вудманWOODMAN459 товарів; «цпг хускварна вудман» → 13

Транслітерація

Латиниця і кирилиця — один товар: індекс зберігає транслітеровану форму назви, а базові синоніми брендів (husqvarna / хускварна, stihl / штиль) закладені в шаблон індексу.

хускварна=huskvarnaпо 1 375 товарів, ті самі категорії

Морфологія RU та UK Віджет

Російський стемінг: «поршень» і «поршня» — один запит. Українська морфологія на словнику hunspell uk_UA працює в кожному слові запиту: словоформа, яку раніше «рятувала» лише толерантність до одруків, тепер є повноцінним словом — без підказки «ви мали на увазі». Товари, знайдені лише за словоформою, стають після точних збігів, тож наявна видача не перемішується.

літієвий80 товарів«закриття» → 13, «літнього» → 10 — без підказок

Артикули й коди моделей у будь-якому написанні

«мс170», «мс-170», «MS-170», «MS 170» — один код: кирилицею чи латиницею, з дефісом, пробілом чи без, у будь-якому регістрі. Точний артикул знаходиться миттєво, уривок коду — від 4 символів. Код працює і всередині фрази: «стартер мс-170» → 20 товарів.

мс-170241 товар·184216точний артикул·658318 товарів за уривком

Строгий AND

Кожне слово запиту обов'язкове. Незнайоме слово не «розмиває» видачу до всіх шоломів — покупець бачить чесний нуль, а ви бачите цей запит у звіті «Без результатів».

asdqwe шолом0а не 1 514 шоломів

Ціна прямо в запиті

«до 1000 грн», «від 2000 до 5000», «не дорожче 500» — рушій виймає бюджет із тексту і фільтрує ціну, решта запиту шукається як звичайно. Одиниці виміру й числа без валюти (10w40, 428) цінами не вважаються.

шолом до 1000 грн383 товариprice_filter: max 1000

Гігієна запиту

«купити шолом», «шолом ціна», «🔥 шолом 🔥» — це запит «шолом»: слова наміру, емодзі та службові символи прибираються. Ліміти 200 символів і 12 слів; безглузді рядки не навантажують рушій.

купити шоломшолом1 514 товарів

Видача

Видача, яка вже структурована

Віджет показує категорії, назви мовою магазину, панель фільтрів із сортуванням, підказки під час введення, бейджі та статті. Той самий API — з пагінацією — доступний для власного фронтенду або мобільного застосунку.

Категорії за релевантністю Віджет

Результати згруповані за категоріями каталогу, у кожній групі є батьківська категорія. Порядок груп ураховує і кількість товарів, і силу збігу найкращих із них — велика категорія зі слабкими збігами не затуляє точну. У видачу потрапляють до 10 найбільших категорій, до 100 товарів у кожній.

шоломШоломи закриті (інтеграл) · 646Шоломи відкриті · 248Шоломи кросові · 173батьківська: Мотоекіпірування

Панель фільтрів у віджеті Віджет

Поруч із результатами — сортування (релевантність, спочатку дешевші чи дорожчі), ціна «від — до» з чипами діапазонів, бренди з кількістю товарів і групи атрибутів з вашого фіду (Колір, Розмір, Сумісність…). Активні фільтри зібрані чипами й знімаються по одному або всі разом. На телефоні панель захована за кнопкою «Фільтри» з лічильником. Уточнення фільтром не вважається новим пошуком і не запускає правило редиректу. Панель типово вимкнена: вмикається в кабінеті («Налаштування») або атрибутом data-filters="1" на тезі віджета.

шолом · 1000–5000 грн · LS2 Helmets75 товарівфасет брендів і далі показує решту брендів із кількістю

Фільтри Віджет API

filters: {price_min, price_max, brands[], availability, params{}} поверх будь-якого запиту; params — атрибути фіду: {"Колір": ["чорний"], "Розмір": ["XL", "L"]}, АБО всередині ключа, І між ключами. Значення перевіряються до звернення в індекс (помилка — 400 з українським текстом).

шолом · 1000–5000 грн · LS2 Helmets75 товарів

Фасети Віджет API

facets: true повертає гістограму цін (мінімум, максимум, бакети), топ-20 брендів, наявність і params — до 8 найпоширеніших атрибутів фіду по 12 значень. Кожен фасет ігнорує власний фільтр — саме так, як потрібно для UI фільтрів.

шолом43–12 488 грн0–2 500: 962 · 2 500–5 000: 533 · LS2 Helmets 89

Сортування за ціною Віджет API

sort: "price_asc" | "price_desc" — товари впорядковуються всередині кожної категорії, порядок самих категорій не змінюється. У віджеті — список «Сортування» в панелі фільтрів.

шолом · price_asc364, 389, 410 грн…

Пагінація в категорії API

page: {category, from, size} — до 100 товарів на сторінку, глибина до 10 000. Увесь конвеєр, включно з виправленням, працює в межах обраної категорії.

Шоломи закриті (інтеграл) · from 0 · size 2total 646

Назва однією мовою Віджет

Двомовні назви з фіду показуються однією мовою — тією, яку ви обрали в кабінеті (uk або ru). В API це поле title_display; назви, що не діляться, показуються повністю.

Шлем 111 №44 Шолом 111 №44Шолом 111 №44

Наявність, фото, ціна, опис, популярність

Товари в наявності (×1,3) і з фото (×1,1) ранжуються вище; товар без ціни (×0,8) або без опису у фіді (×0,9) опускається в межах своєї категорії, але з видачі не зникає. Бонус популярності з кліків (1), кошика (3) і покупок (5) перераховується щоночі за подіями останніх 30 днів — невеликий (до 5 %), щоб не ламати релевантність.

Бейджі на картках Віджет

«Акція» — стара ціна у фіді вища за поточну; «Хіт» — товар у топ-5 % за подіями покупців після нічного перерахунку; «Новинка» — товар молодший за 30 днів (потрібна дата створення в документі); «Рекомендовано» — закріплений правилом з кабінету. В API — поле badges, лише коли непорожнє.

oldprice 4500 · price 3990badges: ["sale"]

Статті та сторінки Віджет

Підключіть другий фід — блог, умови доставки, акції, FAQ (RSS, Atom, CSV або JSON) — і над категоріями з'явиться блок «Статті та сторінки»: до 5 документів зі сніпетом навколо слів запиту. В API — масив content лише в клієнтів із контент-фідом.

як обрати шоломстаття «Як обрати шолом»+ товари, як звичайно

Автодоповнення з 2 літер Віджет

Результати з'являються з другої літери й уточнюються з кожним символом (edge-ngram, у тому числі транслітерований префікс). Віджет надсилає запит через 120 мс після паузи в наборі, без кнопки «Знайти».

шо1 675 товарівшоломи першими

Підказки під час введення Віджет

Порожнє поле — «Останні запити» (зберігаються локально) і «Популярні запити» магазину за 30 днів. З другої літери під полем з'являється рядок «Можливо, ви шукаєте»: до 6 популярних запитів і до 4 категорій — клік підставляє запит або одразу відкриває категорію. POST /v1/suggest додатково повертає товари за префіксом. Рядок підказок типово вимкнений: вмикається в кабінеті («Налаштування») або атрибутом data-suggest="1".

шолшолом · шолом до 1000 грн · шолом ls2у категорії: Шоломи закриті (інтеграл)…

Мерчандайзинг

Керуйте видачею з кабінету — без коду й переіндексації

Дві вкладки в кабінеті — «Синоніми» та «Правила» — змінюють видачу за секунди. Індекс не перебудовується, кеш відповідей скидається автоматично.

Синоніми без переіндексації

Свій словник під ваш каталог: рядок виду a, b, c робить слова рівнозначними, a => b — заміняє одне на інше. До 500 рядків. Після збереження словник застосовується через Synonyms API Elasticsearch і працює вже в наступному запиті.

# вкладка «Синоніми» в кабінеті
актив, active
вудман, woodman
б/п => бензопила

Після правила «актив, active» запит «актив 110» знаходить ті самі 351 товар, що й «active 110», — без виправлення й банера.

Пропозиції з журналу запитів. Під редактором кабінет показує, що покупці набирали за 30 днів і що рушій для цього виправляв, а також запити без результатів із схожими словами каталогу. Кнопка «Додати» біля кожного варіанта дописує правило запит => варіант — залишається натиснути «Зберегти». Синоніми діють і на пошук по статтях.

Правила видачі

  • Закріпити товари для запиту — до 20 артикулів угорі видачі (products[].pinned).
  • Категорію вгору, вниз або сховати для запиту — віджет дотримується серверного порядку.
  • Переадресація запиту на сторінку сайту: «доставка» → /delivery. Віджет переходить по Enter або коли запит «устоявся» (1,5 с).
  • До 200 правил на клієнта; у відповіді API — rules_applied і redirect.

Правила застосовуються після кешу. Закріплення не діють під пагінацією, сортуванням за ціною, фільтром бренду або фільтром out_of_stock; переадресація спрацьовує на запит саме в такому написанні.

Кабінет і аналітика

Запуск і цифри — в одному кабінеті

Самообслуговування від реєстрації до сніпета. Після схвалення акаунта участь розробника не потрібна.

  1. 01РеєстраціяE-mail і пароль. Акаунт іде на модерацію.
  2. 02АктиваціяАдміністратор схвалює акаунт — з'являється ключ доступу.
  3. 03ФідПосилання на YML (Prom / Yandex), Google Merchant RSS або CSV; gzip підтримується. Окремо — необов'язковий контент-фід статей і сторінок.
  4. 04«Індексувати»Прогрес і лічильник товарів прямо в кабінеті; індекс готовий за хвилини.
  5. 05СніпетОдин тег <script> для сайту — і пошук працює.

Аналітика

Періоди 7 і 30 днів. Плитки та таблиці:

  • Пошуки, частка й кількість запитів без результатів, частка виправлених.
  • CTR, кліки, додавання в кошик.
  • Середній і p90 час відповіді.
  • Топ запитів · Запити без результатів · Кліки · Останні запити.

Набір по літерах згортається в один рядок («шо», «шол», «шолом» → «шолом»); кліки приходять із віджета, покупки, «в кошик» і «перегляд» сайт передає через window.AITRANSFORM.track(). За подіями purchase у даних звіту вже рахуються кількість покупок, конверсія (покупки ÷ пошуки) і топ куплених артикулів із сумою замовлень — сума така, як її передав сайт, без перевірки.

Налаштування

  • Дозволені домени для ключа — діють із наступного запиту; піддомени охоплюються, =host — точний збіг.
  • Мова видачі — uk або ru (визначає title_display).
  • Інтервал оновлення фіду — 1, 2, 3, 6, 12 або 24 години; планове завдання перевіряє каталоги раз на 6 годин, тому фактичний мінімум зараз — 6.
  • Термін зберігання логу запитів — від 7 до 365 днів (типово 90).

Адміністратор бачить ті самі вкладки для кожного клієнта: схвалення, продовження оплати, вимкнення.

Підключення

Один рядок — або чистий API

Віджет прив'язується до вже наявного поля пошуку на сайті. Для власного інтерфейсу є той самий API, яким користується віджет — документація API →

Один тег <script> Віджет

Лоадер сам додає стилі й контейнер, завантажує віджет і знаходить поле пошуку сайту (input[type=text|search] або плейсхолдер «Поиск / Search»). Окремий контейнер не потрібен.

<script defer
  src="https://aitransform.fun/cdn/widget.js"
  data-key="ВАШ_КЛЮЧ"
  data-lang="uk"
  data-datalayer="1"></script>
АтрибутЩо робить
data-languk (типово) або ru — мова інтерфейсу й голосового вводу
data-currencyвалюта біля ціни, типово грн; порожнє значення — без валюти
data-in-stock1 (типово) — лише товари в наявності; 0 — показувати й відсутні
data-input-selectorCSS-селектор поля пошуку, якщо автовизначення не підходить
data-datalayer1 — дублювати події пошуку, кліку й покупки у window.dataLayer

API для власного фронтенду API

Один запит — уся видача: категорії з товарами, виправлення, ціновий фільтр, фасети. Помилки валідації — 400 до звернення в індекс, недозволений домен — 403.

POST https://api.aitransform.fun/v1/search
{
  "key": "ВАШ_КЛЮЧ",
  "q": "шолом до 1000 грн",
  "sort": "price_asc",
  "facets": true
}

→ 200 (скорочено: показано 1 з 10 категорій, у products і facets — частину полів)
{
  "query_used": "шолом", "corrected": null,
  "match_mode": "exact", "total": 383,
  "price_filter": { "min": null, "max": 1000 },
  "categories": [
    { "name": "Шоломи відкриті (без підборіддя)",
      "parent": "Мотоекіпірування", "count": 112,
      "products": [ … ] },
    …
  ],
  "facets": { "price": { "min": 43.0, "max": 12488.0, "buckets": [ … ] },
              "brands": [ … ], "availability": [ … ] },
  "took_ms": 33, "cached": false, "lang": "uk"
}

Числа — з живого демо-каталогу на 24.09.2026; повний вигляд відповіді — в прикладах документації. Також POST /v1/suggest (підказки), POST /v1/event (клік, кошик, перегляд, покупка) і GET /v1/health.

Події для GA / GTM Віджет

Віджет надсилає window-події aitransform:search (q, total, corrected, match_mode), aitransform:click (q, mpn, pos, link; для статті — ще content: true) і aitransform:purchase (mpns, order_id, value, q); з data-datalayer="1" — ще й dataLayer.push з event: aitransform_search | aitransform_click | aitransform_purchase.

window.addEventListener('aitransform:search', e => {
  // e.detail = { q, total, corrected, match_mode }
});

Покупки: window.AITRANSFORM.track() Віджет

Один виклик на сторінці «Дякуємо за замовлення» — і пошук знає, що купили: до 20 артикулів, номер замовлення й суму. Ключ і сесія підставляються самі, виклик можна робити одразу після тега віджета (до завантаження він стає в чергу). Так само — «в кошик» і «перегляд».

window.AITRANSFORM.track('purchase', {
  mpns: ['184216', '345625'],
  order_id: 'A-1',
  value: 2500
});

Покупка важить 5 кліків у популярності товару й формує бейдж «Хіт»; сума в ранжування не потрапляє ніколи.

Фіди

Той самий фід, що ви віддаєте маркетплейсам: YML (Prom / Yandex), Google Merchant RSS або CSV з назвами колонок RU / UA / EN. Файл за http(s)-посиланням до 512 МБ, gzip розпаковується автоматично. Атрибути (<param>) стають фасетами, опис — сигналом ранжування.

Другий фід — контент: RSS, Atom, CSV або JSON зі статтями, сторінками, акціями та FAQ; окрема картка «Контент» у кабінеті, оновлення за тим самим розкладом.

Завантаження каталогу через API поки немає — лише фід за посиланням.

Оновлення за розкладом без простою

Фід перечитується автоматично: планове завдання раз на 6 годин оновлює каталоги, чий інтервал минув (у кабінеті — від 1 до 24 годин; поки завдання йде раз на 6 годин, частіше фід не оновлюється). Новий індекс будується поруч зі старим і підміняється однією атомарною операцією; якщо фід раптом «схуд» більш ніж на 10 %, старий індекс залишається.

Кеш відповідей живе 180 с, тож нова ціна може з'явитися з затримкою до 3 хвилин.

Картинки у WebP

Фото товарів завантажуються після індексації, конвертуються у WebP і віддаються з нашого кешу aitransform.fun/imgcache — картки у видачі легкі й не навантажують ваш сервер.

Голосовий пошук Віджет

Кнопка мікрофона у віджеті: Web Speech API з мовою uk-UA або ru-RU за data-lang. Там, де браузер цього не підтримує, віджет чесно каже про це.

Ізольовані стилі Віджет

Усі правила віджета обмежені його контейнером — стилі віджета не впливають на сторінку, а стилі сайту не ламають віджет. Підходить для будь-якої CMS чи самописного сайту.

Безпека й надійність

Захищено за замовчуванням

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

Дозволені домени для ключа

Перелік доменів у кабінеті: запити з інших сайтів отримують 403. Домен охоплює піддомени, =host — лише точний збіг. Перевіряється на пошуку, підказках і подіях.

TLS усюди

Публічний API — лише через HTTPS. З'єднання з Elasticsearch також шифроване, сертифікат кластера перевіряється за власним CA.

Без сирих IP в аналітиці

Замість IP-адреси в лог потрапляє sha256-хеш із секретом і денною сіллю — його не можна відновити й не можна зіставити між днями. E-mail і посилання на фіди в логи не пишуться.

Термін зберігання логів

Лог запитів кожного клієнта чиститься щодня за його власним налаштуванням: від 7 до 365 днів, типово 90.

Захист від зловживань

Фіди й зображення завантажуються лише за http(s) і ніколи з внутрішніх адрес (SSRF-захист). Запит обрізається до 200 символів і 12 слів; довгі безглузді рядки не навантажують рушій.

Перевірено перед кожним релізом

361 модульний тест рушія без Elasticsearch і батарея зі 177 реальних запитів, яку проганяємо на продакшені до і після кожного оновлення.

Перевірте все це на своєму каталозі

Реєстрація, фід за посиланням, кнопка «Індексувати» — і той самий пошук працює на вашому сайті.