Slack
Estado: listo para producción en MDs + canales mediante integraciones de aplicaciones de Slack. El modo predeterminado es Socket Mode; también se admite el modo HTTP Events API.
Emparejamiento
Los MDs de Slack usan por defecto el modo de emparejamiento.
Comandos de barra
Comportamiento de comandos nativos y catálogo de comandos.
Solución de problemas en canales
Diagnósticos entre canales y guías de reparación.
Configuración rápida
{
channels: {
slack: {
enabled: true,
mode: "socket",
appToken: "xapp-...",
botToken: "xoxb-...",
},
},
}Modelo de tokens
botToken+appTokenson necesarios para Socket Mode.- El modo HTTP requiere
botToken+signingSecret. - Los tokens de configuración anulan el respaldo de variables de entorno.
- El respaldo de las variables de entorno
SLACK_BOT_TOKEN/SLACK_APP_TOKENsolo se aplica a la cuenta predeterminada. userToken(xoxp-...) es solo de configuración (sin respaldo de variable de entorno) y por defecto tiene comportamiento de solo lectura (userTokenReadOnly: true).- Opcional: añade
chat:write.customizesi quieres que los mensajes salientes usen la identidad del agente activo (usernamee icono personalizados).icon_emojiusa la sintaxis:nombre_emoji:.
💡 Para acciones/lecturas de directorio, el token de usuario puede ser preferible cuando está configurado. Para escrituras, el token de bot sigue siendo preferido; las escrituras con token de usuario solo se permiten cuando
userTokenReadOnly: falsey el token de bot no está disponible.
Control de acceso y enrutamiento
channels.slack.dmPolicy controla el acceso a MDs (heredado: channels.slack.dm.policy):
pairing(predeterminado)allowlistopen(requiere quechannels.slack.allowFromincluya"*"; heredado:channels.slack.dm.allowFrom)disabled
Banderas de MDs:
dm.enabled(verdadero por defecto)channels.slack.allowFrom(preferido)dm.allowFrom(heredado)dm.groupEnabled(MDs grupales falso por defecto)dm.groupChannels(lista de permitidos MPIM opcional)
Precedencia de cuentas múltiples:
channels.slack.accounts.default.allowFromse aplica solo a la cuentadefault.- Las cuentas nombradas heredan
channels.slack.allowFromcuando su propioallowFromno está definido. - Las cuentas nombradas no heredan
channels.slack.accounts.default.allowFrom.
El emparejamiento en MDs usa openclaw pairing approve slack <código>.
Comandos y comportamiento de barra
- El modo automático de comandos nativos está desactivado para Slack (
commands.native: "auto"no habilita comandos nativos de Slack). - Habilita los manejadores de comandos nativos de Slack con
channels.slack.commands.native: true(o globalmentecommands.native: true). - Cuando los comandos nativos están habilitados, registra comandos de barra coincidentes en Slack (nombres
/<comando>), 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 de barra configurado mediante
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ático
- más de 100 opciones: selección externa con filtrado asíncrono de opciones cuando hay manejadores de opciones de interactividad disponibles
- si los valores de opción codificados exceden los límites de Slack, el flujo recurre a botones
- Para cargas útiles largas de opciones, los menús de argumentos de comandos de barra usan un diálogo de confirmación antes de enviar un valor seleccionado.
Configuración predeterminada de comandos de barra:
enabled: falsename: "openclaw"sessionPrefix: "slack:slash"ephemeral: true
Las sesiones de barra usan claves aisladas:
agent:<agentId>:slack:slash:<userId>
y aún enrutan la ejecución del comando contra la sesión de conversación objetivo (CommandTargetSessionKey).
Hilos, sesiones y etiquetas de respuesta
- Los MDs se enrutan como
direct; los canales comochannel; los MPIMs comogroup. - Con el valor predeterminado
session.dmScope=main, los MDs de Slack se colapsan a 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 corresponda. channels.slack.thread.historyScopepor defecto esthread;thread.inheritParentpor defecto esfalse.channels.slack.thread.initialHistoryLimitcontrola cuántos mensajes existentes del hilo se obtienen cuando comienza una nueva sesión de hilo (predeterminado20; establece0para deshabilitar).
Controles de hilos de respuesta:
channels.slack.replyToMode:off|first|all(predeterminadooff)channels.slack.replyToModeByChatType: pordirect|group|channel- respaldo heredado para chats directos:
channels.slack.dm.replyToMode
Se admiten etiquetas de respuesta manual:
[[reply_to_current]][[reply_to:<id>]]
Nota: replyToMode="off" deshabilita todos los hilos de respuesta en Slack, incluidas las etiquetas explícitas [[reply_to_*]]. Esto difiere de Telegram, donde las etiquetas explícitas aún se respetan en modo "off". La diferencia refleja los modelos de hilos de las plataformas: los hilos de Slack ocultan mensajes del canal, mientras que las respuestas de Telegram permanecen visibles en el flujo principal del chat.
Medios, fragmentación y entrega
Acciones y compuertas
Las acciones de Slack se controlan mediante channels.slack.actions.*. Grupos de acciones disponibles en las herramientas actuales de Slack:
| Grupo | Predeterminado |
|---|---|
| messages | habilitado |
| reactions | habilitado |
| pins | habilitado |
| memberInfo | habilitado |
| emojiList | habilitado |
Eventos y comportamiento operativo
- Las ediciones/eliminaciones de mensajes y transmisiones de hilos se mapean a eventos del sistema.
- Los eventos de añadir/eliminar reacciones se mapean a eventos del sistema.
- Los eventos de unirse/salir de miembros, crear/renombrar canales y añadir/eliminar fijaciones se mapean a eventos del sistema.
- Las actualizaciones de estado de hilos del asistente (para indicadores de "está escribiendo..." en hilos) usan
assistant.threads.setStatusy requieren el alcance de botassistant:write. 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.
- Las acciones de bloque y las interacciones modales emiten eventos estructurados del sistema
Slack interaction: ...con campos de carga útil ricos:- acciones de bloque: valores seleccionados, etiquetas, valores del selector y metadatos
workflow_* - eventos modales
view_submissionyview_closedcon metadatos de canal enrutados y entradas de formulario
- acciones de bloque: valores seleccionados, etiquetas, valores del selector y metadatos
Reacciones de confirmación
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 de emoji de identidad del agente (
agents.list[].identity.emoji, si no ”👀”)
Notas:
- Slack espera códigos cortos (por ejemplo
"eyes"). - Usa
""para deshabilitar la reacción para la cuenta de Slack o globalmente.
Respaldo de reacción de escritura
typingReaction añade una reacción temporal al mensaje entrante de Slack mientras OpenClaw procesa una respuesta, luego la elimina cuando la ejecución termina. Este es un respaldo útil cuando la escritura nativa del asistente de Slack no está disponible, especialmente en MDs. Orden de resolución:
channels.slack.accounts.<accountId>.typingReactionchannels.slack.typingReaction
Notas:
- Slack espera códigos cortos (por ejemplo
"hourglass_flowing_sand"). - La reacción es de mejor esfuerzo y la limpieza se intenta automáticamente después de que la respuesta o la ruta de fallo se complete.
Manifiesto y lista de verificación de alcances
Solución de problemas
Transmisión de texto
OpenClaw admite transmisión de texto nativa de Slack mediante la API de Agentes y Aplicaciones de IA. channels.slack.streaming controla el comportamiento de vista previa en vivo:
off: deshabilita la transmisión de vista previa en vivo.partial(predeterminado): reemplaza el texto de vista previa con la salida parcial más reciente.block: añade 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). Deshabilita la transmisión nativa de Slack (mantén 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 achannels.slack.streaming.- el booleano
channels.slack.streamingse migra automáticamente achannels.slack.nativeStreaming.
Requisitos
- Habilita Agentes y Aplicaciones de IA en la configuración de tu aplicación de Slack.
- Asegúrate de que la aplicación tenga el alcance
assistant:write. - Debe haber un hilo de respuesta disponible para ese mensaje. La selección de hilo aún sigue
replyToMode.
Comportamiento
- El primer fragmento de texto inicia una transmisión (
chat.startStream). - Los fragmentos de texto posteriores se añaden a la misma transmisión (
chat.appendStream). - El final de la respuesta finaliza la transmisión (
chat.stopStream). - Los medios y cargas útiles que no son texto recurren a la entrega normal.
- Si la transmisión falla a mitad de la respuesta, OpenClaw recurre a la entrega normal para las cargas útiles restantes.
Puntos 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 MDs:
dm.enabled,dmPolicy,allowFrom(heredado:dm.policy,dm.allowFrom),dm.groupEnabled,dm.groupChannels - interruptor de compatibilidad:
dangerouslyAllowNameMatching(rompe-cristales; mantén desactivado a menos 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/características:
configWrites,commands.native,slashCommand.*,actions.*,userToken,userTokenReadOnly
- modo/autenticación: