Enrutamiento de Canales
Reglas de enrutamiento y contexto compartido entre canales (WhatsApp/Telegram/Discord/Slack, etc.).
OpenClaw enruta respuestas determinísticamente de vuelta al "canal de donde vino el mensaje". El modelo no elige el canal; el enrutamiento es controlado por la configuración del host y permanece predecible.
Términos Clave
- ''Canal'': ''whatsapp'', ''telegram'', ''discord'', ''slack'', ''signal'', ''imessage'', ''webchat''.
- AccountId: instancia de cuenta por canal (cuando es soportado).
- AgentId: un workspace aislado + almacén de sesión ("cerebro").
- SessionKey: la clave de bucket usada para almacenar contexto y controlar concurrencia.
Formas de clave de sesión (ejemplos)
Los mensajes directos colapsan a la sesión principal del agente:
- ''agent:<agentId>:<mainKey>'' (predeterminado: ''agent:main:main'')
Los grupos y canales permanecen aislados por canal:
- Grupos: ''agent:<agentId>:<channel>:group:<id>''
- Canales/salas: ''agent:<agentId>:<channel>:channel:<id>''
Hilos:
- Los hilos de Slack/Discord añaden '':thread:<threadId>'' a la clave base.
- Los temas de foro de Telegram embeben '':topic:<topicId>'' en la clave de grupo.
Ejemplos: ''agent:main:telegram:group:-1001234567890:topic:42'', ''agent:main:discord:channel:123456:thread:987654''
Reglas de enrutamiento (cómo se elige un agente)
El enrutamiento elige un agente para cada mensaje entrante:
1. ''Coincidencia exacta de par'' (''bindings'' con ''peer.kind'' + ''peer.id'').
2. ''Coincidencia de guild'' (Discord) via ''guildId''.
3. ''Coincidencia de team'' (Slack) via ''teamId''.
4. ''Coincidencia de cuenta'' (''accountId'' en el canal).
5. Coincidencia de canal (cualquier cuenta en ese canal).
6. ''Agente predeterminado'' (''agents.list[].default'', sino primera entrada de lista, fallback a ''main'').
El agente coincidente determina qué workspace y almacén de sesión se usan.
Grupos de difusión (ejecutar múltiples agentes)
Los grupos de difusión te permiten ejecutar múltiples agentes para el mismo par cuando OpenClaw normalmente respondería (por ejemplo: en grupos de WhatsApp, después de mención/activación).
Config:
{
broadcast: {
strategy: "parallel",
"[email protected]": ["alfred", "baerbel"],
"+15555550123": ["support", "logger"]
}
}Ver: ''/broadcast-groups''
Resumen de configuración
- ''agents.list'': definiciones de agentes nombrados (workspace, modelo, etc.).
- ''bindings'': mapea canales/cuentas/pares entrantes a agentes.
Ejemplo:
{
agents: {
list: [{ id: "support", name: "Support", workspace: "~/.openclaw/workspace-support" }]
},
bindings: [
{ match: { channel: "slack", teamId: "T123" }, agentId: "support" },
{ match: { channel: "telegram", peer: { kind: "group", id: "-100123" } }, agentId: "support" }
]
}Almacenamiento de sesión
Los almacenes de sesión viven bajo el directorio de estado (predeterminado ''~/.openclaw''):
- ''~/.openclaw/agents/<agentId>/sessions/sessions.json''
- Las transcripciones JSONL viven junto al almacén
Puedes anular la ruta del almacén via ''session.store'' y plantilla ''{agentId}''.
Comportamiento de WebChat
WebChat se adjunta al agente seleccionado y por defecto usa la sesión principal del agente. Por esto, WebChat te permite ver contexto cruzado de canales para ese agente en un solo lugar.
Contexto de respuesta
Las respuestas entrantes incluyen:
- ''ReplyToId'', ''ReplyToBody'', y ''ReplyToSender'' cuando están disponibles.
- El contexto citado se añade a ''Body'' como un bloque ''[Replying to ...]''.
Esto es consistente entre canales.