Зачем нужно автоматическое сообщение при создании тикета
В системах поддержки и тикет-менеджерах на WordPress очень важно информировать пользователя о том, что его запрос успешно зарегистрирован. Это повышает доверие и улучшает пользовательский опыт. Автоматическое сообщение — это быстрый способ подтвердить создание тикета, дать инструкции по дальнейшим шагам или указать ожидаемое время ответа.
В этой статье мы подробно рассмотрим, как реализовать отправку такого сообщения самостоятельно, используя PHP и хуки WordPress. Также расскажем, какие плагины могут облегчить задачу и как их настроить для автоматизации уведомлений.
Использование хука для отправки письма при создании тикета
Если у вас есть собственный тип записи — тикет (например, ticket), то можно использовать хук save_post_ticket для запуска функции при создании или обновлении тикета.
Ниже пример функции, которая отправляет автоматическое письмо на электронную почту пользователя, указанный в метаполе тикета (например, user_email):
function wpticket_send_auto_message_on_ticket_create($post_id) {
// Проверяем, что это не автосохранение
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
// Проверяем права пользователя
if (!current_user_can('edit_post', $post_id)) {
return;
}
// Получаем пост
$post = get_post($post_id);
// Проверяем тип записи
if ($post->post_type !== 'ticket') {
return;
}
// Проверяем, создается ли тикет впервые
$is_new = get_post_meta($post_id, '_wpticket_is_new', true);
if ($is_new) {
return; // Уже отправляли сообщение
}
// Получаем email пользователя из метаполя
$user_email = get_post_meta($post_id, 'user_email', true);
if (!$user_email || !is_email($user_email)) {
return;
}
// Формируем тему и тело письма
$subject = 'Ваш тикет принят в обработку';
$message = "Здравствуйте!\n\nВаш тикет с ID {$post_id} успешно создан. Мы свяжемся с вами в ближайшее время.\n\nСпасибо за обращение!";
// Отправляем письмо
wp_mail($user_email, $subject, $message);
// Помечаем, что сообщение отправлено
update_post_meta($post_id, '_wpticket_is_new', 1);
}
add_action('save_post_ticket', 'wpticket_send_auto_message_on_ticket_create');В этом коде мы защищаемся от повторной отправки письма при каждом обновлении, используя метаполе _wpticket_is_new. Также важно корректно указывать email пользователя при создании тикета.
Объяснение ключевых моментов кода
- Проверка
DOING_AUTOSAVEпозволяет избежать запуска функции при автосохранении. - Проверка прав пользователя защищает от неавторизованных изменений.
- Проверяется тип записи, чтобы не срабатывать на другие посты.
- Использование метаполя для email — удобный способ хранить контактные данные.
- Функция
wp_mailотвечает за отправку почты.
Автоматизация с помощью плагинов для тикет-систем и уведомлений
Если вы используете готовые решения для управления тикетами, например, плагин WP Ticket или другие, часто в них уже встроена система уведомлений. Но если нет, можно воспользоваться плагинами для автоматизации почтовых рассылок:
- WP Mail SMTP — улучшает доставку писем с сайта, настраивает SMTP-серверы.
- Better Notifications for WP — позволяет создавать и настраивать любые уведомления по событиям, в том числе при создании кастомных постов.
- AutomateWoo — мощный плагин автоматизации маркетинга, который можно адаптировать под уведомления в тикет-системе.
Для интеграции с WP Ticket можно настроить автоматические письма через Better Notifications for WP, указав триггер «Создание тикета» и шаблон сообщения, в котором будут динамические данные о тикете.
Пример настройки уведомления в Better Notifications for WP
1. Установите и активируйте плагин с официального сайта WPSHOP.
2. В админке перейдите в раздел «Уведомления» и создайте новое уведомление.
3. В разделе «Триггер» выберите «Создание записи» и укажите тип записи ticket.
4. В шаблоне письма используйте переменные, например, {post_title}, {post_author_email}, и добавьте кастомные метаполя.
5. Сохраните и протестируйте отправку письма при создании нового тикета.
Как отправлять автоматические сообщения с кастомным контентом
В реальных условиях нужно часто отправлять персонализированные письма, включающие данные из тикета: описание проблемы, номер тикета, ссылку на просмотр. Рассмотрим пример функции, которая формирует HTML-письмо с деталями тикета:
function wpticket_send_detailed_auto_message($post_id) {
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
if (!current_user_can('edit_post', $post_id)) return;
$post = get_post($post_id);
if ($post->post_type !== 'ticket') return;
$is_new = get_post_meta($post_id, '_wpticket_is_new', true);
if ($is_new) return;
$user_email = get_post_meta($post_id, 'user_email', true);
if (!$user_email || !is_email($user_email)) return;
$ticket_description = get_post_meta($post_id, 'ticket_description', true);
$ticket_url = get_permalink($post_id);
$subject = 'Ваш тикет принят: #' . $post_id;
$message = "<html><body>";
$message .= "<h2>Спасибо за обращение!</h2>";
$message .= "<p>Ваш тикет успешно создан и зарегистрирован под номером <strong>#$post_id</strong>.</p>";
$message .= "<p><strong>Описание проблемы:</strong><br>" . nl2br(esc_html($ticket_description)) . "</p>";
$message .= "<p>Вы можете отслеживать статус тикета по ссылке: <a href='" . esc_url($ticket_url) . "'>Просмотреть тикет</a></p>";
$message .= "<p>Мы свяжемся с вами в ближайшее время.</p>";
$message .= "</body></html>";
$headers = array('Content-Type: text/html; charset=UTF-8');
wp_mail($user_email, $subject, $message, $headers);
update_post_meta($post_id, '_wpticket_is_new', 1);
}
add_action('save_post_ticket', 'wpticket_send_detailed_auto_message');В этом варианте письмо выглядит более профессионально, содержит HTML-разметку и подробности тикета. Главное — убедиться, что все данные корректно передаются и безопасны к выводу.
Отладка и тестирование отправки писем
Частой проблемой при реализации автоматических уведомлений является некорректная отправка писем. Чтобы отладить процесс, используйте следующие методы:
- Включите логирование почты с помощью плагина WP Mail Logging.
- Настройте SMTP-сервер через WP Mail SMTP для повышения надежности доставки.
- Проверяйте почтовый ящик и спам, чтобы убедиться, что письма доходят.
- Используйте функцию
error_log()в PHP для вывода промежуточных данных.
Например, вызов error_log('Отправлено письмо на ' . $user_email); поможет удостовериться, что функция сработала.
Заключение
Автоматическое отправление сообщений при создании тикета — важный элемент любой системы поддержки на WordPress. Вы можете реализовать его как вручную через хуки и код, так и с помощью плагинов, что значительно упрощает настройку и расширение функционала.
Если хотите хорошее решение «из коробки», посмотрите на плагины, которые поддерживают уведомления по событиям. Для разработчиков же возможность написать свою функцию даст гибкость и контроль над процессом.
Дополнительно рекомендуем ознакомиться с плагином WP Ticket на WPSHOP, который предлагает расширенный функционал для управления тикетами и встроенные уведомления.