Настройка передачи заказов с сайта в 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' => 'RUB',
'PRODUCT_ID' => 0, // если нет каталога в Б24 — 0
];
Если в Битрикс24 есть каталог товаров и он синхронизирован с сайтом, передаём реальный PRODUCT_ID для корректной аналитики по товарам.
Повторные заказы от клиента
При повторном заказе того же клиента проверяем наличие контакта через crm.duplicate.findByComm по телефону. Если контакт существует — используем его ID, не создаём дубль. Новая сделка привязывается к существующему контакту.
Базовая настройка передачи новых заказов — 6–8 часов. Полная двусторонняя синхронизация статусов — 2–3 рабочих дня.







