Коли тікети техпідтримки живуть окремо від замовлень, оператору доводиться стрибати між Usedesk та Бітрікс, щоб зрозуміти історію клієнта?
Це уповільнює відповідь, збільшує відсоток помилок та знижує LTV. Ми — команда з 7-річним досвідом інтеграцій, реалізували понад 50 проєктів зв'язку CRM та хелпдесків. Наша інтеграція 1С-Бітрікс та Usedesk забезпечує синхронізацію в реальному часі. Результат — оператор бачить всю картину в одному вікні, а клієнт отримує швидку відповідь без зайвих запитань. Інтегруємо ваш хелпдеск Usedesk з Бітрікс через REST API — економія часу оператора до 80% (до 16 000 грн на місяць на одного оператора при зарплаті 20 000 грн).
Проблеми, які вирішує інтеграція
- Розрив даних: замовлення є в Бітрікс, але в тікеті його не видно. Клієнт пише «де моє замовлення?» — оператор шукає номер вручну. Кожен третій клієнт повторює запит, втрачаючи до 15% LTV.
-
Ручне перенесення: оператори копіюють email, телефон, історію з однієї системи в іншу — витрачаючи до 30 секунд на кожен тікет. При 100 тікетах на день це 50 хвилин пустої роботи. Вартість помилок оцінюється в десятки тисяч гривень щомісяця.
- Відсутність контексту: без інтеграції неможливо автоматично запропонувати знижку повторному клієнту або надіслати опитування після закриття тікету.
Як ми зв'язуємо тікети з замовленнями: синхронізація та передача даних
Використовуємо REST API Usedesk та події 1С-Бітрікс (OnAfterUserRegister, OnSaleOrderSaved). Все працює на штатних механізмах: агенти для фонових задач, теговане кешування для списку тікетів. Стек: PHP 8.1+, інфоблоки v2.0, MySQL.
Синхронізація клієнтів
При реєстрації користувача в Бітрікс (подія OnAfterUserRegister) створюємо або знаходимо клієнта в Usedesk. Зберігаємо мапінг у користувацьке поле UF_USEDESK_CLIENT_ID:
AddEventHandler('main', 'OnAfterUserRegister', function(&$fields) {
$email = $fields['LOGIN']; // В Битрикс логин часто = email
// Ищем существующего клиента по email
$response = $usedesk->get('/clients', ['email' => $email]);
if (!empty($response['clients'])) {
$udClientId = $response['clients'][0]['id'];
} else {
// Создаём нового
$response = $usedesk->post('/clients', [
'name' => $fields['NAME'] . ' ' . $fields['LAST_NAME'],
'email' => $email,
'phone' => $fields['PERSONAL_PHONE'] ?? '',
'custom_fields' => [
['id' => USEDESK_CF_BITRIX_USER_ID, 'value' => $fields['ID']],
],
]);
$udClientId = $response['client']['id'];
}
// Сохраняем маппинг
\CUser::SetUserField([], $fields['ID'], 'UF_USEDESK_CLIENT_ID', $udClientId);
});
Передача даних замовлення в тікет
При створенні нового замовлення (подія OnSaleOrderSaved) записуємо дані в кастомні поля клієнта Usedesk. Це збагачує картку клієнта історією покупок:
AddEventHandler('sale', 'OnSaleOrderSaved', function(\Bitrix\Main\Event $event) {
$order = $event->getParameter('ENTITY');
if ($order->isNew()) {
$userId = $order->getUserId();
$udClientId = \CUser::GetByID($userId)->Fetch()['UF_USEDESK_CLIENT_ID'] ?? null;
if (!$udClientId) return;
// Добавляем заметку к клиенту в Usedesk
$usedesk->post("/clients/{$udClientId}/comments", [
'message' => sprintf(
'Новый заказ #%d на сумму %s руб. Статус: %s',
$order->getId(),
number_format($order->getPrice(), 2, ',', ' '),
$order->getField('STATUS_ID')
),
'type' => 'note',
]);
}
});
Як пов'язати тікети з замовленнями в реальному часі?
Використовуємо кастомні поля Usedesk. Для кожного тікету можна задати ID замовлення Бітрікс. Webhook при створенні тікету оновлює це поле. Оператор в інтерфейсі Usedesk бачить посилання на замовлення та може перейти в Бітрікс одним кліком. Зворотний потік: при зміні статусу замовлення — надсилаємо коментар у тікет.
Чому варто обрати API-інтеграцію замість ручного імпорту?
Інтеграція через API обробляє запити в 10 разів швидше, ніж ручний імпорт даних. Помилки в даних зводяться до нуля, тоді як при ручному перенесенні їх рівень сягає 5%. Для магазину з тисячею замовлень на день ручний імпорт займає до 2 годин роботи оператора — проти 5 хвилин автоматичної синхронізації. Точність даних зростає у 20 разів, а час обробки тікетів скорочується на 70%.
Віджет Usedesk та особистий кабінет
Персоналізація віджета
Usedesk надає JS-віджет. Для персоналізації при авторизованому користувачеві передаємо його дані:
(function(d, w, c) {
w.usedeskSettings = {
company_id: "<?= USEDESK_COMPANY_ID ?>",
<?php if ($USER->IsAuthorized()): ?>
user: {
name: "<?= htmlspecialchars($USER->GetFullName()) ?>",
email: "<?= htmlspecialchars($USER->GetEmail()) ?>",
fields: {
custom_id: "<?= $USER->GetID() ?>"
}
},
<?php endif; ?>
};
var s = d.createElement("script");
s.type = "text/javascript"; s.async = true;
s.src = "https://secure.usedesk.ru/widget.js";
d.getElementsByTagName("head")[0].appendChild(s);
})(document, w, c);
Це дозволяє Usedesk автоматично пов'язати чат-сесію з карткою клієнта за email.
Відображення тікетів в особистому кабінеті
В ОК Бітрікс додаємо розділ «Мої звернення». Компонент запитує тікети клієнта через Usedesk API по client_id:
$udClientId = $USER->GetParam('UF_USEDESK_CLIENT_ID');
$tickets = $usedesk->get('/tickets', [
'client_id' => $udClientId,
'per_page' => 20,
'page' => (int)$_GET['page'] ?: 1,
]);
Список тікетів кешується на 60 секунд (\Bitrix\Main\Data\Cache).
Обробка webhooks з Usedesk
При зміні статусу тікету Usedesk надсилає webhook на наш обробник. Типове застосування: при закритті тікету (статус resolved) надіслати клієнту email з Бітрікс з пропозицією залишити відгук. Приклад обробника:
// /api/usedesk-webhook.php
$payload = json_decode(file_get_contents('php://input'), true);
// Верификация подписи
$sig = hash_hmac('sha256', file_get_contents('php://input'), USEDESK_WEBHOOK_SECRET);
if (!hash_equals($sig, $_SERVER['HTTP_X_USEDESK_SIGNATURE'] ?? '')) {
http_response_code(403); exit;
}
if ($payload['event'] === 'ticket.resolved') {
$email = $payload['ticket']['client']['email'] ?? '';
if ($email) {
\Bitrix\Main\Mail\Event::send([
'EVENT_NAME' => 'SUPPORT_RESOLVED_REVIEW_REQUEST',
'LID' => SITE_ID,
'C_FIELDS' => ['EMAIL' => $email, 'TICKET_ID' => $payload['ticket']['id']],
]);
}
}
Порівняння: інтеграція через API vs ручний імпорт
| Параметр |
Інтеграція через API |
Ручний імпорт/експорт |
| Швидкість оновлення |
Реальний час |
Раз на добу |
| Помилки в даних |
0% (автоматика) |
до 5% (людський фактор) |
| Навантаження на оператора |
Мінімальне |
10–15 хвилин на день |
| Масштабування |
Не обмежено |
Вимагає найму персоналу |
Що входить у роботу
- Налаштування API-клієнта — створення бібліотеки для роботи з Usedesk на PHP (Guzzle або cURL).
- Синхронізація клієнтів — мапінг користувачів Бітрікс в Usedesk через події реєстрації.
- Передача замовлень — автоматичне збагачення картки клієнта історією покупок.
- Віджет з персоналізацією — передача імені, email та ID користувача у віджет.
- Обробник webhook — прийом подій від Usedesk (статуси тікетів, нові повідомлення).
- Особистий кабінет — компонент для виведення тікетів на сайті Бітрікс.
- Документація та навчання — опис архітектури, інструкція для операторів.
Процес роботи та терміни
Ми працюємо ітераціями: аналітика → проєктування → реалізація → тестування → деплой.
| Етап |
Тривалість |
| Аналіз та збір вимог |
1 день |
| Проєктування схеми даних |
1 день |
| Розробка (API-клієнт, події, віджет, webhook, особистий кабінет) |
4–5 днів |
| Тестування на тестовому контурі |
1 день |
| Деплой та моніторинг |
0.5 дня |
| Разом |
7–9 днів |
Орієнтовний термін — від 7 до 9 робочих днів. Вартість інтеграції починається від 30 000 грн. Ми гарантуємо стабільну роботу інтеграції та надаємо постпроєктний супровід: виправлення помилок, доопрацювання, консультації.
Готові розпочати? Пишіть нам для оцінки вашого проєкту. Інтеграція під ключ за 7-9 днів. Зв'яжіться з нами, і ми надамо детальний комерційний розрахунок.
CommerceML: чому стандартний обмін — і порятунок, і пастка
Стандартний обмін через CommerceML 2.0 на типовому «Управлінні торгівлею» або «Комплексній автоматизації» заводиться за день-два. Товари, ціни, залишки, замовлення — все через XML-файли за розкладом. Для магазину на 3 000 позицій з парою оновлень на добу цього вистачає з запасом. Але як тільки каталог переростає 30 000 SKU, починаються проблеми: інтеграція 1С з Бітрікс на великих обсягах потребує нестандартних рішень.
Чому CommerceML гальмує на каталогах понад 100 000 товарів?
bitrix_1c_exchange.php генерує XML на стороні Бітрікса, 1С забирає та парсить. На великих каталогах парсер активно пише в тимчасову таблицю b_xml_tree — MySQL може стати колом. Ми бачили проект, де стандартний обмін 180 000 товарів займав 6 годин і повністю блокував сервер: ні адмінка, ні фронт не відкривалися. Рішення — інкрементальний обмін. В налаштуваннях вузла обміну на стороні 1С ставимо «Вивантажувати тільки змінені» та розбиваємо вивантаження на пакети по 500–1000 елементів. На стороні Бітрікса — кастомний обробник, який не перестворює b_xml_tree кожного разу, а працює через CIBlockXMLFile::ReadXMLToDatabase() з контролем порцій. Каталог у 200 000 SKU оновлюється за 8–12 хвилин.
Ще один підводний камінь — EXTERNAL_ID. При повторному імпорті Бітрікс зіставляє елементи інфоблоків за зовнішнім кодом. Якщо в 1С товар видалено та створено заново з новим GUID, на сайті з'являється дубль — зі старими відгуками на одній картці та нульовими на іншій. Лікується жорсткою прив'язкою за артикулом через кастомний обробник події OnBeforeIBlockElementAdd.
Як уникнути дублів при повторному імпорті?
Прив'язуємо товари не за GUID, а за артикулом. Перевірка на унікальність виконується до запису в інфоблок — дублікати виключаються навіть після перестворення номенклатури в 1С. На одному проекті з 50 000 товарів така схема запобігла появі 300 дублів на місяць і заощадила контент-менеджерам близько 20 годин ручного чищення.
Кастомні конфігурації 1С: коли CommerceML пасує
«У нас типова конфігурація» — каже кожен другий клієнт, а потім ми відкриваємо базу і бачимо 200 кастомних обробок, перейменовані реквізити та самописні документи реалізації. CommerceML працює з фіксованою структурою XML. Якщо в 1С змінили склад реквізитів номенклатури або додали нестандартний документ — обмін мовчки пропускає ці дані. Або падає з незрозумілою помилкою в журналі реєстрації 1С, а в Бітрікс нічого не пишеться.
У таких випадках робимо кастомне вивантаження. На стороні 1С пишемо обробку, яка формує JSON (парсити швидше, налагоджувати простіше) і відправляє через REST API Бітрікса. Повний контроль: які поля беремо, як трансформуємо, що робимо при конфлікті. Для важких випадків — D7 API з прямою роботою через \Bitrix\Catalog\ProductTable та \Bitrix\Sale\Order.
| Критерій |
CommerceML (стандарт) |
Кастомний REST (JSON) |
| Швидкість на 100 000+ SKU |
Низька (повний XML) |
Висока (інкрементальний JSON) |
| Гнучкість схеми |
Фіксована |
Довільна |
| Можливість розширення |
Обмежена |
Без обмежень |
| Простота налагодження |
Журнал реєстрації 1С |
Логи HTTP-запитів, Postman |
Коли потрібен кастомний REST замість CommerceML?
Кастомний REST виправданий при:
- нестандартних реквізитах номенклатури;
- множинних типах цін (роздріб, опт, дилерська, акційна, регіональна, валютна) — стандартний обмін передає лише один тип;
- мультискладі з різними залишками та необхідністю вибору складу на сайті.
Ціни, залишки та мультисклад
Стандартний обмін вміє передавати один тип ціни. В реальності їх може бути 15: кожна зі своєю групою покупців та пріоритетом. Мапінг між ціновими групами 1С та групами користувачів Бітрікса — окрема інженерна задача. Особливо коли знижки перетинаються і потрібно визначити, яка ціна перемагає.
Мультисклад додає ще один шар: товар є на складі в Москві, немає в Пітері, і «під замовлення» в Новосибірську. На сайті потрібно показати наявність по кожній точці, підключити вибір пункту самовивозу та розрахувати доставку від найближчого складу, де товар фізично є. Стандартний модуль складського обліку Бітрікс (catalog.store) справляється з відображенням, але логіку «звідки відвантажувати» пишемо окремо. Для одного виробничого холдингу ми реалізували кастомний агрегатор залишків, який за 2 секунди розраховував баланс по 8 складах — це скоротило кількість помилок відвантаження на 80%.
Замовлення та документообіг
Замовлення з сайту відлітає в 1С, формується реалізація, товар резервується. Статуси повертаються назад. Головний нюанс — часткове відвантаження: клієнт замовив 5 позицій, 3 є на складі, 2 прийдуть через тиждень. 1С формує два документи реалізації. Бітрікс з коробки не вміє розбивати одне замовлення на кілька відвантажень — доопрацьовуємо обробник OnSaleOrderSaved, який створює дочірні замовлення та синхронізує статуси по кожному.
Документи в особистому кабінеті — рахунки, акти, накладні з 1С — віддаємо через REST, PDF генерується на стороні 1С і кешується на CDN. Покупець завантажує не з 1С напряму (це вбило б сервер), а з кешу.
Рекомендація CommerceML: пакетний імпорт з контролем порцій знижує навантаження на MySQL та виключає блокування (джерело: Wikipedia).
Моніторинг: не «налаштував і забув»
Обмін може зламатися тихо: скрипт відпрацював, помилок в лозі немає, але 200 товарів не оновилися через невалідний UTF-8 в назві. Або 1С змінила формат дати в черговому оновленні — всі ціни прийшли нульовими.
Мінімальний набір, який ставимо на кожному проекті:
- Алерт в Telegram, якщо час обміну виріс у 3+ рази від середнього.
- Перевірка розбіжності залишків: скрипт порівнює
b_catalog_product.QUANTITY з тим, що віддає 1С, і сповіщає при дельті більше 5 %.
- Дашборд: остання синхронізація, кількість оброблених позицій, черга, помилки.
Для проектів з високим навантаженням додаємо асинхронні черги на Redis або RabbitMQ. Обмін не блокує веб-сервер, дані не втрачаються при короткочасному падінні 1С. На одному інтернет-магазині з оборотами 2 млн замовлень на рік ми впровадили таку схему — час відновлення після збоїв скоротився з 3 годин до 10 хвилин.
Зв'язка з Бітрікс24 для автоматизації документообігу
Якщо крім сайту є корпоративний портал на Бітрікс24 — зв'язуємо і його. Контрагенти з CRM летять в 1С, рахунки з 1С з'являються в картці угоди. Менеджер бачить дебіторку та взаєморозрахунки, не перемикаючись між вікнами. Закрили угоду — документи сформувалися самі.
Оплата надійшла в 1С → логіст отримує задачу на відвантаження в Бітрікс24. Товар відвантажений → менеджер бачить повідомлення. Автоматичні задачі за подіями з 1С — через вебхуки Бітрікс24 REST API. Така зв'язка скорочує ручне введення на 70% та виключає забуті відвантаження.
Як ми налаштовуємо інтеграцію: покроковий процес
-
Аудит конфігурації 1С. Дивимось структуру довідників, документів, реквізитів. Виявляємо кастомні доопрацювання. Оцінюємо обсяг даних (кількість SKU, замовлень, складів).
-
Проектування схеми обміну. Узгоджуємо набір даних: товари, ціни, залишки, замовлення, документи. Визначаємо інтервал синхронізації та механізм — CommerceML або кастомний REST.
-
Налаштування стандартного обміну. Налаштовуємо CommerceML, пакетний режим, прив'язку за артикулом. Перевіряємо коректність передачі даних на тестовому каталозі.
-
Розширена інтеграція. Для складних конфігурацій пишемо кастомні обробники на стороні 1С та Бітрікса. Підключаємо мультисклад, множинні ціни, часткове відвантаження.
-
Моніторинг та гарантія. Встановлюємо алерти, дашборд, документацію. Навчаємо операторів. Після запуску — гарантійна підтримка.
Типові налаштування обміну для каталогу 50 000 SKU
Пакетний режим: 500 елементів за крок. Прив'язка за артикулом. Період синхронізації: кожні 15 хвилин. Використовуємо агенти Бітрікса з тегованим кешуванням. На стороні 1С — обробка формування JSON замість XML для прискорення.
Строки та що входить в роботу
| Етап |
Опис |
Орієнтовний строк |
| Аналітика |
Аудит конфігурації 1С, структури обміну, поточних проблем |
1–2 дні |
| Проектування схеми |
Узгодження набору даних (товари, ціни, замовлення) та архітектури |
2–5 днів |
| Реалізація стандартного обміну |
Налаштування CommerceML, пакетного режиму, прив'язки за артикулом |
1–2 тижні |
| Розширена інтеграція |
Кастомний REST, мультисклад, множинні ціни, часткове відвантаження |
2–4 тижні |
| Повна кастомна зв'язка |
1С + сайт + Бітрікс24, асинхронні черги, моніторинг |
1–2 місяці |
Результат роботи включає: документовану схему обміну, налаштовані сценарії синхронізації, дашборд моніторингу, навчання операторів та гарантійну підтримку після запуску. Вартість розраховується індивідуально — вона залежить від складності конфігурації 1С, обсягу каталогу та необхідного ступеня автоматизації. Оцінимо ваш проект за 1 день — пишіть, обговоримо. Замовте інтеграцію — отримайте стабільний обмін за 1–2 тижні.
Ми провели понад 50 інтеграцій 1С для інтернет-магазинів та виробничих компаній. Середній досвід команди — 7 років, у нас є сертифіковані спеціалісти 1С-Бітрікс. Наш досвід гарантує, що обмін не зламається в перший же місяць і буде стабільно працювати роками. Наприклад, на проекті з каталогом 50 000 товарів автоматизація обміну заощадила клієнту близько 200 000 рублів на рік на операційних витратах.
Зв'яжіться з нами для безкоштовного аудиту вашої конфігурації 1С — знайдемо вузькі місця та запропонуємо оптимальне рішення.