Как создать мультиканальную поддержку в WP Tickets: интеграция email, чата и формы

В современных службах поддержки клиентов важно обеспечить прием обращений из разных каналов: email, веб-формы, онлайн-чат. WP Tickets — мощный плагин для организации системы поддержки в WordPress, но по умолчанию работает с тикетами, созданными через форму на сайте. В этой статье разберем, как расширить функционал WP Tickets, чтобы собирать тикеты из нескольких каналов, автоматизировать их обработку и не потерять важные обращения.

Почему нужна мультиканальная поддержка в WP Tickets

Традиционная поддержка через форму на сайте часто ограничивает удобство клиентов: не все хотят заходить на сайт и заполнять форму, некоторые предпочитают написать письмо или чат. Обеспечение приема тикетов из разных каналов позволяет:

  • Увеличить лояльность клиентов — они обращаются удобным способом.
  • Снизить нагрузку на операторов — все обращения в одном месте.
  • Повысить скорость реакции — автоматические маршруты по каналам.

Реализация такой системы требует интеграции WP Tickets с почтовыми сервисами и чат-платформами, что мы подробно рассмотрим далее.

Интеграция email в WP Tickets для автоматического создания тикетов

WP Tickets не имеет встроенного функционала для приема писем и конвертации их в тикеты, но можно настроить такую схему с помощью дополнительных плагинов и кастомного кода.

Используем плагин WP Mail SMTP для надежной доставки и приема почты

Для начала установим WP Mail SMTP. Он обеспечивает корректную отправку и прием почты через SMTP-серверы. Это нужно, чтобы почтовый сервер не блокировал письма и можно было обрабатывать входящие.

Парсинг писем и создание тикетов

Для автоматического создания тикетов из писем напишем функцию, которая будет запускаться по крону и проверять почту с помощью IMAP. Пример кода:

function wptickets_fetch_emails_create_tickets() {
    $hostname = '{imap.example.com:993/imap/ssl}INBOX';
    $username = 'support@example.com';
    $password = 'yourpassword';

    $inbox = imap_open($hostname, $username, $password);
    if (!$inbox) return;

    $emails = imap_search($inbox, 'UNSEEN');
    if ($emails) {
        foreach ($emails as $email_number) {
            $overview = imap_fetch_overview($inbox, $email_number, 0)[0];
            $message = imap_fetchbody($inbox, $email_number, 1);

            // Создаем новый тикет в WP Tickets
            $ticket_data = array(
                'post_title' => 'Email: ' . $overview->subject,
                'post_content' => $message,
                'post_type' => 'wptickets_ticket',
                'post_status' => 'publish',
            );
            wp_insert_post($ticket_data);

            // Помечаем письмо как прочитанное
            imap_setflag_full($inbox, $email_number, '\\Seen');
        }
    }
    imap_close($inbox);
}
// Добавляем в крон
if (!wp_next_scheduled('wptickets_check_email_hook')) {
    wp_schedule_event(time(), 'five_minutes', 'wptickets_check_email_hook');
}
add_action('wptickets_check_email_hook', 'wptickets_fetch_emails_create_tickets');

Этот код подключается к почтовому ящику, ищет новые письма, создает из них тикеты и помечает письма как прочитанные. Рекомендуется настроить крон с интервалом 5 минут для оперативного приема обращений.

Интеграция онлайн-чата с WP Tickets

Многие клиенты предпочитают решать вопросы через чат. Чтобы объединить чат и тикеты, можно использовать популярные сервисы, например, Tawk.to или LiveChat, с помощью их API создавать тикеты в WP Tickets при завершении разговора.

Пример интеграции через webhook

Допустим, чат-сервис поддерживает webhook на завершение сессии. Создаем обработчик в WordPress:

add_action('rest_api_init', function () {
    register_rest_route('wptickets/v1', '/chat-webhook', array(
        'methods' => 'POST',
        'callback' => 'wptickets_chat_webhook_handler',
        'permission_callback' => '__return_true',
    ));
});

function wptickets_chat_webhook_handler(WP_REST_Request $request) {
    $data = $request->get_json_params();
    if (empty($data['chat_transcript'])) {
        return new WP_Error('no_data', 'No chat transcript provided', array('status' => 400));
    }

    $post_data = array(
        'post_title' => 'Чат с клиентом: ' . sanitize_text_field($data['client_name'] ?? 'Без имени'),
        'post_content' => wp_kses_post($data['chat_transcript']),
        'post_type' => 'wptickets_ticket',
        'post_status' => 'publish',
    );
    $ticket_id = wp_insert_post($post_data);

    if (is_wp_error($ticket_id)) {
        return $ticket_id;
    }

    return array('success' => true, 'ticket_id' => $ticket_id);
}

Зарегистрируйте URL https://your-site.com/wp-json/wptickets/v1/chat-webhook в настройках webhook вашего чат-сервиса. После завершения сессии чат будет отправлять расшифровку разговора, и она автоматически превратится в тикет WP Tickets.

Оптимизация формы создания тикетов для разных каналов

Чтобы объединить форму на сайте с мультиканальной поддержкой, можно добавить выбор канала обращения. Это позволит оператору сразу видеть источник и обрабатывать заявки приоритетнее.

Добавляем поле выбора канала в форму WP Tickets

Для этого используем фильтр WP Tickets и добавим поле с помощью хуков:

add_filter('wptickets_ticket_form_fields', 'wptickets_add_channel_field');
function wptickets_add_channel_field($fields) {
    $fields['channel'] = array(
        'label' => 'Канал обращения',
        'type' => 'select',
        'options' => array(
            'form' => 'Форма на сайте',
            'email' => 'Email',
            'chat' => 'Онлайн-чат',
        ),
        'required' => true,
        'default' => 'form',
    );
    return $fields;
}

// Сохраняем значение в метаполе тикета
add_action('wptickets_ticket_created', 'wptickets_save_channel_meta', 10, 2);
function wptickets_save_channel_meta($ticket_id, $data) {
    if (!empty($data['channel'])) {
        update_post_meta($ticket_id, '_wptickets_channel', sanitize_text_field($data['channel']));
    }
}

Теперь при создании тикета вручную или через форму можно указывать источник обращения, что поможет в отчетности и аналитике.

Автоматизация обработки тикетов из разных каналов

После приема обращений важно настроить автоматическое распределение и приоритизацию тикетов по каналам.

Пример автоматического присваивания меток по каналу

add_action('wptickets_ticket_created', 'wptickets_assign_tags_by_channel', 20, 2);
function wptickets_assign_tags_by_channel($ticket_id, $data) {
    $channel = get_post_meta($ticket_id, '_wptickets_channel', true);
    if ($channel) {
        switch ($channel) {
            case 'email':
                wp_set_post_terms($ticket_id, array('email'), 'wptickets_tags', true);
                break;
            case 'chat':
                wp_set_post_terms($ticket_id, array('chat'), 'wptickets_tags', true);
                break;
            case 'form':
                wp_set_post_terms($ticket_id, array('form'), 'wptickets_tags', true);
                break;
        }
    }
}

Это позволит фильтровать тикеты по источнику, оперативно анализировать нагрузку и оптимизировать работу операторов.

Заключение по мультиканальной поддержке в WP Tickets

Объединение email, чата и формы обращения в единую систему WP Tickets значительно повысит качество поддержки и удобство для клиентов. Хотя WP Tickets не имеет нативной поддержки мультиканальности, с помощью интеграций, плагина WP Mail SMTP, API чат-сервисов и кастомного кода можно построить надежный и удобный сервис поддержки.

Для расширения возможностей рекомендуем изучить плагины и сервисы, которые интегрируются с WP Tickets и облегчают автоматизацию, например WPRemark для управления комментариями и уведомлениями, или My Popup для интерактивного сбора обращений.

Как создать простую классификацию тикетов в WPtickets для WordPress
22.02.2026
Как создать автоматический отчет по тикетам в WPtickets для WordPress
24.01.2026
Как добавить событие изменения статуса тикета в WPtickets для WordPress
05.03.2026
Создание комплексного фильтра по свойствам тикетов в WPtickets для WordPress
14.04.2026
Автоматизация обработки тикетов в WordPress: практическое руководство
13.12.2025