Налаштування передачі замовлень з сайту до CRM Бітрікс24
Замовлення оформлено на сайті — у CRM його немає. Менеджер обробляє замовлення в особистому кабінеті сайту, не бачачи історії комунікацій з клієнтом, завдань і дзвінків з Бітрікс24. Зв'язати дві системи можна через подію OnSaleOrderSaved та REST API.
Що передається до CRM
При створенні замовлення на сайті створюємо в Бітрікс24:
-
Контакт (
crm.contact.add) — за даними покупця: ім'я, телефон, email. -
Угоду (
crm.deal.add) — із сумою замовлення, статусом, прив'язкою до контакту. -
Товарні позиції (
crm.deal.productrows.set) — список товарів, кількість, ціна.
Якщо покупець — юридична особа, додатково створюємо Компанію (crm.company.add) і прив'язуємо до угоди через COMPANY_ID.
Обробник події замовлення
// В init.php або обробнику модуля
AddEventHandler('sale', 'OnSaleOrderSaved', 'onOrderSavedHandler');
function onOrderSavedHandler($order) {
$isNew = $order->isNew();
if (!$isNew) return; // обробляємо лише нові замовлення
$orderId = $order->getId();
$orderProps = $order->getPropertyCollection();
$basket = $order->getBasket();
// Збираємо дані покупця з властивостей замовлення
$name = $orderProps->getItemByOrderPropertyCode('NAME')->getValue();
$phone = $orderProps->getItemByOrderPropertyCode('PHONE')->getValue();
$email = $orderProps->getItemByOrderPropertyCode('EMAIL')->getValue();
// Передаємо до Б24
$b24 = new B24Integration();
$contactId = $b24->findOrCreateContact($phone, $email, $name);
$dealId = $b24->createDeal($orderId, $order->getPrice(), $contactId);
$b24->setDealProducts($dealId, $basket);
}
Мепінг статусів замовлення в стадії угоди
Статуси з b_sale_status (таблиця сайту) потрібно привести до стадій воронки Бітрікс24. Стадії воронки отримуємо через crm.dealcategory.stage.list:
| Статус замовлення | Код статусу | Стадія угоди Б24 |
|---|---|---|
| Новий | N | NEW |
| Підтверджений | P | PREPARATION |
| Оплачений | A | EXECUTING |
| Відвантажений | D | FINAL_INVOICE |
| Завершений | F | WON |
| Скасований | C | LOSE |
При зміні статусу замовлення на сайті — викликаємо crm.deal.update з новою стадією. ID угоди Бітрікс24 зберігаємо у властивості замовлення B24_DEAL_ID або в b_sale_order_props_value.
Зберігання зв'язки замовлення–угода
// Зберігаємо ID угоди у властивостях замовлення
$dealProp = $orderProps->getItemByOrderPropertyCode('B24_DEAL_ID');
if ($dealProp) {
$dealProp->setValue($dealId);
$order->save();
}
Товарні позиції
crm.deal.productrows.set замінює весь список позицій угоди. Кожна позиція:
$products[] = [
'PRODUCT_NAME' => $basketItem->getField('NAME'),
'PRICE' => $basketItem->getPrice(),
'QUANTITY' => $basketItem->getQuantity(),
'CURRENCY_ID' => 'UAH',
'PRODUCT_ID' => 0, // якщо немає каталогу в Б24 — 0
];
Якщо в Бітрікс24 є каталог товарів і він синхронізований з сайтом, передаємо реальний PRODUCT_ID для коректної аналітики по товарах.
Повторні замовлення від клієнта
При повторному замовленні того ж клієнта перевіряємо наявність контакту через crm.duplicate.findByComm за телефоном. Якщо контакт існує — використовуємо його ID, не створюємо дубль. Нова угода прив'язується до наявного контакту.
Базове налаштування передачі нових замовлень — 6–8 годин. Повна двостороння синхронізація статусів — 2–3 робочих дні.







