AnyQuery — инструмент для увеличения конверсии поиска в магазинах электронной коммерции. Формирует эффективные поисковые подсказки, обрабатывает синонимы и преобразует поисковые запросы в вид, который корректно обрабатывается поисковой системой.
Сервис ранжирует выдачу на странице результатов поиска с использованием поведенческих данных посетителей и покупателей.
client.js, AnyQuery может отрисовать виджет автоподсказок без участия вашей команды разработки. Серверная интеграция применяется в случаях, когда виджет не подходит под требования проекта.
Полный поток от ввода пользователя до отображения подсказок и перехода к поиску:
correction, а не исходный ввод пользователя.
Если передать сырой запрос, страница результатов будет по недописанному или опечаточному запросу.
Единственный метод — GET. Используйте только HTTPS:
GET https://autocomplete.diginetica.net/autocomplete
Полный пример URL
Минимальный запрос
true/false) можно передавать как 1/0. Например, forIs=true и forIs=1 равнозначны.
simple. Рекомендуемое значение для production — advanced_xname,zero_queries. Может переопределяться серверной конфигурацией сайта.Важно: значение параметра
strategy из URI входящего запроса пользователя нужно проксировать в запрос к API. Это позволяет гибко тестировать алгоритмы ранжирования без участия IT-команды.
products ответа.
global).
forIs=true в массиве categories перестают появляться категории, найденные по текстовому совпадению названия — остаются только категории из найденных товаров.
products.
contents заполняется только при withContent=true и наличии контентного фида.
offer_id в фиде). Используется некоторыми стратегиями для контекстных подсказок (например, на карточке товара).
products. true — выдача перемешивается (поведение по умолчанию); false — выдача сохраняет внутренний порядок.
contents. Минимум: 0.
showUnavailable=true. Может переопределяться серверной конфигурацией.
true — используется prefix-based поиск вместо полнотекстового.
-1 означает использовать значение из серверной конфигурации.
Ответ API — JSON-объект верхнего уровня:
{
"query": "кросовк",
"correction": "кроссовки",
"redirect": "https://...",
"redirectMobile": "https://...",
"sts": [ … ],
"taps": [ … ],
"products": [ … ],
"categories": [ … ],
"brands": [ … ],
"contents": [ … ]
}
st.productsSize.withContent=true и наличии контентного фида.Строка с исправленным запросом. Присутствует в ответе только если исправление произошло. Поиск выполняется именно по этому значению.
Причины исправления
| Причина | Пример |
|---|---|
| Исправление опечатки | кросовки → кроссовки |
| Дописывание запроса до полного слова | холод → холодильник |
Как использовать
const response = await fetchAutocomplete(userInput);
// correction присутствует только если исправление произошло
const queryForSearch = response.correction ?? userInput;
// передать в Search API
fetchSearchResults({ st: queryForSearch });
correction отсутствует в ответе — исправления не было, передавайте в Search API исходное значение st. Никогда не передавайте сырой ввод пользователя в обход этой логики.
Массив популярных запросов других пользователей. Используется для отрисовки подсказок в выпадающем списке при вводе. Максимум — 10 элементов.
"sts": [
{
"st": "трос стальной",
"amount": 3,
"redirectUrl": "https://example.com"
},
{
"st": "труборез для стальных",
"amount": 2
}
]
Поля элемента
| Поле | Тип | Описание |
|---|---|---|
| st | string | Текст подсказки. Сохраняются только ненулевые поисковые запросы за последние 30 дней. |
| amount | integer | Показывает сколько раз вводили запрос за 30 дней с учётом экспоненциального убывания по формуле просмотры × 0.7^количество_прошедших_дней. Подсказки сортируются по этому полю по убыванию. Если подсказка полностью совпадает с запросом — она всегда на первом месте независимо от amount. |
| redirectUrl | string | undefined | Присутствует только если для запроса из st в дашборде настроен редирект. |
| redirectMobileUrl | string | undefined | Опциональное поле для редиректа мобильного приложения. Обсудите с командой AnyQuery при необходимости. |
| labels | object | undefined | Дополнительные метки для подсказки в формате { "название": ["значения"] }. Используются для маркировки специальных подсказок (бренд-/категорий-метки и пр.). |
Массив подсказок-ярлыков, которые помогают пользователю уточнить поисковый запрос. Отображаются на сайте только после нажатия кнопки «Поиск». Максимум — 10 элементов.
"taps": [
{
"tap": "стальной",
"relatedSearch": "стальной"
},
{
"tap": "по нержавеющей",
"relatedSearch": "по нержавеющей стали",
"redirectUrl": "https://example.com"
}
]
Поля элемента
| Поле | Тип | Описание |
|---|---|---|
| tap | string | Текст ярлыка, отображаемый пользователю. |
| relatedSearch | string | Поисковый запрос, который будет выполнен при клике на ярлык. Может отличаться от текста tap. |
| redirectUrl | string | undefined | Присутствует только если для запроса из tap в дашборде настроен редирект. |
| redirectMobileUrl | string | undefined | URL редиректа для мобильных устройств. |
Массив товаров, найденных по запросу. Количество регулируется параметром productsSize (макс. 100).
"products": [
{
"id": "138875",
"available": true,
"name": "Бокал Bordeaux",
"brand": "Spiegelau",
"price": "2880.0",
"score": 109.55,
"alternative": true,
"categories": [
{
"id": "74",
"name": "Бокалы для вина",
"direct": false,
"link_url": "https://...",
"image_url": "https://..."
}
],
"attributes": {
"артикул": ["129285"],
"страна": ["Германия"],
"объем": ["0.44"]
},
"link_url": "https://...",
"image_url": "https://..."
}
]
Поля элемента
| Поле | Тип | Описание |
|---|---|---|
| id | string | Идентификатор товара (offer_id). |
| available | boolean | Флаг доступности товара. |
| name | string | Название товара. |
| brand | string | Бренд товара. |
| price | string | Цена товара. |
| score | number | Вес товара в выдаче. Чем больше значение — тем выше товар в результатах поиска. |
| alternative | boolean | undefined | Присутствует и равен true только для стратегии advanced_xname. Означает, что товар найден как альтернатива, а не точное совпадение. |
| categories | array | Категории, к которым относится товар. Поле direct внутри всегда false и смысловой нагрузки не несёт. |
| attributes | object | Атрибуты товара в формате "название": ["значение"]. Используются для отрисовки характеристик на фронтенде. |
| link_url | string | Прямая ссылка на страницу товара. |
| image_url | string | Ссылка на изображение товара. |
| image_urls | array<string> | Все изображения товара. |
| groupId | string | ID группы товаров (для мультикарточек, при withSku=true). |
| ids | array<string> | Внешние идентификаторы товара. |
| oldPrice | string | Старая цена в виде строки (если есть скидка). |
| skuChoiceAttributes | array<string> | Имена атрибутов, по которым возможен выбор SKU. |
| skus | array | SKU товара (при withSku=true). Поля: id, available, name, price, oldPrice, link_url, image_url, image_urls[], attributes{}. |
| rating | number | Средний рейтинг (если включена соответствующая стратегия). |
| totalRatings | integer | Количество оценок. |
Массив категорий, релевантных запросу. Максимум — 10 элементов.
"categories": [
{
"id": "74",
"name": "Бокалы для вина",
"direct": true,
"link_url": "https://...",
"image_url": "https://..."
}
]
Поля элемента
| Поле | Тип | Описание |
|---|---|---|
| id | string | Идентификатор категории. |
| name | string | Название категории. Может содержать хлебные крошки (например Одежда / Мужское / Пальто), если название категории дублируется в фиде — чтобы избежать одинаковых подсказок. |
| direct | boolean | true — категория найдена по текстовому вхождению запроса в название (префиксный поиск).false — категория получена из найденных товаров.При forIs=true категории с direct=true в ответе не появляются. |
| link_url | string | Прямая ссылка на страницу категории. |
| image_url | string | Изображение категории. Обновляется раз в сутки — берётся изображение самого популярного товара из категории по всем регионам. |
Массив брендов, релевантных запросу. Максимум — 10 элементов. Доступен после настройки трекинга брендов.
"brands": [
{
"id": "112384",
"name": "Spiegelau - Бокалы",
"url": "https://example.com/catalog/bokaly/filter/brand-spiegelau/"
}
]
Поля элемента
| Поле | Тип | Описание |
|---|---|---|
| id | string | Идентификатор бренда. |
| name | string | Название бренда. Может содержать хлебные крошки если на сайте несколько страниц одного бренда — например Одежда / Мужское / Gucci и Одежда / Женское / Gucci. |
| url | string | Ссылка на страницу бренда. |
Массив ссылок на статьи и разделы сайта. Заполняется только при withContent=true и наличии контентного фида. Максимум — 10 элементов.
"contents": [
{
"id": "211",
"name": "Матрасы для спортсменов",
"link_url": "https://example.com/article/matrasy-dlya-sportsmenov/",
"image_url": "https://example.com/images/articles/article_img_211.jpg"
}
]
| Поле | Тип | Описание |
|---|---|---|
| id | string | Идентификатор контентного элемента. |
| name | string | Заголовок статьи или раздела. |
| link_url | string | Ссылка на страницу статьи. |
| image_url | string | Ссылка на изображение статьи. |
| type | string | Тип контентной страницы (например, article, landing). |
| annotation | string | Краткое описание статьи (аннотация). |
API обрабатывает запросы асинхронно — запросы, отправленные в определённом порядке, могут вернуться в другом порядке. При быстром вводе пользователя это означает, что ответ на более старый запрос может прийти позже ответа на новый.
Рекомендуемая реализация
let lastQuery = '';
async function onInput(value) {
lastQuery = value;
const result = await fetchAutocomplete(value);
// отображаем только если запрос всё ещё актуален
if (value === lastQuery) {
renderSuggestions(result);
}
}
| Параметр | Значение | Описание |
|---|---|---|
| Таймаут ожидания ответа | 300 мс |
Рекомендуемый клиентский таймаут по спецификации API — 300 мс. Автоподсказки — быстрая операция; если ответ не получен за 300 мс, не блокировать пользователя и обработать запрос стандартным механизмом поиска магазина. |
| Троттлинг запросов | 300 мс |
Не отправлять запрос к API после каждого нажатия клавиши без задержки. Выжидать 300 мс после последнего ввода — снижает нагрузку и убирает лишние запросы при быстром наборе. |
st. API вернёт 10 популярных товаров по просмотрам.
| Код | Причина | Как исправить |
|---|---|---|
400 | Отсутствует параметр apiKey | Добавить apiKey в запрос. |
400 | Отсутствует параметр st | Передавать st всегда, даже пустую строку. |
400 | Неверный путь эндпоинта | Проверить URL: /autocomplete, не /automplete. |
500 | Внутренняя ошибка сервера | Повторить запрос. При повторении — обратиться в поддержку. |
504 | Таймаут ответа | Обработать запрос стандартным поиском магазина. |
| Пустой ответ | Неверное значение apiKey | Проверить ключ в дашборде AnyQuery. |
correction из ответа Autocomplete API. Если correction отсутствует — передавайте исходный st.apiKey добавляется на сервере и не должен присутствовать в клиентском коде или в сетевых запросах браузера.Обязателен к проверке на этапе пре-релизного и пост-релизного тестирования.
- Запросы к API проксируются через бэкенд,
apiKeyне виден в браузере. - Установлен таймаут 300 мс. При отсутствии ответа — fallback на стандартный поиск.
- Настроен троттлинг 300 мс — запрос отправляется не чаще одного раза в 300 мс.
- При фокусе на строке (пустой ввод) отправляется запрос с
st=для показа популярных товаров. - Реализована проверка актуальности ответа — устаревшие ответы не отображаются.
- В Search API передаётся
correctionиз ответа Autocomplete API. Еслиcorrectionотсутствует — передаётся исходныйst. - Значение параметра
strategyпроксируется из входящего URI пользователя. - Обработаны ошибки
400,500,504. - Массив
stsотображается при вводе. Массивtaps— только после нажатия «Поиск».