Главная » Интеграции » Дадата и подсказки адресов в Битрикс

Дадата и подсказки адресов в Битрикс

Схема подключения подсказок адреса Дадата с серверной валидацией в 1С-Битрикс

Форма адреса доставки с ручным вводом города, улицы и дома — источник опечаток и неполных адресов, усложняющих работу службы доставки. Разберём подключение Дадата для автоподсказок адреса на форме оформления заказа в 1С-Битрикс.

Что даёт сервис подсказок адресов

Дадата предоставляет API автоматического дополнения адреса по мере ввода — покупатель начинает печатать название улицы, сервис подсказывает варианты из справочника реальных адресов (ФИАС/ГАР), автоматически заполняя индекс, регион, город и другие структурированные компоненты адреса. Это заметно снижает долю некорректных или неполных адресов по сравнению со свободным текстовым полем без подсказок.

Подключение виджета на форму

<input type="text" id="address" placeholder="Начните вводить адрес">

<script src="https://cdn.jsdelivr.net/npm/suggestions-jquery@version/dist/js/jquery.suggestions.min.js"></script>
<script>
$('#address').suggestions({
    token: 'DADATA_API_KEY',
    type: 'ADDRESS',
    onSelect: function(suggestion) {
        document.getElementById('city').value = suggestion.data.city || '';
        document.getElementById('postal_code').value = suggestion.data.postal_code || '';
        document.getElementById('street').value = suggestion.data.street || '';
    }
});
</script>

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

Нужна помощь с Битрикс?





    Валидация полного адреса на сервере

    <?php
    
    use Bitrix\Main\Web\HttpClient;
    use Bitrix\Main\Web\Json;
    
    function validateAddress(string $addressString): ?array
    {
        $httpClient = new HttpClient();
        $httpClient->setHeader('Authorization', 'Token ' . DADATA_API_KEY);
        $httpClient->setHeader('Content-Type', 'application/json');
    
        $response = $httpClient->post(
            'https://cleaner.dadata.ru/api/v1/clean/address',
            Json::encode([$addressString])
        );
    
        $result = Json::decode($response);
    
        return $result[0] ?? null;
    }

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

    Определение города по IP для предзаполнения

    <?php
    
    function detectCityByIp(string $ip): ?string
    {
        $httpClient = new HttpClient();
        $httpClient->setHeader('Authorization', 'Token ' . DADATA_API_KEY);
    
        $response = $httpClient->get(
            'https://suggestions.dadata.ru/suggestions/api/4_1/rs/iplocate/address?ip=' . $ip
        );
    
        $result = Json::decode($response);
    
        return $result['location']['data']['city'] ?? null;
    }

    Определение города посетителя по IP-адресу используется для предзаполнения региона доставки и, в интеграции с YML-выгрузкой и региональными ценами, для показа цены и наличия, актуальных именно для региона посетителя, ещё до того, как он явно указал свой адрес.

    Лимиты бесплатного тарифа и стоимость на большом объёме

    Сервис обычно предоставляет ограниченное бесплатное количество запросов в месяц, после которого подключается платный тариф — для интернет-магазина с высоким трафиком стоит заранее оценить реальный объём обращений к API (не только по числу заказов, а по числу вводов адреса, включая незавершённые оформления) и заложить соответствующий бюджет, а не обнаружить превышение лимита неожиданно уже в процессе активного использования.

    Деградация при недоступности сервиса

    Если сервис подсказок временно недоступен (сбой на стороне провайдера, исчерпан лимит запросов), форма адреса должна оставаться рабочей в режиме обычного текстового поля без подсказок, а не блокировать оформление заказа целиком, — зависимость от внешнего сервиса не должна становиться единой точкой отказа для критичного этапа воронки продаж.

    Частые ошибки

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

    Итог

    Подключение Дадата к форме адреса на сайте 1С-Битрикс сочетает клиентский виджет подсказок при вводе и серверную валидацию уже введённого значения перед сохранением заказа — только клиентская часть без серверной проверки оставляет лазейку для некорректного адреса, введённого в обход подсказок. Форма должна продолжать работать и без сервиса подсказок, чтобы его временная недоступность не блокировала оформление заказа.

    Нужна помощь с Битрикс?

    Исправим ошибку, доработаем сайт, ускорим Битрикс или поможем разобраться с проблемой.

    Услуги
    Инструменты
    База знаний