Руководства

Автодополнение адресов в форме оформления заказа

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

Запрос автодополнения

Эндпоинт /v1/autocomplete принимает часть текста и ограничение на количество возвращаемых подсказок. Вызывайте его по мере ввода, когда покупатель уже набрал несколько символов.

GET /v1/autocomplete?q=221B Baker&limit=5
{
  "status": "ok",
  "query": "221B Baker",
  "suggestions": [
    {"text": "221B Baker Street, London, UK", "place_id": "abc123"},
    {"text": "221B Baker Avenue, Springfield", "place_id": "abc124"}
  ]
}

От подсказки к полному адресу

Подсказка содержит короткую подпись и place_id, а не полную запись адреса. Когда покупатель выбрал подсказку, получите по ней полный адрес с компонентами и координатами, передав текст подсказки в /v1/forward. Именно этот второй вызов заполняет в вашей форме поля улицы, города, региона и почтового индекса.

GET /v1/forward?q=221B Baker Street, London, UK&limit=1

Объект components появляется именно во втором запросе, поскольку /v1/autocomplete всегда возвращает только текстовую подпись и place_id и никогда не разбивает адрес на улицу, город и почтовый индекс. Если пропустить этот шаг и разбирать текст подсказки самостоятельно, это окажется ненадёжнее, чем кажется, поскольку формат различается от страны к стране.

Разумное количество запросов

Отправка запроса при каждом нажатии клавиши быстро накапливается на загруженной странице оформления заказа. Используйте задержку (debounce), чтобы запрос отправлялся только после короткой паузы в наборе, и не отправляйте запросы для ввода короче трёх или четырёх символов, где подсказки всё равно бесполезны. Каждый вызов автодополнения и каждый последующий вызов прямого геокодирования считается одним запросом в рамках вашего дневного лимита, поэтому поле с задержкой даже в загруженном магазине может спокойно укладываться в 2 500 бесплатных запросов в день, входящих в каждый ключ.

Когда совпадений нет

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

Ошибка, которой стоит избегать

Считать выбранную подсказку готовым проверенным адресом является распространённым упрощением, которое потом создаёт проблемы. Покупатель может выбрать подсказку, а затем продолжить редактировать поле, изменив номер дома или добавив номер квартиры, которого в исходной подсказке не было. Всегда отправляйте итоговый текст поля в /v1/forward в момент отправки формы, а не только в момент выбора подсказки, чтобы сохранённый адрес соответствовал тому, что в итоге оказалось в поле.

Если ваша форма оформления заказа отдельно запрашивает почтовый индекс, быстрый вызов /v1/postcode после распознавания адреса улицы является дешёвым способом поймать почтовый индекс, который не соответствует остальной части адреса, до того как они будут отправлены вместе и приведут к несоответствию при доставке.

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