Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

Slack

Ejecuta tu agente ZeroClaw como un bot de Slack. Esta guía te muestra el proceso paso a paso. Al final tendrás un bot en tu espacio de trabajo que responde cuando las personas le envían mensajes o lo @-mencionan.

Quién puede hablar con el agente

Los remitentes entrantes se filtran contra el conjunto de pares resuelto para el agente vinculado, obtenido de la configuración peer_groups a la que pertenece el agente. La coincidencia elimina el @ inicial y no distingue mayúsculas de minúsculas frente al identificador nativo de remitente del canal. Un conjunto vacío deniega a todos; un conjunto que contiene "*" acepta a cualquiera; en caso contrario, solo se aceptan los pares externos listados (y los agentes pares). Esto es independiente del emparejamiento de la puerta de enlace (gateway.require_pairing), que autentica clientes HTTP/WebSocket, no remitentes de canales de chat.

Un grupo de pares para slack establece channel en slack, lista los remitentes permitidos en external_peers (para slack, el ID de usuario de Slack; ["*"] acepta a cualquiera), opcionalmente nombra agents pares para el despacho entre agentes, una lista de bloqueo ignore y un output_modality (mirror, voice o text). Consulta Peer Groups para la referencia de campos.

Dónde configurar esto:

Panel de control del gateway

Abra /config/peer_groups en el panel de control web.

zerocode

En el panel Config, en Peer groups.

Inicio rápido

Slack necesita dos tokens: un token de bot (con el que habla el bot) y un token de aplicación (permite que el bot se conecte sin que tengas que alojar una URL pública). Ambos provienen de la misma página de la aplicación.

1. Crea la aplicación de Slack

  1. Ve a api.slack.com/apps y haz clic en Create New App -> From scratch.
  2. Asígnale un nombre, elige tu espacio de trabajo y haz clic en Create App.

2. Agrega los permisos que el bot necesita

  1. En la barra lateral izquierda, abre OAuth & Permissions.
  2. En Scopes -> Bot Token Scopes, agrega: app_mentions:read, channels:history, chat:write y channels:read. (Agrega también im:history e im:write si quieres mensajes directos.)

3. Activa el Modo Socket y obtén el token de la aplicación

  1. En la barra lateral izquierda, abre Socket Mode y actívalo (on).
  2. Slack te solicita crear un token a nivel de aplicación. Asígnale un nombre, otórgale el alcance connections:write y haz clic en Generate.
  3. Copia el token que comienza con xapp-. Este es tu app_token.

Socket Mode permite que el bot mantenga una conexión saliente hacia Slack, por lo que no necesitas una URL pública de webhook ni ningún reenvío de puertos. Este es el camino fácil.

4. Instala la aplicación y obtén el token del bot

  1. Abre Install App en la barra lateral y haz clic en Install to Workspace, luego en Allow.
  2. De vuelta en OAuth & Permissions, copia el Bot User OAuth Token que comienza con xoxb-. Este es tu bot_token.

5. Informa a ZeroClaw sobre ambos tokens

Ambos tokens son secretos, así que configúralos a través de una superficie que los cifre:

Panel de control del gateway

Abre /config/channels/slack en el panel de control web.

zerocode

En el panel Config, en Channels.

channels.slack.<alias>.bot_token es un secreto. Se almacena cifrado, nunca en texto plano en config.toml. Configúrelo a través de uno de estos métodos, que cifran al escribir:

Panel de control del gateway

Abre /config/channels/slack y configura allí el campo channels.slack.<alias>.bot_token.

zerocode

En el panel Config, establece el campo channels.slack.<alias>.bot_token (la entrada está enmascarada).

zeroclaw config

zeroclaw config set channels.slack.<alias>.bot_token    # solicita entrada enmascarada, almacena cifrado

Configura app_token de la misma manera (es el token xapp- del paso 3).

Alternativa con variables de entorno. Ambos tokens pueden suministrarse desde el entorno del daemon en lugar del archivo de configuración: bot_token se resuelve a partir de ZEROCLAW_SLACK_BOT_TOKEN y luego SLACK_BOT_TOKEN; app_token a partir de ZEROCLAW_SLACK_APP_TOKEN y luego SLACK_APP_TOKEN. Un valor en el archivo de configuración tiene prioridad sobre el entorno. Esto te permite omitir bot_token de config.toml por completo (por ejemplo, para gestores de secretos que inyectan variables de entorno) sin que la configuración falle al cargarse.

6. Invita al bot y pruébalo

En Slack, ve a un canal y escribe /invite @YourBotName. Luego envía un mensaje o menciona al bot con @. Inicia ZeroClaw (zeroclaw service restart o zeroclaw daemon) y debería responder. Si no, consulta Solución de problemas.

Configuración

La lista completa de campos, derivada del esquema en vivo. Para un bot básico de Socket Mode solo se configuran bot_token y app_token.

app_token 🔑 secret · default null

Token de nivel de aplicación de Slack para Socket Mode (xapp-…). Cuando no se establece o está vacío, se resuelve en la construcción del canal a partir de ZEROCLAW_SLACK_APP_TOKEN, luego SLACK_APP_TOKEN. #[serde(default)] hace explícita la omisión (un campo Option ya es omisible, pero esto lo mantiene coherente con bot_token).

Colócalo sobre cualquier superficie:

Panel de control del gateway

Abra /config/channels/slack y configure el campo channels.slack.<alias>.app_token.

zerocode

En el panel Config, establece el campo channels.slack.<alias>.app_token.

zeroclaw config

zeroclaw config set channels.slack.<alias>.app_token    # entrada enmascarada, almacenada cifrada

Variable de entorno

Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:

export ZEROCLAW_channels__slack__<alias>__app_token=
approval_timeout_secs integer · default 300

Segundos de espera para la aprobación del operador en las herramientas always_ask antes de denegar automáticamente.

Colócalo sobre cualquier superficie:

Panel de control del gateway

Abre /config/channels/slack y configura el campo channels.slack.<alias>.approval_timeout_secs.

zerocode

En el panel Config, establece el campo channels.slack.<alias>.approval_timeout_secs.

zeroclaw config

zeroclaw config set channels.slack.<alias>.approval_timeout_secs <value>

Variable de entorno

Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:

export ZEROCLAW_channels__slack__<alias>__approval_timeout_secs=
bot_token 🔑 secret · default null

Token OAuth de bot de Slack (xoxb-…). Opcional en la configuración: cuando no está definido o está vacío, se resuelve en la construcción del canal a partir de ZEROCLAW_SLACK_BOT_TOKEN y luego de SLACK_BOT_TOKEN. #[serde(default)] permite que una configuración que lo omita se deserialice correctamente —el entorno lo suministra como alternativa— en lugar de fallar con missing field 'bot_token'.

Colócalo sobre cualquier superficie:

Panel de control del gateway

Abre /config/channels/slack y establece el campo channels.slack.<alias>.bot_token.

zerocode

En el panel Config, establece el campo channels.slack.<alias>.bot_token.

zeroclaw config

zeroclaw config set channels.slack.<alias>.bot_token    # entrada enmascarada, almacenada cifrada

Variable de entorno

Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:

export ZEROCLAW_channels__slack__<alias>__bot_token=
cancel_reaction string? · default null

Nombre de la reacción de emoji (sin dos puntos) que cancela una solicitud en curso. Por ejemplo, "x" significa que reaccionar con :x: cancela la tarea. Déjelo sin configurar para deshabilitar la cancelación basada en reacciones.

Colócalo sobre cualquier superficie:

Panel de control del gateway

Abre /config/channels/slack y configura el campo channels.slack.<alias>.cancel_reaction.

zerocode

En el panel Config, configure el campo channels.slack.<alias>.cancel_reaction.

zeroclaw config

zeroclaw config set channels.slack.<alias>.cancel_reaction <value>

Variable de entorno

Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:

export ZEROCLAW_channels__slack__<alias>__cancel_reaction=
channel_ids string[] · default []

Lista explícita de IDs de canales a monitorear. Vacía = escuchar en todos los canales accesibles. Migrado del campo singular heredado channel_id.

Colócalo sobre cualquier superficie:

Panel de control del gateway

Abre /config/channels/slack y configura el campo channels.slack.<alias>.channel_ids.

zerocode

En el panel Config, configure el campo channels.slack.<alias>.channel_ids.

zeroclaw config

zeroclaw config set channels.slack.<alias>.channel_ids <value>

Variable de entorno

Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:

export ZEROCLAW_channels__slack__<alias>__channel_ids=
draft_update_interval_ms integer · default 1200

Intervalo mínimo (ms) entre ediciones de mensajes en borrador para evitar los límites de velocidad de Slack.

Colócalo sobre cualquier superficie:

Panel de control del gateway

Abre /config/channels/slack y configura el campo channels.slack.<alias>.draft_update_interval_ms.

zerocode

En el panel Config, establece el campo channels.slack.<alias>.draft_update_interval_ms.

zeroclaw config

zeroclaw config set channels.slack.<alias>.draft_update_interval_ms <value>

Variable de entorno

Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:

export ZEROCLAW_channels__slack__<alias>__draft_update_interval_ms=
excluded_tools string[] · default []

Herramientas excluidas de la especificación de herramientas de este canal. Cuando se establece, estas herramientas no se exponen al modelo al responder a través de este canal.

Colócalo sobre cualquier superficie:

Panel de control del gateway

Abre /config/channels/slack y configura el campo channels.slack.<alias>.excluded_tools.

zerocode

En el panel Config, configure el campo channels.slack.<alias>.excluded_tools.

zeroclaw config

zeroclaw config set channels.slack.<alias>.excluded_tools <value>

Variable de entorno

Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:

export ZEROCLAW_channels__slack__<alias>__excluded_tools=
interrupt_on_new_message bool · default false

Cuando es true, un mensaje de Slack más reciente del mismo remitente en el mismo canal cancela la solicitud en curso e inicia una respuesta nueva conservando el historial.

Colócalo sobre cualquier superficie:

Panel de control del gateway

Abre /config/channels/slack y configura el campo channels.slack.<alias>.interrupt_on_new_message.

zerocode

En el panel Config, configura el campo channels.slack.<alias>.interrupt_on_new_message.

zeroclaw config

zeroclaw config set channels.slack.<alias>.interrupt_on_new_message <value>

Variable de entorno

Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:

export ZEROCLAW_channels__slack__<alias>__interrupt_on_new_message=
mention_only bool · default false

Cuando es true, solo responde a mensajes que mencionen al bot con @ en grupos. Los mensajes directos siguen estando permitidos.

Colócalo sobre cualquier superficie:

Panel de control del gateway

Abre /config/channels/slack y configura el campo channels.slack.<alias>.mention_only.

zerocode

En el panel Config, establece el campo channels.slack.<alias>.mention_only.

zeroclaw config

zeroclaw config set channels.slack.<alias>.mention_only <value>

Variable de entorno

Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:

export ZEROCLAW_channels__slack__<alias>__mention_only=
proxy_url string? · default null

URL de proxy por canal (http, https, socks5, socks5h). Anula la configuración global [proxy] solo para este canal.

Colócalo sobre cualquier superficie:

Panel de control del gateway

Abre /config/channels/slack y configura el campo channels.slack.<alias>.proxy_url.

zerocode

En el panel Config, configure el campo channels.slack.<alias>.proxy_url.

zeroclaw config

zeroclaw config set channels.slack.<alias>.proxy_url <value>

Variable de entorno

Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:

export ZEROCLAW_channels__slack__<alias>__proxy_url=
reply_min_interval_secs integer · default 0

Límite mínimo de ritmo de salida por (canal, destinatario) en segundos. Rango: 0..=REPLY_MIN_INTERVAL_MAX_SECS (0 lo desactiva).

Colócalo sobre cualquier superficie:

Panel de control del gateway

Abre /config/channels/slack y configura el campo channels.slack.<alias>.reply_min_interval_secs.

zerocode

En el panel de Config, configure el campo channels.slack.<alias>.reply_min_interval_secs.

zeroclaw config

zeroclaw config set channels.slack.<alias>.reply_min_interval_secs <value>

Variable de entorno

Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:

export ZEROCLAW_channels__slack__<alias>__reply_min_interval_secs=
reply_queue_depth_max integer · default 0

Profundidad de la cola de regulación de salida por (canal, destinatario). Rango: 0..=REPLY_QUEUE_DEPTH_CEILING. Cuando reply_min_interval_secs > 0 y este valor es 0, el envoltorio de regulación sustituye DEFAULT_REPLY_QUEUE_DEPTH (16). Cuando la cola está llena, se descarta el envío más reciente y se registra un WARN.

Colócalo sobre cualquier superficie:

Panel de control del gateway

Abre /config/channels/slack y configura el campo channels.slack.<alias>.reply_queue_depth_max.

zerocode

En el panel Config, configure el campo channels.slack.<alias>.reply_queue_depth_max.

zeroclaw config

zeroclaw config set channels.slack.<alias>.reply_queue_depth_max <value>

Variable de entorno

Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:

export ZEROCLAW_channels__slack__<alias>__reply_queue_depth_max=
stream_drafts bool · default false

Habilita la transmisión progresiva de mensajes en borrador mediante chat.update.

Colócalo sobre cualquier superficie:

Panel de control del gateway

Abre /config/channels/slack y configura el campo channels.slack.<alias>.stream_drafts.

zerocode

En el panel Config, establece el campo channels.slack.<alias>.stream_drafts.

zeroclaw config

zeroclaw config set channels.slack.<alias>.stream_drafts <value>

Variable de entorno

Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:

export ZEROCLAW_channels__slack__<alias>__stream_drafts=
strict_mention_in_thread bool · default false

Cuando es true (y mention_only también es true), los mensajes dentro de un hilo de Slack también deben @-mencionar al bot para activar una respuesta. De forma predeterminada, las respuestas en hilos se permiten sin mención para que el bot pueda mantener una conversación de ida y vuelta sin que el usuario repita las @-menciones. Establece esto en true en canales compartidos con conversaciones humanas donde el bot deba permanecer en silencio a menos que se le mencione explícitamente.

Colócalo sobre cualquier superficie:

Panel de control del gateway

Abre /config/channels/slack y configura el campo channels.slack.<alias>.strict_mention_in_thread.

zerocode

En el panel de Configuración, establezca el campo channels.slack.<alias>.strict_mention_in_thread.

zeroclaw config

zeroclaw config set channels.slack.<alias>.strict_mention_in_thread <value>

Variable de entorno

Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:

export ZEROCLAW_channels__slack__<alias>__strict_mention_in_thread=
thread_context_max_messages integer? · default null

Mensajes anteriores del hilo que se cargarán en la primera interacción con el bot. 0 desactiva la carga. Máximo: 50.

Colócalo sobre cualquier superficie:

Panel de control del gateway

Abre /config/channels/slack y establece el campo channels.slack.<alias>.thread_context_max_messages.

zerocode

En el panel Config, establece el campo channels.slack.<alias>.thread_context_max_messages.

zeroclaw config

zeroclaw config set channels.slack.<alias>.thread_context_max_messages <value>

Variable de entorno

Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:

export ZEROCLAW_channels__slack__<alias>__thread_context_max_messages=
thread_replies bool? · default null

Cuando es true (predeterminado), las respuestas permanecen en el hilo de Slack de origen. Cuando es false, las respuestas van a la raíz del canal en su lugar.

Colócalo sobre cualquier superficie:

Panel de control del gateway

Abre /config/channels/slack y configura el campo channels.slack.<alias>.thread_replies.

zerocode

En el panel Config, establece el campo channels.slack.<alias>.thread_replies.

zeroclaw config

zeroclaw config set channels.slack.<alias>.thread_replies <value>

Variable de entorno

Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:

export ZEROCLAW_channels__slack__<alias>__thread_replies=
use_markdown_blocks bool · default false

Use el tipo de bloque markdown más reciente de Slack (límite de 12 000 caracteres, formato más completo). El valor predeterminado es false (usa bloques section con mrkdwn, compatibles universalmente). Habilite esto solo si su espacio de trabajo de Slack admite el tipo de bloque markdown.

Colócalo sobre cualquier superficie:

Panel de control del gateway

Abre /config/channels/slack y configura el campo channels.slack.<alias>.use_markdown_blocks.

zerocode

En el panel Config, establece el campo channels.slack.<alias>.use_markdown_blocks.

zeroclaw config

zeroclaw config set channels.slack.<alias>.use_markdown_blocks <value>

Variable de entorno

Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:

export ZEROCLAW_channels__slack__<alias>__use_markdown_blocks=

Modo Socket vs HTTP

Cuando app_token está configurado, el bot usa Socket Mode: establece la conexión saliente hacia Slack, por lo que no se requiere una URL pública. Esta es la configuración recomendada y la que usa el inicio rápido anterior. Sin un app_token, Slack debe comunicarse con tu bot a través de HTTP, lo que implica alojar un endpoint público de eventos, más configuración y más aspectos que proteger.

Hilos y contexto

Cuando una conversación de Slack ocurre en un hilo, ese hilo es su propia conversación. ZeroClaw deriva una clave de sesión distinta por hilo, de modo que cada hilo lleva una ventana de contexto y un historial independientes: los mensajes de un hilo nunca se filtran a otro, y el agente no ve los turnos anteriores de un hilo hermano. Para Slack esto se controla con thread_replies: cuando está activado, los mensajes de nivel superior abren un hilo y cada hilo es una conversación separada; cuando está desactivado, las respuestas se publican en la raíz del canal y el historial se indexa por remitente y destino en lugar de por hilo.

  • El aislamiento es el objetivo. El contexto de cada hilo es autónomo: no se filtra fuera del hilo, y nada de fuera del hilo se filtra hacia dentro. Los hilos paralelos mantienen estados conversacionales separados, por lo que las tareas no relacionadas nunca se contaminan entre sí.
  • Los hilos largos hacen crecer el contexto. Un hilo acumula historial mientras permanece activo, por lo que un hilo muy largo eventualmente llena la ventana de contexto del modelo como cualquier otra conversación larga. Inicia un nuevo hilo para restablecer.
  • El trabajo en curso está delimitado por hilo. Un mensaje nuevo en un hilo no cancela una respuesta en curso en otro; la tarea de cada hilo es independiente.

Establece el comportamiento del hilo en cualquier superficie:

Panel de control del gateway

Abre /config/channels/slack y activa o desactiva el campo channels.slack.<alias>.thread_replies.

zerocode

En el panel Config, establece el campo channels.slack.<alias>.thread_replies.

zeroclaw config

zeroclaw config set channels.slack.<alias>.thread_replies true     # respuestas de hilo activadas
zeroclaw config set channels.slack.<alias>.thread_replies false    # de respuestas en la raíz del canal

strict_mention_in_thread restringe esto aún más: cuando es true, el bot solo responde dentro de un hilo si un mensaje en él lo @-menciona, en lugar de responder a cada mensaje de un hilo del que forma parte.

En el primer mensaje que ZeroClaw procesa en un hilo existente, obtiene las respuestas anteriores y antepone un bloque limitado de [Thread context] para que el agente pueda responder teniendo en cuenta la conversación anterior. thread_context_max_messages controla cuántos de los mensajes anteriores más recientes disponibles dentro de la ventana de obtención se incluyen, manteniendo el orden cronológico. El valor predeterminado es 0, el máximo es 50 y 0 desactiva esta incorporación automática. Establece un valor explícito distinto de cero para habilitarla.

Una hidratación realiza como máximo tres intentos totales de conversations.replies, incluidos los reintentos tras respuestas HTTP 429. ZeroClaw respeta el valor Retry-After de Slack antes de reintentar mientras quede presupuesto de solicitudes. Si un hilo más largo aún tiene otra página, ZeroClaw usa el contexto parcial acotado, añade un marcador de omisión y registra el hilo como hidratado para que las respuestas posteriores no reinicien el análisis. Un error de la API de Slack no descarta el mensaje actual; omite la hidratación y libera la reserva para que la siguiente respuesta elegible pueda volver a intentarlo.

Menciones y formato

  • mention_only: cuando es true, el bot solo responde a los mensajes que lo @-mencionan, manteniéndolo en silencio en canales con mucha actividad.
  • use_markdown_blocks: muestra las respuestas con el formato Block Kit de Slack para un diseño más enriquecido. Desactívalo para texto sin formato.

Transmisión

Slack transmite respuestas en streaming mediante el booleano stream_drafts:

  • false (predeterminado): toda la respuesta se publica como un solo mensaje una vez que el agente termina.
  • true: el bot publica un marcador de posición de inmediato y lo edita en el lugar a medida que la respuesta se va transmitiendo. draft_update_interval_ms marca el ritmo de las ediciones; auméntalo si Slack las limita por tasa de solicitudes.

Colócalo sobre cualquier superficie:

Panel de control del gateway

Abre /config/channels/slack y configura el campo channels.slack.<alias>.stream_drafts.

zerocode

En el panel Config, establece el campo channels.slack.<alias>.stream_drafts.

zeroclaw config

zeroclaw config set channels.slack.<alias>.stream_drafts <value>

draft_update_interval_ms controla la frecuencia con la que se edita el borrador en streaming (auméntalo si Slack limita la tasa de las ediciones), y cancel_reaction establece un emoji con el que los usuarios pueden reaccionar para cancelar una respuesta en curso.

Solución de problemas

SíntomaCausa probableCorregir
El bot se conecta pero nunca respondeEl bot no ha sido invitado al canal/invite @YourBot en el canal
“not_authed” / “invalid_auth” al iniciobot_token incorrecto o faltanteVuelva a copiar el token xoxb- (paso 4)
El bot nunca se conectaFalta app_token o el Modo Socket está desactivadoActiva el Modo Socket y configura el token xapp- (paso 3)
El bot ignora la mayoría de los mensajesmention_only = true@-menciona el bot, o configúralo en false
Las respuestas no tienen formatouse_markdown_blocks = falseEstablézcalo en true

Ver también