7.4 KiB
Guia de configuracion de Telegram
Esta guia explica como activar notificaciones de alarmas del Photobioreactor Dashboard hacia Telegram. El envio ocurre desde el backend de la Raspberry Pi, por lo que las alertas pueden salir aunque el navegador del dashboard este cerrado.
Requisitos
- Raspberry Pi con acceso a Internet.
- API y recolector funcionando mediante
systemd. - Un token de API configurado en
API_AUTH_TOKENsi se desea proteger cambios desde el dashboard. - Un bot de Telegram creado con BotFather.
- Un
chatIdde usuario, grupo o canal donde el bot pueda escribir.
Flujo general
Sensor EZO
|
Recolector de adquisicion
|
Evaluacion de umbrales
|
Evento de alarma o recuperacion
|
logs/alarms.csv
|
api/notification-service.js
|
Telegram Bot API
|
Chat configurado
El sistema no envia mensajes en cada lectura. Solo envia notificaciones cuando
se genera un evento de alarma elegible, por ejemplo una transicion a WARNING,
CRITICAL, OFFLINE o una recuperacion si la severidad minima lo permite.
Crear el bot
- Abra Telegram y busque
@BotFather. - Envie:
/newbot
- Asigne un nombre visible al bot.
- Asigne un usuario terminado en
bot, por ejemplo:
photobioreactor_alerts_bot
- BotFather entregara un token con formato parecido a:
1234567890:AAExampleTokenDoNotShare
Guarde este token como secreto. No lo publique en Git, capturas o mensajes.
Obtener el chatId
Chat directo con el bot
- Abra el bot recien creado.
- Presione
Starto envie cualquier mensaje, por ejemplo:
hola
- En una terminal, consulte las actualizaciones:
curl "https://api.telegram.org/bot<TOKEN_DEL_BOT>/getUpdates"
- Busque el campo
chat.id. El valor puede verse como:
"chat":{"id":123456789,"first_name":"Cristian","type":"private"}
En este ejemplo, el chatId es:
123456789
Grupo de Telegram
- Agregue el bot al grupo.
- Envie un mensaje dentro del grupo mencionando o usando el bot.
- Ejecute:
curl "https://api.telegram.org/bot<TOKEN_DEL_BOT>/getUpdates"
- Busque el
chat.iddel grupo. Normalmente es negativo, por ejemplo:
-1001234567890
Si no aparece ningun resultado, envie otro mensaje en el grupo y repita la consulta. En algunos grupos puede ser necesario permitir que el bot lea mensajes o usar comandos dirigidos al bot.
Configuracion desde el dashboard
- Abra el dashboard en la red local de la Raspberry Pi.
- Si
API_AUTH_TOKENesta configurado, escriba ese valor en el campoToken API. - Vaya al panel de notificaciones.
- Active
Activas. - Seleccione la severidad minima:
| Severidad minima | Resultado |
|---|---|
WARNING |
Envia warnings, offline y criticos |
OFFLINE |
Envia offline y criticos |
CRITICAL |
Solo envia alarmas criticas |
- Active
Telegram. - Escriba el
Chat ID. - Escriba el
Bot token. - Guarde la configuracion.
Despues de guardar, el backend nunca devuelve el token completo al navegador. El dashboard lo mostrara como configurado y en guardados posteriores puede dejar el campo de token vacio para conservar el valor existente.
Configuracion directa en Raspberry Pi
En produccion, el instalador usa:
/etc/photobioreactor/notifications.json
La ruta se define en:
NOTIFICATION_CONFIG_FILE=/etc/photobioreactor/notifications.json
Ejemplo de configuracion:
{
"enabled": true,
"minSeverity": "CRITICAL",
"channels": {
"webhook": {
"enabled": false,
"url": "",
"headers": {}
},
"telegram": {
"enabled": true,
"botToken": "1234567890:AAExampleTokenDoNotShare",
"chatId": "123456789"
}
}
}
Proteja el archivo porque contiene secretos:
sudo chown photobioreactor:photobioreactor /etc/photobioreactor/notifications.json
sudo chmod 600 /etc/photobioreactor/notifications.json
sudo systemctl restart photobioreactor-acquisition
Prueba manual de Telegram
Antes de probar el dashboard, confirme que Telegram acepta el token y el chat:
curl -X POST "https://api.telegram.org/bot<TOKEN_DEL_BOT>/sendMessage" \
-H "Content-Type: application/json" \
-d '{"chat_id":"<CHAT_ID>","text":"Prueba de alarmas del fotobiorreactor"}'
Si Telegram responde con "ok":true, el bot y el chat estan bien configurados.
Prueba desde el sistema
- Confirme que el recolector esta activo:
systemctl status photobioreactor-acquisition
- Revise eventos recientes:
tail -n 20 /opt/photobioreactor/logs/alarms.csv
- Genere una condicion de alarma de prueba ajustando temporalmente un umbral
desde el dashboard. Por ejemplo, establezca un maximo de temperatura por
debajo de la lectura actual para forzar
CRITICAL. - Espere el siguiente ciclo de adquisicion.
- Confirme que se registro el evento y llego el mensaje.
- Restaure el umbral correcto.
Evite hacer esta prueba durante una calibracion real o una corrida experimental critica.
Mensaje enviado
El mensaje tiene este formato:
Photobioreactor alarm: CRITICAL
Sensor: temperature
Value: 31.2
Message: Temperature is above configured range.
Time: 2026-06-27T12:00:00.000Z
El texto se construye en api/notification-service.js. Si mas adelante se
necesita un formato distinto, ese es el punto central para modificarlo.
Seguridad recomendada
- Configure
API_AUTH_TOKENen produccion. - No suba tokens de Telegram al repositorio.
- Use
/etc/photobioreactor/notifications.jsonpara secretos en Raspberry Pi. - Mantenga permisos
600en el archivo de notificaciones. - Si el token se expone, regenere el token desde BotFather.
- No publique el dashboard directamente a Internet.
Diagnostico
No llega ningun mensaje
- Verifique Internet en la Raspberry:
curl https://api.telegram.org
- Verifique token y chat con la prueba manual de
sendMessage. - Confirme que
enabledychannels.telegram.enabledestan entrue. - Confirme que
minSeverityno esta filtrando el evento. - Confirme que realmente hubo una transicion de alarma en
logs/alarms.csv.
El dashboard no permite guardar
- Si
API_AUTH_TOKENesta configurado, debe escribirlo en el campoToken API. - Revise rate limit si se hicieron muchos cambios seguidos.
- Consulte logs de la API:
journalctl -u photobioreactor-api -f
El bot responde en chat directo pero no en grupo
- Confirme que el bot esta agregado al grupo.
- Use el
chatIddel grupo, no el chat privado. - En grupos, el
chatIdnormalmente es negativo. - Envie un mensaje nuevo al grupo y repita
getUpdates.
El token aparece como [configured]
Ese comportamiento es correcto. El backend redacta el secreto cuando el dashboard consulta la configuracion. Para cambiar el token, escriba uno nuevo y guarde. Para conservarlo, deje el campo vacio.
Estado actual de implementacion
Implementado:
- Configuracion persistente en
config/notifications.jsonoNOTIFICATION_CONFIG_FILE. - Canal Telegram mediante Bot API
sendMessage. - Redaccion de token hacia el frontend.
- Conservacion de token existente desde el dashboard.
- Filtro por severidad minima.
- Integracion con eventos generados por el recolector.
Pendiente de validacion en Raspberry:
- Envio real desde la red donde trabajara el equipo.
- Comportamiento durante desconexiones fisicas de sensores.
- Registro operativo de errores de envio en corridas largas.