Webhooks в WordPress: как заставить ваш сайт «разговаривать» с другими сервисами без вашего участия

Новый заказ в WooCommerce должен автоматически создавать сделку в amoCRM. Комментарий на сайте — отправляться в Telegram-чат поддержки. Регистрация пользователя — добавлять его в рассылку SendPulse. Вы можете вручную копировать данные или писать сложные скрипты, но есть элегантный и отраслевой стандарт — Webhooks (вебхуки). Это «обратные вызовы» в реальном времени: когда в WordPress происходит событие, он сам отправляет уведомление с данными на заданный URL другого сервиса. И наоборот, ваш сайт может принимать вебхуки от других систем. Давайте разберём, как настроить этот мощный механизм автоматизации, который превращает WordPress из изолированной CMS в центральный хаб вашей бизнес-логики.


Часть 1: Что такое вебхук? Простая аналогия

Представьте почтовое уведомление о доставке посылки. Вы не звоните на почту каждые 5 минут — почта сама отправляет вам SMS, когда статус изменился.

Вебхук — это такое же SMS, но между веб-сервисами. Это HTTP-запрос (обычно POST) на заранее заданный URL, в теле которого содержится структурированная информация о событии (в формате JSON или XML).

  • Событие в WordPress: Пользователь оформил заказ (woocommerce_new_order).
  • Действие WordPress: Отправляет POST-запрос на URL, который вы указали (например, https://ваша-crm.ru/api/webhook).
  • Тело запроса (JSON):
    json
    { "event": "order.created", "data": { "order_id": 12345, "total": "2990.00", "customer_email": "client@mail.ru" } }
  • Сервис-получатель (CRM): Получает данные, разбирает их и создаёт сделку. Всё автоматически.

Часть 2: Виды вебхуков: исходящие (outgoing) и входящие (incoming)

  1. Исходящие вебхуки (ваш WordPress → внешний мир):
    • Ваш WordPress инициирует запрос. Вы настраиваете: «При событии X отправь данные на URL Y».
    • Примеры событий: новая запись, новый пользователь, новый заказ, новый комментарий.
    • Плагины для настройки: WP Webhooks, Uncanny Automator, AutomateWoo.
  2. Входящие вебхуки (внешний мир → ваш WordPress):
    • Внешний сервис инициирует запрос на специальный URL вашего сайта.
    • Ваш WordPress принимает данные и что-то делает: создаёт пользователя, обновляет заказ, публикует пост.
    • Примеры: Telegram-бот шлёт команду, CRM передаёт обновлённый статус сделки, платёжный шлюз сообщает об успешной оплате.
    • Как реализовать: Создать в теме или плагине собственный REST API endpoint или использовать плагины вроде WP Webhooks.

Часть 3: Настройка исходящих вебхуков (на примере WP Webhooks)

Плагин WP Webhooks — швейцарский нож для работы с вебхуками.

Шаг 1: Установка и активация.
Шаг 2: Создание нового вебхука (Send Data).

  1. Идём в Webhooks > Add New.
  2. Выбираем Trigger (триггер) — событие, которое запустит отправку. Например: «After post created», «When user registers», «WooCommerce — Order created».
  3. Указываем URL вебхука — адрес, куда отправлять данные (берёте из документации вашего сервиса: CRM, Telegram-бота, Trello и т.д.).
  4. Настраиваем данные (Payload): Можно выбрать, что именно отправлять. Плагин предлагает «шаблоны данных» (например, все данные заказа WooCommerce). Можно настроить вручную, используя теги типа {post_id}{user_email}.
  5. Дополнительно: Настройки заголовков (часто нужно для авторизации, например, Authorization: Bearer ваш_токен), метод запроса (POST), формат (JSON).

Шаг 3: Тестирование.
В плагине есть кнопка «Send demo». Она имитирует событие и отправляет тестовые данные. Проверьте, пришли ли они в ваш сервис.

Часть 4: Практические примеры интеграций

Пример 1: Новый заказ WooCommerce → Telegram

  • Триггер: «WooCommerce — Order created».
  • URL вебхука: https://api.telegram.org/bot<ВАШ_ТОКЕН>/sendMessage.
  • Тип запроса: POST, Content-Type: application/json.
  • Тело (JSON):
    json
    { "chat_id": "ВАШ_CHAT_ID", "text": "Новый заказ #{order_id} на сумму {order_total}. Клиент: {customer_first_name} {customer_last_name}" }

Пример 2: Новый пользователь → добавление в Google Sheets

  • Триггер: «User signed up».
  • URL вебхука: URL вебхука из Google Apps Script или сервиса типа Zapier/Make (Integromat).
  • Тело: Отправляем {user_email}{user_registered}.

Пример 3: Платежный шлюз (входящий вебхук) → обновление заказа
Это обратная связь. Робокасса/ЮKassa отправляет POST на ваш сайт, подтверждая оплату.

  1. Создайте в плагине или в коде темы endpoint, например: /wp-json/myapi/v1/payment-callback/.
  2. Настройте в личном кабинете Robokassa этот URL как «URL оповещения».
  3. Напишите обработчик, который проверит подпись запроса и изменит статус заказа на «Оплачено».

Часть 5: Создание собственного входящего вебхука (кастомный REST API endpoint)

Иногда плагины не дают нужной гибкости. Создадим endpoint, который будет создавать посты.

php
// В functions.php или в файле плагина add_action( 'rest_api_init', 'register_custom_webhook_endpoint' ); function register_custom_webhook_endpoint() { register_rest_route( 'mywebhook/v1', '/create-post/', array( 'methods' => 'POST', 'callback' => 'handle_incoming_webhook', 'permission_callback' => 'verify_webhook_secret' // Проверка безопасности! ) ); } // Функция проверки. Можно проверить по секретному ключу в заголовке. function verify_webhook_secret( $request ) { $secret = $request->get_header('X-Webhook-Secret'); return $secret === 'ВАШ_СУПЕР_СЕКРЕТНЫЙ_КЛЮЧ'; // true - разрешить, false - отклонить } // Функция-обработчик function handle_incoming_webhook( $request ) { $params = $request->get_json_params(); // Получаем JSON из тела запроса $post_id = wp_insert_post( array( 'post_title' => sanitize_text_field( $params['title'] ), 'post_content' => wp_kses_post( $params['content'] ), 'post_status' => 'publish', 'post_type' => 'post', ) ); if ( is_wp_error( $post_id ) ) { return new WP_REST_Response( array( 'error' => $post_id->get_error_message() ), 400 ); } return new WP_REST_Response( array( 'success' => true, 'post_id' => $post_id ), 200 ); }

Теперь внешний сервис может отправить POST-запрос на https://ваш-сайт.ru/wp-json/mywebhook/v1/create-post/ с JSON-телом и заголовком X-Webhook-Secret, чтобы создать пост.

Часть 6: Критически важные моменты: безопасность и надёжность

  1. Верификация отправителя: Всегда проверяйте входящие вебхуки.
    • Секретный ключ (Secret) в заголовке или теле запроса (как в примере выше).
    • Проверка подписи (Signature), если её предоставляет сервис-отправитель (например, Stripe, GitHub).
    • IP-адреса отправителя, если сервис публикует их диапазоны.
  2. Повторные попытки (Retry Logic): Что, если ваш сайт был недоступен в момент вызова? Хорошие сервисы отправляют вебхук несколько раз с интервалом. Ваш обработчик должен быть идемпотентным — повторный вызов с теми же данными не должен создавать дубли (например, проверяйте, не обработан ли уже этот платеж).
  3. Логирование: Всегда логируйте входящие запросы (их тело и headers) и результат обработки в файл или отдельную таблицу БД. Это поможет в отладке.
  4. Таймауты и асинхронность: Если обработка вебхука сложная и долгая (отправка писем, тяжёлые вычисления), принимайте запрос, сразу отдавайте ответ 200 OK, а саму обработку выполняйте в фоне (через очередь задач, WP Cron или Action Scheduler).

Заключение

Вебхуки стирают границы между WordPress и остальным цифровым миром. Они превращают вашу CMS в активного участника бизнес-процессов, а не в статичную витрину.

С чего начать автоматизацию?

  1. Выберите самую рутинную операцию, которая требует копирования данных (например, заявки с формы → таблица Google).
  2. Установите WP Webhooks или Uncanny Automator.
  3. Настройте один исходящий вебхук для этого события.
  4. Протестируйте и наслаждайтесь сэкономленным временем.

Не бойтесь начинать с простого. Одна рабочая автоматизация даст понимание процесса и мотивацию для более сложных интеграций.