Данила Пантелеев
Разработка2026-07-0617 мин чтения

Интеграция WordPress с российскими CRM: Битрикс24, amoCRM и МойСклад

Интеграция WordPress с российскими CRM: Битрикс24, amoCRM и МойСклад

Как интегрировать WordPress с Битрикс24, amoCRM и МойСклад через плагины, REST API и вебхуки. Примеры PHP-кода, ограничения API, безопасность и чек-лист внедрения.

Интеграция WordPress с российскими CRM: полное руководство по подключению Битрикс24, amoCRM и МойСклад

Введение: зачем интегрировать WordPress с CRM

WordPress CRM integration – это связка сайта на WordPress с системой управления клиентскими отношениями. Под неё попадают любые механизмы передачи данных: заявки с форм, синхронизация заказов WooCommerce, обновление статусов сделок, учёт остатков товаров.

Для российского бизнеса интеграция решает конкретные задачи:

  • Лидогенерация. Заявки с сайта автоматически попадают в воронку продаж.
  • E-commerce. Заказы из WooCommerce синхронизируются с CRM и складом.
  • Складской учёт. Остатки товаров на сайте актуализируются из МойСклад.
  • Маркетинг. CRM фиксирует источники заявок и повторные продажи.

Битрикс24, amoCRM и МойСклад – одни из самых распространённых решений на российском рынке. Битрикс24 объединяет CRM, задачи и коммуникации; amoCRM заточена под воронки продаж; МойСклад – под склад, закупки и производство.

Статья будет полезна руководителям, которые выбирают CRM, и техническим специалистам, которым предстоит реализация. Все примеры кода проверены на актуальных версиях API и учитывают типичные ошибки внедрений.

Выбор способа интеграции: плагины, REST API и вебхуки

Перед подключением важно понимать, какой механизм подходит под задачу.

СпособКогда использоватьПлюсыМинусы
Готовый плагинСтандартная задача: форма → лид, WooCommerce → заказБыстрая настройка, поддержка авторомОграниченная кастомизация, зависимость от обновлений
REST API + PHPНестандартная логика, кастомные поля, массовая синхронизацияГибкость, контроль данныхТребует разработки, нужно поддерживать
ВебхукиДвусторонний обмен: статусы сделок, обновления из CRMРеальное время, минимум запросовНужен публичный HTTPS-адрес, защита endpoint'ов

Когда достаточно плагина

Если на сайте стоит Contact Form 7, WPForms или Elementor Forms, и задача – только отправлять лиды в CRM, готовый плагин справится за 30–60 минут.

Когда нужна кастомная разработка

  • В CRM используются кастомные поля, воронки с несколькими этапами, роботы.
  • Нужно передавать не только контакт, но и содержимое корзины, скидки, UTM-метки.
  • Требуется двусторонняя синхронизация: статусы заказов возвращаются на сайт.

Требования к инфраструктуре

  • Хостинг с возможностью исходящих cURL-запросов. Рекомендуется PHP 8.0+ и WordPress 6.0+.
  • SSL-сертификат. Все три системы работают с вебхуками только по HTTPS.
  • Актуальные версии WooCommerce, если используется магазин.

Интеграция WordPress с Битрикс24

Плагины для Битрикс24

Официальных плагинов от «1С-Битрикс» для WordPress немного, но есть рабочие сторонние решения:

  • Integration of Bitrix24 with Contact Form 7 – передаёт заявки из Contact Form 7.
  • Bitrix24 – официальный плагин/виджет для встраивания форм и чата на сайт.
  • Flamix: Bitrix24 + WooCommerce / Contact Form 7 – серия платных коннекторов для синхронизации заказов и форм.

Перед покупкой проверяйте: поддерживает ли плагин входящие вебхуки (обновление статусов из CRM) и кастомные поля сделок.

Настройка подключения по вебхуку

В Битрикс24 вебхук настраивается в разделе Разработчикам → Вебхуки → Входящий вебхук. Создайте вебхук с правами на CRM.

Пример URL входящего вебхука:

text
https://your.bitrix24.ru/rest/1/WEBHOOK_TOKEN/crm.lead.add.json

Важно: REST API и вебхуки в облачном Битрикс24 доступны с платных тарифов. Бесплатный план ограничен и не подходит для полноценной интеграции через API.

Пример отправки лида из WordPress в Битрикс24

Добавьте код в functions.php дочерней темы или в собственный плагин:

php
function pt_send_lead_to_bitrix24( $data ) { $webhook_url = 'https://your.bitrix24.ru/rest/1/WEBHOOK_TOKEN/crm.lead.add.json'; $payload = [ 'fields' => [ 'TITLE' => 'Заявка с сайта: ' . sanitize_text_field( $data['service'] ), 'NAME' => sanitize_text_field( $data['name'] ), 'PHONE' => [ [ 'VALUE' => sanitize_text_field( $data['phone'] ), 'VALUE_TYPE' => 'WORK' ] ], 'EMAIL' => [ [ 'VALUE' => sanitize_email( $data['email'] ), 'VALUE_TYPE' => 'WORK' ] ], 'COMMENTS' => sanitize_textarea_field( $data['message'] ), 'SOURCE_ID' => 'WEB', 'UTM_SOURCE' => sanitize_text_field( $data['utm_source'] ?? '' ), 'UTM_MEDIUM' => sanitize_text_field( $data['utm_medium'] ?? '' ), ], 'params' => [ 'REGISTER_SONET_EVENT' => 'Y' ], ]; $response = wp_remote_post( $webhook_url, [ 'body' => $payload, 'timeout' => 30, ] ); if ( is_wp_error( $response ) ) { error_log( 'Bitrix24 lead error: ' . $response->get_error_message() ); return false; } $body = json_decode( wp_remote_retrieve_body( $response ), true ); return $body['result'] ?? false; }

Подключение к форме:

php
add_action( 'wpcf7_mail_sent', 'pt_cf7_to_bitrix24' ); function pt_cf7_to_bitrix24( $contact_form ) { $submission = WPCF7_Submission::get_instance(); if ( ! $submission ) { return; } $data = $submission->get_posted_data(); pt_send_lead_to_bitrix24( $data ); }

Ограничения REST API Битрикс24

Лимит запросов зависит от тарифа:

  • На большинстве облачных тарифов – до 2 запросов в секунду.
  • На Enterprise – до 5 запросов в секунду.

Лимит считается по IP-адресу и аккаунту. При массовой синхронизации используйте batch-методы (до 50 запросов в одном вызове) и exponential backoff при получении ошибки QUERY_LIMIT_EXCEEDED. Примитивный sleep(1) между запросами не гарантирует отсутствие блокировок.

Синхронизация статусов сделок

Для обратной передачи статусов создайте исходящий вебхук в Битрикс24:

text
https://your-site.ru/wp-json/pt/v1/bitrix24/status

В WordPress зарегистрируйте endpoint:

php
add_action( 'rest_api_init', function () { register_rest_route( 'pt/v1', '/bitrix24/status', [ 'methods' => 'POST', 'callback' => 'pt_handle_bitrix24_status', 'permission_callback' => 'pt_verify_bitrix24_request', ] ); } ); function pt_verify_bitrix24_request( $request ) { // Битрикс24 использует динамический пул IP-адресов. // Актуальный список: https://dl.bitrix24.com/webhook/app-world.json // В идеале проверяйте подпись или секретный заголовок. return true; } function pt_handle_bitrix24_status( $request ) { $body = $request->get_json_params(); $deal_id = absint( $body['data']['FIELDS']['ID'] ?? 0 ); $deal_data = pt_get_bitrix24_deal( $deal_id ); if ( ! empty( $deal_data['ORDER_ID'] ) ) { update_post_meta( $deal_data['ORDER_ID'], '_bitrix24_status', sanitize_text_field( $deal_data['STAGE_ID'] ) ); } return [ 'success' => true ]; }

Типичные ошибки

  • Невалидный токен. Битрикс24 возвращает NO_AUTH_FOUND или INVALID_CREDENTIALS. Проверьте, не истёк срок входящего вебхука.
  • Превышение лимитов. Используйте batch и backoff вместо последовательных одиночных запросов.
  • Дублирование лидов. Перед созданием лида делайте поиск по телефону или email через crm.duplicate.findbycomm.

Интеграция WordPress с amoCRM

Плагины и коннекторы

amoCRM имеет более развитую экосистему интеграций для WordPress:

  • amoForms – официальные виджеты форм.
  • Contact Form 7 – amoCRM Integration – популярный бесплатный плагин.
  • WPCF7 amoCRM и аналоги для WPForms.
  • Коммерческие решения для WooCommerce.

Получение токена

В новых аккаунтах amoCRM используется OAuth 2.0. Для серверной интеграции нужно:

  1. Создать интеграцию в личном кабинете.
  2. Получить client_id и client_secret.
  3. Реализовать обмен authorization code на access_token и refresh_token.

Для простых случаев можно использовать личный токен из раздела Настройки → API.

Цены: актуальные тарифы amoCRM см. на amocrm.ru. Минимальные решения для бизнеса обычно начинаются от ~749 ₽/мес.

Пример создания сделки и контакта через REST API

php
function pt_send_to_amocrm( $data ) { $subdomain = 'yourcompany'; $access_token = defined( 'AMOCRM_ACCESS_TOKEN' ) ? AMOCRM_ACCESS_TOKEN : ''; $base_url = "https://{$subdomain}.amocrm.ru/api/v4"; $contact = [ 'name' => sanitize_text_field( $data['name'] ), 'custom_fields_values' => [ [ 'field_code' => 'PHONE', 'values' => [ [ 'value' => sanitize_text_field( $data['phone'] ) ] ], ], [ 'field_code' => 'EMAIL', 'values' => [ [ 'value' => sanitize_email( $data['email'] ) ] ], ], ], ]; $response = wp_remote_post( "{$base_url}/contacts", [ 'headers' => [ 'Authorization' => 'Bearer ' . $access_token, 'Content-Type' => 'application/json', ], 'body' => json_encode( [ $contact ] ), 'timeout' => 30, ] ); if ( is_wp_error( $response ) ) { error_log( 'amoCRM contact error: ' . $response->get_error_message() ); return false; } $body = json_decode( wp_remote_retrieve_body( $response ), true ); $contact_id = $body['_embedded']['contacts'][0]['id'] ?? 0; if ( ! $contact_id ) { return false; } $lead = [ 'name' => 'Заявка с сайта', 'price' => isset( $data['price'] ) ? intval( $data['price'] ) : 0, '_embedded' => [ 'contacts' => [ [ 'id' => $contact_id ] ], ], ]; $lead_response = wp_remote_post( "{$base_url}/leads", [ 'headers' => [ 'Authorization' => 'Bearer ' . $access_token, 'Content-Type' => 'application/json', ], 'body' => json_encode( [ $lead ] ), 'timeout' => 30, ] ); return ! is_wp_error( $lead_response ); }

Обработка входящих вебхуков из amoCRM

amoCRM отправляет вебхуки на указанный URL при изменении сделок, контактов или задач. Пример приёма:

php
add_action( 'rest_api_init', function () { register_rest_route( 'pt/v1', '/amocrm/webhook', [ 'methods' => 'POST', 'callback' => 'pt_handle_amocrm_webhook', 'permission_callback' => '__return_true', ] ); } ); function pt_handle_amocrm_webhook( $request ) { $body = $request->get_body_params(); if ( empty( $body['leads']['status'] ) ) { return [ 'success' => true ]; } foreach ( $body['leads']['status'] as $lead ) { $status_id = sanitize_text_field( $lead['status_id'] ); $lead_id = absint( $lead['id'] ); $order_id = pt_get_order_by_amocrm_lead_id( $lead_id ); if ( $order_id ) { $order = wc_get_order( $order_id ); if ( $order ) { $order->update_status( pt_map_amocrm_status( $status_id ) ); } } } return [ 'success' => true ]; }

Частые проблемы

  • Истечение access-токена. Access-токен живёт 24 часа. Реализуйте автоматическое обновление через refresh_token.
  • Структура воронок. ID воронок и статусов различаются между аккаунтами. Храните их в настройках плагина.
  • Кастомные поля. В amoCRM поля часто создаются вручную. Перед отправкой получайте список полей через /api/v4/leads/custom_fields.

Интеграция WordPress с МойСклад

Зачем связывать WordPress и МойСклад

МойСклад чаще всего нужен не как CRM, а как система учёта. Типичные сценарии:

  • Выгрузка каталога товаров из МойСклад на сайт.
  • Проверка остатков перед оформлением заказа.
  • Создание заказов покупателя в МойСклад из WooCommerce.

Способы интеграции

  • Готовые плагины для WooCommerce, включая официальный плагин «МойСклад».
  • JSON API МойСклад – полноценный REST-интерфейс.
  • Вебхуки МойСклад – уведомления об изменениях товаров, заказов, контрагентов.

Важно: актуальный базовый URL JSON API МойСклад – https://api.moysklad.ru/api/remap/1.2. Домен online.moysklad.ru устарел.

Тарифы: бесплатный тариф МойСклад сильно ограничен (100 товаров/контрагентов/документов, 1 сотрудник). Для полноценной интеграции с WooCommerce обычно нужен тариф «Базовый» или выше. Актуальные цены см. на moysklad.ru/subscription.

Пример получения остатков товара через JSON API

php
function pt_get_moysklad_stock( $product_uuid ) { $login = defined( 'MOYSKLAD_LOGIN' ) ? MOYSKLAD_LOGIN : ''; $pass = defined( 'MOYSKLAD_PASSWORD' ) ? MOYSKLAD_PASSWORD : ''; $url = 'https://api.moysklad.ru/api/remap/1.2/entity/assortment'; $response = wp_remote_get( add_query_arg( [ 'filter' => 'id=' . urlencode( $product_uuid ), ], $url ), [ 'headers' => [ 'Authorization' => 'Basic ' . base64_encode( "{$login}:{$pass}" ), ], 'timeout' => 30, ] ); if ( is_wp_error( $response ) ) { return null; } $body = json_decode( wp_remote_retrieve_body( $response ), true ); $item = $body['rows'][0] ?? null; if ( ! $item ) { return null; } return [ 'name' => $item['name'], 'stock' => $item['stock'] ?? 0, 'price' => $item['salePrices'][0]['value'] ?? 0, ]; }

Синхронизация заказов WooCommerce с МойСклад

В JSON API МойСклад сущности идентифицируются по UUID, а не по артикулу или коду. Храните UUID товара в мета-поле WooCommerce (_moysklad_uuid) и подставляйте его в meta.href.

php
add_action( 'woocommerce_thankyou', 'pt_create_moysklad_order', 10, 1 ); function pt_create_moysklad_order( $order_id ) { $order = wc_get_order( $order_id ); if ( ! $order ) { return; } $login = defined( 'MOYSKLAD_LOGIN' ) ? MOYSKLAD_LOGIN : ''; $pass = defined( 'MOYSKLAD_PASSWORD' ) ? MOYSKLAD_PASSWORD : ''; $positions = []; foreach ( $order->get_items() as $item ) { $product = $item->get_product(); $product_uuid = $product ? $product->get_meta( '_moysklad_uuid' ) : ''; if ( ! $product_uuid ) { continue; } $positions[] = [ 'quantity' => $item->get_quantity(), 'price' => $item->get_total() * 100, 'assortment' => [ 'meta' => [ 'href' => 'https://api.moysklad.ru/api/remap/1.2/entity/product/' . $product_uuid, 'type' => 'product', ], ], ]; } $payload = [ 'name' => 'Заказ с сайта №' . $order_id, 'positions' => $positions, 'sum' => $order->get_total() * 100, 'organization' => [ 'meta' => [ 'href' => 'https://api.moysklad.ru/api/remap/1.2/entity/organization/YOUR_ORG_UUID', 'type' => 'organization', ], ], ]; wp_remote_post( 'https://api.moysklad.ru/api/remap/1.2/entity/customerorder', [ 'headers' => [ 'Authorization' => 'Basic ' . base64_encode( "{$login}:{$pass}" ), 'Content-Type' => 'application/json', ], 'body' => json_encode( $payload ), 'timeout' => 30, ] ); }

Ограничения и лимиты

  • Лимит запросов. МойСклад ограничивает частоту: не более 45 запросов в течение 3 секунд на один аккаунт.
  • UUID вместо кода. В API МойСклад многие сущности идентифицируются по UUID. Для надёжности храните UUID товара в мета-поле WooCommerce.
  • Вебхуки доступны не на всех тарифах. Проверяйте возможность подписки на события в вашем тарифе.

Сравнение Битрикс24, amoCRM и МойСклад для WordPress

КритерийБитрикс24amoCRMМойСклад
Сложность подключенияСредняяСредняяНизкая для остатков, средняя для заказов
СтоимостьБесплатный план ограничен; API – с платных тарифовАктуальные цены см. на amocrm.ruБесплатный тариф ограничен; платные – от 495 ₽/мес, для WooCommerce обычно нужен «Базовый»
Лучше всего дляУниверсальной CRM, задач, коммуникацийВоронок продаж, лидогенерацииСклада, учёта, e-commerce
Интеграция с WooCommerceПлагины + APIПлагины + APIОфициальный плагин + API
Двусторонний обменВебхуки + RESTВебхуки + RESTВебхуки + JSON API
Поддержка кастомных полейДаДаДа

Рекомендации по выбору

  • Лидогенерация и продажи: amoCRM или Битрикс24. amoCRM проще в настройке воронок; Битрикс24 шире по функциям.
  • E-commerce + склад: МойСклад + WooCommerce. При необходимости передавайте лиды из форм в amoCRM или Битрикс24.
  • Комплексная автоматизация: WordPress + WooCommerce + МойСклад + amoCRM/Битрикс24. Связка требует разработки, но покрывает полный цикл.

Безопасность токенов и данных при интеграции

Где хранить API-токены

Никогда не храните токены в открытом виде в коде темы или плагина. Используйте:

  • Константы в wp-config.php вне корня веб-сервера, если возможно.
  • Переменные окружения сервера.
  • Плагины секретов, например WP Secrets или аналоги.

Пример в wp-config.php:

php
define( 'BITRIX24_WEBHOOK_TOKEN', getenv( 'BITRIX24_WEBHOOK_TOKEN' ) ?: '' ); define( 'AMOCRM_ACCESS_TOKEN', getenv( 'AMOCRM_ACCESS_TOKEN' ) ?: '' ); define( 'MOYSKLAD_LOGIN', getenv( 'MOYSKLAD_LOGIN' ) ?: '' ); define( 'MOYSKLAD_PASSWORD', getenv( 'MOYSKLAD_PASSWORD' ) ?: '' );

Защита endpoint'ов

Все вебхук-endpoint'ы должны проверять источник запроса. Минимальный набор мер:

  • Проверка подписи или секретного заголовка, если CRM их поддерживает.
  • Ограничение по IP с актуальным списком серверов CRM. Для Битрикс24 список публикуется по адресу https://dl.bitrix24.com/webhook/app-world.json.
  • Логирование всех входящих запросов.
  • Rate limiting.

Пример проверки секретного заголовка:

php
function pt_verify_crm_webhook( $request ) { $secret = defined( 'CRM_WEBHOOK_SECRET' ) ? CRM_WEBHOOK_SECRET : ''; $header = $request->get_header( 'x-crm-signature' ); if ( ! $secret || ! hash_equals( $secret, $header ) ) { return new WP_Error( 'forbidden', 'Access denied', [ 'status' => 403 ] ); } return true; }

Валидация и логирование

php
function pt_sanitize_crm_data( $data ) { return [ 'name' => sanitize_text_field( $data['name'] ?? '' ), 'phone' => preg_replace( '/[^0-9+]/', '', $data['phone'] ?? '' ), 'email' => sanitize_email( $data['email'] ?? '' ), 'message' => sanitize_textarea_field( $data['message'] ?? '' ), ]; }

Логируйте ошибки интеграции отдельно от общих логов WordPress:

php
function pt_log_crm_error( $message ) { $log_file = WP_CONTENT_DIR . '/uploads/pt-crm-errors.log'; error_log( gmdate( 'Y-m-d H:i:s' ) . ' ' . $message . "\n", 3, $log_file ); }

Резервное копирование и план отката

Перед запуском интеграции:

  1. Сделайте полный бэкап сайта и базы данных.
  2. Настройте тестовое окружение или используйте песочницу CRM.
  3. Подготовьте переключатель для отключения интеграции без правки кода:
php
if ( ! defined( 'PT_CRM_INTEGRATION_ENABLED' ) || ! PT_CRM_INTEGRATION_ENABLED ) { return; }

Пошаговый чек-лист внедрения интеграции

  1. Аудит бизнес-процессов. Зафиксируйте, какие данные должны передаваться и в каком направлении.
  2. Выбор CRM или учётной системы. Определитесь с одной основной системой и возможными вспомогательными.
  3. Проверка форм на сайте. Убедитесь, что все поля имеют понятные name и валидируются.
  4. Выбор метода интеграции. Плагин, REST API, вебхуки или комбинация.
  5. Тестовое подключение. Отправьте 10–20 тестовых заявок, проверьте дублирование и ошибки.
  6. Настройка маппинга полей. Сопоставьте поля формы с полями CRM.
  7. Запуск в продакшен. Включайте интеграцию постепенно, мониторьте логи первые 2–3 недели.

Часто задаваемые вопросы

Можно ли интегрировать WordPress с CRM без программиста?

Да, если задача стандартная: заявка из Contact Form 7 или WPForms → лид в amoCRM/Битрикс24. Для этого подходят готовые плагины. Двусторонняя синхронизация, кастомные поля и обмен с МойСклад обычно требуют разработки.

Какая CRM лучше для WooCommerce?

Для склада и учёта – МойСклад. Для воронки продаж и лидов – amoCRM или Битрикс24. Часто используют комбинацию: WooCommerce + МойСклад для товаров и заказов, amoCRM/Битрикс24 для CRM.

Как защитить вебхук-endpoint от посторонних запросов?

Используйте проверку подписи или секретного заголовка, ограничение по IP-адресам CRM, логирование и rate limiting. Никогда не полагайтесь только на security through obscurity – секретный URL недостаточен.

Заключение

WordPress CRM integration для российского рынка – это не одна универсальная схема, а три разных подхода:

  • Битрикс24 подходит для комплексной работы: лиды, задачи, коммуникации, склад.
  • amoCRM – для чистых воронок продаж и быстрой автоматизации.
  • МойСклад – для складского учёта и синхронизации товаров с WooCommerce.

Что можно сделать самостоятельно: настроить готовый плагин, создать простой вебхук, отправлять лиды через PHP. Что стоит отдать разработчику: двусторонний обмен, синхронизацию заказов с кастомными полями, объединение нескольких систем.

Если интеграция кажется сложной – начните с аудита. Чёткое понимание, какие данные и куда должны идти, сокращает время внедрения в 2–3 раза и убирает лишние доработки.

Автор: Данила Пантелеев · 2026-07-06

Нужна помощь с реализацией?

Описывайте задачу — разберём что подойдёт под ваш проект

Написать в TelegramЗаказать на Kwork