В службах поддержки клиентов на базе WordPress с использованием плагина WPtickets важно правильно расставлять приоритеты тикетов, чтобы своевременно обрабатывать самые критичные запросы. В этой статье подробно рассмотрим, как реализовать автоматическое присваивание приоритета тикетам на основе их содержания, темы или других параметров с помощью кастомного кода и встроенных возможностей WPtickets.
Зачем нужно автоматическое присваивание приоритета тикетам
Ручное назначение приоритета каждому тикету требует времени и часто приводит к ошибкам или задержкам в обработке. Автоматизация этого процесса позволяет:
- Экономить время операторов поддержки.
- Обеспечить быструю обработку важных запросов.
- Упорядочить очередь тикетов по степени срочности.
- Уменьшить количество пропущенных или забытых тикетов.
WPtickets не предлагает готового инструмента для автоматического назначения приоритета из коробки, но благодаря гибкой системе хуков и фильтров мы можем добавить эту функциональность самостоятельно.
Как работает система приоритетов в WPtickets
WPtickets позволяет создавать и использовать собственные статусы и приоритеты тикетов. Приоритеты обычно хранятся как мета-поля у поста-сообщения (тикета) или в отдельной таксономии. Наш код будет добавлять или менять значение приоритета при создании тикета.
Стандартные приоритеты могут быть, например: Низкий, Средний, Высокий, Срочный. Можно расширять список.
Пример структуры приоритета в WPtickets
Приоритет может храниться в мета-поле _wpt_ticket_priority. Значения могут быть строковыми или числовыми для сортировки.
Создаем функцию для автоматического присваивания приоритета
Ниже пример функции, которая анализирует тему и содержимое тикета, и в зависимости от ключевых слов ставит приоритет.
function wptickets_auto_assign_priority($ticket_id, $post) {
// Получаем тему тикета
$subject = sanitize_text_field(get_post_meta($ticket_id, 'ticket_subject', true));
// Получаем содержание тикета
$content = strip_tags($post->post_content);
$priority = 'Средний'; // Значение по умолчанию
// Пример ключевых слов для высокого приоритета
$high_priority_keywords = array('срочно', 'не работает', 'ошибка', 'краш', 'потеря данных');
foreach ($high_priority_keywords as $keyword) {
if (stripos($subject, $keyword) !== false || stripos($content, $keyword) !== false) {
$priority = 'Высокий';
break;
}
}
// Если в теме есть слова 'тест' или 'проба' — назначаем низкий приоритет
$low_priority_keywords = array('тест', 'проба');
foreach ($low_priority_keywords as $keyword) {
if (stripos($subject, $keyword) !== false) {
$priority = 'Низкий';
break;
}
}
// Сохраняем приоритет как мета-поле
update_post_meta($ticket_id, '_wpt_ticket_priority', $priority);
}
// Хук на создание тикета
add_action('wp_insert_post', function($post_id, $post, $update) {
if ($post->post_type !== 'wpt_ticket' || $update) {
return;
}
wptickets_auto_assign_priority($post_id, $post);
}, 10, 3);
В этом коде при создании нового тикета проверяется тема и содержание, и в зависимости от наличия ключевых слов назначается приоритет. Вы можете расширять списки ключевых слов и логику.
Расширение: присвоение приоритета по email или пользователю
Иногда важно выставлять приоритет тикета в зависимости от автора или источника. Например, если тикет пришел от VIP-клиента, ставим высокий приоритет.
function wptickets_auto_assign_priority_by_user($ticket_id, $post) {
$user_id = get_post_meta($ticket_id, 'ticket_user_id', true);
if (!$user_id) return;
// Получаем роль пользователя
$user = get_userdata($user_id);
if (!$user) return;
if (in_array('vip_customer', (array)$user->roles)) {
update_post_meta($ticket_id, '_wpt_ticket_priority', 'Высокий');
}
}
add_action('wp_insert_post', function($post_id, $post, $update) {
if ($post->post_type !== 'wpt_ticket' || $update) {
return;
}
wptickets_auto_assign_priority_by_user($post_id, $post);
}, 11, 3);
Здесь мы проверяем роль пользователя, и если есть специальная роль vip_customer, приоритет становится высоким.
Как отобразить приоритет в списке тикетов и в админке
Чтобы приоритет был виден менеджерам и операторам, его нужно добавить в колонки списка тикетов в админке и в шаблоны фронтенда.
Добавление колонки приоритета в админку
add_filter('manage_edit-wpt_ticket_columns', function($columns) {
$columns['wpt_priority'] = 'Приоритет';
return $columns;
});
add_action('manage_wpt_ticket_posts_custom_column', function($column, $post_id) {
if ($column === 'wpt_priority') {
$priority = get_post_meta($post_id, '_wpt_ticket_priority', true);
echo esc_html($priority ?: 'Не задан');
}
}, 10, 2);
Вывод приоритета на странице тикета для пользователя
В шаблоне тикета можно вывести приоритет простым вызовом:
$priority = get_post_meta(get_the_ID(), '_wpt_ticket_priority', true);
echo '<p><strong>Приоритет:</strong> ' . esc_html($priority) . '</p>';
Советы по улучшению автоматического присваивания приоритета
Чтобы сделать систему более точной и гибкой, можно:
- Использовать регулярные выражения для поиска сложных паттернов в содержании тикета.
- Добавить интерфейс в админке для редактирования ключевых слов и правил.
- Интегрировать с внешними сервисами, например, анализом тональности текста (sentiment analysis).
- Использовать плагин Clearfy Pro для улучшения производительности и расширения возможностей безопасности при работе с кастомным кодом.
Заключение
Автоматическое присваивание приоритета тикетам в WPtickets значительно ускоряет работу службы поддержки и повышает её качество. Реализовать это можно с помощью простых функций на PHP, используя хуки WordPress и WPtickets. Вы можете адаптировать примеры под свои нужды, расширять логику и интегрировать с дополнительными инструментами.