Руководства

Блок подсказок «Возможно, вы имели в виду» на основе автодополнения

Блок «Возможно, вы имели в виду» работает лучше всего, когда он появляется ненавязчиво, предлагает короткий список и не мешает, если ни одна из подсказок не подходит. Эндпоинт автодополнения создан именно для такого сценария.

Запрос

GET /v1/autocomplete?q=Baker Stret&limit=4
{
  "status": "ok",
  "query": "Baker Stret",
  "suggestions": [
    {"text": "Baker Street, London, UK", "place_id": "abc123"},
    {"text": "Baker Street, York, UK", "place_id": "abc789"}
  ]
}

Обратите внимание, что опечатка вроде «Stret» в запросе не мешает получить разумные подсказки, поскольку эндпоинт рассчитан на работу с неидеальным вводом, а в этом и состоит весь смысл блока подсказок.

Второй пример: подсказок нет совсем

Не каждый запрос, с опечаткой или без, даёт полезное совпадение.

GET /v1/autocomplete?q=Zzqxlm Nonexistent Rd&limit=4
{
  "status": "ok",
  "query": "Zzqxlm Nonexistent Rd",
  "suggestions": []
}

Пустой массив suggestions здесь является корректным ответом, а не признаком того, что с запросом что-то пошло не так. Сделайте так, чтобы в этом случае блок тихо исчезал, а не показывал пустой выпадающий список или заметное сообщение об ошибке для ввода, у которого просто нет хорошего совпадения.

Отображение списка

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

Необязательность подсказок

Самое важное в этом подходе, особенно на сайте, где взаимодействием не управляет клиентский JavaScript, в том, что поле по-прежнему принимает введённый вручную адрес при отправке формы, независимо от того, была ли выбрана подсказка. Блок подсказок, который блокирует отправку, пока не выбран один из вариантов, превращает полезную подсказку в жёсткое требование, и любой адрес, которого по вполне законным причинам нет в списке подсказок, становится невозможно отправить.

Пограничный случай, который стоит протестировать

Адреса, написанные не той письменностью, на которой в основном тестировался ваш блок подсказок, или транслитерированные названия мест реально присутствуют в большинстве баз адресов и заслуживают такой же обработки с переходом на обычный текст, как и любой другой запрос без совпадений. Не считайте отсутствие подсказок для необычного ввода признаком того, что сам ввод неверен, поскольку правильная реакция часто состоит в том, чтобы просто позволить клиенту отправить именно то, что он ввёл.

Ограничение запросов

Установите для limit небольшое значение: для блока подсказок обычно достаточно от трёх до пяти, поскольку более длинный список лишает смысла быстрый визуальный просмотр. Используйте задержку вызовов (debounce), чтобы запрос отправлялся только после короткой паузы в наборе, и общее количество запросов за сессию оставалось низким.

Стоимость одной сессии

Типичное поле адреса может запускать несколько вызовов автодополнения на посетителя, пока он вводит текст и исправляет себя, и каждый из них равен одному запросу. Это небольшая доля из 2 500 бесплатных запросов в день, входящих в каждый ключ или доступных с одного адреса без ключа, даже для формы с заметным трафиком.

Хорошо сделанный блок подсказок тихо исправляет опечатки и отходит в сторону, если не узнаёт ввод. Полное описание полей приведено в документации по автодополнению адресов.