Проверка соответствия адреса указанному почтовому индексу до оформления заказа
Несовпадение почтового индекса и города в форме заказа выглядит мелкой опечаткой, пока не превращается в доставку совсем в другую часть страны.
Сельская местность ломает многие допущения, которые по умолчанию заложены в поиск магазинов, созданный для городов. Производитель сельхозтехники с сетью независимых дилеров на обширных сельскохозяйственных территориях обнаружил, что поиск, настроенный на городские расстояния и показывающий дилеров в радиусе десяти или двадцати миль, возвращал пустой результат для значительной части клиентов, которые вполне могли ехать час и больше до ближайшего дилера ради крупной покупки.
Создание поиска с учётом этой реальности начиналось так же, как любой поиск по расстоянию: с координат. Каждый адрес дилера в сети производителя был геокодирован один раз, одним пакетом через /v1/forward, поскольку в пакетном запросе каждый адрес считается одной оплачиваемой позицией, сколько бы дилеров ни было в списке. Так у каждого дилера появилась фиксированная координата для измерения расстояния вместо расплывчатых описаний регионов вроде «обслуживает три соседних округа», которые раньше использовались в списках дилеров.
Главным изменением стали значения расстояний по умолчанию. Вместо фиксированного радиуса поиска, настроенного на город, поиск существенно увеличивал радиус по умолчанию для сельских районов и позволял клиенту расширить его ещё больше одним элементом управления, а не упираться в сообщение «дилеры не найдены», которое ошибочно намекало, что производителя поблизости просто нет. Клиент, разрешивший определение местоположения, получал начальную точку от /v1/ip, который по его IP-адресу определял примерные координаты, а клиент, предпочитавший ввести название населённого пункта или почтовый индекс, получал геокодирование этого значения тем же способом, что и список дилеров.
Производитель использовал геокодированную сеть дилеров не только для поиска на сайте, но и для внутреннего анализа покрытия: он смотрел, где между дилерами есть реальные пробелы относительно мест, где его техника фактически используется, по адресам из регистраций обслуживания и гарантии. Этот анализ, проведённый после того, как у всей сети дилеров появились координаты, определил, где компания в первую очередь искала новых дилеров. Раньше это решение опиралось на неформальное ощущение региональных менеджеров по продажам о том, где покрытие кажется слабым.
Для этого не потребовалось по-разному обрабатывать сельских и городских клиентов в самом коде. Для каждого поиска выполнялись одни и те же геокодирование и вычисление расстояния. Изменилась настройка: радиус поиска по умолчанию, а также формулировка и обработка состояния «нет результатов». Эти решения пришли из понимания реальной обслуживаемой географии, а не из технологии определения местоположения, которая работала одинаково, насколько бы плотно или редко ни была заселена местность.
Объём геокодирования почти целиком пришёлся на первоначальный пакет сети дилеров, а затем был лишь небольшой поток по мере подключения новых дилеров. Такая нагрузка легко укладывалась в бесплатную дневную квоту, входящую в ключ производителя. Поиски дилеров клиентами добавляли сверху умеренный постоянный объём, который для компании такого размера тоже с запасом укладывался в бесплатный уровень, поскольку дилеров ищут гораздо реже, чем, скажем, обычный магазин розничной сети.
Инструменты на основе расстояния, в которые заложены городские допущения, незаметно подводят сельских пользователей, и решение редко требует другой технологии: обычно достаточно других значений по умолчанию для того же самого расчёта. Документация по эндпоинту находится по адресу /docs/forward-geocoding/.