Slack
Estado: listo para producción para mensajes directos y canales mediante integraciones de aplicaciones de Slack. El modo predeterminado es Socket Mode; también se admite el modo HTTP Events API.Emparejamiento
Los mensajes directos de Slack usan el modo de emparejamiento de forma predeterminada.
Comandos slash
Comportamiento nativo de comandos y catálogo de comandos.
Solución de problemas de canales
Diagnósticos multicanal y guías de reparación.
Configuración rápida
- Socket Mode (predeterminado)
- Modo HTTP Events API
Crea la app de Slack y los tokens
En la configuración de la app de Slack:
- habilita Socket Mode
- crea un App Token (
xapp-...) conconnections:write - instala la app y copia el Bot Token (
xoxb-...)
Suscribe eventos de la app
Suscribe eventos del bot para:
app_mentionmessage.channels,message.groups,message.im,message.mpimreaction_added,reaction_removedmember_joined_channel,member_left_channelchannel_renamepin_added,pin_removed
Lista de verificación de manifiesto y scopes
Ejemplo de manifiesto de app de Slack
Ejemplo de manifiesto de app de Slack
Scopes opcionales de user token (operaciones de lectura)
Scopes opcionales de user token (operaciones de lectura)
Si configuras
channels.slack.userToken, los scopes de lectura habituales 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 en texto sin formato u objetos SecretRef.- Los tokens de configuración reemplazan el respaldo por variables de entorno.
- El respaldo por variables de entorno
SLACK_BOT_TOKEN/SLACK_APP_TOKENse aplica solo a la cuenta predeterminada. userToken(xoxp-...) es solo de configuración (sin respaldo por variables de entorno) y usa de forma predeterminada comportamiento de solo lectura (userTokenReadOnly: true).- Opcional: agrega
chat:write.customizesi quieres que los mensajes salientes usen la identidad del agente activo (usernamee icono personalizados).icon_emojiusa la sintaxis:emoji_name:.
- La inspección de cuentas de Slack rastrea 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 secreta no inline, pero 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 conchannels.slack.actions.*.
Grupos de acciones disponibles en las herramientas actuales 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 mensajes directos
- Política de canales
- Menciones y usuarios del canal
channels.slack.dmPolicy controla el acceso a mensajes directos (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 mensajes directos de grupo usan false de forma predeterminada)dm.groupChannels(allowlist opcional de MPIM)
channels.slack.accounts.default.allowFromse aplica solo a la cuentadefault.- Las cuentas con nombre heredan
channels.slack.allowFromcuando su propioallowFromno está configurado. - Las cuentas con nombre no heredan
channels.slack.accounts.default.allowFrom.
openclaw pairing approve slack <code>.Hilos, sesiones y etiquetas de respuesta
- Los mensajes directos se enrutan como
direct; los canales comochannel; los MPIM comogroup. - Con el valor predeterminado
session.dmScope=main, los mensajes directos de Slack se agrupan 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. channels.slack.thread.historyScopeusathreadde forma predeterminada;thread.inheritParentusafalsede forma predeterminada.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.replyToMode:off|first|all(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 encadenamiento de respuestas en Slack, incluidas las etiquetas explícitas [[reply_to_*]]. Esto difiere de Telegram, donde las etiquetas explícitas siguen respetándose en modo "off". La diferencia refleja los modelos de hilo de cada plataforma: los hilos de Slack ocultan los mensajes del canal, mientras que las respuestas de Telegram siguen siendo 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 con el emoji de identidad del agente (
agents.list[].identity.emoji, si no"👀")
- Slack espera shortcodes (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 fragmentadas.progress: muestra texto de estado de progreso mientras se genera y luego envía el texto final.
channels.slack.nativeStreaming controla el streaming nativo de texto de Slack cuando streaming es partial (predeterminado: true).
- Debe haber un hilo de respuesta disponible para que aparezca el streaming nativo de texto. La selección del hilo sigue usando
replyToMode. Sin uno, se usa la vista previa normal del borrador. - Los medios y las cargas no textuales recurren a la entrega normal.
- Si el streaming falla a mitad de la respuesta, OpenClaw recurre a la entrega normal para las cargas restantes.
channels.slack.streamMode(replace | status_final | append) se migra automáticamente achannels.slack.streaming.- el booleano
channels.slack.streamingse migra automáticamente achannels.slack.nativeStreaming.
Respaldo de 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 especialmente útil fuera de respuestas en hilo, que usan de forma predeterminada un indicador de estado “is typing…”.
Orden de resolución:
channels.slack.accounts.<accountId>.typingReactionchannels.slack.typingReaction
- Slack espera shortcodes (por ejemplo
"hourglass_flowing_sand"). - La reacción es best-effort y se intenta limpiar automáticamente después de la respuesta o cuando se completa la ruta de error.
Multimedia, fragmentación y entrega
Archivos adjuntos entrantes
Archivos adjuntos entrantes
Los archivos adjuntos de Slack se descargan desde URLs privadas alojadas por Slack (flujo de solicitud autenticada 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 usa
20MB de forma predeterminada, a menos 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 por párrafos primero- los envíos de archivos usan las APIs de carga de Slack y pueden incluir respuestas en hilo (
thread_ts) - el límite de contenido multimedia saliente sigue
channels.slack.mediaMaxMbcuando está configurado; de lo contrario, los envíos por canal usan los valores predeterminados por tipo MIME del pipeline de medios
Destinos de entrega
Destinos de entrega
Destinos explícitos preferidos:
user:<id>para mensajes directoschannel:<id>para canales
Comandos y comportamiento slash
- El modo automático de comandos nativos está desactivado para Slack (
commands.native: "auto"no habilita los comandos nativos de Slack). - Habilita los manejadores de comandos nativos de Slack con
channels.slack.commands.native: true(o globalcommands.native: true). - Cuando los comandos nativos están habilitados, registra comandos slash coincidentes en Slack (nombres
/<command>), con una excepción:- registra
/agentstatuspara el comando de estado (Slack reserva/status)
- registra
- Si los comandos nativos no están habilitados, puedes ejecutar un único comando slash configurado mediante
channels.slack.slashCommand. - Los menús nativos de argumentos ahora adaptan su estrategia de renderizado:
- hasta 5 opciones: bloques de botones
- 6-100 opciones: menú de selección estática
- más de 100 opciones: selección externa con filtrado asíncrono de opciones cuando están disponibles los manejadores de opciones de interactividad
- si los valores de opción codificados superan los límites de Slack, el flujo recurre a botones
- Para cargas largas de opciones, los menús de argumentos de comandos slash usan un diálogo de confirmación antes de despachar un valor seleccionado.
enabled: falsename: "openclaw"sessionPrefix: "slack:slash"ephemeral: true
agent:<agentId>:slack:slash:<userId>
CommandTargetSessionKey).
Respuestas interactivas
Slack puede renderizar controles de respuesta interactiva escritos por el agente, pero esta función 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 UI específica de Slack. Los demás canales no traducen las directivas de Slack Block Kit a sus propios sistemas de botones.
- Los valores de callback interactivo son tokens opacos generados por OpenClaw, no valores sin procesar escritos por el agente.
- Si los bloques interactivos generados superan los límites de Slack Block Kit, OpenClaw recurre a la respuesta de texto original en lugar de enviar una carga de bloques no válida.
Aprobaciones de exec en Slack
Slack puede actuar como cliente nativo de aprobación con botones interactivos e interacciones, en lugar de recurrir a la UI web o al terminal.- Las aprobaciones de exec usan
channels.slack.execApprovals.*para el enrutamiento nativo de mensajes directos/canales. - Las aprobaciones de plugins aún pueden resolverse a través de la misma superficie de botones nativa 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 app de Slack, las solicitudes de aprobación se renderizan como botones de Block Kit directamente en la conversación.
Cuando esos botones están presentes, son la UX principal de 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; usa como respaldocommands.ownerAllowFromcuando es posible)channels.slack.execApprovals.target(dm|channel|both, predeterminado:dm)agentFilter,sessionFilter
enabled no está configurado o es "auto" y al menos un
aprobador se resuelve. Establece enabled: false para deshabilitar explícitamente Slack como cliente nativo de aprobación.
Establece enabled: true para forzar la activación de aprobaciones nativas cuando se resuelven aprobadores.
Comportamiento predeterminado sin configuración explícita de aprobación de 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 de approvals.plugin también es
independiente; los botones nativos de Slack aún pueden resolver aprobaciones de plugins cuando esas solicitudes ya llegan
a Slack.
/approve en el mismo chat también funciona en canales y mensajes directos de Slack que ya admiten comandos. Consulta Aprobaciones de exec para 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/eliminar reacción se asignan a eventos del sistema.
- Los eventos de unión/salida de miembros, creación/cambio de nombre de canales y agregar/eliminar fijados se asignan a eventos del sistema.
channel_id_changedpuede migrar claves de configuración de canales 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 iniciador del hilo y la siembra inicial del contexto del historial del hilo se filtran mediante las allowlists configuradas de remitentes cuando corresponde.
- Las acciones de bloques e interacciones modales emiten eventos estructurados del sistema
Slack interaction: ...con campos de carga enriquecidos:- acciones de bloques: valores seleccionados, etiquetas, valores de selector y metadatos
workflow_* - eventos modales
view_submissionyview_closedcon metadatos de canal enrutados e inputs de formularios
- acciones de bloques: valores seleccionados, etiquetas, valores de selector y metadatos
Punteros a la referencia de configuración
Referencia principal:-
Referencia de configuración - Slack
Campos de Slack de alta relevancia:
- modo/autenticación:
mode,botToken,appToken,signingSecret,webhookPath,accounts.* - acceso a mensajes directos:
dm.enabled,dmPolicy,allowFrom(heredado:dm.policy,dm.allowFrom),dm.groupEnabled,dm.groupChannels - interruptor de compatibilidad:
dangerouslyAllowNameMatching(último recurso; 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,nativeStreaming - operaciones/funciones:
configWrites,commands.native,slashCommand.*,actions.*,userToken,userTokenReadOnly
- modo/autenticación:
Solución de problemas
No hay respuestas en canales
No hay respuestas en canales
Comprueba, en este orden:
groupPolicy- allowlist de canales (
channels.slack.channels) requireMention- allowlist
userspor canal
Se ignoran los mensajes directos
Se ignoran los mensajes directos
Comprueba:
channels.slack.dm.enabledchannels.slack.dmPolicy(o heredadochannels.slack.dm.policy)- aprobaciones de emparejamiento / entradas de allowlist
Socket mode no conecta
Socket mode no conecta
Valida los tokens de bot y app, y que Socket Mode esté habilitado en la configuración de la app 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 de webhook
- URLs de solicitud de Slack (Events + Interactivity + Slash Commands)
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 qué pretendías:
- modo de comandos nativos (
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 allowlists de canal/usuario.