Інтеграція 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 год |







