Автоматизация распределения тикетов в системе поддержки клиентов — ключевой момент для эффективной работы службы техподдержки на сайте WordPress. Особенно это важно, когда количество обращений растет, а нужно быстро направлять запросы к нужным специалистам без ручного вмешательства.
Почему важна автоматизация распределения тикетов
Ручное распределение обращений часто приводит к задержкам, ошибкам и неравномерной нагрузке на сотрудников. Автоматизация позволяет:
- Сократить время реакции на запрос пользователя;
- Избежать человеческого фактора и ошибок;
- Обеспечить равномерное распределение нагрузки;
- Использовать критерии для направления тикета именно к профильному специалисту.
Для WordPress существует несколько подходов и инструментов, которые помогут реализовать такую автоматизацию.
Использование плагинов для автоматического распределения тикетов
Наиболее простой способ — задействовать специализированные плагины. Примером может служить WPtickets, который поддерживает расширенную систему ролей и позволяет создавать правила распределения.
Другие плагины с функцией автоматического назначения:
- Awesome Support — бесплатный и платный функционал с возможностью настройки правил распределения по категориям и тегам;
- SupportCandy — поддерживает автоматическое назначение на агентов в зависимости от темы обращения;
- Help Scout Desk — интеграция с внешней системой с мощным распределением.
Однако иногда стандартных возможностей плагинов недостаточно, и требуется кастомная логика.
Кастомное решение автоматического распределения тикетов — пример кода
Допустим, вы хотите, чтобы тикеты, содержащие определенные ключевые слова, автоматически назначались конкретному агенту. Для этого можно использовать хуки WordPress и функционал плагина поддержки.
Пример функции с префиксом wptickets_ для автоматического назначения тикета при его создании:
function wptickets_auto_assign_ticket( $ticket_id ) {
$ticket = get_post( $ticket_id );
$content = strtolower( $ticket->post_content );
$agent_id = 0;
if ( strpos( $content, 'оплата' ) !== false ) {
// Назначаем агента поддержки платежей (ID 12)
$agent_id = 12;
} elseif ( strpos( $content, 'техническая' ) !== false ) {
// Назначаем технического специалиста (ID 15)
$agent_id = 15;
}
if ( $agent_id ) {
update_post_meta( $ticket_id, '_wptickets_assigned_agent', $agent_id );
// Можно добавить уведомление агенту
wptickets_notify_agent( $agent_id, $ticket_id );
}
}
add_action( 'wptickets_ticket_created', 'wptickets_auto_assign_ticket' );В этом примере при создании тикета проверяется содержание обращения и в зависимости от ключевых слов назначается ответственный агент. Для интеграции с WPtickets можно использовать встроенный хук wptickets_ticket_created, который вызывается при создании нового тикета.
Функция уведомления агента
Для информирования назначенного сотрудника можно реализовать простую функцию отправки email:
function wptickets_notify_agent( $agent_id, $ticket_id ) {
$agent = get_user_by( 'ID', $agent_id );
$ticket = get_post( $ticket_id );
if ( ! $agent || ! $ticket ) return;
$subject = 'Новый тикет: ' . $ticket->post_title;
$message = 'Вам назначен новый тикет для обработки.\n\n';
$message .= 'Содержание: ' . $ticket->post_content . '\n';
$message .= 'Ссылка: ' . get_edit_post_link( $ticket_id );
wp_mail( $agent->user_email, $subject, $message );
}Настройка правил распределения через метаполя и категории
Для более сложных сценариев можно создавать произвольные поля (метаполя) для тикетов, например, тема обращения, приоритет, тип проблемы. После создания таких полей в форме тикета, по ним можно строить правила распределения.
Например, тикеты с приоритетом «Критический» можно направлять сразу на старших специалистов, а по теме — к соответствующему отделу.
Это потребует доработки кода, который будет проверять эти поля и выбирать агента:
function wptickets_assign_by_priority_and_topic( $ticket_id ) {
$priority = get_post_meta( $ticket_id, '_wptickets_priority', true );
$topic = get_post_meta( $ticket_id, '_wptickets_topic', true );
if ( $priority === 'critical' ) {
$agent_id = 20; // Старший специалист
} elseif ( $topic === 'billing' ) {
$agent_id = 12; // Отдел платежей
} else {
$agent_id = 15; // Общий отдел
}
update_post_meta( $ticket_id, '_wptickets_assigned_agent', $agent_id );
wptickets_notify_agent( $agent_id, $ticket_id );
}
add_action( 'wptickets_ticket_created', 'wptickets_assign_by_priority_and_topic' );Распределение тикетов по времени и загрузке агентов
Для продвинутого распределения можно учитывать не только тему и приоритет, но и текущую загрузку сотрудников. Это требует хранения и обновления данных о количестве назначенных тикетов у каждого агента.
Например, можно создать дополнительное поле _wptickets_current_load и при назначении тикета увеличивать счетчик, а при закрытии тикета — уменьшать.
При распределении в коде выбирается агент с минимальной загрузкой:
function wptickets_assign_min_load_agent( $ticket_id ) {
$agents = [12, 15, 20]; // ID агентов
$min_load = PHP_INT_MAX;
$selected_agent = 0;
foreach ( $agents as $agent_id ) {
$load = (int) get_user_meta( $agent_id, '_wptickets_current_load', true );
if ( $load < $min_load ) {
$min_load = $load;
$selected_agent = $agent_id;
}
}
update_post_meta( $ticket_id, '_wptickets_assigned_agent', $selected_agent );
wptickets_notify_agent( $selected_agent, $ticket_id );
// Увеличиваем загрузку
update_user_meta( $selected_agent, '_wptickets_current_load', $min_load + 1 );
}
add_action( 'wptickets_ticket_created', 'wptickets_assign_min_load_agent' );Не забудьте добавить логику уменьшения счетчика при закрытии тикета, чтобы корректно отражать текущую нагрузку.
Заключение по теме автоматизации распределения тикетов
Автоматизация распределения тикетов в WordPress — это не только улучшение скорости обработки запросов, но и качество обслуживания клиентов. В зависимости от сложности поддержки, можно использовать как готовые плагины с базовыми настройками, так и создавать кастомные решения, которые учитывают бизнес-логику и особенности команды.
Если вы используете WPtickets, то благодаря встроенным хукам и метаполям можно гибко реализовать любую логику распределения, интегрируя уведомления и учитывая загрузку агентов.
Такой подход даст стабильную и удобную систему поддержки без лишней ручной работы.