Estado: listo para producción para MDs + canales a través de integraciones de aplicaciones de Slack. El modo predeterminado es el Modo Socket; el modo de API de eventos HTTP también es compatible.
establecer el modo en HTTP (channels.slack.mode="http")
copiar el Signing Secret de Slack
establecer las URL de solicitud de Suscripciones de eventos + Interactividad + Comandos de barra en la misma ruta de webhook (por defecto /slack/events)
Configurar el modo HTTP de OpenClaw
{
channels: {
slack: {
enabled: true,
mode: "http",
botToken: "xoxb-...",
signingSecret: "your-signing-secret",
webhookPath: "/slack/events",
},
},
}
Usar rutas de webhook únicas para HTTP multicuenta
El modo HTTP por cuenta es compatible.
Asigne a cada cuenta un webhookPath distinto para que los registros no colisionen.
botToken + appToken son necesarios para el modo Socket.
El modo HTTP requiere botToken + signingSecret.
Los tokens de configuración anulan la alternativa de entorno.
El respaldo de entorno SLACK_BOT_TOKEN / SLACK_APP_TOKEN se aplica solo a la cuenta predeterminada.
userToken (xoxp-...) es solo de configuración (sin respaldo de entorno) y por defecto tiene un comportamiento de solo lectura (userTokenReadOnly: true).
Opcional: agregue chat:write.customize si desea que los mensajes salientes usen la identidad del agente activo (username e icono personalizados). icon_emoji usa la sintaxis :emoji_name:.
El modo automático de comandos nativos está desactivado para Slack (commands.native: "auto" no habilita los comandos nativos de Slack).
Habilite los controladores de comandos nativos de Slack con channels.slack.commands.native: true (o global commands.native: true).
Cuando los comandos nativos están habilitados, registre los comandos de barra coincidentes en Slack (nombres `/
`), con una excepción:
registre /agentstatus para el comando de estado (Slack reserva /status)
Si los comandos nativos no están habilitados, puede ejecutar un solo comando de barra configurado a través de channels.slack.slashCommand.
Los menús de argumentos nativos 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 de opciones asíncrono cuando los controladores de opciones de interactividad están disponibles
si los valores de opción codificados exceden los límites de Slack, el flujo recurre a los botones
Para cargas útiles de opción largas, los menús de argumentos de comandos de barra usan un diálogo de confirmación antes de enviar un valor seleccionado.
Slack puede renderizar controles de respuesta interactivos creados por el agente, pero esta función está deshabilitada de forma predeterminada.
Habilítelo globalmente:
{
channels: {
slack: {
capabilities: {
interactiveReplies: true,
},
},
},
}
O habilítelo solo para una cuenta de Slack:
{
channels: {
slack: {
accounts: {
ops: {
capabilities: {
interactiveReplies: true,
},
},
},
},
},
}
Cuando está habilitado, los agentes pueden emitir directivas de respuesta exclusivas de Slack:
[[slack_buttons: Approve:approve, Reject:reject]]
[[slack_select: Choose a target | Canary:canary, Production:production]]
Estas directivas se compilan en Slack Block Kit y enrutan clics o selecciones a través de la ruta de eventos de interacción de Slack existente.
Notas:
Esta es una interfaz de usuario específica de Slack. Otros canales no traducen las directivas de Slack Block Kit a sus propios sistemas de botones.
Los valores de retorno de llamada interactivos son tokens opacos generados por OpenClaw, no valores brutos creados por el agente.
Si los bloques interactivos generados excedieran 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.
Configuración predeterminada de comandos de barra:
enabled: false
name: "openclaw"
sessionPrefix: "slack:slash"
ephemeral: true
Las sesiones de barra usan claves aisladas:
`agent:
:slack:slash:
`
y aún enrutar la ejecución del comando contra la sesión de conversación objetivo (CommandTargetSessionKey).
Los MD se enrutan como direct; los canales como channel; los MPIM como group.
Con session.dmScope=main predeterminado, los MD de Slack se colapsan en la sesión principal del agente.
Sesiones de canal: `agent:
:slack:channel:
`.
Las respuestas de hilos pueden crear sufijos de sesión de hilo (`:thread:
`) cuando corresponda.
El valor predeterminado de channels.slack.thread.historyScope es thread; el valor predeterminado de thread.inheritParent es false.
channels.slack.thread.initialHistoryLimit controla cuántos mensajes de hilo existentes se recuperan cuando comienza una nueva sesión de hilo (predeterminado 20; establezca 0 para desactivar).
channels.slack.replyToModeByChatType: por direct|group|channel
respaldo heredado para chats directos: channels.slack.dm.replyToMode
Se admiten etiquetas de respuesta manuales:
[[reply_to_current]]
`[[reply_to:
]]`
Nota: replyToMode="off" desactiva todos los hilos de respuesta en Slack, incluyendo las etiquetas explícitas [[reply_to_*]]. Esto difiere de Telegram, donde las etiquetas explícitas todavía se respetan en el modo "off". La diferencia refleja los modelos de hilos de la plataforma: los hilos de Slack ocultan los mensajes del canal, mientras que las respuestas de Telegram siguen siendo visibles en el flujo de chat principal.
Los archivos adjuntos de Slack se descargan desde URLs privadas alojadas en Slack (flujo de solicitud autenticada por token) y se escriben en el almacén de medios cuando la recuperación tiene éxito 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, a menos que sea anulado por channels.slack.mediaMaxMb.
Texto y archivos salientes
los fragmentos de texto usan channels.slack.textChunkLimit (por defecto 4000) - channels.slack.chunkMode="newline" habilita la división prioritaria por párrafos - el envío de archivos utiliza las APIs de carga de Slack y puede incluir respuestas de hilos (thread_ts) - el límite de medios salientes sigue channels.slack.mediaMaxMb cuando está configurado; de lo contrario, los envíos de
canal usan los valores predeterminados de tipo MIME de la tubería de medios
Objetivos de entrega
Objetivos explícitos preferidos:
`user:
para MDs -channel:
` para canales
Los MDs de Slack se abren a través de las APIs de conversación de Slack al enviar a objetivos de usuario.
Las acciones de Slack se controlan mediante channels.slack.actions.*.
Grupos de acciones disponibles en las herramientas actuales de Slack:
Grupo
Predeterminado
mensajes
activado
reacciones
activado
fijaciones
activado
informaciónMiembro
activado
listaEmoji
activado
Las acciones de mensaje de Slack actuales incluyen send, upload-file, download-file, read, edit, delete, pin, unpin, list-pins, member-info y emoji-list.
Las ediciones/eliminaciones/transmisiones de hilos de mensajes se asignan a eventos del sistema.
Los eventos de agregar/eliminar reacciones se asignan a eventos del sistema.
Los eventos de unirse/salir miembros, canal creado/renombrado y agregar/eliminar fijados se asignan a eventos del sistema.
Las actualizaciones de estado de hilo del asistente (para indicadores “escribiendo…” en hilos) usan assistant.threads.setStatus y requieren el alcance de bot assistant:write.
channel_id_changed puede migrar claves de configuración de canal cuando configWrites está habilitado.
Los metadatos del tema/propósito del canal se tratan como contexto no confiable y se pueden inyectar en el contexto de enrutamiento.
Las acciones de bloque y las interacciones modales emiten eventos de sistema estructurados Slack interaction: ... con campos de carga útiles ricos:
acciones de bloque: valores seleccionados, etiquetas, valores de selector y metadatos workflow_*
eventos de modal view_submission y view_closed con metadatos de canal enrutados e entradas de formulario
typingReaction añade una reacción temporal al mensaje entrante de Slack mientras OpenClaw procesa una respuesta y luego la elimina cuando finaliza la ejecución. Es un respaldo útil cuando la escritura nativa del asistente de Slack no está disponible, especialmente en MD.
Las solicitudes de aprobación de Exec pueden enrutarse de forma nativa a través de Slack utilizando botones e interactivos, en lugar de recurrir a la interfaz de usuario web o a la terminal. La autorización del aprobador se aplica: solo los usuarios identificados como aprobadores pueden aprobar o denegar solicitudes a través de Slack.
Esto utiliza la misma superficie de botón de aprobación compartida que otros canales. Cuando interactivity está habilitado en la configuración de tu aplicación de Slack, las solicitudes de aprobación se representan como botones de Block Kit directamente en la conversación.
La configuración utiliza la configuración compartida approvals.exec con objetivos de Slack:
{
approvals: {
exec: {
enabled: true,
targets: [{ channel: "slack", to: "U12345678" }],
},
},
}
La /approve en el mismo chat también funciona en canales y MD de Slack que ya admiten comandos. Consulte Exec approvals para ver el modelo completo de reenvío de aprobaciones.
OpenClaw admite la transmisión de texto nativa de Slack a través de la API de Agents y AI Apps.
channels.slack.streaming controla el comportamiento de vista previa en vivo:
off: desactiva la transmisión de vista previa en vivo.
partial (predeterminado): reemplaza el texto de vista previa con la última salida parcial.
block: anexa actualizaciones de vista previa fragmentadas.
progress: muestra texto de estado de progreso mientras se genera, luego envía el texto final.
channels.slack.nativeStreaming controla la API de transmisión nativa de Slack (chat.startStream / chat.appendStream / chat.stopStream) cuando streaming es partial (predeterminado: true).
Desactivar la transmisión nativa de Slack (mantener el comportamiento de vista previa de borrador):
channels:
slack:
streaming: partial
nativeStreaming: false
Claves heredadas:
channels.slack.streamMode (replace | status_final | append) se migra automáticamente a channels.slack.streaming.
el booleano channels.slack.streaming se migra automáticamente a channels.slack.nativeStreaming.