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):
{ "event": "order.created", "data": { "order_id": 12345, "total": "2990.00", "customer_email": "client@mail.ru" } }
- Сервис-получатель (CRM): Получает данные, разбирает их и создаёт сделку. Всё автоматически.
Часть 2: Виды вебхуков: исходящие (outgoing) и входящие (incoming)
- Исходящие вебхуки (ваш WordPress → внешний мир):
- Ваш WordPress инициирует запрос. Вы настраиваете: «При событии X отправь данные на URL Y».
- Примеры событий: новая запись, новый пользователь, новый заказ, новый комментарий.
- Плагины для настройки: WP Webhooks, Uncanny Automator, AutomateWoo.
- Входящие вебхуки (внешний мир → ваш WordPress):
- Внешний сервис инициирует запрос на специальный URL вашего сайта.
- Ваш WordPress принимает данные и что-то делает: создаёт пользователя, обновляет заказ, публикует пост.
- Примеры: Telegram-бот шлёт команду, CRM передаёт обновлённый статус сделки, платёжный шлюз сообщает об успешной оплате.
- Как реализовать: Создать в теме или плагине собственный REST API endpoint или использовать плагины вроде WP Webhooks.
Часть 3: Настройка исходящих вебхуков (на примере WP Webhooks)
Плагин WP Webhooks — швейцарский нож для работы с вебхуками.
Шаг 1: Установка и активация.
Шаг 2: Создание нового вебхука (Send Data).
- Идём в Webhooks > Add New.
- Выбираем Trigger (триггер) — событие, которое запустит отправку. Например: «After post created», «When user registers», «WooCommerce — Order created».
- Указываем URL вебхука — адрес, куда отправлять данные (берёте из документации вашего сервиса: CRM, Telegram-бота, Trello и т.д.).
- Настраиваем данные (Payload): Можно выбрать, что именно отправлять. Плагин предлагает «шаблоны данных» (например, все данные заказа WooCommerce). Можно настроить вручную, используя теги типа
{post_id},{user_email}. - Дополнительно: Настройки заголовков (часто нужно для авторизации, например,
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):
{ "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 на ваш сайт, подтверждая оплату.
- Создайте в плагине или в коде темы endpoint, например:
/wp-json/myapi/v1/payment-callback/. - Настройте в личном кабинете Robokassa этот URL как «URL оповещения».
- Напишите обработчик, который проверит подпись запроса и изменит статус заказа на «Оплачено».
Часть 5: Создание собственного входящего вебхука (кастомный REST API endpoint)
Иногда плагины не дают нужной гибкости. Создадим endpoint, который будет создавать посты.
// В 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: Критически важные моменты: безопасность и надёжность
- Верификация отправителя: Всегда проверяйте входящие вебхуки.
- Секретный ключ (Secret) в заголовке или теле запроса (как в примере выше).
- Проверка подписи (Signature), если её предоставляет сервис-отправитель (например, Stripe, GitHub).
- IP-адреса отправителя, если сервис публикует их диапазоны.
- Повторные попытки (Retry Logic): Что, если ваш сайт был недоступен в момент вызова? Хорошие сервисы отправляют вебхук несколько раз с интервалом. Ваш обработчик должен быть идемпотентным — повторный вызов с теми же данными не должен создавать дубли (например, проверяйте, не обработан ли уже этот платеж).
- Логирование: Всегда логируйте входящие запросы (их тело и headers) и результат обработки в файл или отдельную таблицу БД. Это поможет в отладке.
- Таймауты и асинхронность: Если обработка вебхука сложная и долгая (отправка писем, тяжёлые вычисления), принимайте запрос, сразу отдавайте ответ
200 OK, а саму обработку выполняйте в фоне (через очередь задач, WP Cron или Action Scheduler).
Заключение
Вебхуки стирают границы между WordPress и остальным цифровым миром. Они превращают вашу CMS в активного участника бизнес-процессов, а не в статичную витрину.
С чего начать автоматизацию?
- Выберите самую рутинную операцию, которая требует копирования данных (например, заявки с формы → таблица Google).
- Установите WP Webhooks или Uncanny Automator.
- Настройте один исходящий вебхук для этого события.
- Протестируйте и наслаждайтесь сэкономленным временем.
Не бойтесь начинать с простого. Одна рабочая автоматизация даст понимание процесса и мотивацию для более сложных интеграций.