Проверка соответствия адреса указанному почтовому индексу до оформления заказа
Несовпадение почтового индекса и города в форме заказа выглядит мелкой опечаткой, пока не превращается в доставку совсем в другую часть страны.
У франшизы с точками в нескольких часовых поясах была проблема на сайте, которую никто не додумался исправить: центральный раздел «Часы работы» на странице каждой точки показывал одно и то же расписание, написанное однажды кем-то в головном офисе и скопированное во все магазины, независимо от того, в каком часовом поясе на самом деле работал конкретный магазин. Точка на западе территории франшизы, закрывающаяся в 9 вечера по своим часам, на сайте выглядела так, будто закрывается на три часа раньше, чем на самом деле, потому что часы работы были записаны по времени головного офиса и никогда не корректировались для отдельных точек.
Чтобы это исправить, нужно было привязать к каждой точке реальный часовой пояс, а не считать «часы работы» одним общим фрагментом контента. Для адреса каждой точки франшизы компания получила координаты через /v1/forward и передала их в /v1/timezone, который возвращает название часового пояса IANA для этой конкретной точки. Благодаря хранению названия, а не фиксированного смещения, отображение часов работы автоматически оставалось верным при переходе на летнее и зимнее время, и никому в головном офисе не нужно было помнить, что дважды в год что-то надо обновить.
Когда у каждой точки появился собственный часовой пояс, сайт наконец смог делать то, что должен был делать с самого начала: показывать посетителю, открыта ли конкретная точка прямо сейчас, с правильным расчётом по часам самой точки, а не по часам посетителя и не по часам головного офиса. Посетитель с другого конца страны, открывший страницу магазина на противоположном побережье, видел точную надпись «Открыто сейчас» или «Закрыто, откроется в 8 утра», отражающую реальное местное время этого магазина, а только такая версия этой информации действительно полезна тому, кто собирается туда ехать.
Для поиска точек компания дополнительно учитывала местоположение самого посетителя. /v1/ip определял приблизительные координаты посетителя, которые передавались в то же ранжирование по расстоянию, что используется в других инструментах поиска. Так клиент, искавший ближайшую открытую точку, получал результаты, учитывающие и расстояние, и то, открыта ли конкретная точка в момент поиска, а не список, отсортированный по расстоянию, где несколько закрытых сейчас магазинов перемешаны с открытыми.
Это было небольшое, в основном незаметное исправление в том смысле, что посетителю сайта никогда не придёт в голову благодарить за что-то «правильную обработку часовых поясов»: он просто заметит, а скорее не заметит, что показанные часы работы совпадают с действительностью. Обычно это и есть признак исправления, которое стоит сделать: никто его не хвалит, но все, кого сбила бы с толку старая версия, просто больше не путаются.
Геокодирование выполнялось один раз для каждой точки в рамках разовой настройки. Учитывая, сколько точек у большинства франшиз, это небольшой пакет, намного меньше бесплатного дневного лимита. Определение часовых поясов для функции «Открыто сейчас» для посетителей добавляло небольшой постоянный объём, связанный с трафиком поиска точек, и для франшизы среднего размера он тоже спокойно укладывался в бесплатный уровень, а на случай, если национальная маркетинговая кампания вызовет необычный всплеск поиска точек, был доступен предоплаченный баланс.
Документация по обоим эндпоинтам находится на /docs/forward-geocoding/ и /docs/timezone-lookup/.