OpenClaw: cómo montar un asistente de IA self-hosted al que le hablas por Telegram
TL;DR: OpenClaw es un gateway self-hosted que conecta Telegram, Discord, WhatsApp y más a modelos de IA. Lo instalé en un container Podman, configuré acceso móvil por Tailscale, y en una tarde tenía un asistente respondiéndome por Telegram. Te cuento cómo, qué falló, y cómo lo arreglé.
¿Qué es OpenClaw?
OpenClaw es un gateway de IA self-hosted. Lo instalas en tu máquina, lo conectas a tus canales de mensajería (Telegram, Discord, WhatsApp, Signal, Slack…), y configuras qué modelo de IA usa. El gateway se queda corriendo 24/7, y tú le hablas desde donde quieras.
No es un modelo. No es un wrapper. Es un middleware que gestiona sesiones, memoria, plugins, skills, y tools entre tus chats y tu proveedor de IA favorito.
¿En qué se diferencia de Claude Code o Pi? Claude Code y Pi son agentes de código — están optimizados para editar, compilar y debuggear. OpenClaw es un agente personal general-purpose. Le puedes preguntar sobre el tiempo, pedirle que redacte un email, que organice tu calendario, o que programe un script. Y le hablas por Telegram desde el metro.
Lo que monté
Tu móvil (Telegram)
↓
OpenClaw Gateway (Podman container, puerto 18789)
↓
Modelo IA (z.ai API → GLM-5-turbo)
El gateway corre en mi laptop (CachyOS, RTX 5080). El modelo puede ser local (Ollama) o cloud (z.ai, OpenAI, Anthropic). Yo uso z.ai como proveedor principal con GLM-5-turbo y GPT-5.4 como fallback.
Paso 1: Instalar OpenClaw
# Instalar via npm
npm install -g openclaw
# Verificar
openclaw --version
OpenClaw recomienda usar su script oficial de Podman (scripts/run-openclaw-podman.sh con --userns=keep-id). Yo ya tenía un container distrobox con Debian Bookworm, así que instalé dentro:
# Dentro del container
npm install -g openclaw
openclaw --version # 2026.5.12
La primera piedra: permisos del container
Si usas Podman/distrobox, el gateway corre como root dentro del container pero los archivos del host son de tu usuario. Esto causa “suspicious ownership” — OpenClaw bloquea plugins cuando detecta que los archivos no pertenecen al usuario que ejecuta el proceso.
La solución más simple: ejecutar el gateway como tu usuario dentro del container.
# En el systemd service
ExecStart=/usr/bin/podman exec -u pablo openclaw bash -c '...'
Ese -u pablo ahorra horas de debugging. Lo encontré después de 3 horas de chown -R root:root que se revertían solos.
Paso 2: Configurar el gateway
# Primera configuración
openclaw configure
Esto te pregunta:
- Modelo principal → yo elegí
openai/glm-5-turbovía z.ai - Modelo de compaction →
openai/glm-4.7(más barato, resume contexto) - API key → la de tu proveedor
- Token del gateway → genera uno largo (32+ caracteres). No uses “password123”.
Configurar acceso LAN (para móvil)
Por defecto el gateway solo escucha en localhost. Para acceder desde el móvil por WiFi:
# Cambiar bind de loopback a lan
openclaw config set gateway.bind lan
El archivo de config
Todo vive en ~/.openclaw/openclaw.json. Aquí está lo esencial:
{
"gateway": {
"mode": "local",
"bind": "lan",
"port": 18789
},
"agents": {
"defaults": {
"model": {
"primary": "openai/glm-5-turbo",
"fallbacks": ["openai/gpt-5.4-mini", "openai/glm-4.5-air"]
},
"compaction": {
"model": "openai/glm-4.7"
}
}
}
}
Paso 3: Acceso desde el móvil (Tailscale)
El gateway ya escucha en la red local. Pero si estás fuera de casa, necesitas acceso remoto. Tailscale lo resuelve en 2 minutos.
# Instalar Tailscale (si no lo tienes)
sudo pacman -S tailscale
sudo systemctl enable --now tailscaled
tailscale up
# Exponer el gateway con HTTPS
tailscale serve https / http://127.0.0.1:18789
Ahora puedes acceder desde el móvil en:
https://cachyos-rog.tailXXXX.ts.net
Tailscale da HTTPS automático — el navegador necesita contexto seguro para algunas features del dashboard.
Aprobar el dispositivo móvil
Cuando abres el dashboard desde el móvil, OpenClaw pide pairing. Tienes que aprobarlo desde el host:
openclaw devices approve <device-id>
El device ID aparece en el dashboard o en los logs del gateway.
Paso 4: Conectar Telegram
Telegram es el canal más rápido de configurar:
- Habla con @BotFather en Telegram
- Crea un bot nuevo:
/newbot→ nombre → username - Copia el token que te da
- Configúralo en OpenClaw:
openclaw channels login telegram
Pega el token cuando te lo pida. Reinicia el gateway. Listo — ya puedes hablar con tu asistente por Telegram.
Paso 5: El systemd service
Para que el gateway arranque con el sistema:
# ~/.config/systemd/user/openclaw-gateway.service
[Unit]
Description=OpenClaw Gateway (Podman)
After=network-online.target
[Service]
Type=simple
ExecStart=/usr/bin/podman exec -u pablo openclaw bash -c \
'export PATH="$PATH:/home/pablo/.npm-global/bin"; \
openclaw gateway run --port 18789 --bind lan --force & \
for i in $(seq 1 20); do sleep 1; \
curl -s http://127.0.0.1:18789/health >/dev/null 2>&1 && break; \
done; \
while curl -s http://127.0.0.1:18789/health >/dev/null 2>&1; do sleep 5; done'
ExecStop=/usr/bin/podman exec openclaw bash -c \
'kill $(pgrep -f openclaw-gateway) 2>/dev/null; exit 0'
Restart=on-failure
RestartSec=5
[Install]
WantedBy=default.target
systemctl --user daemon-reload
systemctl --user enable --now openclaw-gateway
Las piedras que encontré
| Problema | Causa | Solución |
|---|---|---|
| Plugins bloqueados (“suspicious ownership”) | Container corre como root, archivos son del host user | -u pablo en podman exec |
| Dashboard dice “token mismatch” | Roté el token pero el navegador lo cacheó | Borrar datos del sitio en el navegador |
| Telegram no responde | Token mal configurado | openclaw channels login telegram otra vez |
| Gateway crash en restart | Config inválido tras manual edit | openclaw config validate antes de reiniciar |
| Permisos se revierten | Container escribe como root | -u pablo (sí, este aparece dos veces, es la lección) |
El veredicto después de una semana
OpenClaw no es perfecto. La configuración tiene edges afilados (permisos, plugins, schema validation estricta). Pero una vez funciona, funciona. Mi asistente “Kiwi” me responde por Telegram, usa memoria persistente, tiene dreaming nocturno, y sabe quién soy.
El setup completo me llevó una tarde (con las piedras). Sin las piedras, habría sido 30 minutos.
Comandos de referencia
# Health check
curl http://127.0.0.1:18789/health
# Status completo
openclaw status --deep
# Security audit
openclaw security audit
# Validar config
openclaw config validate
# Logs en vivo
openclaw logs --follow
# Doctor (diagnóstico)
openclaw doctor --fix