Если тикеты уже собираются в WordPress, следующий узкий и полезный шаг — не держать операторов в админке, а сразу дублировать новые обращения в рабочий канал. На практике это решает две задачи: команда видит новые заявки быстрее, а дежурный не пропускает тикет, даже если не открыт кабинет поддержки.
Ниже разберём сценарий без выдуманных интеграций: через обычный HTTP-запрос к Slack Incoming Webhook или Telegram Bot API. Такой подход не зависит от конкретного интерфейса плагина, а значит его проще сопровождать и отлаживать.
Когда это действительно нужно
Интеграция полезна не всем подряд. Она оправдана, если у вас есть хотя бы один из этих сценариев:
- поддержка дежурит в Slack/Telegram, а не в админке WordPress;
- тикеты приходят редко, но каждый важен и должен быть замечен сразу;
- нужно разделять уведомления по каналам: продажи, техподдержка, VIP-клиенты;
- вы хотите быстро увидеть тему обращения, не открывая WordPress;
- в команде есть внешний подрядчик, которому не нужен доступ в админку.
Если тикетов много, а сообщения в чатах начинают шуметь, лучше сразу продумать фильтрацию: отправлять только новые тикеты, а не каждое изменение статуса.
Диагностика проблемы перед настройкой
Перед кодом стоит проверить, что именно вы хотите отправлять и откуда брать данные. Это экономит время, потому что в разных установках WPtickets поля тикета могут отличаться по названию и доступности.
Что проверить в админке и в логах
- создаётся ли тикет вообще и появляется ли он в списке;
- есть ли у тикета заголовок, email автора и текст первого сообщения;
- не скрывает ли кэш или security-плагин административные запросы;
- работает ли исходящая почта и HTTP-запросы с сервера;
- есть ли на хостинге ограничения на
wp_remote_post()или внешние соединения.
Если сайт уже использует SMTP, это не мешает интеграции с чатами: здесь нужен не почтовый канал, а обычный HTTPS-запрос к API.
Какой вариант выбрать: Slack, Telegram или код
| Вариант | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| Slack Incoming Webhook | Команда работает в Slack | Простой POST-запрос, легко читать сообщения | Нужен рабочий webhook и канал |
| Telegram Bot API | Нужны уведомления в чат или группу | Быстро, удобно для мобильных уведомлений | Нужно хранить token и chat_id |
| Кастомный PHP-код | Нужна фильтрация и контроль формата | Гибкость, можно добавить логику | Нужно поддерживать код |
Если задача простая, достаточно одного webhook. Если нужно, например, отправлять в Telegram только тикеты с приоритетом high, без кода уже не обойтись.
Пошаговое решение через WordPress-хук
Ниже пример, который отправляет уведомление после создания тикета. Название хука у конкретной версии WPtickets может отличаться, поэтому сначала проверьте документацию плагина или список доступных действий в коде. Сама схема остаётся одинаковой: поймать событие создания тикета и отправить POST-запрос.
Пример для Slack Incoming Webhook
<?php
add_action( 'wptickets_after_ticket_created', 'wptickets_notify_slack_on_new_ticket', 10, 2 );
function wptickets_notify_slack_on_new_ticket( $ticket_id, $ticket_data ) {
$webhook_url = 'https://hooks.slack.com/services/XXX/YYY/ZZZ';
$title = ! empty( $ticket_data['subject'] ) ? $ticket_data['subject'] : sprintf( 'Тикет #%d', (int) $ticket_id );
$author = ! empty( $ticket_data['author_email'] ) ? $ticket_data['author_email'] : 'не указан';
$message = ! empty( $ticket_data['message'] ) ? wp_strip_all_tags( $ticket_data['message'] ) : '';
$payload = array(
'text' => sprintf(
'Новый тикет #%d: %s\nАвтор: %s\nТекст: %s',
(int) $ticket_id,
$title,
$author,
mb_substr( $message, 0, 300 )
),
);
$response = wp_remote_post( $webhook_url, array(
'timeout' => 10,
'headers' => array(
'Content-Type' => 'application/json; charset=utf-8',
),
'body' => wp_json_encode( $payload ),
) );
if ( is_wp_error( $response ) ) {
error_log( 'WPtickets Slack notify error: ' . $response->get_error_message() );
return;
}
$code = wp_remote_retrieve_response_code( $response );
if ( $code < 200 || $code >= 300 ) {
error_log( 'WPtickets Slack notify HTTP code: ' . $code );
}
}
Этот вариант хорош тем, что не требует отдельного плагина-посредника. Но webhook URL нельзя светить в публичном репозитории или в открытом сниппете.
Пример для Telegram Bot API
<?php
add_action( 'wptickets_after_ticket_created', 'wptickets_notify_telegram_on_new_ticket', 10, 2 );
function wptickets_notify_telegram_on_new_ticket( $ticket_id, $ticket_data ) {
$bot_token = '123456789:AAExampleTokenHere';
$chat_id = '-1001234567890';
$title = ! empty( $ticket_data['subject'] ) ? $ticket_data['subject'] : sprintf( 'Тикет #%d', (int) $ticket_id );
$author = ! empty( $ticket_data['author_email'] ) ? $ticket_data['author_email'] : 'не указан';
$message = ! empty( $ticket_data['message'] ) ? wp_strip_all_tags( $ticket_data['message'] ) : '';
$text = sprintf(
"Новый тикет #%d\nТема: %s\nАвтор: %s\nТекст: %s",
(int) $ticket_id,
$title,
$author,
mb_substr( $message, 0, 500 )
);
$url = sprintf( 'https://api.telegram.org/bot%s/sendMessage', $bot_token );
$response = wp_remote_post( $url, array(
'timeout' => 10,
'body' => array(
'chat_id' => $chat_id,
'text' => $text,
),
) );
if ( is_wp_error( $response ) ) {
error_log( 'WPtickets Telegram notify error: ' . $response->get_error_message() );
return;
}
$code = wp_remote_retrieve_response_code( $response );
if ( $code < 200 || $code >= 300 ) {
error_log( 'WPtickets Telegram notify HTTP code: ' . $code );
}
}
Для Telegram важно заранее добавить бота в группу и получить правильный chat_id. Если отправка идёт в супергруппу, идентификатор обычно начинается с -100.
Как не отправлять лишнее и не засорять чат
Самая частая ошибка — слать в мессенджер всё подряд: каждое изменение статуса, каждую внутреннюю заметку, каждую правку агентом. Для рабочих каналов это быстро превращается в шум.
Практичнее ограничиться такими условиями:
- отправлять только при создании нового тикета;
- не отправлять тикеты от внутренних пользователей или администраторов;
- обрезать длинный текст сообщения;
- не включать вложения в первый этап, если они могут содержать лишние данные;
- добавить префикс по отделу или приоритету.
Если у вас есть кастомные поля, можно включить в уведомление только те, которые реально нужны оператору: номер заказа, тип проблемы, домен сайта клиента.
Проверка результата после внедрения
После добавления кода не ограничивайтесь визуальной проверкой в чате. Нужно убедиться, что запрос действительно уходит, а ответ API успешный.
- Создайте тестовый тикет с короткой темой и текстом.
- Проверьте, пришло ли сообщение в Slack или Telegram.
- Откройте
debug.log, если включёнWP_DEBUG_LOG, и посмотрите, нет ли ошибок HTTP. - Проверьте, не дублируется ли уведомление при обновлении тикета.
- Создайте тикет с длинным текстом и убедитесь, что сообщение не ломает формат.
Если уведомление не пришло, сначала смотрите код ответа API. Для Slack и Telegram это обычно быстрее, чем искать проблему в самом WPtickets.
Частые ошибки и как их исправить
Хук не срабатывает
Причина обычно в том, что выбран не тот action или код подключён слишком поздно. Проверьте, что сниппет загружается из functions.php дочерней темы, mu-plugin или собственного мини-плагина, а не из места, которое отключается при обновлении темы.
Сообщение приходит, но без текста
Это бывает, если в массиве тикета другие ключи. Не угадывайте названия полей: временно залогируйте $ticket_data через error_log( print_r( $ticket_data, true ) ); и посмотрите структуру.
Telegram отвечает ошибкой 400
Обычно проблема в chat_id, в слишком длинном сообщении или в неподдерживаемых символах. Начните с простого текста без HTML и проверьте отправку в личный чат, а не в группу.
Slack webhook возвращает не 200
Проверьте URL webhook, активен ли он в рабочем пространстве и не был ли удалён канал. Иногда проблема банальна: webhook скопирован не полностью.
Уведомление дублируется
Значит, хук срабатывает не только на создание, но и на обновление. В таком случае нужен более точный action или дополнительная проверка, что тикет ещё не отправлялся. Для этого можно хранить флаг в метаполе тикета.
Безопасность и производительность
Не храните токены и webhook URL в публичном коде. Если проект ведётся в Git, вынесите секреты в переменные окружения или хотя бы в конфиг, который не коммитится.
Ещё один момент — не делайте внешний запрос синхронно, если тикетов очень много и сервер слабый. Для небольших сайтов это нормально, но при высокой нагрузке лучше отправлять уведомления через отложенную задачу или очередь. Иначе пользователь будет ждать завершения HTTP-запроса к Slack или Telegram прямо во время отправки тикета.
Если вам нужно дополнительно чистить админку от лишнего мусора и дублей, полезно сочетать такую интеграцию с аккуратной оптимизацией сайта. Например, в проектах на WPShop иногда используют Clearfy Pro для отключения лишних дублей и служебного шума, но саму отправку тикетов в чат он не заменяет.
Мини-чек-лист перед запуском в продакшене
- проверен конкретный хук создания тикета;
- webhook или bot token не лежит в открытом репозитории;
- в сообщении нет лишних персональных данных;
- есть логирование ошибок HTTP;
- тестовый тикет успешно приходит в нужный канал;
- уведомление не дублируется при редактировании тикета;
- длинные сообщения обрезаются до разумного размера.
Если после проверки всё работает, дальше уже можно расширять логику: отправлять разные сообщения по отделам, ставить отдельные каналы для VIP-клиентов или добавлять ссылку на карточку тикета в админке WordPress.