Integracion con Slack
Conecta aidaemon a tu workspace de Slack via Socket Mode para mensajeria en tiempo real.
Binarios Precompilados
Si instalaste via el script de una linea o Homebrew, el soporte de Slack ya esta incluido. Solo configura
config.toml a continuacion. El feature flag solo es necesario al compilar desde el codigo fuente.Crear una Aplicacion de Slack
- Ve a api.slack.com/apps y haz clic en Create New App
- Elige From scratch, dale un nombre (ej., "aidaemon") y selecciona tu workspace
- En Socket Mode, habilitalo y genera un App-Level Token con el scope
connections:write— este es tuapp_token(xapp-...) - En OAuth & Permissions, agrega estos Bot Token Scopes:
channels:read— listar miembros en canales publicoschat:write— enviar mensajesfiles:read— descargar archivos enviados por usuariosfiles:write— subir archivos a Slackgroups:read— listar miembros en canales privados (necesario para resolver nombres de usuarios en canales privados)im:read— leer metadatos de mensajes directos (requerido para transferencias de archivos en mensajes directos)reactions:write— agregar reacciones de estado (reloj de arena durante el procesamiento)users:read— resolver informacion de usuarios
- En Event Subscriptions, habilita los eventos y suscribete a:
message.channels— mensajes en canales publicosmessage.groups— mensajes en canales privadosmessage.im— mensajes directos
- En App Home, desplazate hasta Show Tabs y habilita el Messages Tab. Marca "Allow users to send Slash commands and messages from the messages tab" — sin esto, los usuarios no pueden enviar mensajes directos al bot.
- Instala la aplicacion en tu workspace — copia el Bot User OAuth Token (
xoxb-...)
Configuracion
config.toml
[slack]
enabled = true
app_token = "xapp-1-..."
bot_token = "xoxb-..."
allowed_user_ids = ["U123456789"]
use_threads = true| Key | Type | Default | Description |
|---|---|---|---|
enabled | bool | false | Habilitar el canal de Slack |
app_token | string | — | Token de nivel de aplicacion para Socket Mode (xapp-...). Soporta "keychain" y ${ENV}. |
bot_token | string | — | Token OAuth de usuario del bot (xoxb-...). Soporta "keychain" y ${ENV}. |
allowed_user_ids | array | [] | IDs de usuarios de Slack permitidos para interactuar. Vacio = sin restriccion. |
use_threads | bool | true | Responder en hilos por defecto. Cada hilo obtiene su propio contexto de sesion. |
Encontrar tu ID de Usuario de Slack
Haz clic en tu perfil en Slack, luego haz clic en More → Copy member ID. El formato es U seguido de caracteres alfanumericos (ej., U0123ABCDEF).
Caracteristicas
- Socket Mode — conexion WebSocket en tiempo real, no se requiere URL publica
- Respuestas en hilos — conversaciones en hilos configurables con contexto de sesion por hilo
- Transferencia de archivos — envia y recibe archivos a traves de Slack
- Aprobaciones con Block Kit — botones interactivos para aprobacion de comandos de terminal
- Comandos slash — mismos comandos que Telegram (
/cost,/model,/tasks, etc.) - Reacciones de estado — emoji de reloj de arena mientras se procesa, se elimina al completar
- Conversion de Markdown — markdown estandar convertido automaticamente al formato mrkdwn de Slack
- Division de mensajes — respuestas largas divididas para respetar el limite de 39KB de mensajes de Slack
- Auto-reconexion — backoff exponencial en caso de fallo de conexion (5s → 60s maximo)
Modelo de Sesiones
Las sesiones de Slack se identifican por canal e hilo:
- Mensaje en canal:
slack:{channel_id} - Mensaje en hilo:
slack:{channel_id}:{thread_ts}(cuandouse_threadsesta habilitado)
Cada sesion mantiene su propio historial de conversacion, memoria de trabajo y contexto de hechos.
Control de Acceso
Si
allowed_user_ids esta vacio, cualquier persona en el workspace que pueda enviar mensajes al bot puede interactuar con el. Siempre configura esto en produccion.