Runbook: Telegram Bridge
Přehled
Relay API zprávy pro Libora (fronta fess) se přeposílají do Telegramu přes bota.
Libor může odpovídat inline a odpovědi se routují zpět k původnímu odesílateli.
Komponenty
| Script | Cron | Funkce |
|---|---|---|
/root/scripts/relay-to-telegram.sh |
*/5 * * * * |
fess fronta → Telegram bot |
/root/scripts/telegram-callbacks.sh |
*/1 * * * * |
button clicks + reply → zpět odesílateli |
Credentials
- Soubor:
/root/secrets/telegram/.env - Proměnné:
BOT_TOKEN,CHAT_ID - NIKDY nesdílet přes Relay API
Message map
- Soubor:
/root/secrets/telegram/message-map.json - Mapuje Telegram
msg_id→{from, subject, type} - Používá se pro routing odpovědí zpět k odesílateli
Inline keyboard (buttons)
Zprávy mohou obsahovat inline tlačítka:
{"body": "Text zprávy\n\n[BUTTONS:{\"inline_keyboard\":[[{\"text\":\"Ano\",\"callback_data\":\"approve\"},{\"text\":\"Ne\",\"callback_data\":\"reject\"}]]}]"}
telegram-callbacks.shzpracovává callback_data- Odpověď se posílá zpět přes Relay API jako zpráva pro původního odesílatele
Diagnostika
# Logy relay-to-telegram
grep "relay-to-telegram" /var/log/syslog | tail -20
# Logy callbacks
grep "telegram-callbacks" /var/log/syslog | tail -20
# Test bota
source /root/secrets/telegram/.env
curl -s "https://api.telegram.org/bot${BOT_TOKEN}/getMe" | python3 -m json.tool
# Poslední zprávy bota
curl -s "https://api.telegram.org/bot${BOT_TOKEN}/getUpdates?limit=5" | python3 -m json.tool
# Message map (poslední záznamy)
tail -5 /root/secrets/telegram/message-map.json
# Cron aktivní?
crontab -l | grep telegram
Ruční odeslání Telegram zprávy
source /root/secrets/telegram/.env
curl -s -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
-d chat_id="${CHAT_ID}" \
-d text="Test zpráva" \
-d parse_mode="HTML"
Známé problémy
- Relay API
peek(GET /api/messages/) označuje zprávy jako read — proto relay-to-telegram.sh používá /api/history/ s filtrováním podle timestampu - Pokud message-map.json roste příliš → rotovat (archivovat staré záznamy)