dotrino-telegram-claude-bot
v0.1.3
Published
Bot de Telegram que conversa con Claude (con memoria), expuesto sin abrir puertos con @dotrino/tunnel. Solo para el usuario autorizado.
Maintainers
Readme
dotrino-telegram-claude-bot
Parte del ecosistema Dotrino.
Un bot de Telegram que conversa con Claude (con
memoria de sesión), corriendo en tu máquina y expuesto al mundo con
@dotrino/tunnel — sin abrir puertos
ni configurar el router. Solo responde al usuario autorizado.
Cada mensaje de Telegram dispara claude -p en la carpeta que elijas, con la conversación
encadenada (memoria). Útil como asistente personal de Claude desde el teléfono.
Uso rápido (npx)
# 1) crea un bot con @BotFather y copia el token
# 2) prepará un .env (ver .env.example) y apuntá el bot a ese archivo:
npx dotrino-telegram-claude-bot@latest ./mi-bot.env
# alternativas equivalentes:
npx dotrino-telegram-claude-bot@latest --env /ruta/mi-bot.env
BOT_ENV=/ruta/mi-bot.env npx dotrino-telegram-claude-bot@latest
TELEGRAM_BOT_TOKEN=123:ABC npx dotrino-telegram-claude-bot@latest # sin archivo, todo por envUsá
@latest:npxcachea, y sin eso podrías quedarte con una versión vieja.
Imprime tu URL pública y registra el webhook solo. Con un .env por bot levantás
varios (cada uno su token, su túnel y su carpeta) apuntando a archivos distintos.
Si ALLOWED_USER_ID está vacío, el bot no atiende a nadie: a cada mensaje responde
con el id de quien escribe y cómo autorizarlo. Poné ALLOWED_USER_ID=<tu id> en el .env
y reiniciá (no captura a nadie automáticamente, así nadie se autoriza por escribir primero).
Configuración
Por variables de entorno o por un archivo .env (en el cwd, o el que indique
BOT_ENV). Copiá .env.example → .env. Lo mínimo es el token:
| Variable | Default | Qué es |
|---|---|---|
| TELEGRAM_BOT_TOKEN | — (req) | token de @BotFather |
| CLAUDE_CWD | el cwd actual | carpeta donde corre Claude (con memoria) |
| CLAUDE_FLAGS | (vacío) | flags extra para claude -p (ver abajo) |
| ALLOWED_USER_ID | (vacío → no atiende) | id de Telegram autorizado (vacío = solo responde id + cómo autorizar) |
| CLAUDE_BIN | claude | binario de claude |
| TUNNEL_SERVER | https://r.dotrino.com | relay del túnel |
| TUNNEL_KEY / TG_WEBHOOK_SECRET / CLAUDE_SESSION_ID | autogenerados | URL estable / validación / memoria |
CLAUDE_FLAGS — permisos y modelo
- Vacío (default, seguro): Claude responde y lee, pero no ejecuta comandos ni edita sin permiso.
- Autonomía total (riesgoso):
CLAUDE_FLAGS=--dangerously-skip-permissions→ el usuario autorizado puede hacer que Claude ejecute cualquier cosa en la máquina. ⚠️ El túnel es público; quien controle tu Telegram controla la máquina. Úsalo solo si entendés el riesgo. - Modelo / razonamiento:
--model claude-sonnet-4-6 --effort medium(combinables).
Cómo funciona
Telegram ──HTTPS──▶ r.dotrino.com/<key>/tg ──▶ [túnel] ──▶ este bot ──▶ claude -p (CLAUDE_CWD)
valida X-Telegram-Bot-Api-Secret-Token memoria con --resume- Seguridad: valida el header
X-Telegram-Bot-Api-Secret-Token(lo seteás consecret_tokenensetWebhook, que el bot hace solo) → solo Telegram puede invocar tu webhook. - Memoria: guarda el
session_idy usa--resumeen cada mensaje; sobrevive reinicios. - Cola: si llega un mensaje mientras procesa otro, lo encola (no lo descarta).
Correr siempre (PM2)
pm2 start "$(npm root -g)/dotrino-telegram-claude-bot/bot.js" --name mi-bot --cwd /mi/proyecto
pm2 save && pm2 startup # (corré el comando sudo que imprime)Para varios bots (cada uno su token, su túnel y su carpeta), usá un .env por bot y un
ecosystem.config.cjs de PM2 con BOT_ENV distinto por app.
MIT · parte de Dotrino.
