Plataformas de mensajería

Discord

Estado: listo para mensajes directos y canales de gremio a través de la puerta de enlace oficial de Discord.

Configuración rápida

Necesitarás crear una nueva aplicación con un bot, añadir el bot a tu servidor y vincularlo a OpenClaw. Recomendamos añadir tu bot a tu propio servidor privado. Si aún no tienes uno, crea uno primero (elige Crear el mío propio > Para mí y mis amigos).

Paso 1: Crear una aplicación y un bot de Discord

Ve al Portal de Desarrolladores de Discord y haz clic en Nueva Aplicación. Nómbrala algo como "OpenClaw". Haz clic en Bot en la barra lateral. Establece el Nombre de usuario como quieras llamar a tu agente OpenClaw.

Paso 2: Habilitar intenciones privilegiadas

Todavía en la página Bot, desplázate hacia abajo hasta Intenciones Privilegiadas de la Puerta de Enlace y habilita:

  • Intención de Contenido de Mensajes (requerida)
  • Intención de Miembros del Servidor (recomendada; requerida para listas de permisos de roles y coincidencia de nombre a ID)
  • Intención de Presencia (opcional; solo necesaria para actualizaciones de presencia)

Paso 3: Copiar tu token del bot

Desplázate hacia arriba en la página Bot y haz clic en Restablecer Token.

ℹ️ A pesar del nombre, esto genera tu primer token — no se está "restableciendo" nada.

Copia el token y guárdalo en algún lugar. Este es tu Token del Bot y lo necesitarás en breve.

Paso 4: Generar una URL de invitación y añadir el bot a tu servidor

Haz clic en OAuth2 en la barra lateral. Generarás una URL de invitación con los permisos correctos para añadir el bot a tu servidor. Desplázate hacia abajo hasta Generador de URL OAuth2 y habilita:

  • bot
  • applications.commands

Aparecerá una sección Permisos del Bot debajo. Habilita:

  • Ver Canales
  • Enviar Mensajes
  • Leer Historial de Mensajes
  • Insertar Enlaces
  • Adjuntar Archivos
  • Añadir Reacciones (opcional)

Copia la URL generada en la parte inferior, pégala en tu navegador, selecciona tu servidor y haz clic en Continuar para conectar. Ahora deberías ver tu bot en el servidor de Discord.

Paso 5: Habilitar Modo Desarrollador y recopilar tus IDs

De vuelta en la aplicación de Discord, necesitas habilitar el Modo Desarrollador para poder copiar IDs internos.

  1. Haz clic en Configuración de Usuario (icono de engranaje junto a tu avatar) → Avanzado → activa Modo Desarrollador
  2. Haz clic derecho en el icono de tu servidor en la barra lateral → Copiar ID del Servidor
  3. Haz clic derecho en tu propio avatarCopiar ID de Usuario

Guarda tu ID del Servidor y ID de Usuario junto con tu Token del Bot — enviarás los tres a OpenClaw en el siguiente paso.

Paso 6: Permitir mensajes directos de miembros del servidor

Para que la vinculación funcione, Discord necesita permitir que tu bot te envíe mensajes directos. Haz clic derecho en el icono de tu servidorConfiguración de Privacidad → activa Mensajes Directos. Esto permite que los miembros del servidor (incluidos los bots) te envíen mensajes directos. Mantén esto habilitado si quieres usar mensajes directos de Discord con OpenClaw. Si solo planeas usar canales de gremio, puedes deshabilitar los mensajes directos después de la vinculación.

Paso 7: Paso 0: Establecer tu token del bot de forma segura (no lo envíes en el chat)

Tu token del bot de Discord es un secreto (como una contraseña). Establécelo en la máquina que ejecuta OpenClaw antes de enviar mensajes a tu agente.

openclaw config set channels.discord.token '"YOUR_BOT_TOKEN"' --json
openclaw config set channels.discord.enabled true --json
openclaw gateway

Si OpenClaw ya se está ejecutando como un servicio en segundo plano, usa openclaw gateway restart en su lugar.

Paso 8: Configurar OpenClaw y vincular

Chatea con tu agente OpenClaw en cualquier canal existente (por ejemplo, Telegram) y dile. Si Discord es tu primer canal, usa la CLI / pestaña de configuración en su lugar.

“Ya configuré mi token del bot de Discord en la configuración. Por favor, termina la configuración de Discord con el ID de Usuario <user_id> y el ID del Servidor <server_id>.”

Paso 9: Aprobar la primera vinculación por mensaje directo

Espera hasta que la puerta de enlace esté en ejecución, luego envía un mensaje directo a tu bot en Discord. Responderá con un código de vinculación.

Envía el código de vinculación a tu agente en tu canal existente:

“Aprueba este código de vinculación de Discord: <CODE>

Los códigos de vinculación expiran después de 1 hora. Ahora deberías poder chatear con tu agente en Discord a través de mensajes directos.

ℹ️ La resolución de tokens es consciente de la cuenta. Los valores de token en la configuración tienen prioridad sobre el valor de respaldo de la variable de entorno. DISCORD_BOT_TOKEN solo se usa para la cuenta predeterminada.

Recomendado: Configurar un espacio de trabajo de gremio

Una vez que los mensajes directos funcionen, puedes configurar tu servidor de Discord como un espacio de trabajo completo donde cada canal obtiene su propia sesión de agente con su propio contexto. Esto es recomendado para servidores privados donde solo estás tú y tu bot.

Paso 1: Añadir tu servidor a la lista de permisos del gremio

Esto permite que tu agente responda en cualquier canal de tu servidor, no solo en mensajes directos.

“Añade mi ID del Servidor de Discord <server_id> a la lista de permisos del gremio”

Paso 2: Permitir respuestas sin @mención

Por defecto, tu agente solo responde en canales de gremio cuando es @mencionado. Para un servidor privado, probablemente quieras que responda a cada mensaje.

“Permite que mi agente responda en este servidor sin tener que ser @mencionado”

Paso 3: Planificar la memoria en canales de gremio

Por defecto, la memoria a largo plazo (MEMORY.md) solo se carga en sesiones de mensajes directos. Los canales de gremio no cargan automáticamente MEMORY.md.

“Cuando haga preguntas en canales de Discord, usa memory_search o memory_get si necesitas contexto a largo plazo de MEMORY.md.”

Ahora crea algunos canales en tu servidor de Discord y comienza a chatear. Tu agente puede ver el nombre del canal, y cada canal obtiene su propia sesión aislada — para que puedas configurar #coding, #home, #research, o lo que se ajuste a tu flujo de trabajo.

Modelo de tiempo de ejecución

  • La puerta de enlace posee la conexión de Discord.
  • El enrutamiento de respuestas es determinista: las respuestas entrantes de Discord vuelven a Discord.
  • Por defecto (session.dmScope=main), los chats directos comparten la sesión principal del agente (agent:main:main).
  • Los canales de gremio son claves de sesión aisladas (agent:<agentId>:discord:channel:<channelId>).
  • Los mensajes directos grupales se ignoran por defecto (channels.discord.dm.groupEnabled=false).
  • Los comandos nativos de barra se ejecutan en sesiones de comando aisladas (agent:<agentId>:discord:slash:<userId>), mientras aún llevan CommandTargetSessionKey a la sesión de conversación enrutada.

Canales de foro

Los canales de foro y medios de Discord solo aceptan publicaciones en hilos. OpenClaw admite dos formas de crearlos:

  • Envía un mensaje al padre del foro (channel:<forumId>) para crear automáticamente un hilo. El título del hilo usa la primera línea no vacía de tu mensaje.
  • Usa openclaw message thread create para crear un hilo directamente. No pases --message-id para canales de foro.

Ejemplo: enviar al padre del foro para crear un hilo

openclaw message send --channel discord --target channel:<forumId> \
  --message "Título del tema\nCuerpo de la publicación"

Ejemplo: crear un hilo de foro explícitamente

openclaw message thread create --channel discord --target channel:<forumId> \
  --thread-name "Título del tema" --message "Cuerpo de la publicación"

Los padres de foro no aceptan componentes de Discord. Si necesitas componentes, envía al hilo mismo (channel:<threadId>).

Componentes interactivos

OpenClaw admite contenedores de componentes v2 de Discord para mensajes del agente. Usa la herramienta de mensaje con un payload components. Los resultados de la interacción se enrutan de vuelta al agente como mensajes entrantes normales y siguen la configuración existente de Discord replyToMode. Bloques admitidos:

  • text, section, separator, actions, media-gallery, file
  • Las filas de acciones permiten hasta 5 botones o un solo menú desplegable
  • Tipos de selección: string, user, role, mentionable, channel

Por defecto, los componentes son de un solo uso. Establece components.reusable=true para permitir que botones, selecciones y formularios se usen múltiples veces hasta que expiren. Para restringir quién puede hacer clic en un botón, establece allowedUsers en ese botón (IDs de usuario de Discord, etiquetas o *). Cuando está configurado, los usuarios no coincidentes reciben una denegación efímera. Los comandos de barra /model y /models abren un selector de modelo interactivo con menús desplegables de proveedor y modelo más un paso de Enviar. La respuesta del selector es efímera y solo el usuario que lo invoca puede usarlo. Archivos adjuntos:

  • Los bloques file deben apuntar a una referencia de adjunto (attachment://<filename>)
  • Proporciona el adjunto a través de media/path/filePath (archivo único); usa media-gallery para múltiples archivos
  • Usa filename para anular el nombre de carga cuando debe coincidir con la referencia del adjunto

Formularios modales:

  • Añade components.modal con hasta 5 campos
  • Tipos de campo: text, checkbox, radio, select, role-select, user-select
  • OpenClaw añade automáticamente un botón de activación

Ejemplo:

{
  channel: "discord",
  action: "send",
  to: "channel:123456789012345678",
  message: "Texto de respaldo opcional",
  components: {
    reusable: true,
    text: "Elige un camino",
    blocks: [
      {
        type: "actions",
        buttons: [
          {
            label: "Aprobar",
            style: "success",
            allowedUsers: ["123456789012345678"],
          },
          { label: "Rechazar", style: "danger" },
        ],
      },
      {
        type: "actions",
        select: {
          type: "string",
          placeholder: "Elige una opción",
          options: [
            { label: "Opción A", value: "a" },
            { label: "Opción B", value: "b" },
          ],
        },
      },
    ],
    modal: {
      title: "Detalles",
      triggerLabel: "Abrir formulario",
      fields: [
        { type: "text", label: "Solicitante" },
        {
          type: "select",
          label: "Prioridad",
          options: [
            { label: "Baja", value: "low" },
            { label: "Alta", value: "high" },
          ],
        },
      ],
    },
  },
}

Control de acceso y enrutamiento

channels.discord.dmPolicy controla el acceso a mensajes directos (heredado: channels.discord.dm.policy):

  • pairing (predeterminado)
  • allowlist
  • open (requiere que channels.discord.allowFrom incluya "*"; heredado: channels.discord.dm.allowFrom)
  • disabled

Si la política de MD no está abierta, los usuarios desconocidos son bloqueados (o se les solicita vinculación en modo pairing). Precedencia multi-cuenta:

  • channels.discord.accounts.default.allowFrom se aplica solo a la cuenta default.
  • Las cuentas nombradas heredan channels.discord.allowFrom cuando su propio allowFrom no está establecido.
  • Las cuentas nombradas no heredan channels.discord.accounts.default.allowFrom.

Formato de destino de MD para entrega:

  • user:<id>
  • mención <@id>

Los IDs numéricos simples son ambiguos y se rechazan a menos que se proporcione un tipo de destino de usuario/canal explícito.

Enrutamiento de agente basado en roles

Usa bindings[].match.roles para enrutar miembros del gremio de Discord a diferentes agentes por ID de rol. Los enlaces basados en roles aceptan solo IDs de rol y se evalúan después de los enlaces de par o par-padre y antes de los enlaces solo de gremio. Si un enlace también establece otros campos de coincidencia (por ejemplo peer + guildId + roles), todos los campos configurados deben coincidir.

{
  bindings: [
    {
      agentId: "opus",
      match: {
        channel: "discord",
        guildId: "123456789012345678",
        roles: ["111111111111111111"],
      },
    },
    {
      agentId: "sonnet",
      match: {
        channel: "discord",
        guildId: "123456789012345678",
      },
    },
  ],
}

Configuración del Portal de Desarrollador

Comandos nativos y autenticación de comandos

  • commands.native por defecto es "auto" y está habilitado para Discord.
  • Anulación por canal: channels.discord.commands.native.
  • commands.native=false borra explícitamente los comandos nativos de Discord registrados previamente.
  • La autenticación de comandos nativos usa las mismas listas de permisos/políticas de Discord que el manejo normal de mensajes.
  • Los comandos aún pueden ser visibles en la interfaz de usuario de Discord para usuarios no autorizados; la ejecución aún aplica la autenticación de OpenClaw y devuelve "no autorizado".

Consulta Comandos de barra para el catálogo y comportamiento de comandos. Configuración predeterminada de comandos de barra:

  • ephemeral: true

Detalles de características

Herramientas y puertas de acción