Un bot, muchas tareas: guía completa de Workspace x Telegram
¿Alguna vez le pediste al asistente "ordena el diario de hoy" y terminaste viendo cómo tocaba archivos de tu proyecto de trabajo?
Eso es lo que pasa cuando los workspaces no están bien configurados. Esta guía lo deja resuelto de una vez.
Qué vas a aprender
- Entender el flujo completo: grupo → asistente → workspace
- Inicializar varios workspaces
- Configurar Agents + Bindings por completo
- Verificar que la configuración funciona de verdad
La idea general
La arquitectura objetivo es esta:
Grupo de Telegram A → Asistente A → Workspace A (solo toca estos archivos)
Grupo de Telegram B → Asistente B → Workspace B (solo toca estos archivos)
Mensaje privado → Asistente principal → Workspace principal
Para conseguirlo, necesitas tres pasos: crear workspaces → definir agentes → definir bindings.
Paso 1: crear los workspaces
Cada asistente necesita su propio directorio. Inicialízalos así:
openclaw setup --workspace "~/.openclaw/workspace-main"
openclaw setup --workspace "~/.openclaw/workspace-project-a"
openclaw setup --workspace "~/.openclaw/workspace-project-b"Cada workspace recibe automáticamente los archivos necesarios, como AGENTS.md, SOUL.md e IDENTITY.md.
💡 Si el directorio aún no existe, el comando lo crea por ti. Si clonaste un workspace ya preparado desde Git, puedes saltarte la inicialización y apuntar directamente a la ruta en Config.
Paso 2: configurar Agents y Bindings
Abre Control UI → Config → Raw JSON y añade esta estructura.
Escenario A: mismo bot, distintos grupos, distintos workspaces
{
"agents": {
"list": [
{ "id": "main", "name": "Principal", "workspace": "~/.openclaw/workspace-main", "default": true },
{ "id": "project-a", "name": "Proyecto A", "workspace": "~/.openclaw/workspace-project-a" },
{ "id": "project-b", "name": "Proyecto B", "workspace": "~/.openclaw/workspace-project-b" }
]
},
"bindings": [
{ "agentId": "project-a", "match": { "channel": "telegram", "peer": { "kind": "group", "id": "-1001234567890" } } },
{ "agentId": "project-b", "match": { "channel": "telegram", "peer": { "kind": "group", "id": "-1009876543210" } } },
{ "agentId": "main", "match": { "channel": "telegram" } }
],
"channels": {
"telegram": {
"enabled": true,
"botToken": "tu bot token",
"dmPolicy": "pairing",
"groups": { "*": { "requireMention": true } }
}
}
}¿Cómo encontrar el ID del grupo?
- Envía cualquier mensaje en el grupo
- Ejecuta
openclaw logs --followy buscachat.id - O reenvía el mensaje a @userinfobot
Escenario B: distintas cuentas de bot, distintos workspaces
Si tienes varios bot tokens, cada bot puede usar su propio asistente y workspace:
{
"agents": {
"list": [
{ "id": "main", "name": "Bot principal", "workspace": "~/.openclaw/workspace-main", "default": true },
{ "id": "alerts", "name": "Bot alertas", "workspace": "~/.openclaw/workspace-alerts" }
]
},
"bindings": [
{ "agentId": "main", "match": { "channel": "telegram", "accountId": "default" } },
{ "agentId": "alerts", "match": { "channel": "telegram", "accountId": "alerts" } }
],
"channels": {
"telegram": {
"enabled": true,
"accounts": {
"default": { "botToken": "123456:ABC...", "dmPolicy": "pairing" },
"alerts": { "botToken": "987654:XYZ...", "dmPolicy": "allowlist", "allowFrom": ["tg:tuTelegramId"] }
}
}
}
}⚠️ Si usas varias cuentas, no dejes
botTokenen el nivel superior. Todo debe ir dentro deaccounts.
Paso 3: guardar y verificar
Desde la Web UI: pulsa Save / Apply en la página Config.
Si editas el archivo directamente: guarda ~/.openclaw/openclaw.json. Normalmente el Gateway recarga en caliente, pero si no estás seguro, reinícialo:
openclaw gatewayCómo verificar
- Envía un mensaje en cada grupo de Telegram y confirma que responde el asistente correcto
- Ejecuta
openclaw doctorpara una revisión rápida
Puntos clave
| Objetivo | Cómo hacerlo |
|---|---|
| Crear un workspace nuevo | openclaw setup --workspace "ruta" |
| Grupo distinto → workspace distinto | Usa peer: { kind: "group", id: "groupId" } en bindings |
| Bot distinto → workspace distinto | Usa channels.telegram.accounts con accountId en bindings |
| Parece que Bindings no funciona | Pon primero las reglas específicas; el matching es por primera coincidencia |