Уведомления GLPI в WhatsApp через Evolution API

GLPI уведомляет только по e-mail, а e-mail попадает в спам. Бесплатный модуль WhatsApp Bot связывает GLPI с Evolution API (open source) и доставляет уведомления по заявкам в WhatsApp с очередью повторных попыток и self-hosted подключением. Разбираем, как канал работает через режим SMS, откуда берётся номер, диагностический SQL для очереди и практические ловушки первого внедрения.

В этой статьеРазделов: 9

WhatsApp — канал, который ваш пользователь открывает десятки раз в день, а GLPI по умолчанию умеет общаться только по e-mail. Модуль WhatsApp Bot от NexTool связывает GLPI с Evolution API (open source, протокол Baileys) и доставляет уведомления по заявкам прямо в WhatsApp, с очередью, повторно обрабатывающей сбои, и подключением в вашей собственной инфраструктуре. Сопровождая службы поддержки, мы убедились, что правильный канал меняет долю ответов на согласования и опросы удовлетворённости, — но у интеграции есть ловушки настройки, которые это руководство показывает изнутри.

Проблема

GLPI отправляет транзакционные письма через очередь queuednotification. Это работает, но корпоративная почта попадает в спам, конечный пользователь не живёт в веб-почте, а руководитель, которому нужно согласовать заявку, узнаёт о ней, только когда ему звонят с напоминанием. В итоге согласования зависают на часы, доля ответов на опросы удовлетворённости близка к нулю, а служба поддержки тратит время на ручные напоминания. Замена e-mail на канал, который человек действительно читает, решает большую часть этих проблем — а в Бразилии таким каналом является WhatsApp.

Коммерческий вариант (официальный WhatsApp Business API) дорог, требует одобрения шаблонов со стороны Meta и привязывает вас к внешнему договору. Для тех, кто уже управляет собственной инфраструктурой, Evolution API — self-hosted альтернатива, а WhatsApp Bot подключает её к GLPI через встроенную инфраструктуру уведомлений — без костылей в ядре.

Как работает WhatsApp Bot

Модуль регистрирует собственный режим уведомлений, переиспользуя канал SMS в GLPI (Notification_NotificationTemplate::registerMode(MODE_SMS)). Когда срабатывает событие заявки, GLPI определяет получателя, модуль находит номер, формирует сообщение и отправляет его через Evolution API — всё прозрачно для оператора.

  • Собственные уведомления по событиям — при установке модуль создаёт девять отдельных уведомлений WhatsApp (новая заявка, новый комментарий, заявка решена, опрос удовлетворённости, запрос на согласование, ответ на согласование и три уведомления о пароле), у каждого свои получатели. Создание идемпотентно по имени: если вы отредактируете текст в интерфейсе GLPI, переустановка сохранит вашу правку.
  • Очередь с автоматическими повторами — сообщение, не отправленное из-за нестабильного подключения, попадает в таблицу очереди и повторно обрабатывается пакетами до 50 штук каждую минуту, максимум 3 попытки, после чего помечается как failed. Ничего не пропадает молча: причина ошибки сохраняется.
  • Health check каждые 5 минут — cron запрашивает реальное состояние подключения в Evolution API и обновляет статус на панели, чтобы вы узнали о падении WhatsApp раньше, чем пожалуется пользователь.
  • QR-код прямо в GLPI — номер отправителя подключается сканированием QR-кода, сгенерированного на вкладке «Коннекторы», не выходя из среды.
  • Self-hosted или управляемый — укажите свою Evolution API (URL + API Key) или, в лицензированной среде, используйте инстанс, управляемый NexTool.

Номер получателя берётся из поля «Мобильный телефон» пользователя GLPI (glpi_users.mobile) и автоматически нормализуется: модуль убирает маску, проверяет длину (от 10 до 15 цифр) и добавляет код страны 55, если бразильский номер указан без него. Тот, у кого мобильный не указан, просто не получает сообщение — отправка пропускается молча и не порождает ошибку.

WhatsApp Bot против встроенных уведомлений GLPI

ВозможностьСтандартный GLPI (e-mail SMTP)WhatsApp Bot + Evolution API
Канал доставкиТранзакционный e-mailWhatsApp (сообщение на телефон)
Доля прочтенийНизкая (спам, никто не открывает)Высокая (повседневный канал)
Повторная отправка при сбоеОчередь, без настраиваемых повторов по каналуСобственная очередь, 3 попытки, пакеты по 50/мин
Источник номераE-mail пользователяПоле «Мобильный телефон» (glpi_users.mobile), нормализованное
ИнфраструктураSMTP-серверEvolution API, self-hosted или управляемая
Стоимость сообщенияНоль (собственный SMTP)Ноль (без платного API Meta)

Как включить

  1. Установите NexTool в ваш GLPI и откройте Настройки > NexTool > Модули.
  2. Включите модуль WhatsApp Bot и нажмите «Настроить».
  3. На вкладке «Коннекторы» укажите URL и API Key вашей Evolution API и сгенерируйте QR-код для подключения номера отправителя.
  4. В Администрирование > Пользователи заполните поле «Мобильный телефон» получателей (формат: код страны + код города + номер, например 5511999998888).
  5. Убедитесь, что внешний cron GLPI работает — CronTask модуля имеют режим MODE_EXTERNAL и не запускаются при веб-обращениях.
# The module's CronTasks (healthcheck 5min, queue 1min) are MODE_EXTERNAL.
# On GLPI 11 the trigger is front/cron.php (there is no glpi:cron console):
* * * * * www-data /usr/bin/php /var/www/html/front/cron.php >/dev/null 2>&1

# The Evolution API receives the send at this endpoint (the module handles it):
#   POST {URL}/message/sendText/{instance}
#   header: apikey: ...your_api_key...
#   body:   { "number": "5511999998888", "text": "..." }

Диагностика доставки прямо в базе

Когда клиент говорит, что «WhatsApp не пришёл», ответ почти всегда находится в таблице очереди. Два запроса закрывают первичный разбор:

-- Queue overview: what is stuck and how many attempts it had
SELECT status, COUNT(*) AS total, MAX(attempts) AS max_attempts
FROM glpi_plugin_nextool_whatsappbot_queue
GROUP BY status;

-- Latest failures with the reason returned by the Evolution API
SELECT id, phone_number, attempts, last_error, created_at
FROM glpi_plugin_nextool_whatsappbot_queue
WHERE status = 'failed'
ORDER BY created_at DESC
LIMIT 20;

Самая частая ошибка, которую мы видим в last_error, — не баг модуля, а номер в неверном формате или упавшее подключение инстанса. Именно для этого существует health check: если на панели статус «отключено», QR-код истёк и его нужно отсканировать заново.

Ловушка, о которой знают только те, кто эксплуатирует

Две ловушки срывают почти каждое первое внедрение. Первая: канал WhatsApp Bot работает через режим SMS в GLPI. Это значит, что для получения сообщений в уведомлении должна быть включена отправка по SMS — многие ищут на экране уведомлений режим с названием «WhatsApp» и не находят его, потому что он отображается как SMS. Вторая: GLPI добавляет к телу шаблона стандартную подпись e-mail («-- » и подвал), и в WhatsApp это превращается в визуальный шум; модуль удаляет этот блок при отправке, но если вы создаёте собственный шаблон, не вставляйте в него переменные подписи e-mail. И помните: поскольку номер берётся из glpi_users.mobile, неправильно указанный мобильный — причина № 1 жалоб «я не получил»: код страны мы нормализуем, но перепутанную цифру угадать не можем.

Кому подходит (и когда не использовать)

WhatsApp Bot раскрывается там, где конечный пользователь не следит за почтой: розница, здравоохранение, образование, сфера услуг и любая служба поддержки, работающая с внешней аудиторией. Он также отлично подходит для согласований руководителями, которые редко заходят в GLPI. Когда не использовать: если ваша служба на 100% внутренняя и специалисты постоянно работают в GLPI, колокольчик уведомлений внутри приложения решит задачу лучше и без зависимости от инстанса WhatsApp. А если политика компании запрещает WhatsApp для рабочего общения, уважайте это — правильный канал тот, которым команда может пользоваться.

Совместимость

  • GLPI: 10.0+ и 11.0+
  • План: FREE
  • Плагин: NexTool 4.2.1+
  • Требование: установленная Evolution API, доступная с сервера GLPI

Следующий шаг

WhatsApp Bot входит в состав NexTool. Нужна помощь с развёртыванием Evolution API или с выбором событий для уведомлений в WhatsApp? Свяжитесь с командой.


Проверено командой NexTool Solutions.

Часто задаваемые вопросы

Бесплатный модуль WhatsApp Bot от NexTool регистрирует канал уведомлений, переиспользующий режим SMS в GLPI, и отправляет сообщения через Evolution API. При установке он создаёт девять уведомлений WhatsApp по событиям (новая заявка, комментарий, решение, опрос удовлетворённости, согласование и пароль) и доставляет их с очередью повторных попыток. Номер получателя берётся из поля «Мобильный телефон» пользователя.

Нет. Модуль использует Evolution API — open source решение на базе протокола Baileys, которое работает с личным WhatsApp или WhatsApp Business без платы Meta за сообщения и без одобрения шаблонов. Номер отправителя подключается сканированием QR-кода прямо на панели GLPI.

Да. И GLPI, и Evolution API могут работать в вашей инфраструктуре; на вкладке «Коннекторы» вы указываете только URL и API Key. В лицензированных средах можно также использовать инстанс, управляемый NexTool, но self-hosted подключение оставляет данные на вашем сервере.

Оно попадает в очередь и автоматически обрабатывается повторно пакетами до 50 штук каждую минуту, максимум 3 попытки. Если попытки исчерпаны, запись помечается как failed, а причина ошибки сохраняется в last_error — обычно это номер в неверном формате или отключённый инстанс, а не баг модуля. Health check каждые 5 минут сообщает о падении подключения.

Две самые частые причины — пустое или неверно заполненное поле «Мобильный телефон» (номер берётся из glpi_users.mobile и нормализуется с кодом страны 55 для Бразилии) и то, что канал работает через режим SMS в GLPI: если в уведомлении не включена отправка по SMS, ничего не отправляется. Стоит также проверить статус подключения на панели: если QR-код истёк, его нужно отсканировать заново.

Да. Модуль бесплатный (FREE), совместим с GLPI 10.0+ и 11.0+ и требует плагин NexTool 4.2.1 или выше. Единственное внешнее требование — Evolution API, доступная с сервера GLPI.

Нужна помощь?