Discord
Estado de soporte del bot de Discord, capacidades y configuración.
Estado: Disponible para DMs y canales de texto de servidor (guild), basado en el gateway oficial del bot de Discord.
Configuración Rápida
1. Crea un bot de Discord y copia el token del bot.
2. Habilita <strong>Message Content Intent</strong> en el Portal de Desarrolladores de Discord (si quieres usar lista permitida o resolución de apodos, también habilita <strong>Server Members Intent</strong>).
3. Configura el token para OpenClaw:
- Variable de entorno: <code>DISCORD_BOT_TOKEN=...</code>
- O configuración: <code>channels.discord.token: "..."</code>.
- Cuando ambos están configurados, la configuración tiene precedencia (env es solo fallback para la cuenta predeterminada).
4. Invita el bot a tu servidor y otorga permisos de lectura/escritura de mensajes (si solo quieres usar DMs, también puedes crear un servidor privado para pruebas).
5. Inicia el Gateway.
6. Los DMs por defecto usan emparejamiento: el primer contacto envía un código de emparejamiento, los mensajes solo se procesan después de la aprobación.
Configuración mínima:
{
channels: {
discord: {
enabled: true,
token: "TU_BOT_TOKEN",
},
},
}Objetivos
- Chatear con OpenClaw via DMs de Discord o canales de servidor.
- Los DMs por defecto se pliegan en la sesión principal del agente (predeterminado '<code>'agent:main:main'</code>'); los canales de servidor están aislados en '<code>'agent:'<agentId>':discord:channel:'<channelId>''</code>' (el nombre para mostrar usa '<code>'discord:'<guildSlug>'#'<channelSlug>''</code>').
- Los DMs grupales se ignoran por defecto; habilítalos con <code>channels.discord.dm.groupEnabled</code> y restringe aún más con <code>channels.discord.dm.groupChannels</code>.
- Mantener enrutamiento determinista: las respuestas siempre vuelven al canal de origen.
Cómo Funciona
1. Crea Aplicación Discord → Bot, habilita intents requeridos (DMs/mensajes de servidor/contenido de mensajes), obtén token del bot.
2. Invita el bot a tu servidor y otorga permisos de lectura/envío de mensajes en los canales objetivo.
3. Configura <code>channels.discord.token</code> en OpenClaw (o usa <code>DISCORD_BOT_TOKEN</code> como fallback).
4. Inicia Gateway: cuando el token está disponible y <code>channels.discord.enabled</code> no es <code>false</code>, el canal Discord inicia automáticamente.
- Usar solo env también funciona: configura <code>DISCORD_BOT_TOKEN</code> (no necesitas escribir bloque de configuración).
5. El objetivo de entrega DM usa '<code>'user:'<id>''</code>' (o mención '<code>''<@id>''</code>'). Los IDs numéricos simples son ambiguos y serán rechazados.
6. La entrega a canal de servidor usa '<code>'channel:'<channelId>''</code>'. Las menciones son requeridas por defecto, configurable por guild o canal.
7. Los DMs por defecto usan guardián de seguridad: '<code>'channels.discord.dm.policy'</code>' (predeterminado '<code>'"pairing"'</code>'). Los remitentes desconocidos obtienen un código de emparejamiento (expira en 1 hora), aprueba con: '<code>'openclaw pairing approve discord '<code>''</code>'.
- Para permitir que cualquiera envíe DM: <code>channels.discord.dm.policy="open"</code> y <code>channels.discord.dm.allowFrom=["*"]</code>.
- Para lista permitida estricta: <code>channels.discord.dm.policy="allowlist"</code> y lista remitentes permitidos en <code>channels.discord.dm.allowFrom</code>.
- Para ignorar completamente los DMs: <code>channels.discord.dm.enabled=false</code> o <code>channels.discord.dm.policy="disabled"</code>.
8. Los DMs grupales se ignoran por defecto; habilítalos con <code>channels.discord.dm.groupEnabled</code>.
9. Opcional: usa <code>channels.discord.guilds</code> (priorizados por guild id) para configurar reglas de servidor y reglas de canal.
10. Opcional: comandos nativos. <code>commands.native</code> por defecto es <code>"auto"</code> (Discord/Telegram por defecto activado, Slack por defecto desactivado). Sobrescribe con <code>channels.discord.commands.native: true|false|"auto"</code>; <code>false</code> limpia comandos registrados. Los comandos de texto son controlados por <code>commands.text</code> y deben enviarse como mensajes <code>/...</code> separados. <code>commands.useAccessGroups: false</code> omite verificaciones de grupo de acceso de comandos.
- Lista de comandos y configuración: '<a href="/tools/slash-commands">'/tools/slash-commands'</a>'
11. Opcional: contexto de canal de servidor. <code>channels.discord.historyLimit</code> (predeterminado 20, fallback a <code>messages.groupChat.historyLimit</code>) inyecta los últimos N mensajes como contexto cuando el bot es mencionado; configura en <code>0</code> para deshabilitar.
12. Reacciones: los agentes pueden activar via herramienta '<code>'discord'</code>' (controlado por interruptores '<code>'channels.discord.actions.*'</code>'). Ver '<a href="/tools/reactions">'/tools/reactions'</a>' para semántica de cancelación de reacciones.
13. Los comandos nativos usan clave de sesión aislada: '<code>'agent:'<agentId>':discord:slash:'<userId>''</code>' (no escribe en la sesión '<code>'main'</code>' compartida).
Notas adicionales:
- La resolución de apodo/nombre de usuario → id depende de la búsqueda de miembros del guild, requiere <strong>Server Members Intent</strong>; si la búsqueda de miembros falla, usa id o mención <code><@id></code> directamente.
- slug: todo minúsculas, espacios reemplazados con <code>-</code>; el slug del nombre del canal no incluye <code>#</code>.
- La línea <code>[from:]</code> del mensaje grupal incluye <code>author.tag</code> + <code>id</code> para fácil ping.
Escrituras de Config
Por defecto, Discord tiene permitido escribir actualizaciones activadas por <code>/config set|unset</code> de vuelta al archivo de configuración (requiere <code>commands.config: true</code>).
Para deshabilitar:
{
channels: { discord: { configWrites: false } },
}Cómo Crear Tu Propio Bot (Portal de Desarrollador)
Este es un flujo de trabajo de configuración típico para usar OpenClaw en canales de servidor (como <code>#help</code>).
#
1) Crear App + Usuario Bot
1. Portal de Desarrolladores Discord → <strong>Applications</strong> → <strong>New Application</strong>
2. En tu aplicación:
- <strong>Bot</strong> → <strong>Add Bot</strong>
- Copia <strong>Bot Token</strong> (para <code>DISCORD_BOT_TOKEN</code>)
#
2) Habilitar Intents Requeridos
Los "privileged intents" de Discord deben habilitarse explícitamente:
Habilita en <strong>Bot</strong> → <strong>Privileged Gateway Intents</strong>:
- <strong>Message Content Intent</strong> (requerido; de lo contrario verás "Used disallowed intents", o el bot conecta pero no procesa mensajes)
- <strong>Server Members Intent</strong> (recomendado; para búsqueda de miembro/usuario y coincidencia de lista permitida)
<strong>Presence Intent</strong> generalmente no es necesario.
#
3) Generar Enlace de Invitación (Generador de URL OAuth2)
En la aplicación: <strong>OAuth2</strong> → <strong>URL Generator</strong>
<strong>Scopes</strong>
- ✅ <code>bot</code>
- ✅ <code>applications.commands</code> (requerido para comandos nativos)
<strong>Permisos del Bot (mínimo recomendado)</strong>
- ✅ View Channels
- ✅ Send Messages
- ✅ Read Message History
- ✅ Embed Links
- ✅ Attach Files
- ✅ Add Reactions (opcional pero recomendado)
- ✅ Use External Emojis / Stickers (opcional)
A menos que estés depurando y confíes completamente en el bot, no selecciones <strong>Administrator</strong>.
Copia la URL generada, ábrela y selecciona un servidor para completar la instalación.
#
4) Obtener IDs (guild/usuario/canal)
Discord usa IDs numéricos extensamente; la configuración de OpenClaw también recomienda usar IDs:
1. Discord (desktop/Web) → <strong>User Settings</strong> → <strong>Advanced</strong> → Habilita <strong>Developer Mode</strong>
2. Clic derecho para copiar:
- Nombre del servidor → <strong>Copy Server ID</strong>
- Canal → <strong>Copy Channel ID</strong>
- Usuario → <strong>Copy User ID</strong>
#
5) Configurar OpenClaw
##
Token
Recomendado usar variable de entorno en el servidor:
- <code>DISCORD_BOT_TOKEN=...</code>
O archivo de configuración:
{
channels: {
discord: {
enabled: true,
token: "TU_BOT_TOKEN",
},
},
}Múltiples cuentas: usa '<code>'channels.discord.accounts'</code>' para configurar el token de cada cuenta (opcional '<code>'name'</code>'). Ver estructura compartida en '<a href="/gateway/configuration#telegramaccounts--discordaccounts--slackaccounts--signalaccounts--imessageaccounts">'/gateway/configuration'</a>'.
##
Lista Permitida + Enrutamiento
Ejemplo: "Solo en un servidor, solo permitirme, solo permitir #help":
{
channels: {
discord: {
enabled: true,
dm: { enabled: false },
guilds: {
YOUR_GUILD_ID: {
users: ["YOUR_USER_ID"],
requireMention: true,
channels: {
help: { allow: true, requireMention: true },
},
},
},
retry: {
attempts: 3,
minDelayMs: 500,
maxDelayMs: 30000,
jitter: 0.1,
},
},
},
}Explicación:
- <code>requireMention: true</code> significa responder solo cuando se menciona (recomendado para canales compartidos para evitar ruido).
- <code>agents.list[].groupChat.mentionPatterns</code> (o <code>messages.groupChat.mentionPatterns</code>) también se tratan como menciones.
- Si <code>channels</code> existe, los canales no listados se deniegan por defecto.
- Los hilos heredan la configuración del canal padre (lista permitida, requireMention, skills, prompts, etc.) a menos que añadas explícitamente el id del canal del hilo a la configuración.
- Los mensajes enviados por el bot se ignoran por defecto; configura <code>channels.discord.allowBots=true</code> para permitir (pero aún filtra mensajes propios).
- Si permites respuestas a otros bots (<code>allowBots=true</code>), usa <code>requireMention</code>, lista permitida de usuarios y prompts claros para prevenir bucles bot-a-bot.
#
6) Verificar
1. Inicia gateway.
2. Envía en canal de servidor: <code>@TuBot hola</code>.
3. Si no hay respuesta, ver solución de problemas abajo.
#
Solución de Problemas
- Primero ejecuta <code>openclaw doctor</code> y <code>openclaw channels status --probe</code>.
- <strong>"Used disallowed intents"</strong>: Habilita <strong>Message Content Intent</strong> (y usualmente <strong>Server Members Intent</strong>) en Portal de Desarrollador, luego reinicia gateway.
- <strong>Conecta pero no responde en canales de servidor</strong>:
- Falta Message Content Intent, o
- El bot carece de permisos de canal (View/Send/Read History), o
- La configuración requiere mención pero no usaste @, o
- La lista permitida denegó el canal/usuario.
- <strong><code>requireMention: false</code> aún no responde</strong>:
- <code>channels.discord.groupPolicy</code> por defecto es <strong>allowlist</strong>; configúralo en <code>"open"</code>, o configura guild/canal permitido en <code>channels.discord.guilds</code>.
- Si solo configuraste <code>DISCORD_BOT_TOKEN</code> sin crear bloque de configuración <code>channels.discord</code>, el <code>groupPolicy</code> predeterminado del runtime es <code>open</code>. Una vez que configuras explícitamente <code>channels.discord.groupPolicy</code>/<code>channels.defaults.groupPolicy</code> o lista permitida de guild/canal, se ajusta.
- <code>requireMention</code> debe colocarse bajo <code>channels.discord.guilds</code> (o canal específico); <code>channels.discord.requireMention</code> de nivel superior se ignora.