Диагностика задачи: зачем отправлять данные о заказе в Slack
Магазины на WooCommerce иногда требуют оперативного уведомления менеджеров в Slack с подробной информацией о новом заказе. Это ускоряет обработку, исключает необходимость постоянной проверки админки и помогает быстро реагировать на важные заказы.
Задача — автоматически отправлять в Slack не просто уведомление о новом заказе, а полный отчет с товарами, количеством, суммами, адресом доставки и контактами клиента.
Как подготовить интеграцию: создание Slack Incoming Webhook
Для начала необходимо создать Webhook в Slack:
- Войдите в ваш Slack Workspace и перейдите по адресу https://api.slack.com/apps
- Создайте новое приложение, выберите Workspace
- В разделе Incoming Webhooks активируйте их и создайте новый Webhook для нужного канала
- Скопируйте URL Webhook — он понадобится для отправки сообщений из WordPress
Пошаговое решение: добавляем отправку заказа в Slack через functions.php
Добавьте следующий код в файл functions.php вашей активной темы или в плагин для кастомных функций:
add_action('woocommerce_thankyou', 'send_order_details_to_slack', 10, 1);
function send_order_details_to_slack($order_id) {
if (!$order_id) return;
$order = wc_get_order($order_id);
if (!$order) return;
$webhook_url = 'https://hooks.slack.com/services/ВАШ/WEBHOOK/URL'; // Замените на ваш
$items_text = '';
foreach ($order->get_items() as $item) {
$product = $item->get_product();
$name = $product ? $product->get_name() : $item->get_name();
$qty = $item->get_quantity();
$total = $item->get_total();
$items_text .= "• {$name} x {$qty} — " . wc_price($total) . "\n";
}
$shipping = $order->get_formatted_shipping_address();
$billing_phone = $order->get_billing_phone();
$billing_email = $order->get_billing_email();
$message = "Новый заказ #{$order_id} \n" .
"*Товары:*\n{$items_text}\n" .
"*Общая сумма:* " . wc_price($order->get_total()) . "\n" .
"*Адрес доставки:*\n{$shipping}\n" .
"*Телефон:* {$billing_phone}\n" .
"*Email:* {$billing_email}";
$payload = json_encode(['text' => $message]);
$args = [
'body' => $payload,
'headers' => ['Content-Type' => 'application/json'],
'timeout' => 5,
'redirection' => 5,
'blocking' => true,
'sslverify' => false,
];
$response = wp_safe_remote_post($webhook_url, $args);
if (is_wp_error($response)) {
error_log('Ошибка отправки заказа в Slack: ' . $response->get_error_message());
}
}Объяснение кода
- Хук
woocommerce_thankyouсрабатывает после успешного оформления заказа. - Получаем объект заказа и формируем список товаров с ценами и количеством.
- Добавляем адрес доставки и контакты клиента.
- Формируем сообщение в формате Markdown для Slack.
- Отправляем POST-запрос на Slack Webhook с JSON-данными.
- Обрабатываем ошибки в логах WordPress.
Проверка результата после внедрения
- Оформите тестовый заказ в вашем WooCommerce магазине.
- Проверьте канал Slack — должно появиться сообщение с полной информацией о заказе.
- Если сообщений нет, проверьте логи ошибок WordPress (файл
debug.logпри включенномWP_DEBUG_LOG). - Проверьте правильность URL Webhook и разрешения в Slack.
Частые ошибки и как их исправить
- Неправильный URL Webhook: скопируйте URL заново, убедитесь, что нет лишних пробелов или символов.
- SSL-ошибки при отправке запроса: если
sslverifyвключен и сервер не может проверить сертификат — временно отключите проверку (как в коде), но лучше исправить сертификаты. - Отсутствие данных в сообщении: убедитесь, что заказ корректно создается и содержит товары, адрес и контакты.
- Функция не срабатывает: проверьте, что хук добавлен в правильном месте и тема/плагин активны.
Практические советы по безопасности и производительности
- Используйте отдельный плагин для кастомного кода, чтобы не потерять изменения при обновлении темы.
- Храните URL Webhook в
wp-config.phpили в настройках плагина, не в открытом коде. - Ограничьте права доступа к Slack Webhook, создавая отдельные каналы для уведомлений.
- Для больших магазинов с высокой нагрузкой рассмотрите очередь отправки уведомлений через WP-Cron или внешние сервисы, чтобы не замедлять оформление заказа.
Сравнение вариантов реализации отправки уведомлений в Slack
| Способ | Плюсы | Минусы | Подходит для |
|---|---|---|---|
| Код в functions.php | Быстрая настройка, полный контроль над сообщением | Требует навыков кода, сложно масштабировать | Маленькие и средние магазины |
| Плагин Slack Notifications | Готовое решение, настройки через UI | Меньше гибкости, возможны конфликты | Пользователи без навыков программирования |
| Внешние сервисы (Zapier, Integromat) | Автоматизация, интеграция с другими системами | Платные, задержки в уведомлениях | Крупные проекты с комплексным учетом |