Інтеграція 1С-Бітрікс із DaData (підказки за адресами)

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Інтеграція 1С-Бітрікс із DaData (підказки за адресами)
Середня
~1-2 тижні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Інтеграція 1С-Бітрікс з DaData (підказки по адресах)

При оформленні замовлення користувачі вводять адресу вручну в довільному форматі: «мск леніна 5 кв 12», «м. Москва, вул. Леніна, б. 5». У базі — хаос, інтеграція з транспортними компаніями ламається, розрахунок доставки не працює. DaData стандартизує адресу та нормалізує її за ФІАС безпосередньо під час введення.

Що дає DaData

  • Підказки при введенні (Suggestions API) — автодоповнення адреси з прив'язкою до ФІАС/КЛАДР.
  • Стандартизація (Cleaner API) — привести довільну адресу до нормалізованого вигляду.
  • Геокодування — координати за адресою та адреса за координатами.
  • Підказки по організаціях — ІПН → всі реквізити компанії.

Підключення Suggestions API

Реєструємося на dadata.ru, отримуємо API-ключ і секретний ключ. Ліміти безкоштовного тарифу: 10 000 запитів/добу. Для production рекомендується платний тариф.

Frontend — підключаємо віджет:

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/suggestions-jquery/dist/css/suggestions.min.css">
<script src="https://cdn.jsdelivr.net/npm/suggestions-jquery/dist/js/jquery.suggestions.min.js"></script>
<script>
$("#delivery-address").suggestions({
    token: "<?= COption::GetOptionString('site', 'dadata_api_key') ?>",
    type: "ADDRESS",
    /* обмежуємо географію: */
    constraints: { locations: [{ country: "Росія" }] },
    onSelect: function(suggestion) {
        // Розкладаємо адресу по полях форми
        const d = suggestion.data;
        $("#field-city").val(d.city || d.settlement);
        $("#field-street").val(d.street_with_type);
        $("#field-house").val(d.house);
        $("#field-flat").val(d.flat);
        $("#field-zip").val(d.postal_code);
        $("#field-fias-id").val(d.fias_id); // зберігаємо FIAS ID
        $("#field-region").val(d.region_with_type);
        $("#field-lat").val(d.geo_lat);
        $("#field-lon").val(d.geo_lon);
    }
});
</script>

Важливо зберігати fias_id — він використовується для інтеграції з транспортними компаніями (СДЕК, Boxberry) і дозволяє однозначно ідентифікувати адресу.

Серверна стандартизація адреси

Коли адреса вводиться без віджета (імпорт з CSV, API-замовлення), нормалізуємо на сервері:

function standardizeAddress(string $rawAddress): array {
    $apiKey    = COption::GetOptionString('site', 'dadata_api_key');
    $secretKey = COption::GetOptionString('site', 'dadata_secret_key');

    $http = new \Bitrix\Main\Web\HttpClient();
    $http->setHeader('Authorization', 'Token ' . $apiKey);
    $http->setHeader('X-Secret', $secretKey);
    $http->setHeader('Content-Type', 'application/json');

    $response = $http->post(
        'https://cleaner.dadata.ru/api/v1/clean/address',
        json_encode([$rawAddress])
    );

    $result = json_decode($response, true)[0] ?? [];
    return [
        'city'      => $result['city'] ?? '',
        'street'    => $result['street_with_type'] ?? '',
        'house'     => $result['house'] ?? '',
        'flat'      => $result['flat'] ?? '',
        'fias_id'   => $result['fias_id'] ?? '',
        'postal'    => $result['postal_code'] ?? '',
        'qc'        => $result['qc'] ?? 3, // якість: 0-добре, 3-не розпізнано
    ];
}

Поле qc (quality code) критичне: 0 — адресу розпізнано однозначно, 1 — з допущеннями, 3 — не розпізнано. При qc = 3 позначаємо замовлення прапором для ручної перевірки менеджером.

Реквізити компанії за ІПН

B2B-форма реєстрації: користувач вводить ІПН — автоматично підставляються назва компанії, КПП, юридична адреса, ПІБ директора. Економить 2–3 хвилини при реєстрації.

$("#inn").suggestions({
    token: dadataToken,
    type: "PARTY",
    onSelect: function(suggestion) {
        const d = suggestion.data;
        $("#company-name").val(d.name.short_with_opf);
        $("#kpp").val(d.kpp);
        $("#ogrn").val(d.ogrn);
        $("#legal-address").val(d.address.value);
        $("#director").val(d.management ? d.management.name : '');
    }
});

Дані з DaData зберігаємо у властивості користувача Бітрікса (CUser::Update()) і в таблицю компанії, якщо реалізовано B2B-кабінет.

Кешування підказок

Кожен символ у полі адреси — запит до DaData API. При активних користувачах квота швидко витрачається. Оптимізація: дебаунс 300 мс у JS, серверний проксі з кешуванням частих запитів у memcached або Redis на 1 годину.

Кейс: магазин сантехніки, 800 замовлень/день. Без оптимізації — 15 000 запитів до DaData щодня (перевитрата на безкоштовному тарифі). Після впровадження дебаунсу і проксі-кешу — 3 000 запитів/день.

Завдання Трудовитрати
Підключення віджета підказок 3–4 год
Серверна стандартизація + обробка qc 4–6 год
Підказки по ІПН для B2B 3–4 год
Проксі-кеш для зниження кількості запитів 4–6 год