← На главную

Autocomplete API

Руководство по серверной интеграции автоподсказок AnyQuery. Покрывает все параметры запроса, структуру ответа и обязательные практики интеграции.

📋
Описание сервиса

AnyQuery — инструмент для увеличения конверсии поиска в магазинах электронной коммерции. Формирует эффективные поисковые подсказки, обрабатывает синонимы и преобразует поисковые запросы в вид, который корректно обрабатывается поисковой системой.

Сервис ранжирует выдачу на странице результатов поиска с использованием поведенческих данных посетителей и покупателей.

ℹ️
Рекомендуем использовать готовый виджет. Если на сайте установлен client.js, AnyQuery может отрисовать виджет автоподсказок без участия вашей команды разработки. Серверная интеграция применяется в случаях, когда виджет не подходит под требования проекта.
🗺️
Схема интеграции

Полный поток от ввода пользователя до отображения подсказок и перехода к поиску:

🖥 Браузер пользователя пользователь вводит запрос посимвольно каждый символ → новый запрос ⚙️ Ваш бэкенд (прокси) троттлинг 300 мс · добавляет apiKey GET st=запрос Autocomplete API autocomplete.diginetica .net/autocomplete sts, products, correction… ответ → фронтенд 🔍 Подсказки отображаются sts, taps, products, categories, brands пользователь выбирает подсказку или жмёт Enter ⚙️ Бэкенд передаёт correction в Search API st=correction (не исходный ввод пользователя) st=correction Search API sort.diginetica .net/search результаты поиска результаты → фронтенд ✅ Страница результатов поиска товары отранжированы по correction отправить трекинг-событие 📡 Трекинг SEARCH_EVENT + AUTOCOMPLETE_CLICK ЛЕГЕНДА запрос ответ с данными
⚠️
Передавать в Search API нужно correction, а не исходный ввод пользователя. Если передать сырой запрос, страница результатов будет по недописанному или опечаточному запросу.
🔗
Эндпоинт и пример запроса

Единственный метод — GET. Используйте только HTTPS:

HTTP
GET https://autocomplete.diginetica.net/autocomplete

Полный пример URL

https://autocomplete.diginetica.net/autocomplete?st=кроссовки&apiKey=YOUR_API_KEY&strategy=advanced_xname,zero_queries&productsSize=10&regionId=61&showUnavailable=false&withContent=false&withSku=false

Минимальный запрос

https://autocomplete.diginetica.net/autocomplete?st=кроссовки&apiKey=YOUR_API_KEY&strategy=advanced_xname,zero_queries
ℹ️
Если параметр не указан — используется значение по умолчанию. Параметры-флаги (true/false) можно передавать как 1/0. Например, forIs=true и forIs=1 равнозначны.
⚙️
Параметры запроса
st Обязательный
Поисковый запрос пользователя. Отправляется после каждого введённого символа. При пустом значении API вернёт 10 товаров с наибольшим количеством просмотров за последние 30 дней.
apiKey Обязательный
Ключ проекта из дашборда AnyQuery. Добавляется на бэкенде — не передаётся с фронтенда напрямую.
strategy Опциональный по умолчанию: simple
Список стратегий через запятую, по которым модель находит товары. По умолчанию — simple. Рекомендуемое значение для production — advanced_xname,zero_queries. Может переопределяться серверной конфигурацией сайта.

Важно: значение параметра strategy из URI входящего запроса пользователя нужно проксировать в запрос к API. Это позволяет гибко тестировать алгоритмы ранжирования без участия IT-команды.
productsSize Опциональный по умолчанию: 10 · макс: 100
Количество товаров в массиве products ответа.
regionId Опциональный по умолчанию: global
ID региона, в котором выполняется поиск. По умолчанию используется глобальный фид (global).
forIs Опциональный по умолчанию: false
Отключает поиск категорий по их названиям (префиксный поиск категорий). При forIs=true в массиве categories перестают появляться категории, найденные по текстовому совпадению названия — остаются только категории из найденных товаров.
showUnavailable Опциональный по умолчанию: false
Показывать ли недоступные товары в массиве products.
withContent Опциональный по умолчанию: false
Показывать ли в подсказках ссылки на страницы с контентом (статьи, разделы). Массив contents заполняется только при withContent=true и наличии контентного фида.
withSku Опциональный по умолчанию: false
Отображать ли группы товаров. Если изменение значения флага не влияет на выдачу — обратитесь к специалистам AnyQuery для уточнения настроек проекта.
productId Опциональный
ID товара-якоря (как offer_id в фиде). Используется некоторыми стратегиями для контекстных подсказок (например, на карточке товара).
shuffle Опциональный по умолчанию: true
Перемешивать выдачу products. true — выдача перемешивается (поведение по умолчанию); false — выдача сохраняет внутренний порядок.
contentsSize Опциональный по умолчанию: 10
Количество контентных ссылок в массиве contents. Минимум: 0.
unavailableMultiplier Опциональный по умолчанию: 0.2
Множитель скоринга для недоступных товаров (0–1). Работает совместно с showUnavailable=true. Может переопределяться серверной конфигурацией.
useCompletion Опциональный дефолт: не задан в Swagger
Дописывать часть запроса до предиктивно выбранного полного слова. Дефолтное значение в Swagger не зафиксировано — уточняйте у команды Diginetica.
usePrefixSearch Опциональный по умолчанию: false
Если true — используется prefix-based поиск вместо полнотекстового.
xNamePrefixCoefficient Опциональный по умолчанию: -1
Коэффициент префиксного совпадения по имени. -1 означает использовать значение из серверной конфигурации.
📦
Структура ответа

Ответ API — JSON-объект верхнего уровня:

JSON
{
  "query":          "кросовк",
  "correction":     "кроссовки",
  "redirect":       "https://...",
  "redirectMobile": "https://...",
  "sts":            [ … ],
  "taps":           [ … ],
  "products":       [ … ],
  "categories":     [ … ],
  "brands":         [ … ],
  "contents":       [ … ]
}
query string
Исходный поисковый запрос, переданный в параметре st.
correction string | undefined
Исправленный запрос. Присутствует только если исправление произошло. Поиск в Search API выполняется именно по этому значению.
redirect string | undefined
URL редиректа для desktop, если он настроен в дашборде для данного запроса.
redirectMobile string | undefined
URL редиректа для мобильных устройств, если настроен.
sts array · макс. 10
Популярные поисковые подсказки на основе реальных запросов пользователей за последние 30 дней.
taps array · макс. 10
Подсказки-ярлыки для уточнения запроса. Отображаются после нажатия кнопки «Поиск».
products array · макс. 100
Товары, найденные по запросу. Количество регулируется параметром productsSize.
categories array · макс. 10
Категории, релевантные запросу. Формируются из двух источников: категории найденных товаров и префиксный поиск по названиям.
brands array · макс. 10
Бренды, релевантные запросу. Доступны после настройки трекинга брендов.
contents array · макс. 10
Ссылки на статьи и разделы сайта. Заполняется только при withContent=true и наличии контентного фида.
✏️
correction

Строка с исправленным запросом. Присутствует в ответе только если исправление произошло. Поиск выполняется именно по этому значению.

Причины исправления

ПричинаПример
Исправление опечаткикросовкикроссовки
Дописывание запроса до полного словахолодхолодильник
ℹ️
Логика дописывания: запрос дописывается до слов, которые начинаются так же, и по которым за последние 30 дней пользователи получали ненулевую выдачу минимум 3 раза. Если подходит несколько слов — дополняется до более короткого и популярного.

Как использовать

JavaScript
const response = await fetchAutocomplete(userInput);
// correction присутствует только если исправление произошло
const queryForSearch = response.correction ?? userInput;
// передать в Search API
fetchSearchResults({ st: queryForSearch });
⚠️
Если correction отсутствует в ответе — исправления не было, передавайте в Search API исходное значение st. Никогда не передавайте сырой ввод пользователя в обход этой логики.
🔍
sts — поисковые подсказки

Массив популярных запросов других пользователей. Используется для отрисовки подсказок в выпадающем списке при вводе. Максимум — 10 элементов.

JSON
"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 Дополнительные метки для подсказки в формате { "название": ["значения"] }. Используются для маркировки специальных подсказок (бренд-/категорий-метки и пр.).
🏷️
taps — ярлыки уточнения

Массив подсказок-ярлыков, которые помогают пользователю уточнить поисковый запрос. Отображаются на сайте только после нажатия кнопки «Поиск». Максимум — 10 элементов.

JSON
"taps": [
  {
    "tap":           "стальной",
    "relatedSearch": "стальной"
  },
  {
    "tap":           "по нержавеющей",
    "relatedSearch": "по нержавеющей стали",
    "redirectUrl":   "https://example.com"
  }
]

Поля элемента

ПолеТипОписание
tap string Текст ярлыка, отображаемый пользователю.
relatedSearch string Поисковый запрос, который будет выполнен при клике на ярлык. Может отличаться от текста tap.
redirectUrl string | undefined Присутствует только если для запроса из tap в дашборде настроен редирект.
redirectMobileUrl string | undefined URL редиректа для мобильных устройств.
📦
products — товары

Массив товаров, найденных по запросу. Количество регулируется параметром productsSize (макс. 100).

JSON
"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://..."
  }
]

Поля элемента

ПолеТипОписание
idstringИдентификатор товара (offer_id).
availablebooleanФлаг доступности товара.
namestringНазвание товара.
brandstringБренд товара.
pricestringЦена товара.
scorenumberВес товара в выдаче. Чем больше значение — тем выше товар в результатах поиска.
alternativeboolean | undefinedПрисутствует и равен true только для стратегии advanced_xname. Означает, что товар найден как альтернатива, а не точное совпадение.
categoriesarrayКатегории, к которым относится товар. Поле direct внутри всегда false и смысловой нагрузки не несёт.
attributesobjectАтрибуты товара в формате "название": ["значение"]. Используются для отрисовки характеристик на фронтенде.
link_urlstringПрямая ссылка на страницу товара.
image_urlstringСсылка на изображение товара.
image_urlsarray<string>Все изображения товара.
groupIdstringID группы товаров (для мультикарточек, при withSku=true).
idsarray<string>Внешние идентификаторы товара.
oldPricestringСтарая цена в виде строки (если есть скидка).
skuChoiceAttributesarray<string>Имена атрибутов, по которым возможен выбор SKU.
skusarraySKU товара (при withSku=true). Поля: id, available, name, price, oldPrice, link_url, image_url, image_urls[], attributes{}.
ratingnumberСредний рейтинг (если включена соответствующая стратегия).
totalRatingsintegerКоличество оценок.
📂
categories — категории

Массив категорий, релевантных запросу. Максимум — 10 элементов.

JSON
"categories": [
  {
    "id":        "74",
    "name":      "Бокалы для вина",
    "direct":    true,
    "link_url":  "https://...",
    "image_url": "https://..."
  }
]

Поля элемента

ПолеТипОписание
idstringИдентификатор категории.
namestringНазвание категории. Может содержать хлебные крошки (например Одежда / Мужское / Пальто), если название категории дублируется в фиде — чтобы избежать одинаковых подсказок.
directbooleantrue — категория найдена по текстовому вхождению запроса в название (префиксный поиск).
false — категория получена из найденных товаров.
При forIs=true категории с direct=true в ответе не появляются.
link_urlstringПрямая ссылка на страницу категории.
image_urlstringИзображение категории. Обновляется раз в сутки — берётся изображение самого популярного товара из категории по всем регионам.
🏷️
brands — бренды

Массив брендов, релевантных запросу. Максимум — 10 элементов. Доступен после настройки трекинга брендов.

JSON
"brands": [
  {
    "id":   "112384",
    "name": "Spiegelau - Бокалы",
    "url":  "https://example.com/catalog/bokaly/filter/brand-spiegelau/"
  }
]

Поля элемента

ПолеТипОписание
idstringИдентификатор бренда.
namestringНазвание бренда. Может содержать хлебные крошки если на сайте несколько страниц одного бренда — например Одежда / Мужское / Gucci и Одежда / Женское / Gucci.
urlstringСсылка на страницу бренда.
ℹ️
Список брендов формируется из двух источников: сначала префиксный поиск по датасету брендов на основе трекинга, затем — бренды из найденных товаров, если из префиксного поиска вернулось меньше 10. Если на запрос настроен брендовый буст в дашборде — он влияет и на брендовые подсказки.
📄
contents — контент

Массив ссылок на статьи и разделы сайта. Заполняется только при withContent=true и наличии контентного фида. Максимум — 10 элементов.

JSON
"contents": [
  {
    "id":        "211",
    "name":      "Матрасы для спортсменов",
    "link_url":  "https://example.com/article/matrasy-dlya-sportsmenov/",
    "image_url": "https://example.com/images/articles/article_img_211.jpg"
  }
]
ПолеТипОписание
idstringИдентификатор контентного элемента.
namestringЗаголовок статьи или раздела.
link_urlstringСсылка на страницу статьи.
image_urlstringСсылка на изображение статьи.
typestringТип контентной страницы (например, article, landing).
annotationstringКраткое описание статьи (аннотация).
Асинхронность запросов

API обрабатывает запросы асинхронно — запросы, отправленные в определённом порядке, могут вернуться в другом порядке. При быстром вводе пользователя это означает, что ответ на более старый запрос может прийти позже ответа на новый.

🚫
Всегда проверяйте актуальность ответа. Если отобразить результат устаревшего запроса — пользователь увидит подсказки не для того текста, что введён в строке прямо сейчас.

Рекомендуемая реализация

JavaScript
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 популярных товаров по просмотрам.
🐛
Ошибки API
КодПричинаКак исправить
400Отсутствует параметр apiKeyДобавить apiKey в запрос.
400Отсутствует параметр stПередавать st всегда, даже пустую строку.
400Неверный путь эндпоинтаПроверить URL: /autocomplete, не /automplete.
500Внутренняя ошибка сервераПовторить запрос. При повторении — обратиться в поддержку.
504Таймаут ответаОбработать запрос стандартным поиском магазина.
Пустой ответНеверное значение apiKeyПроверить ключ в дашборде AnyQuery.
Подсказки не обновляются при быстром вводе
Не реализована проверка актуальности ответа. Добавьте сравнение текущего значения строки с тем, для которого пришёл ответ — см. раздел «Асинхронность».
В Search API передаётся сырой ввод пользователя
Передавайте correction из ответа Autocomplete API. Если correction отсутствует — передавайте исходный st.
apiKey передаётся с фронтенда
Запросы к Autocomplete API должны проксироваться через бэкенд. apiKey добавляется на сервере и не должен присутствовать в клиентском коде или в сетевых запросах браузера.
Чеклист интеграции

Обязателен к проверке на этапе пре-релизного и пост-релизного тестирования.

  • Запросы к API проксируются через бэкенд, apiKey не виден в браузере.
  • Установлен таймаут 300 мс. При отсутствии ответа — fallback на стандартный поиск.
  • Настроен троттлинг 300 мс — запрос отправляется не чаще одного раза в 300 мс.
  • При фокусе на строке (пустой ввод) отправляется запрос с st= для показа популярных товаров.
  • Реализована проверка актуальности ответа — устаревшие ответы не отображаются.
  • В Search API передаётся correction из ответа Autocomplete API. Если correction отсутствует — передаётся исходный st.
  • Значение параметра strategy проксируется из входящего URI пользователя.
  • Обработаны ошибки 400, 500, 504.
  • Массив sts отображается при вводе. Массив taps — только после нажатия «Поиск».