Интеграция WordPress с CRM/API

Автор:vkuzyomko

Интеграция WordPress с CRM/API

Краткий ответ: интеграция WordPress с CRM/API нужна, чтобы заявки, заказы WooCommerce, регистрации, формы, UTM-метки и данные клиентов автоматически передавались из сайта в CRM, ERP, Google Sheets, Telegram, email-маркетинг или другую внешнюю систему. Это убирает ручной перенос данных, уменьшает ошибки менеджеров и помогает быстрее обрабатывать обращения.

Правильная интеграция WordPress с CRM — это не просто “отправить форму по API”. Нужно учесть безопасность токенов, валидацию данных, повторы, логи ошибок, очередь отправки, защиту от дублей, таймауты API, работу с WooCommerce-заказами и сценарий, что делать, если CRM временно недоступна.

Причина

Обычный WordPress хранит данные внутри сайта: формы, пользователи, заказы, комментарии, мета-поля. Но бизнес часто работает в CRM: там ведутся лиды, сделки, клиенты, задачи, статусы, воронки продаж и история общения.

Если сайт и CRM не связаны, появляются типичные проблемы:

  • менеджер вручную копирует заявки из почты в CRM;
  • часть заявок теряется из-за спама или невнимательности;
  • невозможно быстро понять источник заявки: Google Ads, SEO, Facebook, TikTok, email;
  • заказы WooCommerce не попадают в CRM автоматически;
  • статусы заказов на сайте и в CRM расходятся;
  • клиенты дублируются из-за разных телефонов или email;
  • нет логов: непонятно, ушла заявка в CRM или нет;
  • CRM API временно не отвечает, а сайт просто молча теряет данные;
  • форма визуально отправилась, но менеджер заявку не получил.

Если нужно быстро дублировать заявки в мессенджер, можно дополнительно настроить интеграцию WordPress с Telegram. Но Telegram лучше использовать как уведомление, а CRM — как основное место хранения лидов и заказов.

Что можно интегрировать через WordPress API

Источник в WordPress Что передавать в CRM Зачем
Contact Form 7 Имя, телефон, email, сообщение, страница, UTM Создание лида или сделки
Кастомная форма Любые поля формы и технические данные Точная логика под бизнес
WooCommerce Заказ, товары, сумма, клиент, доставка, оплата Передача заказов в CRM
Регистрация пользователя Имя, email, роль, источник регистрации Создание контакта в CRM
Личный кабинет Заявки, статусы, действия пользователя Синхронизация клиентской истории
LMS или закрытый портал Курсы, группы, прогресс, компании CRM для обучения и B2B-клиентов
Webhook из CRM Статус сделки, оплаты, доступы, задачи Обратная синхронизация с сайтом

Основные варианты интеграции WordPress с CRM

1. Готовый плагин CRM

Подходит, если CRM уже имеет официальный WordPress/WooCommerce-плагин и задача стандартная: передать заказ, создать клиента, обновить статус.

Плюсы: быстрое подключение, настройки в админке, меньше ручного кода.

Минусы: ограниченная логика, зависимость от автора плагина, не всегда можно передать кастомные поля и UTM так, как нужно.

2. Webhook

Webhook — простой вариант, когда CRM даёт URL, на который WordPress отправляет данные формы или заказа.

Плюсы: быстро, удобно для заявок и заказов.

Минусы: часто мало контроля над ошибками, повторами и сложной структурой данных.

3. REST API

REST API подходит для более точной интеграции: создать контакт, проверить дубль, создать сделку, добавить товары, прикрепить UTM, обновить статус.

Плюсы: гибкость, контроль логики, можно обрабатывать сложные сценарии.

Минусы: нужно писать код, вести логи и учитывать ошибки API.

4. Отдельный WordPress-плагин

Если интеграция важна для бизнеса, лучше делать отдельный модуль, а не вставлять код в functions.php. Это особенно актуально для WooCommerce, CRM, API, cron, очередей и логов. Такой подход похож на разработку WordPress-плагина под заказ, где логика отделена от темы и удобна для поддержки.

Диагностика

Перед разработкой интеграции нужно понять не только “куда отправлять данные”, а весь путь заявки: от формы на сайте до сделки в CRM.

Что нужно проверить до начала работы

  • какая CRM используется;
  • есть ли API-документация;
  • какой тип авторизации нужен: API key, Bearer token, OAuth2, Basic Auth;
  • какие сущности есть в CRM: лид, контакт, сделка, заказ, задача;
  • какие поля обязательны;
  • нужно ли проверять дубли по телефону или email;
  • нужно ли передавать UTM-метки;
  • нужно ли передавать товары WooCommerce;
  • должны ли статусы возвращаться из CRM обратно на сайт;
  • какой лимит запросов у API;
  • что делать, если CRM недоступна;
  • где хранить логи интеграции;
  • нужна ли очередь повторной отправки.

Типичные симптомы проблем

  • форма отправляется, но лид в CRM не создаётся;
  • в CRM создаётся контакт без телефона или email;
  • UTM-метки теряются;
  • заказ WooCommerce попадает без товаров;
  • один клиент создаётся несколько раз;
  • CRM возвращает ошибку 401, 403, 404, 422 или 500;
  • API token работает в Postman, но не работает на сайте;
  • хостинг блокирует внешние HTTP-запросы;
  • сайт зависает, пока ждёт ответ CRM;
  • после обновления плагина формы интеграция перестала работать.

Нужно быстро решить проблему на сайте?

Если не хотите рисковать сайтом и тратить время на эксперименты, можно оставить заявку. Я посмотрю задачу и предложу аккуратное решение.

Оставить заявку

Решение

Надёжная интеграция WordPress с CRM/API строится вокруг нескольких правил: данные нужно очищать, токены хранить безопасно, ошибки логировать, отправку не делать “вслепую”, а важные заявки сохранять локально до успешной передачи.

Правильный порядок реализации

  • 1. Описать сценарий. Какая форма или событие запускает интеграцию.
  • 2. Составить карту полей. Как поля WordPress соответствуют полям CRM.
  • 3. Проверить API. Авторизация, endpoint, обязательные поля, формат JSON.
  • 4. Сделать тестовый запрос. Лучше сначала через Postman или аналогичный инструмент.
  • 5. Реализовать отправку в WordPress. Через hooks, AJAX, REST API или WooCommerce actions.
  • 6. Добавить очистку данных. sanitize_text_field(), sanitize_email(), sanitize_textarea_field().
  • 7. Добавить логи. Сохранять код ответа CRM и текст ошибки.
  • 8. Добавить повторную отправку. Если CRM временно недоступна.
  • 9. Проверить безопасность. Не выводить токены во фронтенд.
  • 10. Протестировать полный путь. Форма, CRM, email, Telegram, WooCommerce, админка.

Какие данные обычно передают в CRM

  • имя клиента;
  • телефон;
  • email;
  • сообщение или комментарий;
  • название формы;
  • URL страницы, с которой пришла заявка;
  • UTM source, medium, campaign, content, term;
  • IP и User-Agent, если это разрешено политикой сайта;
  • товары WooCommerce;
  • сумма заказа;
  • способ доставки;
  • способ оплаты;
  • статус заказа;
  • ответственный менеджер;
  • язык сайта, если сайт мультиязычный.

Код

Важно: код ниже отправляет данные сайта во внешнюю CRM через API. Не вставляйте реальные API-ключи в JavaScript, HTML или публичные файлы. Перед установкой на рабочий сайт проверьте код на тестовой копии. Если интеграция влияет на WooCommerce-заказы, оплату, доставку или персональные данные клиентов, обязательно сделайте бэкап.

1. Хранение API-ключа в wp-config.php

Куда вставлять: в файл wp-config.php перед строкой /* That’s all, stop editing! */.

define('SC_CRM_API_URL', 'https://crm.example.com/api/leads');
define('SC_CRM_API_TOKEN', 'PASTE_YOUR_CRM_API_TOKEN_HERE');

2. Базовая функция отправки лида в CRM

Куда вставлять: лучше в отдельный небольшой плагин. Для теста можно временно использовать functions.php дочерней темы, но постоянную интеграцию лучше вынести в отдельный плагин.

<?php
if (!defined('ABSPATH')) {
    exit;
}

function sc_send_lead_to_crm($lead_data) {
    if (!defined('SC_CRM_API_URL') || !defined('SC_CRM_API_TOKEN')) {
        return array(
            'success' => false,
            'message' => 'CRM API settings are missing.'
        );
    }

    if (empty($lead_data['phone']) && empty($lead_data['email'])) {
        return array(
            'success' => false,
            'message' => 'Phone or email is required.'
        );
    }

    $body = array(
        'name'       => isset($lead_data['name']) ? sanitize_text_field($lead_data['name']) : '',
        'phone'      => isset($lead_data['phone']) ? sanitize_text_field($lead_data['phone']) : '',
        'email'      => isset($lead_data['email']) ? sanitize_email($lead_data['email']) : '',
        'message'    => isset($lead_data['message']) ? sanitize_textarea_field($lead_data['message']) : '',
        'source_url' => isset($lead_data['source_url']) ? esc_url_raw($lead_data['source_url']) : '',
        'utm_source' => isset($lead_data['utm_source']) ? sanitize_text_field($lead_data['utm_source']) : '',
        'utm_medium' => isset($lead_data['utm_medium']) ? sanitize_text_field($lead_data['utm_medium']) : '',
        'utm_campaign' => isset($lead_data['utm_campaign']) ? sanitize_text_field($lead_data['utm_campaign']) : '',
    );

    $response = wp_remote_post(SC_CRM_API_URL, array(
        'timeout' => 20,
        'headers' => array(
            'Authorization' => 'Bearer ' . SC_CRM_API_TOKEN,
            'Content-Type'  => 'application/json',
        ),
        'body' => wp_json_encode($body),
    ));

    if (is_wp_error($response)) {
        error_log('CRM API error: ' . $response->get_error_message());

        return array(
            'success' => false,
            'message' => $response->get_error_message()
        );
    }

    $response_code = wp_remote_retrieve_response_code($response);
    $response_body = wp_remote_retrieve_body($response);

    if ($response_code < 200 || $response_code >= 300) {
        error_log('CRM API response code: ' . $response_code);
        error_log('CRM API response body: ' . $response_body);

        return array(
            'success' => false,
            'message' => 'CRM returned HTTP ' . $response_code
        );
    }

    return array(
        'success' => true,
        'message' => 'Lead sent to CRM.'
    );
}

3. AJAX-форма WordPress с отправкой в CRM

Важно: AJAX-обработчик должен использовать nonce и проверять данные. Не отправляйте в CRM сырые значения из POST без очистки.

PHP-часть:

<?php
add_action('wp_ajax_sc_send_form_to_crm', 'sc_send_form_to_crm');
add_action('wp_ajax_nopriv_sc_send_form_to_crm', 'sc_send_form_to_crm');

function sc_send_form_to_crm() {
    check_ajax_referer('sc_crm_form_nonce', 'nonce');

    $lead_data = array(
        'name'       => isset($_POST['name']) ? sanitize_text_field($_POST['name']) : '',
        'phone'      => isset($_POST['phone']) ? sanitize_text_field($_POST['phone']) : '',
        'email'      => isset($_POST['email']) ? sanitize_email($_POST['email']) : '',
        'message'    => isset($_POST['message']) ? sanitize_textarea_field($_POST['message']) : '',
        'source_url' => isset($_POST['source_url']) ? esc_url_raw($_POST['source_url']) : '',
        'utm_source' => isset($_POST['utm_source']) ? sanitize_text_field($_POST['utm_source']) : '',
        'utm_medium' => isset($_POST['utm_medium']) ? sanitize_text_field($_POST['utm_medium']) : '',
        'utm_campaign' => isset($_POST['utm_campaign']) ? sanitize_text_field($_POST['utm_campaign']) : '',
    );

    $result = sc_send_lead_to_crm($lead_data);

    if (!empty($result['success'])) {
        wp_send_json_success(array(
            'message' => 'Заявка отправлена.'
        ));
    }

    wp_send_json_error(array(
        'message' => 'Заявка сохранена, но CRM временно недоступна.'
    ));
}

JavaScript-часть. Куда вставлять: лучше подключать отдельным JS-файлом через wp_enqueue_script(), а не вставлять на все страницы сайта.

<script>
jQuery(document).ready(function() {
    jQuery(document).on('click', '#sc_crm_send_button', function() {
        var formData = {
            action: 'sc_send_form_to_crm',
            nonce: jQuery('#sc_crm_nonce').val(),
            name: jQuery('#sc_crm_name').val(),
            phone: jQuery('#sc_crm_phone').val(),
            email: jQuery('#sc_crm_email').val(),
            message: jQuery('#sc_crm_message').val(),
            source_url: window.location.href,
            utm_source: jQuery('#sc_utm_source').val(),
            utm_medium: jQuery('#sc_utm_medium').val(),
            utm_campaign: jQuery('#sc_utm_campaign').val()
        };

        jQuery.ajax({
            url: '<?php echo admin_url("admin-ajax.php") ?>',
            type: 'POST',
            dataType: 'json',
            data: formData,
            success: function(response) {
                if (response.success) {
                    jQuery('#sc_crm_result').html(response.data.message);
                } else {
                    jQuery('#sc_crm_result').html(response.data.message);
                }
            },
            error: function() {
                jQuery('#sc_crm_result').html('Ошибка отправки. Попробуйте позже.');
            }
        });
    });
});
</script>

4. Отправка WooCommerce-заказа в CRM

Важно: этот код работает с заказами WooCommerce. Перед установкой проверьте тестовый заказ, оплату, доставку и email-уведомления. Для сложной интеграции лучше добавить очередь повторной отправки и таблицу логов.

Куда вставлять: отдельный плагин или служебный модуль, а не файл темы.

<?php
add_action('woocommerce_new_order', 'sc_send_woocommerce_order_to_crm', 20, 1);

function sc_send_woocommerce_order_to_crm($order_id) {
    if (!function_exists('wc_get_order')) {
        return;
    }

    $order = wc_get_order($order_id);

    if (!$order) {
        return;
    }

    $items = array();

    foreach ($order->get_items() as $item) {
        $product = $item->get_product();

        $items[] = array(
            'name' => $item->get_name(),
            'quantity' => $item->get_quantity(),
            'sku' => $product ? $product->get_sku() : '',
            'total' => $item->get_total(),
        );
    }

    $lead_data = array(
        'name' => trim($order->get_billing_first_name() . ' ' . $order->get_billing_last_name()),
        'phone' => $order->get_billing_phone(),
        'email' => $order->get_billing_email(),
        'message' => 'WooCommerce order #' . $order->get_order_number(),
        'source_url' => get_edit_post_link($order_id, ''),
        'utm_source' => get_post_meta($order_id, '_utm_source', true),
        'utm_medium' => get_post_meta($order_id, '_utm_medium', true),
        'utm_campaign' => get_post_meta($order_id, '_utm_campaign', true),
        'order_id' => $order_id,
        'order_total' => $order->get_total(),
        'order_currency' => $order->get_currency(),
        'items' => $items,
    );

    sc_send_lead_to_crm($lead_data);
}

Результат

После правильной интеграции WordPress с CRM/API заявки и заказы не теряются между сайтом, почтой и менеджером. Данные автоматически попадают в CRM, менеджер видит источник обращения, а владелец сайта может контролировать обработку лидов.

Что считается хорошим результатом

  • заявка создаётся в CRM сразу после отправки формы;
  • WooCommerce-заказ передаётся с товарами, суммой и контактами клиента;
  • UTM-метки сохраняются и попадают в нужные поля CRM;
  • API token не виден во фронтенде сайта;
  • ошибки отправки записываются в лог;
  • при временной ошибке CRM заявка не теряется;
  • дубли клиентов обрабатываются по email или телефону;
  • сайт не зависает из-за долгого ответа API;
  • есть понятная схема повторной отправки;
  • интеграция не ломается при смене темы.

Дополнительные способы

Интеграция через Contact Form 7

Подходит, если на сайте уже есть формы Contact Form 7. Можно использовать hook wpcf7_mail_sent, получить поля формы и отправить их в CRM.

Интеграция через WooCommerce Webhooks

WooCommerce умеет отправлять webhooks при создании или обновлении заказа. Это удобно, если CRM принимает webhooks и не нужна сложная обработка данных на стороне WordPress.

Интеграция через cron и очередь

Для важных проектов лучше не зависеть от мгновенного ответа CRM. Заявку можно сначала сохранить в локальную таблицу, а затем отправлять через cron с повторными попытками.

Интеграция через no-code сервисы

Сервисы автоматизации подходят для простых связок: форма → CRM, заказ → таблица, заявка → Telegram. Но для сложной логики, безопасности и контроля ошибок часто нужен собственный код.

Интеграция с WooCommerce

Если нужно передавать не только заявки, а заказы, товары, статусы, доставку и оплату, это уже технически связано с доработкой WooCommerce. Здесь важно не сломать checkout, оплату, сессии и email-уведомления.

Безопасность

CRM-интеграция часто работает с персональными данными клиентов. Поэтому токены, телефоны, email, заказы и сообщения нужно обрабатывать аккуратно.

Что нельзя делать

  • нельзя вставлять API token в JavaScript;
  • нельзя выводить ключи CRM в HTML-код страницы;
  • нельзя отправлять пароли и лишние персональные данные;
  • нельзя хранить токены в публичных файлах темы;
  • нельзя доверять данным из POST без проверки;
  • нельзя делать открытый AJAX без nonce;
  • нельзя показывать пользователю сырой ответ CRM с техническими деталями;
  • нельзя логировать секретные ключи и access tokens.

Что нужно использовать

  • sanitize_text_field() для простого текста;
  • sanitize_email() для email;
  • sanitize_textarea_field() для сообщений;
  • esc_url_raw() для URL;
  • wp_json_encode() для JSON;
  • wp_remote_post() для API-запросов;
  • check_ajax_referer() для AJAX;
  • current_user_can() для админских действий;
  • error_log() или отдельную таблицу логов без секретных данных.

Частые ошибки

Интеграция только через email

Некоторые пытаются отправлять заявки в CRM через email-парсер. Это может работать, но такой способ менее надёжный, чем API: письмо может попасть в спам, задержаться или прийти в неправильном формате.

Нет логов отправки

Без логов невозможно понять, почему заявка не попала в CRM: ошибка авторизации, неправильное поле, лимит API, недоступность CRM или проблема хостинга.

Токен CRM виден посетителям

Если API token попал во фронтенд, его нужно считать скомпрометированным и перевыпустить.

Нет защиты от дублей

Если не проверять телефон, email или внешний ID, CRM может создавать несколько одинаковых клиентов после повторной отправки формы.

Сайт ждёт CRM слишком долго

Если API отвечает медленно, пользователь может ждать отправку формы. Для важных заявок лучше использовать локальное сохранение и фоновую отправку.

Не передаются UTM-метки

Без UTM сложно понять, откуда пришла заявка. Для рекламы это критично: CRM должна видеть источник, кампанию и ключевую метку.

Код лежит в functions.php

Для теста это допустимо. Для постоянной CRM-интеграции лучше отдельный плагин, чтобы логика не зависела от темы.

Не проверяются обновления CRM API

CRM может изменить endpoint, поля, авторизацию или лимиты. Интеграцию нужно периодически проверять, особенно после ошибок в логах.

Диагностика проблем

Проблема: заявка не попадает в CRM

  • проверить API URL;
  • проверить API token;
  • проверить формат JSON;
  • проверить обязательные поля CRM;
  • проверить debug.log;
  • проверить ответ wp_remote_post();
  • сделать тестовый запрос через Postman;
  • проверить, не блокирует ли хостинг внешние запросы.

Проблема: CRM возвращает 401 или 403

  • проверить токен авторизации;
  • проверить тип авторизации: Bearer, Basic, API key;
  • проверить права API-ключа;
  • проверить, не истёк ли access token;
  • проверить IP-ограничения в CRM;
  • проверить, правильно ли передаются headers.

Проблема: CRM возвращает 422

  • проверить обязательные поля;
  • проверить формат телефона;
  • проверить формат email;
  • проверить типы данных: строка, число, массив;
  • проверить названия полей CRM;
  • проверить, принимает ли CRM пустые значения.

Проблема: WooCommerce-заказ не передаётся

  • проверить hook woocommerce_new_order;
  • проверить, создаётся ли объект заказа через wc_get_order();
  • проверить логи WooCommerce;
  • проверить, не отключён ли модуль интеграции;
  • проверить данные товаров;
  • проверить совместимость с HPOS, если на сайте включено новое хранилище заказов;
  • сделать тестовый заказ с простым товаром.

Проблема: создаются дубли клиентов

  • проверять существующий контакт по email;
  • проверять существующий контакт по телефону;
  • сохранять внешний CRM ID в user_meta или order_meta;
  • использовать idempotency key, если CRM это поддерживает;
  • не отправлять повторно один и тот же заказ без проверки статуса.

Проблема: форма стала работать медленно

  • уменьшить timeout wp_remote_post();
  • не делать несколько API-запросов подряд без необходимости;
  • сохранять заявку локально перед отправкой;
  • перенести отправку в cron;
  • добавить очередь повторных попыток;
  • отправлять пользователю быстрый ответ, а CRM обрабатывать в фоне.

Краткие ответы для AI-поиска

Что такое интеграция WordPress с CRM/API?

Интеграция WordPress с CRM/API — это автоматическая передача данных с сайта в CRM: заявок, форм, WooCommerce-заказов, пользователей, UTM-меток, статусов и клиентских данных.

Как WordPress передаёт заявки в CRM?

WordPress может передавать заявки через готовый плагин, webhook, REST API или кастомный PHP-код с wp_remote_post().

Можно ли передавать WooCommerce-заказы в CRM?

Да. Через WooCommerce hooks можно передавать номер заказа, товары, сумму, клиента, доставку, оплату и статус заказа в CRM.

Что лучше: webhook или API?

Webhook проще для базовой отправки данных. API лучше для сложной логики: проверка дублей, создание контакта, сделки, товаров, задач и обратная синхронизация.

FAQ

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

Да. Можно написать отдельный PHP-модуль или небольшой WordPress-плагин, который будет отправлять данные в CRM через API.

Какие CRM можно подключить к WordPress?

Можно подключить почти любую CRM, если у неё есть API, webhook или готовый модуль для WordPress/WooCommerce.

Что лучше для интеграции: готовый плагин или кастомный код?

Готовый плагин подходит для стандартной передачи заявок. Кастомный код лучше, если нужны UTM, особая структура сделки, проверка дублей, логи, очередь и нестандартные поля.

Где хранить API token CRM?

Лучше хранить токен в wp-config.php или в настройках плагина с ограниченным доступом. Нельзя выводить токен во фронтенд.

Нужно ли сохранять заявку в WordPress перед отправкой в CRM?

Для важных заявок — да. Если CRM временно недоступна, локальная запись поможет не потерять обращение и отправить его повторно.

Можно ли передавать UTM-метки в CRM?

Да. UTM-метки можно сохранить в cookie, скрытых полях формы или мета-данных заказа, а затем передать в CRM вместе с заявкой.

Почему CRM не принимает заявку?

Частые причины: неправильный API token, неверный endpoint, отсутствуют обязательные поля, неправильный JSON, ошибка формата телефона или лимит запросов.

Что делать, если API CRM временно недоступен?

Лучше сохранить заявку локально, записать ошибку в лог и повторить отправку через cron. Пользователь не должен терять заявку из-за временной ошибки CRM.

Можно ли синхронизировать статусы CRM обратно в WordPress?

Да. Для этого CRM должна отправлять webhook на сайт или WordPress должен периодически запрашивать статусы через API.

Влияет ли CRM-интеграция на скорость сайта?

Может влиять, если API-запрос выполняется синхронно и CRM отвечает долго. Для сложных интеграций лучше использовать очередь и фоновую отправку.

Вывод

Интеграция WordPress с CRM/API нужна, когда заявки, заказы WooCommerce и данные клиентов должны автоматически попадать в рабочую систему продаж. Это ускоряет обработку обращений, снижает риск потери заявок и помогает видеть реальный источник клиентов.

Надёжная интеграция должна учитывать не только отправку данных, но и безопасность, логи, повторы, UTM-метки, защиту от дублей, ошибки API и сценарии восстановления. Тогда WordPress становится не отдельным сайтом с формами, а частью нормальной бизнес-системы.

Об авторе

vkuzyomko administrator