Notificações do GLPI no WhatsApp com a Evolution API

O GLPI só notifica por e-mail, e o e-mail cai no spam. O módulo gratuito WhatsApp Bot liga o GLPI à Evolution API (open source) e entrega notificações de tickets no WhatsApp, com fila de repetição e ligação self-hosted. Veja como o canal viaja pelo modo SMS do GLPI, de onde vem o número, o SQL de diagnóstico da fila e as armadilhas de campo da primeira implementação.

O WhatsApp é o canal que o seu utilizador abre dezenas de vezes por dia - e o GLPI, por omissão, só sabe falar por e-mail. O módulo WhatsApp Bot da NexTool liga o GLPI à Evolution API (open source, protocolo Baileys) e entrega a notificação de ticket diretamente no WhatsApp, com uma fila que reprocessa falhas e a ligação na sua própria infraestrutura. Na sustentação de service desks aprendemos que o canal certo muda a taxa de resposta de aprovações e de inquéritos de satisfação - mas a integração tem armadilhas de configuração que este guia mostra por dentro.

O problema

O GLPI notifica por e-mail transacional através da fila queuednotification. Funciona, mas o e-mail empresarial cai no spam, o utilizador final não vive no webmail e o gestor que precisa de aprovar um ticket só descobre a pendência quando alguém liga a cobrar. O resultado no dia a dia são aprovações represadas durante horas, inquéritos de satisfação com taxa de resposta perto de zero e uma equipa de suporte a gastar tempo em cobranças manuais. Trocar o e-mail por um canal que a pessoa realmente lê resolve a maior parte - e no Brasil esse canal é o WhatsApp.

A via comercial (a WhatsApp Business API oficial) é cara, depende da aprovação de modelos pela Meta e prende-o a um contrato externo. Para quem já opera infraestrutura própria, a Evolution API é a alternativa self-hosted, e o WhatsApp Bot liga-a ao GLPI usando a infraestrutura nativa de notificações - sem remendos no core.

Como funciona o WhatsApp Bot

O módulo regista um modo de notificação próprio reaproveitando o canal SMS do GLPI (Notification_NotificationTemplate::registerMode(MODE_SMS)). Quando um evento de ticket dispara, o GLPI resolve o destinatário, o módulo procura o número, compõe a mensagem e envia através da Evolution API - de forma transparente para o operador.

  • Notificações próprias por evento - na instalação, o módulo cria nove notificações WhatsApp dedicadas (Novo Ticket, Novo Seguimento, Ticket Resolvido, Inquérito de Satisfação, Pedido de Aprovação, Resposta de Aprovação e as três de palavra-passe), cada uma com destinatários próprios. A criação é idempotente por nome: se editar o texto na interface do GLPI, uma reinstalação preserva a sua edição.
  • Fila com repetição automática - uma mensagem que falha por instabilidade da ligação entra na tabela de fila e é reprocessada em lotes de até 50 a cada 1 minuto, com um máximo de 3 tentativas antes de ser marcada como failed. Nada desaparece em silêncio: o motivo do erro fica gravado.
  • Health check a cada 5 minutos - uma tarefa cron consulta o estado real da ligação na Evolution API e atualiza o estado no painel, para saber que o WhatsApp caiu antes de o utilizador reclamar.
  • QR Code dentro do GLPI - o número remetente é ligado ao ler o QR gerado no separador Conectores, sem sair do ambiente.
  • Self-hosted ou gerido - aponte para a sua Evolution API (URL + API Key) ou, em ambiente licenciado, use a instância gerida pela NexTool.

O número do destinatário vem do campo Telemóvel do utilizador GLPI (glpi_users.mobile), normalizado automaticamente: o módulo retira a máscara, valida o comprimento (10 a 15 dígitos) e antepõe o indicativo 55 quando um número brasileiro chega sem ele. Quem não tem telemóvel registado simplesmente não recebe - o envio é silencioso, não gera erro.

WhatsApp Bot face à notificação nativa do GLPI

RecursoGLPI nativo (e-mail SMTP)WhatsApp Bot + Evolution API
Canal de entregaE-mail transacionalWhatsApp (mensagem no telemóvel)
Taxa de leituraBaixa (cai no spam, ninguém abre)Alta (canal do dia a dia)
Reenvio em falhaFila, sem repetição configurável por canalFila própria, 3 tentativas, lotes de 50/min
Origem do númeroE-mail do utilizadorCampo Telemóvel (glpi_users.mobile), normalizado
InfraestruturaServidor SMTPEvolution API self-hosted ou gerida
Custo por mensagemZero (SMTP próprio)Zero (sem API paga da Meta)

Como ativar

  1. Instale o NexTool no seu GLPI e aceda a Configuração > NexTool > Módulos.
  2. Ative o módulo WhatsApp Bot e clique em Configurar.
  3. No separador Conectores, indique o URL e a API Key da sua Evolution API e gere o QR Code para ligar o número remetente.
  4. Em Administração > Utilizadores, preencha o campo Telemóvel dos destinatários (indicativo+área+número, ex.: 5511999998888).
  5. Confirme que o cron externo do GLPI está a correr - as CronTasks do módulo são MODE_EXTERNAL e não disparam por acessos web.
# As CronTasks do modulo (healthcheck 5min, fila 1min) sao MODE_EXTERNAL.
# No GLPI 11 o disparador e front/cron.php (nao ha consola glpi:cron):
* * * * * www-data /usr/bin/php /var/www/html/front/cron.php >/dev/null 2>&1

# A Evolution API recebe o envio neste endpoint (o modulo trata disso):
#   POST {URL}/message/sendText/{instancia}
#   header: apikey: ...a_sua_api_key...
#   body:   { "number": "5511999998888", "text": "..." }

Diagnóstico de entrega diretamente na base de dados

Quando um cliente diz que "o WhatsApp não chegou", a resposta está quase sempre na tabela de fila. Duas consultas resolvem a triagem:

-- Panorama da fila: o que esta preso e quantas tentativas ja teve
SELECT status, COUNT(*) AS total, MAX(attempts) AS max_tentativas
FROM glpi_plugin_nextool_whatsappbot_queue
GROUP BY status;

-- Ultimas falhas com o motivo devolvido pela 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;

O erro mais comum que lemos em last_error não é bug do módulo: é número fora de formato ou a ligação da instância em baixo. É por isso que o health check existe - se o estado no painel está desligado, o QR expirou e precisa de ser lido de novo.

A armadilha que só quem opera conhece

Duas ciladas derrubam quase toda a primeira implementação. A primeira: o canal do WhatsApp Bot viaja pelo modo SMS do GLPI. Isto significa que, para o utilizador receber, o "seguir por SMS" tem de estar ativo na notificação - muita gente procura um modo chamado "WhatsApp" no ecrã de notificações e não o encontra, porque aparece como SMS. A segunda: o GLPI acrescenta a assinatura de e-mail predefinida ("-- " e o rodapé) ao corpo do modelo, e no WhatsApp isso vira ruído visual; o módulo remove esse bloco no envio, mas se criar um modelo próprio evite despejar variáveis de assinatura de e-mail nele. E lembre-se: como o número sai de glpi_users.mobile, um telemóvel mal registado é a causa número um do "não recebi" - normalizamos o indicativo, mas não adivinhamos um dígito trocado.

Para quem é indicado (e quando não usar)

O WhatsApp Bot brilha onde o utilizador final não acompanha e-mail: retalho, saúde, educação, serviços e qualquer service desk que atende público externo. É também excelente para aprovações de gestores que raramente entram no GLPI. Quando não usar: se a sua operação é 100% interna, com técnicos que vivem ligados ao GLPI, um sino de notificação in-app encaixa melhor e não depende de uma instância de WhatsApp. E se a política da empresa proíbe o WhatsApp para comunicação de trabalho, respeite - o canal certo é o que a equipa pode usar.

Compatibilidade

  • GLPI: 10.0+ e 11.0+
  • Plano: FREE
  • Plugin: NexTool 4.2.1+
  • Pré-requisito: Evolution API instalada e acessível pelo servidor do GLPI

Próximo passo

O WhatsApp Bot faz parte do NexTool. Precisa de ajuda para levantar a Evolution API ou calibrar quais eventos notificar por WhatsApp? Fale com a equipa.


Este conteúdo foi produzido com auxílio de inteligência artificial e revisto pela equipa Nextool Solutions.

Perguntas Frequentes

O módulo gratuito WhatsApp Bot da NexTool regista um canal de notificação que reaproveita o modo SMS do GLPI e envia as mensagens através da Evolution API. Na instalação cria nove notificações WhatsApp por evento (novo ticket, seguimento, solução, satisfação, aprovação e palavra-passe) e entrega com fila de repetição. O número do destinatário sai do campo Telemóvel do utilizador.

Não. O módulo usa a Evolution API, open source e baseada no protocolo Baileys, que funciona com WhatsApp pessoal ou Business sem custo por mensagem da Meta e sem aprovação de modelos. Liga o número remetente ao ler um QR Code diretamente no painel do GLPI.

Sim. Tanto o GLPI como a Evolution API podem correr na sua infraestrutura; indica apenas o URL e a API Key no separador Conectores. Em ambientes licenciados também é possível usar uma instância gerida pela NexTool, mas a ligação self-hosted mantém os dados no seu servidor.

Entra numa fila e é reprocessada automaticamente em lotes de até 50 a cada 1 minuto, com um máximo de 3 tentativas. Se esgotar as tentativas, o registo fica marcado como failed com o motivo do erro gravado em last_error - normalmente número fora de formato ou instância desligada, não bug do módulo. Um health check a cada 5 minutos avisa quando a ligação cai.

As duas causas mais comuns são o campo Telemóvel vazio ou mal preenchido (o número sai de glpi_users.mobile, normalizado com indicativo 55 para o Brasil) e o facto de o canal viajar pelo modo SMS do GLPI - se o 'seguir por SMS' não estiver ativo na notificação, nada é enviado. Vale também verificar o estado da ligação no painel: se o QR expirou, é preciso lê-lo de novo.

Sim. O módulo é FREE, compatível com GLPI 10.0+ e 11.0+, e requer o plugin NexTool 4.2.1 ou superior. O único pré-requisito externo é ter uma Evolution API acessível pelo servidor do GLPI.

Precisa de ajuda?