Проверка соответствия адреса указанному почтовому индексу до оформления заказа
Несовпадение почтового индекса и города в форме заказа выглядит мелкой опечаткой, пока не превращается в доставку совсем в другую часть страны.
Большинство поисков магазинов на деле являются списками, замаскированными под карты. Покупатель выбирает штат, затем город, затем листает алфавитный список, который никак не связан с тем, какой магазин действительно ближе. Сеть магазинов товаров для дома с несколькими десятками точек решила, что это устроено задом наперёд, и перестроила инструмент вокруг расстояния.
Переделка началась с ввода. Вместо того чтобы просить покупателя выбирать из выпадающих списков, новый поиск позволял начать вводить адрес или район и предлагал подсказки по ходу ввода с помощью /v1/autocomplete. Этот эндпоинт принимает неполный адрес и возвращает варианты совпадений, подготовленные именно для такого поля живого поиска, поэтому покупатель, вводящий «Oak», получает короткий список реальных названий улиц и мест, а не вводит полный адрес в надежде, что он с чем-то совпадёт в базе данных магазина.
Когда покупатель выбирал подсказку или разрешал странице использовать своё примерное местоположение, сети нужно было ещё одно: начальная точка в координатах. Для покупателей, вводивших адрес, её давало геокодирование выбранной подсказки через /v1/forward, который возвращает совпадение с полями широты и долготы для заданного адреса. Для покупателей, которые ничего не вводили, сайт переходил к /v1/ip, который считывает IP-адрес посетителя и возвращает координаты вместе с городом и регионом, давая поиску разумную начальную точку, ничего не спрашивая.
Сам список магазинов был геокодирован один раз, одним пакетом, поскольку в пакетном запросе каждый адрес магазина считается одной оплачиваемой позицией. Когда координаты всех магазинов сохранены, ранжирование становится арифметикой: вычислить расстояние от точки покупателя до каждого магазина, отсортировать, показать пять ближайших. Никаких выпадающих меню, никакой прокрутки по алфавиту, никаких догадок о том, под каким соседним городом может значиться магазин.
Сеть честно обозначала, что инструмент может обещать. Поскольку прямое геокодирование возвращает совпадение для введённого текста, а не гарантию того, что адрес существует точно в таком виде, поиск всегда сопровождал ранжированный список шагом подтверждения, позволяя покупателю скорректировать начальную точку, если предложенное местоположение было не совсем верным. Эта небольшая проверка значила больше любой части логики ранжирования, ведь при неверной начальной точке даже идеальный расчёт расстояния бесполезен.
Трафик поиска был умеренным, несколько тысяч запросов в месяц на автодополнение и геокодирование вместе, и с запасом укладывался в бесплатную дневную квоту, которая входит в ключ My Geocode. Сети ни разу не пришлось задумываться о модели оплаты в повседневной работе, поскольку обычный розничный трафик поиска магазинов редко приближается к уровню, при котором выгоднее становится предоплаченный баланс или ключ Unlimited. Но знание о том, что такой запас есть по цене 0,0001 € за запрос, означало, что маркетинговая кампания или объявление об открытии магазина ничего не сломают.
Поиск магазинов является небольшой функцией, но часто это последний шаг покупателя перед решением куда-то поехать, и правильное ранжирование определяет, какой магазин получит визит. Подробности об обоих эндпоинтах, включая структуру полей и лимиты запросов, приведены по адресам /docs/address-autocomplete/, /docs/forward-geocoding/ и /docs/rate-limits/.