Как создать автоматический импорт тикетов в WordPress

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

Зачем нужен автоматический импорт тикетов в WordPress

В большинстве компаний тикеты поступают из разных каналов: почта, формы обратной связи, CRM-системы, мессенджеры. Ручной перенос обращений в WordPress занимает время и увеличивает риск ошибок. Автоматический импорт позволяет:

  • Сократить время обработки обращений;
  • Избежать потери заявок;
  • Централизовать управление тикетами в WordPress;
  • Автоматизировать дальнейшую работу с тикетами, например, назначение ответственных, отправку уведомлений.

Чтобы реализовать эту задачу, можно использовать готовые плагины или написать собственный код с использованием WordPress hooks и REST API.

Выбор плагина для импорта тикетов

Среди популярных решений для организации тикет-систем в WordPress стоит выделить:

  • WP Support Plus — позволяет импортировать тикеты из CSV и интегрируется с почтой;
  • Awesome Support — мощный плагин с возможностью расширений, поддерживает интеграции с внешними сервисами;
  • Fluent Support — имеет встроенный импорт и автоматизацию, удобен для малого и среднего бизнеса.

Для автоматического импорта из почты или внешних источников пригодятся дополнения или кастомные скрипты. Если готовые решения не удовлетворяют, можно написать собственный код.

Как создать автоматический импорт тикетов через собственный код

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

Шаг 1. Создаем функцию импорта CSV

Для начала напишем функцию wpticket_import_tickets_from_csv, которая будет считывать CSV и создавать записи типа тикета.

function wpticket_import_tickets_from_csv($filepath) {
    if (!file_exists($filepath)) {
        return new WP_Error('file_not_found', 'CSV файл не найден');
    }

    $handle = fopen($filepath, 'r');
    if (!$handle) {
        return new WP_Error('file_open_error', 'Не удалось открыть CSV файл');
    }

    $header = fgetcsv($handle);
    if (!$header) {
        fclose($handle);
        return new WP_Error('empty_file', 'CSV файл пуст или содержит неверный формат');
    }

    while (($row = fgetcsv($handle)) !== false) {
        $data = array_combine($header, $row);
        if (!$data) {
            continue; // Пропускаем некорректные строки
        }

        // Создаем тикет как кастомный пост тип 'ticket'
        $post_data = array(
            'post_title'   => sanitize_text_field($data['subject']),
            'post_content' => sanitize_textarea_field($data['description']),
            'post_status'  => 'publish',
            'post_type'    => 'ticket',
            'post_author'  => 1, // Можно динамически определять
        );

        $post_id = wp_insert_post($post_data);
        if (is_wp_error($post_id)) {
            continue;
        }

        // Добавляем мета-данные
        update_post_meta($post_id, '_wpticket_priority', sanitize_text_field($data['priority']));
        update_post_meta($post_id, '_wpticket_customer_email', sanitize_email($data['email']));
        update_post_meta($post_id, '_wpticket_status', sanitize_text_field($data['status']));
    }
    fclose($handle);
    return true;
}

Шаг 2. Запускаем импорт по расписанию (cron)

Чтобы импорт происходил автоматически, зарегистрируем задачу WP-Cron, которая будет запускать импорт ежедневно.

function wpticket_schedule_import() {
    if (!wp_next_scheduled('wpticket_daily_import_event')) {
        wp_schedule_event(time(), 'daily', 'wpticket_daily_import_event');
    }
}
add_action('wp', 'wpticket_schedule_import');

function wpticket_do_import() {
    $filepath = WP_CONTENT_DIR . '/uploads/tickets_import.csv';
    $result = wpticket_import_tickets_from_csv($filepath);
    if (is_wp_error($result)) {
        error_log('Ошибка импорта тикетов: ' . $result->get_error_message());
    }
}
add_action('wpticket_daily_import_event', 'wpticket_do_import');

Так импорт будет автоматически запускаться каждый день и загружать тикеты из файла tickets_import.csv в папке загрузок.

Обработка и расширение импорта: дополнительные возможности

Импорт из почты с помощью IMAP

Для более сложных задач можно реализовать импорт из почтового ящика с использованием PHP IMAP. Это позволит автоматически создавать тикеты из писем пользователей.

Пример базового подключения к почтовому ящику:

$mailbox = imap_open('{imap.example.com:993/imap/ssl}INBOX', 'user@example.com', 'password');
$emails = imap_search($mailbox, 'UNSEEN');
if ($emails) {
    foreach ($emails as $email_number) {
        $overview = imap_fetch_overview($mailbox, $email_number, 0)[0];
        $message = imap_fetchbody($mailbox, $email_number, 1);
        // Создаем тикет из $overview->subject и $message
    }
}
imap_close($mailbox);

Реализовать такую логику можно, интегрируя с функцией создания тикетов, как в примере выше.

Использование WP REST API для интеграции с внешними системами

Если тикеты должны импортироваться из CRM или другой платформы, можно настроить прием данных через REST API WordPress. Создайте собственный endpoint, который будет принимать данные и создавать тикеты.

add_action('rest_api_init', function () {
    register_rest_route('wpticket/v1', '/import/', array(
        'methods' => 'POST',
        'callback' => 'wpticket_rest_import_callback',
        'permission_callback' => function () {
            return current_user_can('edit_posts');
        }
    ));
});

function wpticket_rest_import_callback(WP_REST_Request $request) {
    $params = $request->get_json_params();
    // Валидация данных
    $title = sanitize_text_field($params['subject'] ?? 'Без темы');
    $content = sanitize_textarea_field($params['description'] ?? '');

    $post_id = wp_insert_post(array(
        'post_title' => $title,
        'post_content' => $content,
        'post_type' => 'ticket',
        'post_status' => 'publish',
    ));

    if (is_wp_error($post_id)) {
        return new WP_REST_Response(array('error' => $post_id->get_error_message()), 500);
    }

    return new WP_REST_Response(array('success' => true, 'ticket_id' => $post_id), 200);
}

Рекомендации по безопасности и производительности

При автоматическом импорте важно учитывать безопасность данных и нагрузку на сервер:

  • Проверка данных и валидация — не доверяйте входящим данным без фильтрации и проверки;
  • Ограничение доступа — REST API и задачи cron должны запускаться только авторизованными или доверенными процессами;
  • Оптимизация — избегайте больших объемов импортируемых данных за один запрос, используйте пакетную обработку;
  • Логирование — ведите журнал ошибок и успешных импортов для отладки и мониторинга.

Если хотите расширить функциональность тикет-системы, обратите внимание на плагины из каталога WPSHOP, которые помогут добавить автоматическое распределение, уведомления и другие возможности.

Как использовать WP-Cron для автоматического удаления старых тикетов в WordPress
23.06.2026
Как автоматизировать удаление старых тикетов в WordPress
30.05.2026
Как создать автоматический отчет о проблемах в тикет-системе WordPress
26.02.2026
Как использовать hooks в WordPress для решения практических задач
02.12.2025
Как добавить автоматическое сообщение при создании тикета в WordPress
01.01.2026