В системах поддержки клиентов на WordPress часто возникает необходимость автоматического импорта тикетов из внешних источников — почты, CRM, сторонних сервисов. Это позволяет централизовать обращения и ускорить обработку заявок. В этой статье разберём, как создать автоматический импорт тикетов в WordPress, используя WPtickets и кастомный код, а также рассмотрим полезные плагины для интеграции.
Зачем нужен автоматический импорт тикетов в WordPress
Автоматизация импорта заявок экономит время и снижает риск ошибок при ручном создании тикетов. Вместо того чтобы вручную переносить обращения из почты, формы или CRM, система сама создаёт тикеты с нужными параметрами. Это особенно актуально для тех, кто работает с большим потоком обращений и хочет повысить качество поддержки.
Импорт можно настроить для разных каналов: электронная почта, API внешних сервисов, CSV-файлы с данными. Важно, чтобы тикеты создавались с правильными полями, приоритетами и прикреплёнными файлами.
Обзор плагинов для импорта тикетов в WordPress
WPtickets и его возможности для импорта
Плагин WPtickets — мощное решение для поддержки клиентов с возможностями автоматизации. По умолчанию импорт писем реализован с помощью IMAP, но для более гибких сценариев потребуется кастомизация.
WPtickets позволяет создавать тикеты программно через функцию wpticketsru_create_ticket_from_import($data), что даёт возможность интегрироваться с любыми источниками данных.
Плагины для автоматического парсинга почты
Для автоматического получения писем и создания тикетов можно использовать плагины, работающие с почтовыми ящиками через IMAP, например:
- Postie — импортирует почту в записи WordPress, можно адаптировать под создание тикетов.
- WP Mail SMTP с расширением для обработки входящих писем.
Однако для полноценного импорта тикетов с кастомными полями часто требуется доработка кода.
Как написать функцию для импорта тикетов в WPtickets
Рассмотрим пример функции, которая будет создавать тикет из массива данных, полученных, например, при парсинге письма или API-запроса:
function wpticketsru_import_ticket_create($ticket_data) {
if (empty($ticket_data['subject']) || empty($ticket_data['message']) || empty($ticket_data['user_email'])) {
return new WP_Error('missing_data', 'Не хватает обязательных данных для создания тикета');
}
// Проверяем, существует ли пользователь, иначе создаём гостя
$user = get_user_by('email', $ticket_data['user_email']);
$user_id = $user ? $user->ID : 0;
// Формируем аргументы для создания тикета
$args = array(
'post_title' => sanitize_text_field($ticket_data['subject']),
'post_content' => wp_kses_post($ticket_data['message']),
'post_type' => 'wptickets_ticket',
'post_status' => 'publish',
'post_author' => $user_id
);
// Создаём тикет
$ticket_id = wp_insert_post($args);
if (is_wp_error($ticket_id)) {
return $ticket_id;
}
// Добавляем мета-данные: приоритет, категория, теги
if (!empty($ticket_data['priority'])) {
update_post_meta($ticket_id, '_wptickets_priority', sanitize_text_field($ticket_data['priority']));
}
if (!empty($ticket_data['category'])) {
wp_set_object_terms($ticket_id, sanitize_text_field($ticket_data['category']), 'wptickets_category');
}
// Обработка вложений
if (!empty($ticket_data['attachments']) && is_array($ticket_data['attachments'])) {
foreach ($ticket_data['attachments'] as $file_path) {
wpticketsru_attach_file_to_ticket($ticket_id, $file_path);
}
}
return $ticket_id;
}Функция wpticketsru_import_ticket_create принимает массив с ключами subject, message, user_email, priority, category и attachments. Она создаёт запись типа тикет, устанавливает метаданные и прикрепляет файлы.
Функция для прикрепления файлов к тикету
function wpticketsru_attach_file_to_ticket($ticket_id, $file_path) {
if (!file_exists($file_path)) {
return false;
}
$upload = wp_upload_bits(basename($file_path), null, file_get_contents($file_path));
if ($upload['error']) {
return false;
}
$filetype = wp_check_filetype($upload['file'], null);
$attachment = array(
'post_mime_type' => $filetype['type'],
'post_title' => sanitize_file_name(basename($upload['file'])),
'post_content' => '',
'post_status' => 'inherit'
);
$attach_id = wp_insert_attachment($attachment, $upload['file'], $ticket_id);
require_once(ABSPATH . 'wp-admin/includes/image.php');
$attach_data = wp_generate_attachment_metadata($attach_id, $upload['file']);
wp_update_attachment_metadata($attach_id, $attach_data);
// Связываем вложение с тикетом
add_post_meta($ticket_id, '_wptickets_attachment', $attach_id);
return $attach_id;
}Примеры сценариев автоматического импорта
Импорт тикетов из почтового ящика через IMAP
Для автоматизации можно настроить скрипт, который будет подключаться к IMAP серверу и парсить новые письма. После получения письма извлекается тема, тело, адрес отправителя и вложения, затем вызывается wpticketsru_import_ticket_create.
Этот подход позволяет создавать тикеты без участия администратора и ускоряет реакцию на обращения.
Импорт из CSV-файлов
Если обращения приходят из внешней CRM или другого источника в виде CSV, можно написать функцию, которая будет читать файл, проходить по строкам и создавать тикеты по аналогии с примером выше.
Рекомендуется запускать импорт через cron-задачу для регулярного обновления.
Рекомендации по безопасности и производительности
При реализации импорта важно учитывать:
- Валидацию входящих данных — чтобы не создавать мусорные тикеты.
- Права доступа — тикеты должны принадлежать корректным пользователям.
- Обработку ошибок и логирование — для отладки и контроля процессов импорта.
- Оптимизацию запросов, чтобы не перегружать базу при большом объёме.
Также стоит подумать о лимитах на размер вложений и типах разрешённых файлов.
Интеграция с другими плагинами WPShop
Для расширения возможностей импорта и обработки можно использовать WPRemark — плагин для автоматического присваивания тегов и обработки тикетов, что поможет структурировать импортированные обращения.
Для создания автоматических ответов на импортированные тикеты подойдёт WPtickets с расширенными автоответами, которые можно настраивать под тип обращения.