Plataformas de mensajería

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.

Configuración rápida

{
  channels: {
    slack: {
      enabled: true,
      mode: "socket",
      appToken: "xapp-...",
      botToken: "xoxb-...",
    },
  },
}

Modelo de tokens

  • botToken + appToken son 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_TOKEN solo 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.customize si quieres que los mensajes salientes usen la identidad del agente activo (username e icono personalizados). icon_emoji usa 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: false y 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)
  • allowlist
  • open (requiere que channels.slack.allowFrom incluya "*"; 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.allowFrom se aplica solo a la cuenta default.
  • Las cuentas nombradas heredan channels.slack.allowFrom cuando su propio allowFrom no 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 globalmente commands.native: true).
  • Cuando los comandos nativos están habilitados, registra comandos de barra coincidentes en Slack (nombres /<comando>), con una excepción:
    • registra /agentstatus para el comando de estado (Slack reserva /status)
  • 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: false
  • name: "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 como channel; los MPIMs como group.
  • 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.historyScope por defecto es thread; thread.inheritParent por defecto es false.
  • channels.slack.thread.initialHistoryLimit controla cuántos mensajes existentes del hilo se obtienen cuando comienza una nueva sesión de hilo (predeterminado 20; establece 0 para deshabilitar).

Controles de hilos de respuesta:

  • channels.slack.replyToMode: off|first|all (predeterminado off)
  • channels.slack.replyToModeByChatType: por direct|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:

GrupoPredeterminado
messageshabilitado
reactionshabilitado
pinshabilitado
memberInfohabilitado
emojiListhabilitado

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.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 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_submission y view_closed con metadatos de canal enrutados y entradas de formulario

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>.ackReaction
  • channels.slack.ackReaction
  • messages.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>.typingReaction
  • channels.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 a channels.slack.streaming.
  • el booleano channels.slack.streaming se migra automáticamente a channels.slack.nativeStreaming.

Requisitos

  1. Habilita Agentes y Aplicaciones de IA en la configuración de tu aplicación de Slack.
  2. Asegúrate de que la aplicación tenga el alcance assistant:write.
  3. 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

Relacionado

Synology ChatTelegram