Envio de Alertas do Zabbix via WhatsApp
O que é o Zabbix?
O Zabbix é uma ferramenta de monitoramento de redes, servidores, VM´s e serviços em nuvens. Também sendo um software de código aberto, que pode ser utilizada para monitoramento de disponibilidade de aplicações ou desempenho de sistemas. Sendo assim, o proxy Zabbix por exemplo, pode ajudar a monitorar grandes data centers com eficiência e também pode ser executado em hardware integrado para ambientes menores.
Por Que utilizar o Zabbix?
Além de ser uma ferramenta de código aberto, ele nos disponibiliza uma série de funcionalidades que facilitam o uso diário no monitoramento dos sistemas.
Suas funcionalidades são:
- Monitoramento de saúde e desempenho dos servidores, dispositivos de hardware, redes, aplicações e serviços;
- Coleta dados sobre CPU, memória, disco e utilização de rede;
- Detecta e alerta sobre problemas automaticamente;
- Permite consfigurar triggers e ações para eventos especificos;
- Permite criar painéis personalizados e visualizações de dados;
- Permite enviar alertas e notificações por e-mail, Telegram, sistemas de Helpdesk ou via WhatsApp (Como iremos ver nesse post);
Parte 1: Configuração do Zabbix para Enviar Alertas via WhatsApp
Nessa primeira parte, será necessario criar um arquivo executável dentro do ambiente onde o Zabbix se encontra.
1. Criação e resolução do script:
Para iniciar a nossa conexão com o zabbix via WhatsApp, será necessário criar um arquivo executável dentro do seguinte caminho no ambiente Zabbix `/usr/lib/zabbix/alertscripts/`. Ao estar no diretório correto, de os seguintes comandos:
$ mkdir alertasWhatsApp.sh
1.2 Permissões de execução para o arquivo:
$ chmod +x alertasWhatsApp.sh
2 – Desenvolvimento do script:
Após seguir os passos anteriores, temos já criados o nosso arquivo e também temos a permissão de execução do próprio dentro de nosso ambiente. Vamos para a criação do script que fará o envio das notificações Zabbix.
#!/bin/bash
BASE_URL=”http://localhost:4000/api/message” # Caso esteja rodando localmente ou a URL do seu Ambiente
PHONE=”$1″
TITULO=”$2″
MESSAGE=$(echo “$3” | tr -d ‘\n’ | tr -d ‘\r’)
# Registro de debug (opcional)
echo “$(date): PHONE=$PHONE, TITULO=$TITULO, MESSAGE=$MESSAGE” >>
, → /var/log/zabbix/beezap_debug.log
curl –location –request POST “$URL” \
–header ‘Content-Type: application/json’ \
–data-raw “{
\”number\”: \”${PHONE}\”,
\”message\”: \”${MESSAGE}\”
2.1 Criando o Tipo de Mídia no Zabbix:
No painel do Zabbix, crie um novo tipo de mídia para enviar mensagens via WhatsApp. O formato de mensagem do alerta pode ser customizado com variáveis do Zabbix, como `EVENT.NAME`, `EVENT.TIME`, e outras.
2.2 Criando a Ação do Trigger:
Crie uma trigger action e associe ao tipo de mídia que você criou, incluindo o número de WhatsApp ou ID do grupo.
Ambiente Zabbix
Após as configurações anteriores realizadas e validadas no seu ambiente Zabbix, podemos seguir para o passo de integração e configuração da nossa API com o WhatsApp.
Parte 2: Criação da API de Envio de Mensagens
Agora, vamos criar a API que será responsável por fazer a conexão e enviar as mensagens via WhatsApp, utilizando o `venom-bot` como base.
1.1 Instalando Dependências e iniciando a API:
apt-get install -y build-essential
apt-get install libgbm-dev
# Instalando o navegador Google Chrome
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt install -y ./google-chrome-stable_current_amd64.deb
dpkg -i ./google-chrome-stable_current_amd64.deb
# Instalação e atualizando o Node
apt install npm
npm install -g n
n latest
### Após instalar o node, é recomendado fechar o terminal atual e abrir uma nova sessão do SSH
# Iniciando projeto
npm init -y
# Instalando as dependencias
npm uninstall venom-bot
npm install venom-bot@5.0.20
npm install express
npm install pm2
1.2 Criando script para conexão e envio das mensagens:
Esse arquivo será o responsavel por criar o servidor que irá enviar as mensagens para o WhatsApp.
var express = require(“express”);
var venom = require(“venom-bot”);
venom
.create({
session: ‘API-ZAP-BEE’
})
.then((client) => start(client))
.catch((erro) => {
console.log(erro);
});
function start(client) {
var app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.listen(4000, () => {
console.log(“Servidor rodando na porta 4000”);
});
app.get(“/api/message”, async (req, res, next) => {
console.log(“ChatID:”, req.query.number);
const chatid = req.query.number;
const isGroup = (chatid) => {
return chatid.toString().startsWith(’55’) && chatid.toString().length === 12;
};
try {
if (isGroup(chatid)) {
console.log(‘Enviando mensagem em número!’);
await client.sendText(req.query.number + ‘@c.us’, req.query.message);
} else {
console.log(‘Enviando mensagem em um grupo!’);
await client.sendText(req.query.number + ‘@g.us’, req.query.message);
}
res.json(req.query);
} catch (error) {
console.error(‘Erro ao enviar a mensagem:’, error);
res.status(500).json({ error: ‘Erro ao enviar a mensagem’ });
}
});
app.post(“/api/message”, async (req, res, next) => {
console.log(“ChatID:”, req.body.number);
const chatid = req.body.number;
const isGroup = (chatid) => {
return chatid.toString().startsWith(’55’) && chatid.toString().length === 12;
};
try {
if (isGroup(chatid)) {
console.log(‘Enviando mensagem em número!’);
await client.sendText(req.body.number + ‘@c.us’, req.body.message);
} else {
console.log(‘Enviando mensagem em um grupo!’);
await client.sendText(req.body.number + ‘@g.us’, req.body.message);
}
res.json(req.body);
} catch (error) {
console.error(‘Erro ao enviar a mensagem:’, error);
res.status(500).json({ error: ‘Erro ao enviar a mensagem’ });
}
});
client.onMessage((message) => {
if (message.body === ‘Bee’) {
client.sendText(message.from, ‘Bem-vindo a Bee Solutions!’).catch((error) => {
console.error(‘Erro ao enviar a resposta:’, error);
});
}
});
}
Após a instalação das dependências necessárias e do script, basta rodar o comando de inicialização da api:
$ node beezap.js
Se for o caso execute em segundo plano com pm2:
$ pm2 start beezap.js
$ pm2 status
$ pm2 logs
1.3 Ler QR Code e tokens :
Assim que iniciar a API, e se todas as dependências estiverem corretas, irá abrir na tela do seu navegador o WhatsAppWeb que será por esse meio que iremos fazer a conexão `API > WhatsApp > Zabbix`. Quando for pedido, basta scanear o QR-Code que vai aparecer na tela com o número escolhido para fazer o envio das mensagens.
Após a conexão concluída com sucesso, irá ser criada umas pasta chamada `tokens` na raíz do seu projeto, onde serão salvas as informações e dados necessários para manter a conexão e login com o WhatsApp. Esse arquivo pode ser copiado e utilizado em outros projetos para fazer o login com o número referente. Porem assim que a sessão é encerrada no telefone, se perde todos os ambientes conectados.
2 Iniciando o servidor:
Assim que todos os passos tiverem sido concluídos, localmente por exemplo, e o servidor estiver rodando na porta `3000` por exemplo, iniciaremos os testes, onde no seu própriao navegador, caso esteja localmente, você irá passar a seguinte URL para testar:
`http://localhost:3000/api/message?number=5599999999&message=test`
- No campo number vai o número ao qual quer receber a mensagem de test.
- E no message, o valor o qual quer enviar.
Caso esteja rodando em seu ambiente de produção por exemplo, para fazer um teste simples para conferir se está funcionando as funcionalidades e a conexão com a API, rode o seguinte comando no seu terminal:
curl –location –request POST ‘http://localhost:3000/api/message’ \
–header ‘Content-Type: application/json’ \
–data-raw ‘{
“number”: “5599999999”,
“message”: “Test de mesagem WhatsApp”
}
Caso a mensagem for enviada com sucesso, você verá uma resposta JSON confirmando o envio.
Parte 3: Configuração de Firewall (Opcional)
Para garantir que o servidor esteja seguro e acessível por IPs específicos, você pode configurar o firewall usando o iptables:
apt install iptables-persistent
iptables -I INPUT -s 127.0.0.1 -p tcp –dport 4000 -j ACCEPT
iptables -A INPUT -s 192.168.18.0/24 -p tcp –dport 4000 -j ACCEPT
iptables -A INPUT -p tcp –dport 4000 -j DROP
# Salvando regras atuais no arquivo
iptables-save > /etc/iptables/rules.v4
Conclusão
Agora você tem um sistema de monitoramento do Zabbix que envia alertas via WhatsApp utilizando o venom-bot. Essa solução proporciona uma maneira eficaz de receber notificações em tempo real, diretamente no WhatsApp, e pode ser personalizada conforme as necessidades da sua infraestrutura.
Ressalvas
- Não utilizem essa API para envio em massa ou Spam, pois é possivel que o número de envio seja banido por diretrizes da META;
- Protejam a API com Firewall, e autenticação por Token.
Referências
Repositórios:
https://github.com/orkestral/venom
https://www.zabbix.com/manuals
Video de referência:
[Bee Solutions](https://www.youtube.com/watch?v=QKFdWH0p7sA)