Интеграция 1С-Битрикс с amoCRM
Заказы в Битрикс, лиды в amoCRM, менеджеры переключаются между двумя вкладками и вручную копируют данные. Контакт клиента в CRM не совпадает с данными в заказе, история переписки разорвана. Интеграция устраняет ручной труд и строит единую воронку: от первого визита на сайт до закрытия сделки. Разберём архитектуру, API amoCRM, типовые потоки данных и подводные камни.
Потоки данных
| Поток | Направление | Триггер | Приоритет |
|---|---|---|---|
| Лиды с форм сайта | Битрикс → amoCRM | Отправка формы | Высокий |
| Заказы | Битрикс → amoCRM | Оформление заказа | Критичный |
| Контакты | Битрикс ↔ amoCRM | При создании лида/заказа | Высокий |
| Статусы сделок | amoCRM → Битрикс | Смена этапа воронки | Средний |
| Товары каталога | Битрикс → amoCRM | По расписанию | Низкий |
Основной поток — заказы и лиды из Битрикс в amoCRM. Обратный поток (статусы) нужен, если на сайте есть личный кабинет с отслеживанием обработки заказа.
API amoCRM v4
amoCRM использует OAuth 2.0 с long-lived refresh token. После авторизации через интеграцию (раздел Настройки → Интеграции в amoCRM) вы получаете client_id, client_secret, redirect_uri. Первичный обмен кода на токены — стандартный OAuth-флоу. Refresh token обновляется при каждом обновлении access token (срок жизни access token — 20 минут).
Хранение токенов в Битрикс: таблица b_option модуля или отдельная таблица. Обязательно шифруйте или храните вне публичной директории. Access token кэшируйте в runtime, refresh вызывайте только при 401.
Базовый URL API: https://{subdomain}.amocrm.ru/api/v4/.
Ключевые эндпоинты:
-
POST /leads— создание сделки (лида). -
POST /contacts— создание контакта. -
POST /leads/complex— создание сделки с контактом и компанией одним запросом. Рекомендуемый метод — атомарная операция. -
GET /leads/{id}— получение сделки. -
PATCH /leads/{id}— обновление сделки (смена этапа, добавление полей). -
POST /catalogs/{catalog_id}/elements— товары в каталоге amoCRM.
Ограничения: 7 запросов в секунду на аккаунт. При превышении — HTTP 429 с заголовком Retry-After.
Создание сделки при оформлении заказа
Обработчик события OnSaleOrderSaved (модуль sale):
use Bitrix\Main\EventManager;
EventManager::getInstance()->addEventHandler(
'sale', 'OnSaleOrderSaved',
['AmoCrmIntegration', 'onOrderSaved']
);
Метод onOrderSaved извлекает данные заказа и формирует запрос к amoCRM:
-
Поиск контакта —
GET /contacts?query={phone_or_email}. Если найден — используем его ID. Если нет — создаём нового. -
Создание сделки —
POST /leads/complexс привязкой к контакту, названием «Заказ #{ORDER_ID}», суммой, UTM-метками в кастомных полях.
Маппинг полей заказа Битрикс → amoCRM:
| Битрикс (заказ) | amoCRM (сделка) | Тип поля |
|---|---|---|
PRICE (сумма заказа) |
price |
Стандартное |
STATUS_ID |
status_id (этап воронки) |
Стандартное |
| Имя + Фамилия покупателя | contacts[0].first_name/last_name |
Контакт |
| Телефон | contacts[0].custom_fields (PHONE) |
Контакт |
contacts[0].custom_fields (EMAIL) |
Контакт | |
| Список товаров | Примечание или каталог amoCRM | Кастомное |
| UTM-метки (из cookie/свойств) | Кастомные поля сделки | Кастомное |
UTM-метки — отдельная задача. Битрикс из коробки не сохраняет UTM в заказе. Нужно ловить их на фронте (JavaScript), сохранять в cookie или $_SESSION, а при оформлении заказа записывать в свойства (PROPERTY_UTM_SOURCE, PROPERTY_UTM_MEDIUM и т.д.). Оттуда — в кастомные поля сделки amoCRM.
Синхронизация статусов обратно
amoCRM поддерживает webhooks — при смене этапа сделки отправляет POST на указанный URL. Создаём обработчик /local/tools/amocrm_webhook.php:
- Принимаем POST от amoCRM (массив
leads[status][0]). - Извлекаем
idсделки иstatus_id(ID этапа воронки). - По
idсделки находим заказ Битрикс (через кастомное поле заказаPROPERTY_AMO_LEAD_IDили таблицу маппинга). - Обновляем статус заказа через
\Bitrix\Sale\Order::load($orderId)→setField('STATUS_ID', $mappedStatus)→save().
Маппинг статусов воронки amoCRM → статусов заказа Битрикс хранится в конфигурации: массив [amo_status_id => bitrix_status_id].
Безопасность webhook: amoCRM не подписывает запросы. Проверяйте IP отправителя (список IP amoCRM в документации) или используйте секретный параметр в URL.
Обработка форм сайта
Формы обратной связи, callback, вопросы — всё это лиды. Два подхода:
-
Через веб-формы Битрикс — обработчик
OnAfterResultAddмодуляformилиOnAfterFormResultAddсоздаёт сделку в amoCRM. - Через amoCRM формы — JS-виджет amoCRM на сайте, данные идут напрямую в CRM, минуя Битрикс. Проще, но теряется связь с Битрикс.
Рекомендация — первый вариант. Данные сначала сохраняются в Битрикс (надёжное хранение), затем асинхронно уходят в amoCRM.
Очередь и обработка ошибок
amoCRM API может быть недоступен (HTTP 500, 429, сетевая ошибка). Отправку заказов и лидов ставьте в очередь:
- Таблица
amocrm_queueс полямиid,type(lead/order/status),payload(JSON),attempts,status,last_error,created_at. - Агент или cron-скрипт обрабатывает очередь каждую минуту. При ошибке — инкремент
attempts, приattempts > 5—status = 'failed', уведомление.
Сроки
| Этап | Время |
|---|---|
| OAuth-интеграция + хранение токенов | 1 день |
| Передача заказов → сделки | 2-3 дня |
| Контакты: поиск дублей + создание | 1-2 дня |
| UTM-метки: сбор + передача | 1 день |
| Webhook обратной синхронизации статусов | 1-2 дня |
| Формы → лиды | 1 день |
| Очередь + обработка ошибок | 1 день |
| Тестирование, edge cases | 1-2 дня |
| Итого | 1-2 недели |







