Slack
Estado: listo para producción para MD + canales mediante integraciones de aplicaciones de Slack. El modo predeterminado es Socket Mode; las URL de solicitud HTTP también son compatibles.Vinculación
Los MD de Slack usan el modo de vinculación de forma predeterminada.
Comandos slash
Comportamiento nativo de comandos y catálogo de comandos.
Solución de problemas del canal
Diagnósticos entre canales y guías de reparación.
Configuración rápida
- Socket Mode (predeterminado)
- URL de solicitud HTTP
Crear una nueva aplicación de Slack
En la configuración de la aplicación de Slack, pulsa el botón Create New App:
- elige from a manifest y selecciona un espacio de trabajo para tu aplicación
- pega el manifiesto de ejemplo de abajo y continúa para crearla
- genera un App-Level Token (
xapp-...) conconnections:write - instala la aplicación y copia el Bot Token (
xoxb-...) que se muestra
Lista de verificación de manifiesto y alcances
- Socket Mode (predeterminado)
- URL de solicitud HTTP
Configuración adicional del manifiesto
Muestra distintas funcionalidades que amplían los valores predeterminados anteriores.Comandos slash nativos opcionales
Comandos slash nativos opcionales
Se pueden usar varios comandos slash nativos en lugar de un único comando configurado, con algunos matices:
- Usa
/agentstatusen lugar de/statusporque el comando/statusestá reservado. - No se pueden poner a disposición más de 25 comandos slash al mismo tiempo.
features.slash_commands actual por un subconjunto de los comandos disponibles:- Socket Mode (predeterminado)
- URL de solicitud HTTP
Alcances de autoría opcionales (operaciones de escritura)
Alcances de autoría opcionales (operaciones de escritura)
Agrega el alcance de bot
chat:write.customize si quieres que los mensajes salientes usen la identidad del agente activo (nombre de usuario e ícono personalizados) en lugar de la identidad predeterminada de la aplicación de Slack.Si usas un ícono de emoji, Slack espera la sintaxis :emoji_name:.Alcances opcionales de token de usuario (operaciones de lectura)
Alcances opcionales de token de usuario (operaciones de lectura)
Si configuras
channels.slack.userToken, los alcances de lectura típicos son:channels:history,groups:history,im:history,mpim:historychannels:read,groups:read,im:read,mpim:readusers:readreactions:readpins:reademoji:readsearch:read(si dependes de lecturas de búsqueda de Slack)
Modelo de tokens
botToken+appTokenson obligatorios para Socket Mode.- El modo HTTP requiere
botToken+signingSecret. botToken,appToken,signingSecretyuserTokenaceptan cadenas de texto sin formato u objetos SecretRef.- Los tokens de configuración prevalecen sobre la variable de entorno de respaldo.
- La variable de entorno de respaldo
SLACK_BOT_TOKEN/SLACK_APP_TOKENsolo se aplica a la cuenta predeterminada. userToken(xoxp-...) es solo de configuración (sin variable de entorno de respaldo) y usa de forma predeterminada el comportamiento de solo lectura (userTokenReadOnly: true).
- La inspección de cuentas de Slack rastrea los campos
*Sourcey*Statuspor credencial (botToken,appToken,signingSecret,userToken). - El estado es
available,configured_unavailableomissing. configured_unavailablesignifica que la cuenta está configurada mediante SecretRef u otra fuente de secretos no insertada en línea, pero que la ruta actual del comando/tiempo de ejecución no pudo resolver el valor real.- En modo HTTP, se incluye
signingSecretStatus; en Socket Mode, el par requerido esbotTokenStatus+appTokenStatus.
Acciones y controles
Las acciones de Slack se controlan mediantechannels.slack.actions.*.
Grupos de acciones disponibles en la herramienta actual de Slack:
| Grupo | Predeterminado |
|---|---|
| messages | enabled |
| reactions | enabled |
| pins | enabled |
| memberInfo | enabled |
| emojiList | enabled |
send, upload-file, download-file, read, edit, delete, pin, unpin, list-pins, member-info y emoji-list.
Control de acceso y enrutamiento
- Política de MD
- Política de canales
- Menciones y usuarios del canal
channels.slack.dmPolicy controla el acceso a MD (heredado: channels.slack.dm.policy):pairing(predeterminado)allowlistopen(requiere quechannels.slack.allowFromincluya"*"; heredado:channels.slack.dm.allowFrom)disabled
dm.enabled(predeterminado: true)channels.slack.allowFrom(preferido)dm.allowFrom(heredado)dm.groupEnabled(los MD grupales usan false de forma predeterminada)dm.groupChannels(lista de permitidos opcional para MPIM)
channels.slack.accounts.default.allowFromse aplica solo a la cuentadefault.- Las cuentas con nombre heredan
channels.slack.allowFromcuando su propioallowFromno está definido. - Las cuentas con nombre no heredan
channels.slack.accounts.default.allowFrom.
openclaw pairing approve slack <code>.Hilos, sesiones y etiquetas de respuesta
- Los MD se enrutan como
direct; los canales comochannel; los MPIM comogroup. - Con el valor predeterminado
session.dmScope=main, los MD de Slack se consolidan en la sesión principal del agente. - Sesiones de canal:
agent:<agentId>:slack:channel:<channelId>. - Las respuestas en hilo pueden crear sufijos de sesión de hilo (
:thread:<threadTs>) cuando corresponde. - El valor predeterminado de
channels.slack.thread.historyScopeesthread; el valor predeterminado dethread.inheritParentesfalse. channels.slack.thread.initialHistoryLimitcontrola cuántos mensajes existentes del hilo se recuperan cuando comienza una nueva sesión de hilo (predeterminado20; establece0para deshabilitarlo).channels.slack.thread.requireExplicitMention(predeterminadofalse): cuando estrue, suprime las menciones implícitas en hilos para que el bot solo responda a menciones explícitas de@botdentro de los hilos, incluso cuando el bot ya participó en el hilo. Sin esto, las respuestas en un hilo en el que participó el bot omiten el controlrequireMention.
channels.slack.replyToMode:off|first|all|batched(predeterminadooff)channels.slack.replyToModeByChatType: pordirect|group|channel- respaldo heredado para chats directos:
channels.slack.dm.replyToMode
[[reply_to_current]][[reply_to:<id>]]
replyToMode="off" deshabilita todo el enhebrado de respuestas en Slack, incluidas las etiquetas explícitas [[reply_to_*]]. Esto difiere de Telegram, donde las etiquetas explícitas siguen respetándose en el modo "off". La diferencia refleja los modelos de enhebrado de cada plataforma: los hilos de Slack ocultan mensajes del canal, mientras que las respuestas de Telegram permanecen visibles en el flujo principal del chat.
Reacciones de acuse
ackReaction envía un emoji de confirmación mientras OpenClaw procesa un mensaje entrante.
Orden de resolución:
channels.slack.accounts.<accountId>.ackReactionchannels.slack.ackReactionmessages.ackReaction- respaldo del emoji de identidad del agente (
agents.list[].identity.emoji, o"👀"en su defecto)
- Slack espera códigos cortos (por ejemplo,
"eyes"). - Usa
""para deshabilitar la reacción para la cuenta de Slack o globalmente.
Streaming de texto
channels.slack.streaming controla el comportamiento de vista previa en vivo:
off: deshabilita el streaming de vista previa en vivo.partial(predeterminado): reemplaza el texto de vista previa con la salida parcial más reciente.block: agrega actualizaciones de vista previa por fragmentos.progress: muestra texto de estado de progreso mientras se genera y luego envía el texto final.
channels.slack.streaming.nativeTransport controla el streaming nativo de texto de Slack cuando channels.slack.streaming.mode es partial (predeterminado: true).
- Debe haber disponible un hilo de respuesta para que aparezcan el streaming nativo de texto y el estado del hilo del asistente de Slack. La selección del hilo sigue rigiéndose por
replyToMode. - Las raíces de canales y chats grupales pueden seguir usando la vista previa de borrador normal cuando el streaming nativo no está disponible.
- Los MD de Slack de nivel superior permanecen fuera de hilo de forma predeterminada, por lo que no muestran la vista previa de estilo hilo; usa respuestas en hilo o
typingReactionsi quieres progreso visible allí. - Las cargas útiles de medios y no textuales recurren a la entrega normal.
- Si el streaming falla a mitad de una respuesta, OpenClaw recurre a la entrega normal para las cargas útiles restantes.
channels.slack.streamMode(replace | status_final | append) se migra automáticamente achannels.slack.streaming.mode.- el booleano
channels.slack.streamingse migra automáticamente achannels.slack.streaming.modeychannels.slack.streaming.nativeTransport. - el valor heredado
channels.slack.nativeStreamingse migra automáticamente achannels.slack.streaming.nativeTransport.
Respaldo con reacción de escritura
typingReaction agrega una reacción temporal al mensaje entrante de Slack mientras OpenClaw procesa una respuesta, y luego la elimina cuando la ejecución termina. Esto es más útil fuera de las respuestas en hilo, que usan un indicador de estado predeterminado de “is typing…”.
Orden de resolución:
channels.slack.accounts.<accountId>.typingReactionchannels.slack.typingReaction
- Slack espera códigos cortos (por ejemplo,
"hourglass_flowing_sand"). - La reacción se realiza con el mejor esfuerzo y la limpieza se intenta automáticamente después de que se completa la respuesta o la ruta de error.
Medios, fragmentación y entrega
Archivos adjuntos entrantes
Archivos adjuntos entrantes
Los archivos adjuntos de Slack se descargan desde URL privadas alojadas por Slack (flujo de solicitud autenticado con token) y se escriben en el almacén de medios cuando la recuperación se realiza correctamente y los límites de tamaño lo permiten.El límite de tamaño entrante en tiempo de ejecución es
20MB de forma predeterminada, salvo que channels.slack.mediaMaxMb lo reemplace.Texto y archivos salientes
Texto y archivos salientes
- los fragmentos de texto usan
channels.slack.textChunkLimit(predeterminado 4000) channels.slack.chunkMode="newline"habilita la división priorizando párrafos- los envíos de archivos usan las API de carga de Slack y pueden incluir respuestas en hilo (
thread_ts) - el límite de medios salientes sigue
channels.slack.mediaMaxMbcuando está configurado; de lo contrario, los envíos del canal usan valores predeterminados por tipo MIME del flujo de medios
Destinos de entrega
Destinos de entrega
Destinos explícitos preferidos:
user:<id>para MDchannel:<id>para canales
Comandos y comportamiento de slash
Los comandos slash aparecen en Slack como un único comando configurado o como varios comandos nativos. Configurachannels.slack.slashCommand para cambiar los valores predeterminados del comando:
enabled: falsename: "openclaw"sessionPrefix: "slack:slash"ephemeral: true
channels.slack.commands.native: true o commands.native: true en las configuraciones globales.
- El modo automático de comandos nativos está desactivado para Slack, por lo que
commands.native: "auto"no habilita los comandos nativos de Slack.
- hasta 5 opciones: bloques de botones
- de 6 a 100 opciones: menú de selección estática
- más de 100 opciones: selección externa con filtrado asíncrono de opciones cuando hay disponibles controladores de opciones de interactividad
- límites de Slack superados: los valores de opción codificados recurren a botones
agent:<agentId>:slack:slash:<userId> y aun así enrutan las ejecuciones de comandos a la sesión de conversación de destino mediante CommandTargetSessionKey.
Respuestas interactivas
Slack puede representar controles interactivos de respuesta creados por el agente, pero esta funcionalidad está deshabilitada de forma predeterminada. Habilítala globalmente:[[slack_buttons: Approve:approve, Reject:reject]][[slack_select: Choose a target | Canary:canary, Production:production]]
- Esta es una IU específica de Slack. Otros canales no traducen las directivas de Slack Block Kit a sus propios sistemas de botones.
- Los valores de devolución de llamada interactiva son tokens opacos generados por OpenClaw, no valores sin procesar creados por el agente.
- Si los bloques interactivos generados superaran los límites de Slack Block Kit, OpenClaw recurre a la respuesta de texto original en lugar de enviar una carga útil de bloques no válida.
Aprobaciones de exec en Slack
Slack puede actuar como un cliente nativo de aprobación con botones e interacciones interactivas, en lugar de recurrir a la IU web o al terminal.- Las aprobaciones de exec usan
channels.slack.execApprovals.*para el enrutamiento nativo de MD/canales. - Las aprobaciones de Plugin aún pueden resolverse mediante la misma superficie de botones nativos de Slack cuando la solicitud ya llega a Slack y el tipo de id de aprobación es
plugin:. - La autorización del aprobador sigue aplicándose: solo los usuarios identificados como aprobadores pueden aprobar o denegar solicitudes a través de Slack.
interactivity está habilitado en la configuración de tu aplicación de Slack, las solicitudes de aprobación se muestran como botones de Block Kit directamente en la conversación.
Cuando esos botones están presentes, son la experiencia de usuario principal para la aprobación; OpenClaw
solo debe incluir un comando manual /approve cuando el resultado de la herramienta indique que las
aprobaciones por chat no están disponibles o que la aprobación manual es la única vía.
Ruta de configuración:
channels.slack.execApprovals.enabledchannels.slack.execApprovals.approvers(opcional; recurre acommands.ownerAllowFromcuando es posible)channels.slack.execApprovals.target(dm|channel|both, predeterminado:dm)agentFilter,sessionFilter
enabled no está definido o es "auto" y se resuelve al menos un
aprobador. Establece enabled: false para deshabilitar explícitamente Slack como cliente nativo de aprobación.
Establece enabled: true para forzar las aprobaciones nativas cuando se resuelvan aprobadores.
Comportamiento predeterminado sin configuración explícita de aprobación exec para Slack:
approvals.exec es independiente. Úsalo solo cuando las solicitudes de aprobación de exec también deban
enrutarse a otros chats o a destinos explícitos fuera de banda. El reenvío compartido approvals.plugin también es
independiente; los botones nativos de Slack aún pueden resolver aprobaciones de Plugin cuando esas solicitudes ya llegan
a Slack.
/approve en el mismo chat también funciona en canales y MD de Slack que ya admiten comandos. Consulta Aprobaciones de exec para ver el modelo completo de reenvío de aprobaciones.
Eventos y comportamiento operativo
- Las ediciones/eliminaciones de mensajes y las difusiones de hilos se asignan a eventos del sistema.
- Los eventos de agregar/quitar reacciones se asignan a eventos del sistema.
- Los eventos de unión/salida de miembros, creación/cambio de nombre de canales y agregar/quitar fijaciones se asignan a eventos del sistema.
channel_id_changedpuede migrar claves de configuración de canal cuandoconfigWritesestá habilitado.- Los metadatos de tema/propósito del canal se tratan como contexto no confiable y pueden inyectarse en el contexto de enrutamiento.
- El creador del hilo y la siembra inicial del contexto del historial del hilo se filtran mediante listas de remitentes permitidos configuradas cuando corresponde.
- Las acciones de bloque y las interacciones de modal emiten eventos estructurados del sistema
Slack interaction: ...con campos de carga útil enriquecidos:- acciones de bloque: valores seleccionados, etiquetas, valores de selector y metadatos
workflow_* - eventos de modal
view_submissionyview_closedcon metadatos de canal enrutados y entradas de formulario
- acciones de bloque: valores seleccionados, etiquetas, valores de selector y metadatos
Punteros de referencia de configuración
Referencia principal:-
Referencia de configuración - Slack
Campos de Slack de alta señal:
- modo/autenticación:
mode,botToken,appToken,signingSecret,webhookPath,accounts.* - acceso a MD:
dm.enabled,dmPolicy,allowFrom(heredado:dm.policy,dm.allowFrom),dm.groupEnabled,dm.groupChannels - alternancia de compatibilidad:
dangerouslyAllowNameMatching(rompecristales; mantenlo desactivado salvo que sea necesario) - acceso a canales:
groupPolicy,channels.*,channels.*.users,channels.*.requireMention - hilos/historial:
replyToMode,replyToModeByChatType,thread.*,historyLimit,dmHistoryLimit,dms.*.historyLimit - entrega:
textChunkLimit,chunkMode,mediaMaxMb,streaming,streaming.nativeTransport - operaciones/funcionalidades:
configWrites,commands.native,slashCommand.*,actions.*,userToken,userTokenReadOnly
- modo/autenticación:
Solución de problemas
Sin respuestas en canales
Sin respuestas en canales
Verifica, en este orden:
groupPolicy- lista de permitidos de canales (
channels.slack.channels) requireMention- lista de permitidos
userspor canal
Mensajes de MD ignorados
Mensajes de MD ignorados
Verifica:
channels.slack.dm.enabledchannels.slack.dmPolicy(o el valor heredadochannels.slack.dm.policy)- aprobaciones de vinculación / entradas de lista de permitidos
Socket mode no se conecta
Socket mode no se conecta
Valida los tokens de bot + aplicación y la habilitación de Socket Mode en la configuración de la aplicación de Slack.Si
openclaw channels status --probe --json muestra botTokenStatus o
appTokenStatus: "configured_unavailable", la cuenta de Slack está
configurada, pero el tiempo de ejecución actual no pudo resolver el valor
respaldado por SecretRef.El modo HTTP no recibe eventos
El modo HTTP no recibe eventos
Valida:
- signing secret
- ruta del Webhook
- URL de solicitud de Slack (Eventos + Interactividad + Comandos Slash)
webhookPathúnico por cuenta HTTP
signingSecretStatus: "configured_unavailable" aparece en las
instantáneas de cuenta, la cuenta HTTP está configurada, pero el tiempo de ejecución actual no pudo
resolver el signing secret respaldado por SecretRef.Los comandos nativos/slash no se activan
Los comandos nativos/slash no se activan
Verifica si tu intención era usar:
- modo de comando nativo (
channels.slack.commands.native: true) con comandos slash coincidentes registrados en Slack - o modo de comando slash único (
channels.slack.slashCommand.enabled: true)
commands.useAccessGroups y las listas de permitidos de canal/usuario.