#The /vc command doesn't appear on the Discord server, but it does on MD
1 messages · Page 1 of 1 (latest)
This usually means the Discord app/commands are only available in DM/user-install context, not installed into that guild with command permissions.
Checklist Iâd run:
- Re-invite the bot to the server from Discord Developer Portal â OAuth2 URL Generator with both scopes:
botapplications.commands
- Make sure the target voice channel permissions allow the bot:
- View Channel
- Connect
- Speak
- Send Messages
- Read Message History
- In OpenClaw config, make sure native Discord commands + voice are enabled, then restart the gateway:
{
channels: {
discord: {
commands: { native: "auto" },
voice: { enabled: true }
}
}
}
- Confirm the guild is allowed, since
/vcfollows the same Discord allowlist/group policy rules as other commands:
channels: {
discord: {
groupPolicy: "allowlist",
guilds: {
YOUR_SERVER_ID: {
users: ["YOUR_USER_ID"]
}
}
}
}
Docs: https://docs.openclaw.ai/channels/discord#voice and https://docs.openclaw.ai/tools/slash-commands
If it still doesnât appear after restart, paste the exact openclaw --version output and any Discord startup lines from openclaw logs --follow that mention command registration/reconcile. đŠ
Now, every time I try to join the voice chat, I get this message: Failed to join voice channel: The operation was aborted | This operation was aborted
Ese error ya es otra fase: /vc sĂ estĂĄ intentando entrar, pero la conexiĂłn de voz no llega a Ready y OpenClaw la aborta/limpia.
Ojo: en logs de recepciĂłn, The operation was aborted puede ser normal; pero si aparece como Failed to join voice channel: ..., no llegĂł a conectarse.
Prueba esto:
- Verifica permisos reales del canal de voz:
openclaw channels capabilities --channel discord --target channel:<voice-channel-id>
Debe pasar al menos: ViewChannel, Connect, Speak, SendMessages, ReadMessageHistory.
-
Confirma que el bot tiene permisos en ese canal de voz especĂfico, no solo en el servidor. Los overrides del canal/categorĂa pueden bloquearlo aunque el rol parezca correcto.
-
Sube temporalmente el timeout de conexiĂłn y reinicia gateway:
{
channels: {
discord: {
voice: {
enabled: true,
connectTimeoutMs: 60000
}
}
}
}
- Si sigue igual, pega unas 20â40 lĂneas de
openclaw logs --followalrededor de:
discord voice: join failed before ready
TambiĂ©n: pĂĄsanos el output exacto de openclaw --version. â5.7â puede ser importante si estĂĄs en una build vieja; Discord voice ha cambiado bastante y conviene confirmar la versiĂłn exacta. Docs: https://docs.openclaw.ai/channels/discord#voice
That exact join error means the bot starts the Discord voice join, but @discordjs/voice never reaches the Ready state before the operation is aborted/cleaned up.
Most likely checks, in order:
- Run the permission probe against the voice channel ID:
openclaw channels capabilities --channel discord --target channel:<voice-channel-id>
If any of ViewChannel, Connect, Speak, SendMessages, or ReadMessageHistory are missing, fix the role/category/channel override first.
- Make the voice intent explicit and restart the gateway:
{
channels: {
discord: {
voice: { enabled: true },
intents: { voiceStates: true }
}
}
}
- If permissions/intents are OK, increase the connect wait once to rule out a slow Discord voice gateway:
{
channels: {
discord: {
voice: {
enabled: true,
connectTimeoutMs: 60000
},
intents: { voiceStates: true }
}
}
}
- Then try
/vc joinagain and grab logs around the failure:
openclaw logs --follow
Look for discord voice: join failed before ready and paste ~20 lines around it.
Also please paste the exact:
openclaw --version
If youâre literally on an older 5.7 build, updating may be the real fix here; Discord voice has had a lot of churn. Docs: https://docs.openclaw.ai/channels/discord#voice
VersiĂłn:
OpenClaw 2026.5.7 (eeef486)
Permisos reales del canal de voz 1491755095950364715: correctos. Tiene, entre otros:
ViewChannel
Connect
Speak
SendMessages
ReadMessageHistory
UseVAD
Administrator
channels.discord.voice ahora estĂĄ asĂ:
{
"enabled": true,
"connectTimeoutMs": 60000
}
El comando que te pidieron:
openclaw channels capabilities --channel discord --target channel:1491755095950364715
lo lancĂ©, pero no devolviĂł capacidades: se quedĂł colgado y acabĂł con SIGKILL. Eso tambiĂ©n es dato Ăștil para soporte; huele a problema del CLI/runtime consultando capacidades, no a un override simple del canal.
Log alrededor del fallo:
discord voice: join failed before ready:
guild 1491755094864302223
channel 1491755095950364715
timeout=30000ms
error=The operation was aborted | This operation was aborted
Ojo: ese log aĂșn mostraba timeout=30000ms, asĂ que necesitamos un nuevo intento de /vc join ahora que la config estĂĄ en 60000, para confirmar si el runtime la estĂĄ leyendo o si esa opciĂłn no estĂĄ aplicando en esta build.
También importante: openclaw gateway restart --force sigue fallando en Windows con:
TypeError [ERR_UNKNOWN_SIGNAL]: Unknown signal: SIGUSR1
Mi diagnóstico ahora mismo: permisos no parecen ser el problema. Tenemos una build 2026.5.7, voice handshake abortando antes de READY, y señales claras de runtime/CLI inestable en Windows. Conviene pasarles exactamente esto.
SĂ, con esos datos ya no parece un override/permisos del canal.
Dos cosas importantes:
-
connectTimeoutMssĂ existe y el lĂmite actual permite hasta120000, asĂ que si el log sigue diciendotimeout=30000ms, el gateway que estĂĄ ejecutando Discord no estĂĄ leyendo esa config nueva. Antes de seguir debuggeando voz, hay que confirmar un reinicio real del gateway. -
En Windows, ese
openclaw gateway restart --forcefallando conERR_UNKNOWN_SIGNAL: Unknown signal: SIGUSR1suena a bug del path de restart en Windows. Workaround pråctico: no uses ese restart para esta prueba. Para confirmar la config, para el proceso/servicio del gateway de forma normal desde donde lo estés corriendo y arråncalo de nuevo; luego intenta/vc joiny mira si el log cambia atimeout=60000ms.
Si despuĂ©s de un reinicio real sigue abortando antes de Ready, el siguiente paquete Ăștil para issue serĂa:
openclaw --version
openclaw status --all
openclaw logs --follow
Y pega especĂficamente:
- el fallo
gateway restart --forceen Windows conERR_UNKNOWN_SIGNAL - que
channels capabilitiescontra el voice channel queda colgado/SIGKILL - el log de
discord voice: join failed before ready - si tras reinicio real aparece
timeout=60000mso sigue30000ms
Creo que esto ya merece GitHub issue si se reproduce: https://github.com/openclaw/openclaw/issues
La parte de voz: docs relevantes aquĂ: https://docs.openclaw.ai/channels/discord#voice
Failed to join voice channel: AggregateError
Ahora sale esto, se conecta y se va
Good, thatâs progress: if it briefly connects and then leaves, itâs probably reaching Ready now and then immediately hitting the disconnect-recovery path.
AggregateError in this area usually means OpenClaw saw the voice connection disconnect, waited for it to enter either signalling or connecting, and both recovery waits failed. The key log line now should be different from before â likely:
discord voice: disconnect recovery failed: ... error=AggregateError ...
Try adding reconnectGraceMs too, then do a full gateway restart (not the broken Windows SIGUSR1 restart path):
{
channels: {
discord: {
voice: {
enabled: true,
connectTimeoutMs: 60000,
reconnectGraceMs: 60000
}
}
}
}
Then paste the new logs around both:
join: connected
and
disconnect recovery failed
If possible, turn on debug/file logging or verbose for this run, because the non-verbose AggregateError hides the inner cause. Also watch for any DAVE, decrypt, adapter, websocket, or udp lines â those would tell us whether itâs Discord voice encryption/deps vs network/runtime.
Given Windows + SIGUSR1 bug + channels capabilities SIGKILL + voice disconnecting after ready, this is looking issue-worthy rather than normal config trouble. đŠ
Para soporte de OpenClaw, pĂĄsales esto:
openclaw --version
OpenClaw 2026.5.7 (eeef486)
channels.discord.voice:
{
"enabled": true,
"connectTimeoutMs": 60000,
"reconnectGraceMs": 60000
}
Latest relevant logs:
discord voice: join failed before ready: guild 1491755094864302223 channel 1491755095950364715 timeout=60000ms error=AggregateError
discord gateway error: Error: Gateway heartbeat ACK timeout
discord gateway: Gateway websocket closed: 1006
fetch timeout reached; eventLoopDelayHint="timer delayed ..., likely event-loop starvation"
Mi diagnĂłstico: issue-worthy. Especialmente por Windows + SIGUSR1 roto + channels capabilities colgado + starvation del event loop.
SĂ â con esos datos ya lo tratarĂa como bug, no como configuraciĂłn.
Yo abrirĂa issue en GitHub con algo asĂ:
Title: Discord voice /vc join fails on Windows with AggregateError + gateway heartbeat timeout / event loop starvation
Body:
OpenClaw 2026.5.7 (eeef486)
OS: Windows
channels.discord.voice:
{
"enabled": true,
"connectTimeoutMs": 60000,
"reconnectGraceMs": 60000
}
Voice channel permissions verified OK:
- ViewChannel
- Connect
- Speak
- SendMessages
- ReadMessageHistory
- UseVAD
- Administrator
Relevant logs:
discord voice: join failed before ready: guild 1491755094864302223 channel 1491755095950364715 timeout=60000ms error=AggregateError
discord gateway error: Error: Gateway heartbeat ACK timeout
discord gateway: Gateway websocket closed: 1006
fetch timeout reached; eventLoopDelayHint="timer delayed ..., likely event-loop starvation"
Other symptoms:
- openclaw channels capabilities --channel discord --target channel:1491755095950364715 hangs and eventually SIGKILLs
- openclaw gateway restart --force fails on Windows with TypeError [ERR_UNKNOWN_SIGNAL]: Unknown signal: SIGUSR1
- Bot may briefly connect to voice and then leave, or fail before ready
Issue link: https://github.com/openclaw/openclaw/issues
Iâd include the full openclaw status --all output too if you can, since the heartbeat timeout + event-loop starvation is probably the useful clue for maintainers.
what can I say in the "expected behavior" ?
For Expected behavior, you can write:
When running /vc join for a Discord voice channel where the bot has the required permissions, OpenClaw should join the voice channel and remain connected/ready for voice interaction.
The gateway should not block the event loop, lose the Discord gateway heartbeat, or close the Discord websocket while attempting to join voice. Diagnostic commands such as `openclaw channels capabilities --channel discord --target channel:<voice-channel-id>` should complete or fail with a clear error instead of hanging/SIGKILLing.
On Windows, `openclaw gateway restart --force` should restart or report an actionable Windows-safe error, not fail with `ERR_UNKNOWN_SIGNAL: Unknown signal: SIGUSR1`.
Thatâs clear and gives maintainers a good target behavior to compare against.
and the actual
For Actual behavior, write:
Running /vc join does not result in a stable Discord voice connection.
Observed behavior varies between attempts:
- The bot sometimes briefly joins the voice channel and then immediately leaves.
- Other attempts fail before the voice connection reaches Ready.
- The latest failure shows:
discord voice: join failed before ready: guild 1491755094864302223 channel 1491755095950364715 timeout=60000ms error=AggregateError
At the same time, the gateway logs show Discord/gateway instability:
- discord gateway error: Error: Gateway heartbeat ACK timeout
- discord gateway: Gateway websocket closed: 1006
- fetch timeout reached; eventLoopDelayHint="timer delayed ..., likely event-loop starvation"
Related diagnostics also behave unexpectedly:
- `openclaw channels capabilities --channel discord --target channel:1491755095950364715` hangs and eventually gets SIGKILLed.
- On Windows, `openclaw gateway restart --force` fails with:
TypeError [ERR_UNKNOWN_SIGNAL]: Unknown signal: SIGUSR1
The voice channel permissions appear correct, so this does not look like a simple Discord permission/channel override issue.
That pairs nicely with the expected behavior and gives maintainers the contrast they need.
Provider / routing chain
*
Effective request path through gateways ?
For Provider / routing chain, you can put something like this:
Discord official bot gateway â OpenClaw Discord channel plugin â Discord voice /vc handler â @discordjs/voice joinVoiceChannel
No extra proxy or custom gateway is intentionally configured. The bot token is configured through channels.discord, and /vc is being invoked from the Discord server.
The failing path appears to be the Discord voice join/ready handshake, not an LLM/model provider request.
If theyâre asking specifically about model routing, add:
No model request is reached during the failing join attempt; the failure happens before the voice connection reaches Ready.
That should satisfy the field without overclaiming.
Steps to reproduce
*
For Steps to reproduce, use this:
1. Run OpenClaw on Windows:
openclaw --version
OpenClaw 2026.5.7 (eeef486)
2. Configure Discord voice:
channels.discord.voice = {
"enabled": true,
"connectTimeoutMs": 60000,
"reconnectGraceMs": 60000
}
3. Ensure the Discord bot is invited to the server with the required scopes, including:
- bot
- applications.commands
4. Ensure the bot has the required permissions in the target voice channel:
- ViewChannel
- Connect
- Speak
- SendMessages
- ReadMessageHistory
- UseVAD
- Administrator was also present during testing
5. Restart the OpenClaw gateway.
6. In the Discord server, run:
/vc join channel:1491755095950364715
7. Observe that the bot either briefly joins and leaves, or fails before reaching Ready.
8. Check logs and observe:
discord voice: join failed before ready: guild 1491755094864302223 channel 1491755095950364715 timeout=60000ms error=AggregateError
discord gateway error: Error: Gateway heartbeat ACK timeout
discord gateway: Gateway websocket closed: 1006
fetch timeout reached; eventLoopDelayHint="timer delayed ..., likely event-loop starvation"
9. Optional related repros:
- Run `openclaw channels capabilities --channel discord --target channel:1491755095950364715`; it hangs and eventually gets SIGKILLed.
- Run `openclaw gateway restart --force` on Windows; it fails with `TypeError [ERR_UNKNOWN_SIGNAL]: Unknown signal: SIGUSR1`.
Thatâs detailed enough for maintainers to follow without needing the whole thread.
me contaron esto: Summary
Keep open: current main does not prove the reported Discord voice/Windows failure is fixed, and source review confirms at least the Windows unmanaged restart path can still try to deliver SIGUSR1 through process.kill. The Discord voice join and capabilities symptoms also overlap with still-open related reports rather than a shipped fix.
Reproducibility: yes. for the Windows restart sub-symptom by source inspection: current main can still call process.kill(pid, "SIGUSR1") for unmanaged gateway restart. No high-confidence live reproduction was established for the Discord voice join or capabilities hang portions.
Next step
This is a real-looking multi-surface bug cluster, but it needs maintainer split/ownership before automation because only the Windows SIGUSR1 sub-path is source-reproducible from current main.
SĂ â yo lo interpretarĂa como: no lo cierres todavĂa.
Lo que sĂ se puede sostener con confianza es la parte de Windows/restart: revisĂ© main y el camino de gateway unmanaged todavĂa acaba en signalVerifiedGatewayPidSync(..., "SIGUSR1"), que llama process.kill(pid, signal). Eso hace que ese sub-sĂntoma siga siendo real/source-reproducible.
Pero la parte de /vc, Discord voice join y capabilities parece mĂĄs un cluster de sĂntomas relacionados, no una Ășnica reproducciĂłn cerrada. AhĂ conviene separarlo asĂ:
- Bug A reproducible: Windows unmanaged gateway restart intenta usar
SIGUSR1. - Bug B pendiente de repro:
/vcaparece en DM pero no en server. - Bug C pendiente de repro: voice join/capabilities hang.
Para este thread, pedirĂa tambiĂ©n:
openclaw --version- sistema operativo exacto
- si el gateway estĂĄ managed o unmanaged
- logs alrededor de
openclaw gateway restarty del intento de/vc join
Y si esto necesita atenciĂłn de maintainer, mejor llevarlo a GitHub con esos tres puntos separados: https://github.com/openclaw/openclaw/issues
11:24:30 [discord] voice: join failed before ready: guild 1491755094864302223 channel 1491755095950364715 timeout=60000ms error=AggregateError
That line means the bot started the voice join, but @discordjs/voice never reached VoiceConnectionStatus.Ready within 60s. AggregateError by itself is unfortunately too shallow â it usually means multiple underlying connection attempts failed, but this log line doesnât expand the inner errors.
First: what does openclaw --version show?
Useful next checks:
- confirm the bot has View Channel, Connect, and Speak in that exact voice channel
- if itâs Windows/WSL/Docker/VPS, check firewall/NAT/UDP â Discord voice needs outbound voice connectivity, not just the normal bot websocket
- collect the log lines immediately before this one, especially the
discord voice: joining ...line - enable more logging if possible: start gateway verbose or set file logging to debug, then retry
/vc join
Docs for the Discord voice area are here: https://docs.openclaw.ai/channels/discord
This does look like a real voice-connect failure, but itâs separate from â/vc command visibilityâ unless the same config/capabilities issue is also preventing the guild command from registering.
I tried to update to OpenClaw 2026.5.10-beta.3 (6d7dcd9) and see if that repair something
Good data point â beta.3 is worth testing, but donât assume it changed the running gateway until you verify/restart.
Please check this sequence:
openclaw --version
openclaw gateway restart
openclaw gateway status --deep
openclaw channels capabilities --channel discord --target channel:1491755095950364715
For /vc specifically, the docs checklist is:
- bot invited with both
botandapplications.commandsscopes channels.discord.voice.enabled: true- native commands enabled (
commands.nativeorchannels.discord.commands.native) - bot has View Channel, Connect, Speak, Send Messages, and Read Message History in that voice channel
Docs: https://docs.openclaw.ai/channels/discord
If /vc appears in DM but not the server, that still smells like guild command registration / app command scope / guild permissions. If /vc join runs but then logs join failed before ready ... AggregateError, thatâs a separate Discord voice connection failure â often permissions or UDP/network/firewall rather than the slash command itself.
If beta.3 still shows the same failure, paste the channels capabilities output plus the discord voice: joining ... line before the AggregateError.
the /vc already appear in the discord server, I reinvite the bot. Btw how can I fix or optimized the web connection for whatsapp? 11:48:44 [whatsapp] Web connection closed (status 408). Retry 1/12 in 2.34s⊠(status=408 Request Time-out Connection was lost)
11:48:47 [whatsapp] Listening for personal WhatsApp inbound messages.
11:48:47 Ctrl+C to stop.
11:53:44 [whatsapp] Web connection closed (status 408). Retry 1/12 in 2.01s⊠(status=408 Request Time-out Connection was lost)
11:53:47 [whatsapp] Listening for personal WhatsApp inbound messages.
11:53:47 Ctrl+C to stop.
11:58:44 [whatsapp] Web connection closed (status 408). Retry 1/12 in 2.15s⊠(status=408 Request Time-out Connection was lost)
11:58:48 [whatsapp] Listening for personal WhatsApp inbound messages.
11:58:48 Ctrl+C to stop.
Nice, reinvite fixing /vc makes sense â that was likely the missing applications.commands/guild registration bit.
For WhatsApp: those 408 Request Time-out Connection was lost lines every ~5 minutes mean the WhatsApp Web/Baileys socket is being dropped and OpenClaw reconnects. Since it immediately says âListeningâŠâ again, itâs not fatal, but itâs noisy and can cause missed/slow sends if it happens during activity.
Docs recommend tuning the WhatsApp Web socket timings under web.whatsapp:
{
web: {
whatsapp: {
keepAliveIntervalMs: 15000,
connectTimeoutMs: 60000,
defaultQueryTimeoutMs: 60000,
},
},
}
Then restart:
openclaw gateway restart
openclaw channels status --probe
openclaw logs --follow
Also check these basics:
- run the gateway with Node, not Bun â Bun is specifically not recommended for WhatsApp/Telegram
- avoid VPN/proxy/firewall rules that interfere with WhatsApp Web
- if you are behind a proxy, make sure the gateway process inherits
HTTPS_PROXY/HTTP_PROXY, andNO_PROXYis not accidentally matching WhatsApp hosts - make sure only one gateway/listener is using that WhatsApp auth session
- if it keeps looping after timing changes, re-link once with
openclaw channels login --channel whatsapp
If you paste openclaw --version + whether this is WSL/Linux/Windows/native, I can suggest the safest exact next step.
hey @copper steeple how are you so fast responding? I want my agent to be that fast
Haha â secret is mostly boring engineering, not lobster magic đŠ
For a faster-feeling agent:
- Use a fast, tool-reliable cloud model for chat. Donât use local/Ollama for this unless you have serious hardware; tool calls tend to be slower/flakier.
- Keep the session/thread focused. Huge old context makes every reply slower.
- Turn off noisy modes when you donât need them: reasoning/verbose/trace can add latency and output overhead.
- Make sure the gateway is already running as a service, not cold-starting on every request.
- Keep channels healthy: Discord/WhatsApp reconnect loops can delay delivery even if the model is fast.
- Use a simple default agent config first; lots of custom hooks/plugins/tools can add startup/runtime delay.
For model picks specifically, I donât want to give stale advice â ask in #old-models for the current fastest setups people are actually using. Docs: https://docs.openclaw.ai/concepts/models
The practical âfast modeâ recipe is: current OpenClaw, gateway always-on, clean short session, fast cloud model, minimal extra plugins/tools. Claws, but optimized.
how can i know if the gateway is running as a service?
Run:
openclaw gateway status --deep
Thatâs the best single check. It reports the service manager state â launchd on macOS, systemd on Linux/WSL, or schtasks on Windows â plus whether RPC is reachable.
If it says something like service loaded/running/active, youâre running as a service. If it only finds a listening gateway process or says not installed/not loaded, youâre probably running it manually with openclaw gateway / openclaw gateway run in a terminal.
Useful follow-ups:
openclaw gateway status --json
openclaw gateway status --require-rpc
If it is not installed as a service, install/start it with:
openclaw gateway install
openclaw gateway restart
and what will be the diference with service and manual?
Main difference: service = always-on, manual = tied to your terminal/session.
Manual mode:
openclaw gateway
# or
openclaw gateway run
- runs only while that terminal/process is alive
- stops if you close the terminal, reboot, log out, or the shell dies
- good for debugging because logs are right in front of you
- not ideal for WhatsApp/Discord long-term because reconnects/delivery depend on that process staying alive
Service mode:
openclaw gateway install
openclaw gateway restart
- managed by the OS: systemd on Linux/WSL, launchd on macOS, scheduled task/service-style runner on Windows
- starts in the background
- can survive logouts and usually comes back after reboot
- better for WhatsApp/Discord because the gateway stays available 24/7
- logs go to OpenClaw/system logs instead of your terminal
For a personal assistant, service mode is usually the right setup. Manual mode is mostly for testing/debugging.
Check current state with:
openclaw gateway status --deep
Service: Scheduled Task (missing)
File logs: C:\Users\SERGIO~1.PRA\AppData\Local\Temp\openclaw\openclaw-2026-05-11.log
Command: C:\Program Files\nodejs\node.exe C:\Users\sergio.practicas\AppData\Roaming\npm\node_modules\openclaw\dist\index.js gateway --port 18789
Service file: ~.openclaw\gateway.cmd
Service env: OPENCLAW_GATEWAY_PORT=18789
Config (cli): ~.openclaw\openclaw.json
Config warnings:
- plugins.entries.openclaw-mem0: plugin openclaw-mem0: providerAuthEnvVars is deprecated compatibility metadata for provider env-var lookup; mirror mem0, openclaw-mem0-oss env vars to setup.providers[].envVars before the deprecation window closes
- plugins.entries.telegram: plugin disabled (bundled (disabled by default)) but config is present
Config (service): ~.openclaw\openclaw.json
Config warnings: - plugins.entries.openclaw-mem0: plugin openclaw-mem0: providerAuthEnvVars is deprecated compatibility metadata for provider env-var lookup; mirror mem0, openclaw-mem0-oss env vars to setup.providers[].envVars before the deprecation window closes
- plugins.entries.telegram: plugin disabled (bundled (disabled by default)) but config is present
Gateway: bind=loopback (127.0.0.1), port=18789 (service args)
Probe target: ws://127.0.0.1:18789
Dashboard: http://127.0.0.1:18789/
Probe note: Loopback-only gateway; only local clients can connect.
CLI version: 2026.5.10-beta.3 (~\AppData\Roaming\npm\node_modules\openclaw\openclaw.mjs)
Gateway version: 2026.5.10-beta.3
Runtime: unknown (Error: El sistema no puede encontrar el archivo especificado.)
Connectivity probe: ok
Capability: admin-capable
Listening: 127.0.0.1:18789
Troubles: run openclaw status
Troubleshooting: https://docs.openclaw.ai/troubleshooting
This output means: your gateway is running, but not as a Windows service/scheduled task right now.
Key lines:
Service: Scheduled Task (missing)
Connectivity probe: ok
Listening: 127.0.0.1:18789
So OpenClaw is alive on port 18789, but itâs probably running from a terminal/manual process. If that terminal closes, Windows reboots, or the process dies, WhatsApp/Discord will stop until you start it again.
To make it service-style on native Windows:
openclaw gateway install --force
openclaw gateway restart
openclaw gateway status --deep
If you currently have openclaw gateway running in a terminal, stop that terminal process with Ctrl+C after installing, then run the restart/status commands so the Scheduled Task owns the gateway.
The config warnings are not the main issue here:
openclaw-mem0warning = deprecation warning, not fataltelegram disabled but config present= cleanup/config warning, not fatal
Also: youâre on native Windows. That can work, but WSL2 is generally the smoother Windows path for OpenClaw/WhatsApp long-running setups. Docs: https://docs.openclaw.ai/platforms/windows
Config (cli): ~.openclaw\openclaw.json
Config warnings:
- plugins.entries.openclaw-mem0: plugin openclaw-mem0: providerAuthEnvVars is deprecated compatibility metadata for provider env-var lookup; mirror mem0, openclaw-mem0-oss env vars to setup.providers[].envVars before the deprecation window closes
- plugins.entries.telegram: plugin disabled (bundled (disabled by default)) but config is present
Config (service): ~.openclaw\openclaw.json
Config warnings: - plugins.entries.openclaw-mem0: plugin openclaw-mem0: providerAuthEnvVars is deprecated compatibility metadata for provider env-var lookup; mirror mem0, openclaw-mem0-oss env vars to setup.providers[].envVars before the deprecation window closes
- plugins.entries.telegram: plugin disabled (bundled (disabled by default)) but config is present
Gateway: bind=loopback (127.0.0.1), port=18789 (service args)
Probe target: ws://127.0.0.1:18789
Dashboard: http://127.0.0.1:18789/
Probe note: Loopback-only gateway; only local clients can connect.
Runtime: running (pid 8396, Startup-folder login item installed; listener detected on port 18789.)
Warm-up: launch agents can take a few seconds. Try again shortly.
Connectivity probe: failed
Probe target: ws://127.0.0.1:18789
timeout
Capability: unknown
Port 18789 is already in use.
- pid 8396: "C:\Program Files\nodejs\node.exe" C:\Users\sergio.practicas\AppData\Roaming\npm\node_modules\openclaw\dist\index.js gateway --port 18789 (127.0.0.1:18789)
Listening: 127.0.0.1:18789
Troubles: run openclaw status
Troubleshooting: https://docs.openclaw.ai/troubleshooting
This is better than before: itâs now installed as a Windows startup/login item, but the gateway process is not answering the WebSocket probe.
Important lines:
Runtime: running (pid 8396, Startup-folder login item installed; listener detected on port 18789.)
Connectivity probe: failed ... timeout
Port 18789 is already in use.
So: process exists + port is bound, but RPC is stuck/not ready. The Config warnings are probably unrelated.
Try this first, in PowerShell:
openclaw gateway restart
Start-Sleep -Seconds 10
openclaw gateway status --deep --require-rpc
If it still times out, grab the logs around startup:
openclaw logs --tail 200
openclaw status
If restart says it canât restart cleanly because the port is already owned by pid 8396, then stop the duplicate/stuck process from Task Manager or:
Stop-Process -Id 8396
openclaw gateway restart
openclaw gateway status --deep --require-rpc
Iâd only do the Stop-Process step if the normal restart doesnât recover it.
Also, this confirms youâre on native Windows fallback service mode: Scheduled Task was missing/blocked, so OpenClaw used the Startup-folder login item. That can work, but WSL2 is still the smoother Windows path if this keeps getting wedged. Docs: https://docs.openclaw.ai/platforms/windows
ok that works, I already have installed the gateway as a service, how can i check the logs
Yep â quickest is:
openclaw logs --follow
If you want the actual service/supervisor logs:
Linux/systemd:
journalctl --user -u openclaw-gateway.service -n 200 --no-pager
journalctl --user -u openclaw-gateway.service -f
If you installed with a profile, the unit is usually:
journalctl --user -u openclaw-gateway-<profile>.service -n 200 --no-pager
macOS/launchd logs are usually in:
~/.openclaw/logs/gateway.log
~/.openclaw/logs/gateway.err.log
Docs: https://docs.openclaw.ai/help/faq#where-are-logs
If the logs still donât explain it, paste the relevant error plus openclaw --version.
the 21 sessions that mi agent have can slow down or impact highly the performance? or only activate and get context of the actual session
Mostly: only the active/current session is loaded into the model context for that reply. Having 21 old sessions on disk usually wonât massively slow inference or make the model ârememberâ all of them.
What can impact performance:
- the current session/thread being very long â more context to assemble/send, possible compaction/pruning
- lots of large tool outputs in the current session
- active background work: heartbeats, cron jobs, subagents, browser/tool runs
- huge memory/workspace files that are auto-injected or searched
So 21 saved sessions is normally fine. If the active thread feels slow or weird, start fresh with:
/new
or compact first with:
Will 30.6k of context of 200k in gpt5.5 affect or it should be fast?
30.6k / 200k is not huge. It can be a little slower than a fresh 2k-context session, but it should not be dramatically slow just because of that.
If it feels very slow, Iâd look elsewhere first:
- big tool outputs in the current session
- browser/Discord/file tools taking time
- provider/network latency
- model load/queue time
- repeated compaction/pruning
- background cron/heartbeat/subagent work
Rule of thumb: 30k context is usually fine; 100k+ is where Iâd start expecting more noticeable latency/cost. If the thread is acting weird or dragging, /compact is a good first step; /new is the clean reset.
For model-specific performance reports, #models is better because people there have fresher real-world numbers.
i want to delete some of the sessions but keeping the ones I use the most like discord md, discord server and the ones in whatsapp, How I delete the other ones?
You can do it safely, but Iâd do a backup/list first so you donât delete the WhatsApp/Discord sessions you care about.
- List sessions and find the keys:
openclaw sessions --verbose
# or machine-readable:
openclaw sessions --json
Look for keys that contain things like discord, whatsapp, the channel/thread ids, or labels you recognize.
- Delete one specific session by key:
openclaw gateway call sessions.delete --params '{"key":"PASTE_SESSION_KEY_HERE"}'
By default this removes the session row and archives its transcript as deleted. Donât delete the main session â OpenClaw will refuse that anyway.
- If you want automatic cleanup instead of hand-picking:
openclaw sessions cleanup --dry-run
Read the preview first. If it only removes things youâre okay losing:
openclaw sessions cleanup --enforce
Important: donât manually edit ~/.openclaw/agents/<agentId>/sessions/sessions.json unless youâve stopped the gateway and made a backup. Prefer the gateway call sessions.delete command while the service is running.
warn agent/embedded {"subsystem":"agent/embedded"} {"event":"embedded_run_agent_end","tags":["error_handling","lifecycle","agent_end","assistant_error"],"runId":"d7e5b7bc-2227-4fd0-828f-04ff39279b2f","isError":true,"error":"â ïž Google Generative AI API error (429): You exceeded your current quota, please check your plan and billing details. For more information on this error, head to: https://ai.google.dev/gemini-api/docs/rate-limits. To monitor your current usage, head to: https:⊠[code=RESOURCE_EXHAUSTED]","failoverReason":"rate_limit","model":"gemini-3.1-pro-preview","provider":"google","rawErrorPreview":"Google Generative AI API error (429): You exceeded your current quota, please check your plan and billing details. For more information on this error, head to: https://ai.google.dev/gemini-api/docs/rate-limits. To monitor your current usage, head to: https:⊠[code=RESOURCE_EXHAUSTED]","rawErrorHash":"sha256:f186419fe976","providerRuntimeFailureKind":"rate_limit"} embedded run agent end
what is this?
That log means the agent tried to call Googleâs Gemini API and Google rejected it with 429 RESOURCE_EXHAUSTED.
In plain English: your Google/Gemini quota or rate limit was hit for the configured model/provider. Itâs not caused by having 21 sessions, and itâs not a Discord /vc issue directly â itâs the model request failing before the agent can finish.
What to check:
openclaw --version
openclaw models status
openclaw logs --follow
Then either:
- wait for the Google quota/rate limit window to reset
- check Google AI Studio / billing / quota for that API key
- switch your agent/default model to another configured provider/model
- configure failover so rate-limit failures can fall back cleanly
The key part is this:
Google Generative AI API error (429)
You exceeded your current quota
providerRuntimeFailureKind: rate_limit
For model/provider choices, #models is the best place for current recommendations. Docs: https://docs.openclaw.ai/concepts/models
This explains it: your default is Codex, but your fallback chain starts with Google:
Default: openai-codex/gpt-5.5
Fallbacks: google/gemini-3.1-pro-preview, google/gemini-2.5-flash, ollama/gemma4:latest
So when OpenClaw decides it needs failover, it tries Gemini. The log you pasted is Gemini saying quota exhausted. Since you have two Google API keys, OpenClaw may rotate within Google first, but if both are quota-limited youâll still see 429s.
Two things Iâd fix/check:
- Your fallback list includes:
google/gemini-2.5-flash
but your configured models list does not show that exact model. It shows:
google/gemini-3.1-flash-lite-preview
So your fallback list may be stale/mismatched.
- If you donât want Google involved, remove Google from fallbacks:
openclaw models fallbacks list
openclaw models fallbacks remove google/gemini-3.1-pro-preview
openclaw models fallbacks remove google/gemini-2.5-flash
Or clear and rebuild the fallback list:
openclaw models fallbacks clear
openclaw models fallbacks add ollama/gemma4:latest
If you do want Google fallback, youâll need to wait for quota reset / fix billing/quota in Google AI Studio.
que fallbacks consideras que son los mejores teniendo gpt5 de primeras+ google
Con GPT-5.5 como primario, yo lo dejarĂa simple:
primary: openai-codex/gpt-5.5
fallback 1: google/gemini-3.1-pro-preview
fallback 2: google/gemini-3.1-flash-lite-preview
fallback 3: ollama/gemma4:latest
Pero con una condiciĂłn importante: si Google te estĂĄ dando 429 RESOURCE_EXHAUSTED, entonces no pongas Google como fallback hasta arreglar cuota/billing, porque solo vas a convertir fallos de GPT en fallos de Gemini.
En tu caso ahora mismo quitarĂa el fallback viejo:
openclaw models fallbacks remove google/gemini-2.5-flash
Y dejarĂa uno de estos dos perfiles:
OpciĂłn A â calidad primero:
openclaw models fallbacks clear
openclaw models fallbacks add google/gemini-3.1-pro-preview
openclaw models fallbacks add google/gemini-3.1-flash-lite-preview
openclaw models fallbacks add ollama/gemma4:latest
OpciĂłn B â evitar errores de cuota Google por ahora:
openclaw models fallbacks clear
openclaw models fallbacks add ollama/gemma4:latest
Mi recomendación: Opción A si Google tiene cuota estable; Opción B mientras estés viendo 429s.
TambiĂ©n ojo: los fallbacks son para errores/rate limits, no para âesta tarea es difĂcilâ. Para cambiar modelo manualmente en una sesiĂłn concreta, usa /model.
i have to do any restarts? (and so as you see Im changing between english and spanish, so if I say anything bad in english can you correct me? so I can get better)
No restart should be needed for openclaw models fallbacks ... changes. They update the model config and the gateway should pick them up automatically.
Iâd verify with:
openclaw models status
If it still shows the old fallback list after a minute, then do:
openclaw gateway restart
Tiny English correction: instead of âI have to do any restarts?â, the natural version is:
Do I have to restart anything?
And yes â happy to correct your English when itâs useful đ Your meaning is clear, so Iâll keep corrections light and practical.
Config : ~.openclaw\openclaw.json
Agent dir : ~.openclaw\agents\main\agent
Default : openai-codex/gpt-5.5
Fallbacks (3) : google/gemini-3.1-pro-preview, google/gemini-3.1-flash-lite-preview, google/gemini-2.5-pro
Image model : -
Image fallbacks (0): -
Aliases (3) : gemini -> google/gemini-3.1-pro-preview, gemini-flash-lite -> google/gemini-3.1-flash-lite-preview, local-fallback -> ollama/gemma4:latest
Configured models (5): google/gemini-3.1-pro-preview, google/gemini-3.1-flash-lite-preview, ollama/gemma4:latest, openai-codex/gpt-5.5, google/gemini-2.5-pro
Auth overview
Auth store : ~.openclaw\agents\main\agent\auth-profiles.json
Shell env : off
Providers w/ OAuth/tokens (2): claude-cli (1), openai-codex (1)
- claude-cli effective=profiles:~.openclaw\agents\main\agent\auth-profiles.json | profiles=1 (oauth=1, token=0, api_key=0) | anthropic:claude-cli=OAuth
- google effective=profiles:~.openclaw\agents\main\agent\auth-profiles.json | profiles=2 (oauth=0, token=0, api_key=2) | google:default=AIzaSyBQ...ABFwcRjU, google:secondary=AIzaSyCC...JDC2r3JE
- ollama effective=profiles:~.openclaw\agents\main\agent\auth-profiles.json | profiles=1 (oauth=0, token=0, api_key=1) | ollama:default=marker(ollama-local) | env=ol...al | source=env: OLLAMA_API_KEY | models.json=OL...EY | source=models.json: ~.openclaw\agents\main\agent\models.json
- openai-codex effective=profiles:~.openclaw\agents\main\agent\auth-profiles.json | profiles=1 (oauth=1, token=0, api_key=0) |
That looks valid now: your fallbacks are all present in Configured models, so the stale gemini-2.5-flash mismatch is gone â
Current order:
1. openai-codex/gpt-5.5 primary
2. google/gemini-3.1-pro-preview
3. google/gemini-3.1-flash-lite-preview
4. google/gemini-2.5-pro
One small opinion: Iâd probably put gemini-2.5-pro before 3.1-flash-lite-preview if you want quality, or keep flash-lite before it if you want cheaper/faster fallback.
Quality-first:
openclaw models fallbacks clear
openclaw models fallbacks add google/gemini-3.1-pro-preview
openclaw models fallbacks add google/gemini-2.5-pro
openclaw models fallbacks add google/gemini-3.1-flash-lite-preview
Speed/cost-first, your current setup is fine.
And tiny English note: instead of âas you see Im changingâ, write:
as you can see, Iâm switching between English and Spanish
ok, but the dashboard doesn't show the changes
If openclaw models status shows the new fallbacks, the config change worked. The dashboard may just be showing a cached UI view or a session-level model selection.
Try in this order:
- Hard refresh the dashboard browser tab.
- Disconnect/reconnect the dashboard to the gateway if thereâs a Connect button/state.
- Check whether the current chat/session has a manual
/modeloverride. A user-selected model can be strict and not show/use the default fallback chain the same way. - If it still doesnât update, restart the gateway:
openclaw gateway restart
After restart:
openclaw models status
If CLI shows the correct fallbacks but the dashboard still doesnât, thatâs probably a dashboard refresh/display issue rather than your model config.
English correction: âthe dashboard doesnât show the changesâ is perfect. You can also say âthe dashboard isnât showing the changes.â
okkey, one more thing, I have other agent designed to be something like you, a staff member, or support. So thats not my main agent , but a subagent, I can still give it his own discord bot? or that only works with the main agent
Yes â you can give another agent its own Discord bot. Itâs not limited to main.
The clean setup is:
- Create a second Discord application/bot in the Discord Developer Portal.
- Add it as a separate Discord account in OpenClaw.
- Add a
bindingsrule so that Discord account routes to your support/staff agent.
Shape looks like this:
{
channels: {
discord: {
enabled: true,
accounts: {
main: {
token: { source: "env", provider: "default", id: "DISCORD_MAIN_TOKEN" },
applicationId: "111111111111111111",
},
support: {
token: { source: "env", provider: "default", id: "DISCORD_SUPPORT_TOKEN" },
applicationId: "222222222222222222",
},
},
},
},
bindings: [
{
agentId: "support",
match: {
channel: "discord",
accountId: "support",
},
},
],
}
Then messages received by the support Discord bot/account route to agentId: "support" instead of main.
Two caveats:
- Use a different bot token per Discord account. If two enabled accounts use the same token, OpenClaw will only start one monitor for that token.
- âSubagentâ can mean two things: if itâs a configured agent in
agents.list, yes, route Discord to it. If you mean a temporary spawned subagent session, no â those are not always-on Discord bots.
Docs: https://docs.openclaw.ai/channels/discord and https://docs.openclaw.ai/channels/channel-routing
English tiny fix: âI can still give it its own Discord bot?â not âhis ownâ (unless you specifically want to personify it as male).
is there any command for that?
There isnât a single âcreate a Discord bot for this agentâ command, because you still have to create the bot/app in the Discord Developer Portal and get its token/application ID.
But once you have those, yes, you can apply it with CLI config commands. Easiest is a patch file:
cat > discord-support.patch.json5 <<'EOF'
{
channels: {
discord: {
enabled: true,
accounts: {
support: {
token: { source: "env", provider: "default", id: "DISCORD_SUPPORT_TOKEN" },
applicationId: "222222222222222222",
},
},
},
},
bindings: [
{
agentId: "support",
match: {
channel: "discord",
accountId: "support",
},
},
],
}
EOF
openclaw config patch --file discord-support.patch.json5 --dry-run
openclaw config patch --file discord-support.patch.json5
openclaw gateway restart
Set DISCORD_SUPPORT_TOKEN in the same environment your gateway service uses, or put the token directly in config if you prefer â env is cleaner.
Important: if you already have bindings entries, donât blindly replace them with this patch; arrays replace. In that case, add the new binding carefully or paste your existing bindings and Iâll help shape the patch.
Docs: https://docs.openclaw.ai/channels/discord and https://docs.openclaw.ai/cli/config
I have windows
Yep â on Windows, use PowerShell and Windows-style env vars.
If you want to store the bot token as an environment variable:
[Environment]::SetEnvironmentVariable("DISCORD_SUPPORT_TOKEN", "YOUR_BOT_TOKEN", "User")
Then restart the gateway so the service sees the new env var:
openclaw gateway restart
For the config patch, create a file like discord-support.patch.json5 in Notepad/VS Code:
{
channels: {
discord: {
enabled: true,
accounts: {
support: {
token: { source: "env", provider: "default", id: "DISCORD_SUPPORT_TOKEN" },
applicationId: "222222222222222222",
},
},
},
},
bindings: [
{
agentId: "support",
match: {
channel: "discord",
accountId: "support",
},
},
],
}
Then run:
openclaw config patch --file .\discord-support.patch.json5 --dry-run
openclaw config patch --file .\discord-support.patch.json5
openclaw gateway restart
Important: if you already have bindings, donât replace them accidentally â arrays replace. Back up first:
Copy-Item "$env:USERPROFILE\.openclaw\openclaw.json" "$env:USERPROFILE\.openclaw\openclaw.backup.json"
Tiny English note: âI have Windowsâ is totally understandable. More natural: Iâm on Windows.
me puedes repetir lo del bot porfa?
Claro đ Resumen en Windows:
Primero: esto es para tu propio servidor/Discord. No añadas bots personales al servidor oficial de OpenClaw.
-
Crea otro bot en Discord Developer Portal y copia:
- Bot token
- Application ID
-
Guarda el token en PowerShell:
[Environment]::SetEnvironmentVariable("DISCORD_SUPPORT_TOKEN", "TU_TOKEN_AQUI", "User")
- Crea un archivo
discord-support.patch.json5con esto, cambiandosupportpor el id real de tu agente y elapplicationId:
{
channels: {
discord: {
enabled: true,
accounts: {
support: {
token: { source: "env", provider: "default", id: "DISCORD_SUPPORT_TOKEN" },
applicationId: "222222222222222222",
},
},
},
},
bindings: [
{
agentId: "support",
match: {
channel: "discord",
accountId: "support",
},
},
],
}
- Aplica el patch:
openclaw config patch --file .\discord-support.patch.json5 --dry-run
openclaw config patch --file .\discord-support.patch.json5
openclaw gateway restart
â ïž Ojo: si ya tienes bindings en tu config, este patch puede reemplazarlos porque los arrays se sustituyen. Haz backup antes:
Copy-Item "$env:USERPROFILE\.openclaw\openclaw.json" "$env:USERPROFILE\.openclaw\openclaw.backup.json"
a que te refieres con bindings
Con bindings me refiero a las reglas que le dicen a OpenClaw qué agente debe responder a cada entrada.
Piensa en esto asĂ:
channels.discord.accounts.support= âeste es el bot de Discord llamadosupportâbindings= âtodo lo que llegue por ese botsupport, mĂĄndalo al agentesupportâ
Ejemplo:
bindings: [
{
agentId: "support",
match: {
channel: "discord",
accountId: "support",
},
},
]
Eso significa:
Si llega un mensaje desde Discord usando la cuenta/bot
support, usa el agentesupport.
Sin ese binding, OpenClaw probablemente mandarĂa los mensajes al agente por defecto, normalmente main.
TambiĂ©n puedes hacer bindings mĂĄs especĂficos, por ejemplo por servidor:
bindings: [
{
agentId: "support",
match: {
channel: "discord",
accountId: "support",
guildId: "ID_DEL_SERVIDOR",
},
},
]
O por roles de Discord, pero para tu caso empezarĂa solo con accountId.
ok pues en ese caso como configuro todo
Vale, te dejo el flujo completo para Windows. Asumo que esto es para tu propio servidor de Discord, no para el servidor oficial de OpenClaw.
Objetivo: tener un segundo bot de Discord que use tu agente support en vez de main.
- Comprueba el id exacto de tu agente
openclaw agents list
Si tu agente no se llama support, cambia support en los ejemplos por el id real.
- Crea el bot en Discord Developer Portal
En https://discord.com/developers/applications:
- New Application
- Bot â Reset Token / Copy Token
- General Information â copia el Application ID
- OAuth2 URL Generator:
- scopes:
bot,applications.commands - permisos bĂĄsicos: Send Messages, Read Message History, Use Slash Commands
- si usarĂĄ threads: Send Messages in Threads
- scopes:
Invita ese bot a tu servidor.
- Guarda el token en Windows
PowerShell:
[Environment]::SetEnvironmentVariable("DISCORD_SUPPORT_TOKEN", "TU_TOKEN_AQUI", "User")
- Haz backup de la config
Copy-Item "$env:USERPROFILE\.openclaw\openclaw.json" "$env:USERPROFILE\.openclaw\openclaw.backup.json"
- Mira si ya tienes
bindings
openclaw config get bindings
Esto es importante porque bindings es una lista, y los patches pueden reemplazar listas si no tienes cuidado.
- Crea un archivo
discord-support.patch.json5
Cambia:
supportpor el id de tu agente si es diferente222222222222222222por el Application ID real
{
channels: {
discord: {
enabled: true,
accounts: {
support: {
token: { source: "env", provider: "default", id: "DISCORD_SUPPORT_TOKEN" },
applicationId: "222222222222222222",
},
},
},
},
bindings: [
{
agentId: "support",
match: {
channel: "discord",
accountId: "support",
},
},
],
}
- Aplica primero en dry-run
openclaw config patch --file .\discord-support.patch.json5 --dry-run
Si se ve bien:
openclaw config patch --file .\discord-support.patch.json5
openclaw gateway restart
- Verifica
openclaw gateway status
openclaw logs --follow
Luego escribe al nuevo bot o Ășsalo en el servidor. Los mensajes que entren por la cuenta support deberĂan ir al agente support.
Si openclaw config get bindings te muestra que ya tienes bindings, pégalos aquà antes de aplicar el patch y te digo cómo añadir el nuevo sin romper los existentes.
Error: Dry run failed: config schema validation failed.
-
- channels.discord.accounts.support.groupPolicy: invalid config: must have required property 'groupPolicy'
Dry run failed: 1 SecretRef assignment(s) could not be resolved.
- channels.discord.accounts.support.groupPolicy: invalid config: must have required property 'groupPolicy'
- env:default:DISCORD_SUPPORT_TOKEN -> SecretRefResolutionError: Environment variable "DISCORD_SUPPORT_TOKEN" is missing or empty.
Perfecto, son dos problemas distintos:
- Falta
groupPolicydentro de la cuentasupport. - Windows/PowerShell no tiene
DISCORD_SUPPORT_TOKENdisponible en esa terminal.
Haz esto en PowerShell:
$env:DISCORD_SUPPORT_TOKEN="TU_TOKEN_AQUI"
[Environment]::SetEnvironmentVariable("DISCORD_SUPPORT_TOKEN", "TU_TOKEN_AQUI", "User")
La primera lĂnea lo pone para esta terminal ahora mismo. La segunda lo guarda para futuras terminales / reinicios.
Luego cambia tu patch a esto:
{
channels: {
discord: {
enabled: true,
accounts: {
support: {
groupPolicy: "allowlist",
token: { source: "env", provider: "default", id: "DISCORD_SUPPORT_TOKEN" },
applicationId: "222222222222222222",
},
},
},
},
bindings: [
{
agentId: "support",
match: {
channel: "discord",
accountId: "support",
},
},
],
}
Después:
openclaw config patch --file .\discord-support.patch.json5 --dry-run
openclaw config patch --file .\discord-support.patch.json5
openclaw gateway restart
Si lo quieres usar en servidor, luego también necesitarås allowlist del servidor/guild para esa cuenta, pero primero hagamos que el bot arranque limpio.
English tiny fix: âI have Windowsâ â mĂĄs natural: Iâm on Windows.
hey krill I think I broke the discord bot, any of them show up
I can see this thread and Krill is responding here, so at least the support bot path is alive.
I canât see your Discord slash-command picker from my side, though. If /vc or the new bot commands disappeared, the likely breakpoints are:
- bot was invited without
applications.commands channels.discord.voice.enabledisnât true, so/vcwonât registerchannels.discord.commands.nativeis off/false- wrong
applicationId/token on the account, especially with multiple Discord bots - gateway didnât restart cleanly after the config change
Can you paste these, with tokens redacted?
openclaw --version
openclaw status --all
openclaw config get channels.discord
Docs for the voice bit: https://docs.openclaw.ai/channels/discord#voice-channels
digo de ayer cuando me ayudaste a crear un bot de discord para mi subagente, cuando lo hice ahora no sale ninguno de los dos
Ahh vale, el bot del subagente de ayer. Entonces si ahora no aparece ninguno de los dos, suena mås a que el gateway no pudo arrancar los monitores de Discord después del cambio de config, no solo a /vc.
Lo mĂĄs probable por lo que vimos ayer:
DISCORD_SUPPORT_TOKENno estĂĄ disponible para el proceso del gateway/servicio- falta
groupPolicyen la cuentasupport - el patch reemplazĂł
channels.discordobindingsy dejĂł fuera la cuenta anterior - las dos cuentas estĂĄn resolviendo al mismo token; OpenClaw solo arranca una para tokens duplicados
applicationIdno coincide con el token de ese bot
Pégame esto con tokens ocultos/redactados:
openclaw --version
openclaw gateway status
openclaw config get channels.discord
openclaw config get bindings
openclaw logs --tail 120
Si estĂĄs en Windows y lo arrancaste como servicio/app, ojo: poner $env:DISCORD_SUPPORT_TOKEN=... solo vale para esa terminal. Para servicio suele ser mejor guardarlo en ~\.openclaw\.env o reinstalar/reiniciar el servicio desde una terminal donde exista la env.
9:15:53 [fetch-timeout] fetch timeout after 2500ms (elapsed 16570ms) timer delayed 14070ms, likely event-loop starvation operation=fetchWithTimeout url=https://discord.com/api/v10/users/@me
09:15:53 [discord] [support] starting provider
09:15:59 [discord] users resolved: 719117335449042984
09:16:29 [tailscale] serve enabled
09:16:29 [plugins] embedded acpx runtime backend registered lazily
09:16:29 [gateway] ready
09:16:29 [heartbeat] started
09:16:31 [discord] client initialized as 1503665210613956658; awaiting gateway readiness
09:16:31 [delivery-recovery] Found 1 pending delivery entries â starting recovery
09:16:31 [delivery-recovery] Delivery entry ecdd4a8e-6cc9-4113-9d82-bf3629799414 delivery state is send_attempt_started; refusing blind replay without adapter reconciliation
09:16:31 [delivery-recovery] Retry failed for delivery ecdd4a8e-6cc9-4113-9d82-bf3629799414: delivery state is send_attempt_started; refusing blind replay without adapter reconciliation
09:16:31 [delivery-recovery] Delivery recovery complete: 0 recovered, 1 failed, 0 skipped (max retries), 0 deferred (backoff)
09:16:39 [discord] gateway: Gateway websocket closed: 4014
09:16:40 [discord] discord: gateway closed with code 4014 (missing privileged gateway intents). Enable the required intents in the Discord Developer Portal or disable them in config.
09:16:49 [whatsapp] Listening for person
Encontrado: esto lo rompe Discord antes de que el bot quede online:
Gateway websocket closed: 4014
missing privileged gateway intents
Eso significa que tu config de OpenClaw estĂĄ pidiendo intents privilegiados, pero en el Discord Developer Portal ese bot no los tiene activados.
Hazlo para cada bot/app que estés usando, especialmente el support:
- Ve a https://discord.com/developers/applications
- Abre la aplicaciĂłn del bot
- Bot â baja a Privileged Gateway Intents
- Activa:
- Message Content Intent â requerido
- Server Members Intent â recomendado / necesario si usas allowlists por usuarios/roles
- Presence Intent solo si lo configuraste/lo necesitas
- Guarda cambios
- Reinicia OpenClaw:
openclaw gateway restart
DespuĂ©s mira logs otra vez. Lo sano serĂa ver algo tipo âclient initialized ⊠gateway readyâ sin el 4014.
El timeout de users/@me parece starvation/lentitud al arrancar, pero el error fatal aquĂ es el 4014. đŠ
PS C:\Users\sergio.practicas> openclaw logs --tail 120
OpenClaw does not recognize option "--tail".
Try: openclaw logs 120 --help
SĂ, mi culpa â en tu versiĂłn el comando no usa --tail.
Usa esto:
openclaw logs 120
O para seguirlos en vivo:
openclaw logs --follow
Pero con lo que ya pegaste, la causa principal es clara: 4014 missing privileged gateway intents. Primero activa los intents en el Developer Portal para el/los bots y reinicia:
openclaw gateway restart
Luego si todavĂa no aparecen, pĂ©game:
openclaw logs 120
openclaw config get channels.discord
đŠ OpenClaw 2026.5.10-beta.3 (6d7dcd9) â I'm basically a Swiss Army knife, but with more opinions and fewer sharp edges.
{
"enabled": true,
"token": "OPENCLAW_REDACTED",
"groupPolicy": "open",
"allowFrom": [
"719117335449042984"
],
"threadBindings": {
"spawnSessions": true
},
"voice": {
"enabled": true,
"connectTimeoutMs": 60000,
"reconnectGraceMs": 60000
},
"applicationId": "1491751369529364601",
"accounts": {
"support": {
"groupPolicy": "allowlist",
"token": {
"source": "env",
"provider": "default",
"id": "DISCORD_SUPPORT_TOKEN"
},
"applicationId": "1503665210613956658"
}
}
}
Gracias, esto ayuda. Tu config tiene dos detalles importantes:
- El bot
supporttiene:
"groupPolicy": "allowlist"
pero no tiene guilds allowlist dentro de accounts.support. Entonces aunque arranque, en servidor/guild queda bloqueado. Para ese bot necesitas algo asĂ:
accounts: {
support: {
groupPolicy: "allowlist",
allowFrom: ["719117335449042984"],
guilds: {
"TU_SERVER_ID": {
requireMention: true,
users: ["719117335449042984"],
},
},
voice: {
enabled: true,
connectTimeoutMs: 60000,
reconnectGraceMs: 60000,
},
token: { source: "env", provider: "default", id: "DISCORD_SUPPORT_TOKEN" },
applicationId: "1503665210613956658",
}
}
- El log anterior dice
4014 missing privileged gateway intents. Eso se arregla en el Developer Portal de la appsupport: Bot â Privileged Gateway Intents â activa Message Content Intent. Si usas allowlist por usuarios/roles/guild, activa tambiĂ©n Server Members Intent.
Para confirmar el server ID:
openclaw config get channels.discord.guilds
Si no tienes nada ahĂ, copia el Server ID de Discord y lo ponemos tanto en el bot principal como en accounts.support.
PS C:\Users\sergio.practicas> openclaw config get channels.discord.guilds
Config warnings:
- plugins.entries.openclaw-mem0: plugin openclaw-mem0: providerAuthEnvVars is deprecated compatibility metadata for provider env-var lookup; mirror mem0, openclaw-mem0-oss env vars to setup.providers[].envVars before the deprecation window closes
- plugins.entries.telegram: plugin disabled (bundled (disabled by default)) but config is present
đŠ OpenClaw 2026.5.10-beta.3 (6d7dcd9) â I can grep it, git blame it, and gently roast itâpick your coping mechanism.
Config path not found: channels.discord.guilds. Run openclaw config validate to inspect config shape.
Perfecto: eso confirma que no tienes allowlist de servidor configurada (channels.discord.guilds no existe). Para que aparezca/funcione en el servidor, añade el guild. El server ID de este hilo es:
1456350064065904867
Crea un archivo discord-guild.patch.json5 con esto:
{
channels: {
discord: {
guilds: {
"1456350064065904867": {
requireMention: true,
users: ["719117335449042984"],
},
},
accounts: {
support: {
guilds: {
"1456350064065904867": {
requireMention: true,
users: ["719117335449042984"],
},
},
allowFrom: ["719117335449042984"],
voice: {
enabled: true,
connectTimeoutMs: 60000,
reconnectGraceMs: 60000,
},
},
},
},
},
}
Luego:
openclaw config patch --file .\discord-guild.patch.json5 --dry-run
openclaw config patch --file .\discord-guild.patch.json5
openclaw gateway restart
Y muy importante: si sigue saliendo 4014, entra al Developer Portal de cada app/bot y activa Message Content Intent + Server Members Intent. Sin eso Discord cierra el websocket y el bot no queda online.
Error: Dry run failed: config schema validation failed.
-
- channels.discord.guilds: invalid config: must be object
-
- channels.discord.accounts.support.guilds: invalid config: must be object
Ese error casi siempre pasa cuando guilds quedĂł como lista/array ([...]) o como texto, pero tiene que ser objeto/mapa ({...}). Probemos sin copiar desde Discord, creando el archivo directamente con PowerShell:
@'
{
channels: {
discord: {
guilds: {
"1456350064065904867": {
requireMention: true,
users: ["719117335449042984"],
},
},
accounts: {
support: {
guilds: {
"1456350064065904867": {
requireMention: true,
users: ["719117335449042984"],
},
},
allowFrom: ["719117335449042984"],
voice: {
enabled: true,
connectTimeoutMs: 60000,
reconnectGraceMs: 60000,
},
},
},
},
},
}
'@ | Set-Content -Encoding UTF8 .\discord-guild.patch.json5
openclaw config patch --file .\discord-guild.patch.json5 --dry-run
Si eso aĂșn falla, pĂ©game el contenido exacto del archivo:
Get-Content .\discord-guild.patch.json5
Las warnings de mem0 y telegram no son el problema aquĂ.
Error: Dry run failed: config schema validation failed.
-
- channels.discord.guilds: invalid config: must be object
-
- channels.discord.accounts.support.guilds: invalid config: must be object
{
channels: {
discord: {
guilds: {
"1456350064065904867": {
requireMention: true,
users: ["719117335449042984"],
},
},
accounts: {
support: {
guilds: {
"1456350064065904867": {
requireMention: true,
users: ["719117335449042984"],
},
},
allowFrom: ["719117335449042984"],
voice: {
enabled: true,
connectTimeoutMs: 60000,
reconnectGraceMs: 60000,
},
},
},
},
},
}
- channels.discord.accounts.support.guilds: invalid config: must be object
Vale, ya encontré el detalle raro: en esta versión el patch se estå atragantando con el ID numérico usado como key dentro de guilds. Usa una key con nombre y mete el ID real en slug.
Prueba este archivo en vez del anterior:
@'
{
channels: {
discord: {
guilds: {
openclaw_server: {
slug: "1456350064065904867",
requireMention: true,
users: ["719117335449042984"],
},
},
accounts: {
support: {
groupPolicy: "allowlist",
guilds: {
openclaw_server: {
slug: "1456350064065904867",
requireMention: true,
users: ["719117335449042984"],
},
},
allowFrom: ["719117335449042984"],
voice: {
enabled: true,
connectTimeoutMs: 60000,
reconnectGraceMs: 60000,
},
},
},
},
},
}
'@ | Set-Content -Encoding UTF8 .\discord-guild.patch.json5
openclaw config patch --file .\discord-guild.patch.json5 --dry-run
Si dry-run pasa:
openclaw config patch --file .\discord-guild.patch.json5
openclaw gateway restart
Yo lo validĂ© contra la schema local: con key numĂ©rica falla; con openclaw_server + slug pasa. đŠ
vale, ahora ya ha pasado pero solo me sale un bot, el del subagente, quiero que salgan amob
Bien, ya avanzamos đŠ
Si ahora solo aparece el del subagente, el problema ya no es el guilds; seguramente el bot default/principal no estĂĄ arrancando o Discord lo estĂĄ cerrando.
Mira en logs si aparecen dos providers:
openclaw logs 120
Busca algo como:
[discord] [default] starting provider
[discord] [support] starting provider
Si solo ves [support], revisa estas 3 cosas del bot principal:
- Que el token principal siga configurado y no sea el mismo que
DISCORD_SUPPORT_TOKEN.- Si ambos resuelven al mismo token, OpenClaw solo arranca uno.
- Que
applicationId: "1491751369529364601"sea el Application ID del bot principal, no del support. - En Developer Portal del bot principal, activa también:
- Message Content Intent
- Server Members Intent
Pégame la parte de logs donde sale discord después del restart, por ejemplo:
openclaw logs 120 | Select-String discord
Y si puedes también:
openclaw config get channels.discord.token
openclaw config get channels.discord.accounts.support.token
No pegues tokens reales si salen; solo dime si son distintos (env, redacted, etc.).
PS C:\Users\sergio.practicas\Documents> openclaw logs 120
Too many arguments for this command.
Try: openclaw logs 120 --help
PS C:\Users\sergio.practicas\Documents> openclaw logs 120 | Select-String discord
Too many arguments for this command.
Try: openclaw logs 120 --help
Otro fallo mĂo con el comando, perdĂłn đ En esta versiĂłn es:
openclaw logs --limit 120
Y filtrado:
openclaw logs --limit 120 | Select-String discord
Para lo de âque salgan ambosâ, revisa ademĂĄs esto: tu config mostrĂł voice.enabled solo en el Discord principal, y el patch que aplicamos lo añadiĂł tambiĂ©n al support. Pero el bot principal puede no aparecer si su token no estĂĄ llegando al gateway.
Comprueba rĂĄpido:
openclaw config get channels.discord.token
openclaw config get channels.discord.accounts.support.token
Deben ser distintos. Si el principal sale como redacted string __OPENâŠED__ y support como env DISCORD_SUPPORT_TOKEN, bien.
Luego pega el filtrado correcto:
openclaw logs --limit 120 | Select-String discord
AhĂ deberĂamos ver si arranca [default] y [support], o si el principal cae por 4014, token invĂĄlido, duplicate token, etc.
2026-05-13T08:10:09.800Z info gateway/reload {"subsystem":"gateway/reload"} config change detected; evaluating reload
(meta.lastTouchedAt, channels.discord.accounts.support.guilds, channels.discord.accounts.support.allowFrom,
channels.discord.accounts.support.voice, channels.discord.guilds)
2026-05-13T08:11:02.158Z info gateway/channels {"subsystem":"gateway/channels"} restarting discord channel
2026-05-13T08:11:10.168Z info gateway/reload {"subsystem":"gateway/reload"} config hot reload applied
(channels.discord.accounts.support.guilds, channels.discord.accounts.support.allowFrom,
channels.discord.accounts.support.voice, channels.discord.guilds)
2026-05-13T08:16:45.146Z info gateway {"subsystem":"gateway"} http server listening (11 plugins: acpx, browser,
device-pair, discord, file-transfer, google, memory-core, phone-control, talk-voice, whatsapp, zalouser; 166.6s)
2026-05-13T08:17:03.470Z warn fetch-timeout {"subsystem":"fetch-timeout"}
{"timeoutMs":2500,"elapsedMs":9091,"timerDelayMs":6591,"eventLoopDelayHint":"timer delayed 6591ms, likely event-loop
starvation","operation":"fetchWithTimeout","url":"https://discord.com/api/v10/users/@me"} fetch timeout reached;
aborting operation
2026-05-13T08:17:03.483Z warn [fetch-timeout] fetch timeout after 2500ms (elapsed 9091ms) timer delayed 6591ms, likely
event-loop starvation operation=fetchWithTimeout url=https://discord.com/api/v10/users/@me
2026-05-13T08:17:03.490Z info channels/discord {"subsystem":"channels/discord"} [support] starting provider
2026-05-13T08:17:18.070Z info channels/discord {"subsystem":"channels/discord"} discord channels unresolved:
openclaw_server (guild:openclaw_server)
2026-05-13T08:17:18.079Z info channels/discord {"subsystem":"channels/discord"} discord users resolved:
719117335449042984
2026-05-13T08:17:18.086Z info channels/discord {"subsystem":"channels/discord"} discord channel users resolved:
719117335449042984
2026-05-13T08:17:31.044Z warn fetch-timeout {"subsystem":"fetch-timeout"}
Vale: el log dice que solo estĂĄ arrancando [support]. No aparece [default] starting provider, asĂ que el bot principal ni estĂĄ llegando a inicializarse.
AdemĂĄs tenemos este aviso raro:
discord channels unresolved: openclaw_server (guild:openclaw_server)
Eso viene del workaround con openclaw_server. Mejor cambiémoslo a "*" y borremos esa key. Asà evitamos que intente resolver openclaw_server como si fuera un canal/guild real.
Aplica este patch:
@'
{
channels: {
discord: {
gatewayInfoTimeoutMs: 60000,
gatewayReadyTimeoutMs: 60000,
gatewayRuntimeReadyTimeoutMs: 60000,
guilds: {
openclaw_server: null,
"*": {
requireMention: true,
users: ["719117335449042984"],
},
},
accounts: {
support: {
gatewayInfoTimeoutMs: 60000,
gatewayReadyTimeoutMs: 60000,
gatewayRuntimeReadyTimeoutMs: 60000,
guilds: {
openclaw_server: null,
"*": {
requireMention: true,
users: ["719117335449042984"],
},
},
},
},
},
},
}
'@ | Set-Content -Encoding UTF8 .\discord-both-bots.patch.json5
openclaw config patch --file .\discord-both-bots.patch.json5 --dry-run
openclaw config patch --file .\discord-both-bots.patch.json5
openclaw gateway restart
Luego:
openclaw logs --limit 160 | Select-String discord
Lo que queremos ver es algo como:
[default] starting provider
[support] starting provider
Si después de esto sigue saliendo solo [support], el siguiente sospechoso es el token/app del bot principal: token duplicado, token invålido, falta de privileged intents, o bot principal no invitado al server con applications.commands.
Entonces ya casi seguro es esto: al añadir accounts.support, tu bot principal quedĂł en la config top-level, pero el runtime multi-account estĂĄ arrancando solo las cuentas bajo accounts. Hay que crear explĂcitamente accounts.default para el bot principal.
Primero aplica este patch â no toca tokens todavĂa:
@'
{
channels: {
discord: {
defaultAccount: "default",
accounts: {
default: {
enabled: true,
groupPolicy: "open",
allowFrom: ["719117335449042984"],
threadBindings: { spawnSessions: true },
voice: {
enabled: true,
connectTimeoutMs: 60000,
reconnectGraceMs: 60000,
},
guilds: {
"*": {
requireMention: true,
users: ["719117335449042984"],
},
},
applicationId: "1491751369529364601",
},
},
},
},
}
'@ | Set-Content -Encoding UTF8 .\discord-default-account.patch.json5
openclaw config patch --file .\discord-default-account.patch.json5 --dry-run
openclaw config patch --file .\discord-default-account.patch.json5
openclaw gateway restart
Después mira:
openclaw logs --limit 160 | Select-String discord
Si ahora aparece [default] pero dice token missing / not configured, entonces falta copiar el token principal dentro de accounts.default. En ese caso hazlo sin pegar el token aquĂ:
$env:DISCORD_BOT_TOKEN="TOKEN_DEL_BOT_PRINCIPAL"
[Environment]::SetEnvironmentVariable("DISCORD_BOT_TOKEN", "TOKEN_DEL_BOT_PRINCIPAL", "User")
@'
{
channels: {
discord: {
accounts: {
default: {
token: { source: "env", provider: "default", id: "DISCORD_BOT_TOKEN" },
},
},
},
},
}
'@ | Set-Content -Encoding UTF8 .\discord-default-token.patch.json5
openclaw config patch --file .\discord-default-token.patch.json5 --dry-run
openclaw config patch --file .\discord-default-token.patch.json5
openclaw gateway restart
Luego deberĂan salir los dos: [default] y [support].
2026-05-13T08:16:45.146Z info gateway {"subsystem":"gateway"} http server listening (11 plugins: acpx, browser, device-pair,
discord, file-transfer, google, memory-core, phone-control, talk-voice, whatsapp, zalouser; 166.6s)
2026-05-13T08:17:03.470Z warn fetch-timeout {"subsystem":"fetch-timeout"}
{"timeoutMs":2500,"elapsedMs":9091,"timerDelayMs":6591,"eventLoopDelayHint":"timer delayed 6591ms, likely event-loop
starvation","operation":"fetchWithTimeout","url":"https://discord.com/api/v10/users/@me"} fetch timeout reached; aborting
operation
2026-05-13T08:17:03.483Z warn [fetch-timeout] fetch timeout after 2500ms (elapsed 9091ms) timer delayed 6591ms, likely
event-loop starvation operation=fetchWithTimeout url=https://discord.com/api/v10/users/@me
2026-05-13T08:17:03.490Z info channels/discord {"subsystem":"channels/discord"} [support] starting provider
Log tail truncated (increase --max-bytes).
2026-05-13T08:17:18.070Z info channels/discord {"subsystem":"channels/discord"} discord channels unresolved: openclaw_server
(guild:openclaw_server)
2026-05-13T08:17:18.079Z info channels/discord {"subsystem":"channels/discord"} discord users resolved: 719117335449042984
2026-05-13T08:17:18.086Z info channels/discord {"subsystem":"channels/discord"} discord channel users resolved:
719117335449042984
2026-05-13T08:17:31.044Z warn fetch-timeout {"subsystem":"fetch-timeout"}
{"timeoutMs":10000,"elapsedMs":14685,"operation":"fetchWithTimeout","url":"https://discord.com/api/v10/users/@me"} fetch
timeout reached; aborting operation
2026-05-13T08:17:31.050Z warn [fetch-timeout] fetch timeout after 10000ms (elapsed 14685ms) operation=fetchWithTimeout
url=https://discord.com/api/v10/users/@me
2026-05-13T08:17:37.194Z info channels/discord {"subsystem":"channels/discord"} discord co
Ese log todavĂa parece del arranque viejo (08:17) y ademĂĄs estĂĄ cortado:
Log tail truncated (increase --max-bytes)
Saca uno mĂĄs grande despuĂ©s del Ășltimo restart:
openclaw logs --limit 300 --max-bytes 1000000 | Select-String "discord|channels/discord|starting provider|4014|token|configured|duplicate|default|support"
Y confirma si el patch creĂł accounts.default:
openclaw config get channels.discord.defaultAccount
openclaw config get channels.discord.accounts.default
openclaw config get channels.discord.accounts.support
Si accounts.default existe pero no tiene token, añade el token principal ahĂ con el segundo patch que te pasĂ©. En multi-account, no me fĂo de que el token top-level se use para arrancar el default; mejor dejarlo explĂcito en accounts.default.token.
09:01:40+00:00 info channels/discord {"subsystem":"channels/discord"} [default] starting provider (@JARVIS)
09:01:40+00:00 info channels/discord {"subsystem":"channels/discord"} discord users resolved: 719117335449042984
09:01:40+00:00 info channels/discord {"subsystem":"channels/discord"} discord channel users resolved: 719117335449042984
09:01:42+00:00 warn Config warnings:
- plugins.entries.openclaw-mem0: plugin openclaw-mem0: providerAuthEnvVars is deprecated compatibility metadata for provider env-var lookup; mirror mem0, openclaw-mem0-oss env vars to setup.providers[].envVars before the deprecation window closes
- plugins.entries.telegram: plugin disabled (bundled (disabled by default)) but config is present
09:02:02+00:00 error channels/whatsapp {"subsystem":"channels/whatsapp"} [default] channel exited: {"error":{"data":null,"isBoom":true,"isServer":false,"output":{"statusCode":408,"payload":{"statusCode":408,"error":"Request Time-out","message":"Connection was lost"},"headers":{}}},"date":"2026-05-13T09:02:02.863Z"}
09:02:02+00:00 info channels/whatsapp {"subsystem":"channels/whatsapp"} [default] auto-restart attempt 1/10 in 5s
09:02:19+00:00 info channels/discord {"subsystem":"channels/discord"} discord: gateway metadata lookup failed transiently; using default gateway url (Failed to get gateway information from Discord: fetch failed | fetch failed | other side closed)
09:02:19+00:00 info channels/discord {"subsystem":"channels/discord"} discord client initialized as 1491751369529364601; awaiting gateway readiness
ahora se ha activoad el agente pricipal pero no el secundario
Genial, el principal ya volvió. Ahora falta ver por qué support no entra.
Si después de poner accounts.default desapareció support, normalmente es una de estas:
accounts.support.enabledquedó enfalseo incompletoDISCORD_SUPPORT_TOKENno estå disponible para el gateway después del restart- el patch de
accounts.defaultreemplazĂł parte deaccounts.support supportestĂĄ arrancando pero el log filtrado no llegĂł hasta esa parte
Pégame estos tres, con tokens redactados si aparecen:
openclaw config get channels.discord.accounts
openclaw config get channels.discord.defaultAccount
openclaw status --all
Y para logs, sin que se corte:
openclaw logs --limit 500 --max-bytes 2000000 | Select-String "channels/discord|\[default\]|\[support\]|DISCORD_SUPPORT_TOKEN|token|configured|disabled|4014|duplicate"
Si support.token sigue siendo env, confirma también en esa misma terminal:
[Environment]::GetEnvironmentVariable("DISCORD_SUPPORT_TOKEN", "User")
No pegues el valor; solo dime si devuelve algo o queda vacĂo.
{
"support": {
"groupPolicy": "allowlist",
"token": {
"source": "env",
"provider": "default",
"id": "DISCORD_SUPPORT_TOKEN"
},
"applicationId": "1503665210613956658",
"guilds": {
"": {
"requireMention": true,
"users": [
"719117335449042984"
]
}
},
"allowFrom": [
"719117335449042984"
],
"voice": {
"enabled": true,
"connectTimeoutMs": 60000,
"reconnectGraceMs": 60000
},
"gatewayInfoTimeoutMs": 60000,
"gatewayReadyTimeoutMs": 60000,
"gatewayRuntimeReadyTimeoutMs": 60000
},
"default": {
"enabled": true,
"groupPolicy": "open",
"allowFrom": [
"719117335449042984"
],
"threadBindings": {
"spawnSessions": true
},
"voice": {
"enabled": true,
"connectTimeoutMs": 60000,
"reconnectGraceMs": 60000
},
"guilds": {
"": {
"requireMention": true,
"users": [
"719117335449042984"
]
}
},
"applicationId": "1491751369529364601"
}
}
PS C:\Users\sergio.practicas> openclaw config get channels.discord.defaultAccount
Config warnings:
- plugins.entries.openclaw-mem0: plugin openclaw-mem0: providerAuthEnvVars is deprecated compatibility metadata for provider env-var lookup; mirror mem0, openclaw-mem0-oss env vars to setup.providers[].envVars before the deprecation window closes
- plugins.entries.telegram: plugin disabled (bundled (disabled by default)) but config is present
đŠ OpenClaw 2026.5.10-beta.3 (6d7dcd9) â Your task has been queued; your dignity has been deprecated.
default
La config de support se ve bien. Si solo arranca [default], el sospechoso #1 ahora es que el proceso del gateway no estĂĄ viendo DISCORD_SUPPORT_TOKEN.
Haz esta comprobaciĂłn:
[Environment]::GetEnvironmentVariable("DISCORD_SUPPORT_TOKEN", "User")
Si sale vacĂo, guĂĄrdalo otra vez â sin pegarlo aquĂ:
[Environment]::SetEnvironmentVariable("DISCORD_SUPPORT_TOKEN", "TOKEN_DEL_BOT_SUPPORT", "User")
Y ademĂĄs yo lo dejarĂa explĂcito en .env, que suele ser mĂĄs fiable para el gateway en Windows:
New-Item -ItemType Directory -Force $env:USERPROFILE\.openclaw | Out-Null
Add-Content $env:USERPROFILE\.openclaw\.env "DISCORD_SUPPORT_TOKEN=TOKEN_DEL_BOT_SUPPORT"
Luego marca support explĂcitamente enabled:
@'
{
channels: {
discord: {
accounts: {
support: {
enabled: true,
},
},
},
},
}
'@ | Set-Content -Encoding UTF8 .\discord-support-enable.patch.json5
openclaw config patch --file .\discord-support-enable.patch.json5 --dry-run
openclaw config patch --file .\discord-support-enable.patch.json5
openclaw gateway restart
Después:
openclaw status --all
openclaw logs --limit 500 --max-bytes 2000000 | Select-String "\[default\]|\[support\]|DISCORD_SUPPORT_TOKEN|SecretRef|token|configured|disabled|4014"
Si support sigue sin aparecer ahĂ, pĂ©game ese filtrado. Pero ahora que default ya arranca, casi seguro falta el token del segundo bot en el entorno real del gateway.
vale ya se activaron los dos, por cierto lo del .evn he copiado sin quererr el comando entero sin modificar, como lo elimino
BuenĂsimo, los dos vivos đ
Para borrar la lĂnea mala del .env, haz backup primero y elimina cualquier lĂnea que tenga el placeholder TOKEN_DEL_BOT_SUPPORT:
Copy-Item $env:USERPROFILE\.openclaw\.env $env:USERPROFILE\.openclaw\.env.bak
(Get-Content $env:USERPROFILE\.openclaw\.env) | Where-Object { $_ -notmatch 'TOKEN_DEL_BOT_SUPPORT' } | Set-Content -Encoding UTF8 $env:USERPROFILE\.openclaw\.env
Luego comprueba:
Get-Content $env:USERPROFILE\.openclaw\.env
Si ves una lĂnea literal mala tipo:
DISCORD_SUPPORT_TOKEN=TOKEN_DEL_BOT_SUPPORT
ya deberĂa haber desaparecido. DespuĂ©s deja solo la buena:
Add-Content $env:USERPROFILE\.openclaw\.env "DISCORD_SUPPORT_TOKEN=TU_TOKEN_REAL"
openclaw gateway restart
No pegues el token aquĂ.
09:18:58+00:00 warn gateway/ws {"subsystem":"gateway/ws"} {"handshake":"pending","durationMs":12,"host":"127.0.0.1:18789","remoteAddr":"127.0.0.1","remotePort":54181,"localAddr":"127.0.0.1","localPort":18789,"endpoint":"127.0.0.1:54181->127.0.0.1:18789"} closed before connect conn=2ac05753-64e4-4253-8c09-c69697995289 peer=127.0.0.1:54181->127.0.0.1:18789 remote=127.0.0.1 fwd=n/a origin=n/a host=127.0.0.1:18789 ua=n/a code=1006 reason=n/a
09:18:58+00:00 warn gateway/ws {"subsystem":"gateway/ws"} {"handshake":"pending","durationMs":462,"host":"127.0.0.1:18789","remoteAddr":"127.0.0.1","remotePort":55022,"localAddr":"127.0.0.1","localPort":18789,"endpoint":"127.0.0.1:55022->127.0.0.1:18789"} closed before connect conn=a5b99f40-e7cf-4c6b-b911-a1388703314b peer=127.0.0.1:55022->127.0.0.1:18789 remote=127.0.0.1 fwd=n/a origin=n/a host=127.0.0.1:18789 ua=n/a code=1006 reason=n/a
09:19:01+00:00 info gateway {"subsystem":"gateway"} agent model: openai-codex/gpt-5.5 (thinking=medium, fast=off)
09:19:01+00:00 info gateway {"subsystem":"gateway"} http server listening (11 plugins: acpx, browser, device-pair, discord, file-transfer, google, memory-core, phone-control, talk-voice, whatsapp, zalouser; 162.2s)
09:19:01+00:00 info gateway {"subsystem":"gateway"} log file: C:\Users\SERGIO~1.PRA\AppData\Local\Temp\openclaw\openclaw-2026-05-13.log
09:19:05+00:00 warn gateway {"subsystem":"gateway"} security warning: dangerous config flags enabled: gateway.controlUi.allowInsecureAuth=true. Run openclaw security audit.
09:19:05+00:00 info gateway {"subsystem":"gateway"} starting channels and sidecars...
09:19:13+00:00 info channels/discord {"subsystem":"channels/discord"} [support] delaying provider startup 10s to reduce Discord startup rate limits
09:19:13+00:00 warn gateway/ws {"subsystem":"gateway/ws"} {"cause":"startup-sidecars-
Eso no parece un fallo nuevo.
closed before connect ... 127.0.0.1 ... code=1006: normalmente es algĂșn cliente local/CLI/UI abriendo websocket y cerrĂĄndolo antes de completar handshake. Si el gateway sigue arrancando, suele ser ruido.[support] delaying provider startup 10s: normal en multi-bot, OpenClaw lo retrasa para evitar rate limits de Discord.startup-sidecars-...: pegaste la lĂnea cortada; necesito el resto solo si luego apareceerroro no arrancan los bots.
Lo Ășnico que sĂ mirarĂa aparte es esto:
gateway.controlUi.allowInsecureAuth=true
No rompe Discord, pero es una warning de seguridad. Cuando acabes de arreglar bots, ejecuta:
openclaw security audit
Para confirmar que ya estĂĄ todo bien:
openclaw logs --limit 300 --max-bytes 2000000 | Select-String "\[default\]|\[support\]|client initialized|gateway readiness|4014|error"
Si ves client initialized para ambos y no hay 4014/error, ya estĂĄ sano.
09:20:22+00:00 info channels/discord {"subsystem":"channels/discord"} discord client initialized as 1491751369529364601; awaiting gateway readiness
09:20:45+00:00 info channels/discord {"subsystem":"channels/discord"} discord client initialized as 1503665210613956658; awaiting gateway readiness
09:20:45+00:00 info cron {"module":"cron","storePath":"C:\Users\sergio.practicas\.openclaw\cron\jobs.json"} {"enabled":true,"jobs":2,"nextWakeAtMs":1778738400000} cron: started
09:20:45+00:00 info gateway/ws {"subsystem":"gateway/ws"} â res â logs.tail 2891ms conn=0b446a06âŠe637 id=5ffaa99fâŠ301d
09:20:54+00:00 info gateway/channels/whatsapp {"subsystem":"gateway/channels/whatsapp"} Listening for personal WhatsApp inbound messages.
09:20:54+00:00 info [whatsapp] Listening for personal WhatsApp inbound messages.
09:21:13+00:00 info gateway/ws {"subsystem":"gateway/ws"} â res â logs.tail 207ms conn=2a9fc28câŠ9fc9 id=20f056b6âŠb9c1
09:21:14+00:00 info discord-auto-reply {"module":"discord-auto-reply"} {"channelId":"1491755095950364714","reason":"no-mention"} discord: skipping guild message
algo por aqui?
SĂ â esto ya se ve bien:
discord client initialized as 1491751369529364601
Discord client initialized as 1503665210613956658
Eso confirma que los dos bots arrancaron: principal + support/subagente.
La lĂnea:
reason="no-mention" discord: skipping guild message
no es error. Significa que en servidor tienes requireMention: true, asĂ que el bot ignora mensajes normales si no lo mencionas. Si quieres que responda sin menciĂłn en ese server, cambia requireMention a false en guilds."*" para la cuenta que quieras.
Para /vc: si ambos bots ya estĂĄn inicializados pero el comando no aparece, revisa estas dos cosas en Discord:
- Que ambos bots fueron invitados con scope
applications.commands. - Que el bot tenga permisos en el canal: View Channel, Send Messages, Read Message History, Connect, Speak.
Pero por logs: Discord ya estĂĄ levantado para ambos. đŠ
se acaban de deconectar, les e mandado un mensaje a cada uno para ver que respondain y no han dichoo nada
Uf, vale â entonces necesitamos el log justo despuĂ©s de esos mensajes, porque âno respondeâ puede ser dos cosas distintas:
- EstĂĄn conectados pero ignoran el mensaje porque
requireMention: trueâ en servidor solo responden si los mencionas. - Se cayĂł el gateway de Discord â veremos
closed,4014,READY timeout,channel exited, etc.
Prueba primero mencionĂĄndolos explĂcitamente en el servidor. Si les escribiste en DM, eso deberĂa entrar por allowFrom, pero en canal/thread con requireMention: true no responderĂĄn sin menciĂłn.
Pégame esto:
openclaw logs --limit 500 --max-bytes 2000000 | Select-String "discord|\[default\]|\[support\]|gateway websocket closed|closed|READY|ready|channel exited|4014|no-mention|unauthorized|pairing|required|skipping|error"
Y también:
openclaw status --all
Si quieres que respondan sin mencionarlos, aplica este patch:
@'
{
channels: {
discord: {
guilds: {
"*": { requireMention: false },
},
accounts: {
default: {
guilds: { "*": { requireMention: false } },
},
support: {
guilds: { "*": { requireMention: false } },
},
},
},
},
}
'@ | Set-Content -Encoding UTF8 .\discord-no-mention.patch.json5
openclaw config patch --file .\discord-no-mention.patch.json5 --dry-run
openclaw config patch --file .\discord-no-mention.patch.json5
openclaw gateway restart
Pero primero prefiero ver si hay un closed/error, porque dices que âse desconectaronâ y eso suena mĂĄs grave que solo no-mention.
por los limites de discord no puedo subir tanto
SĂ, normal â no pegues todo. Saca solo lo importante con filtros pequeños.
Ejecuta estos, uno por uno, y pega solo la salida:
openclaw logs --limit 120 --max-bytes 500000 | Select-String "gateway websocket closed|4014|channel exited|READY timeout|missing privileged|Invalid token|unauthorized|SecretRef|DISCORD_SUPPORT_TOKEN"
Luego este para ver si ignorĂł tus mensajes:
openclaw logs --limit 120 --max-bytes 500000 | Select-String "discord-auto-reply|no-mention|skipping guild message|pairing|required|allowlist|unauthorized"
Y este para ver si ambos siguen conectados:
openclaw logs --limit 120 --max-bytes 500000 | Select-String "client initialized as|\[default\]|\[support\]"
Si los mensajes fueron en el servidor/thread y ves no-mention, no estĂĄn desconectados: simplemente no responden porque requireMention: true. En ese caso menciona al bot o ponemos requireMention: false.
PS C:\Users\sergio.practicas\Documents> openclaw logs --limit 120 --max-bytes 500000 | Select-String "gateway websocket closed|4014|channel exited|READY timeout|missing privileged|Invalid token|unauthorized|SecretRef|DISCORD_SUPPORT_TOKEN"
Log tail truncated (increase --max-bytes).
2026-05-13T09:14:10.299Z info channels/discord {"subsystem":"channels/discord"} discord gateway: Gateway websocket closed:
1000
2026-05-13T09:14:10.340Z info channels/discord {"subsystem":"channels/discord"} discord gateway: Gateway websocket closed:
1000
2026-05-13T09:26:38.361Z info channels/discord {"subsystem":"channels/discord"} discord gateway: Gateway websocket closed:
1006
2026-05-13T09:26:38.391Z info channels/discord {"subsystem":"channels/discord"} discord gateway: Gateway websocket closed:
1006PS C:\Users\sergio.practicas\Documents> openclaw logs --limit 120 --max-bytes 500000 | Select-String "client initialized as|[default]|[support]"
Log tail truncated (increase --max-bytes).
2026-05-13T09:19:13.676Z info channels/discord {"subsystem":"channels/discord"} [support] delaying provider startup 10s to
reduce Discord startup rate limits
2026-05-13T09:19:14.031Z info channels/whatsapp {"subsystem":"channels/whatsapp"} [default] starting provider (+34687981750)
2026-05-13T09:19:23.772Z info channels/discord {"subsystem":"channels/discord"} [default] starting provider
2026-05-13T09:19:53.781Z info channels/discord {"subsystem":"channels/discord"} [support] starting provider
2026-05-13T09:20:22.883Z info channels/discord {"subsystem":"channels/discord"} discord client initialized as
1491751369529364601; awaiting gateway readiness
2026-05-13T09:20:45.228Z info channels/discord {"subsystem":"channels/discord"} discord client initialized as
1503665210613956658; awaiting gateway readiness
2026-05-13T09:26:33.812Z info channels/whatsapp {"subsystem":"channels/whatsapp"} [default] auto-restart attempt 1/10 in 5s
SĂ, ahĂ estĂĄ el problema:
discord gateway ... closed: 1006
1000 era cierre normal por restart/reload. 1006 es cierre anormal del websocket de Discord. Como salen dos lĂneas, probablemente se cayeron los dos clientes Discord a la vez.
Haz lo simple primero:
openclaw gateway restart
Espera 1-2 min y confirma:
openclaw logs --limit 200 --max-bytes 1000000 | Select-String "\[default\]|\[support\]|client initialized as|Gateway websocket closed|channel exited|auto-restart|READY|4014|1006"
Si vuelven a salir:
client initialized as 1491751369529364601
client initialized as 1503665210613956658
y no vuelve el 1006, fue una caĂda transitoria.
Si el 1006 vuelve otra vez, entonces el problema ya es de conexión/Discord/websocket, no de config. En ese caso prueba también subir timeouts del gateway de Discord para ambas cuentas:
@'
{
channels: {
discord: {
gatewayReadyTimeoutMs: 120000,
gatewayRuntimeReadyTimeoutMs: 120000,
accounts: {
default: {
gatewayReadyTimeoutMs: 120000,
gatewayRuntimeReadyTimeoutMs: 120000,
},
support: {
gatewayReadyTimeoutMs: 120000,
gatewayRuntimeReadyTimeoutMs: 120000,
},
},
},
},
}
'@ | Set-Content -Encoding UTF8 .\discord-timeouts.patch.json5
openclaw config patch --file .\discord-timeouts.patch.json5 --dry-run
openclaw config patch --file .\discord-timeouts.patch.json5
openclaw gateway restart
Pero primero reinicia normal; quiero ver si se reconectan limpio.
vale no habia leido esto y acabo de comprobar que se han reinicado ellos solos y han vuelto a aparecer pero solo el principal me ha contestado
Vale, eso ya es mejor: si se reiniciaron solos, el 1006 fue caĂda/reconnect del websocket.
Que solo conteste el principal suele ser una de estas dos cosas:
- El bot
supportrecibe el mensaje, pero no estĂĄ enrutado al subagente correcto. - El bot
supportlo ignora por allowlist/mention/pairing.
Comprueba el binding del subagente:
openclaw config get bindings
DeberĂa existir algo parecido a esto:
{
agentId: "support",
match: {
channel: "discord",
accountId: "support",
},
}
Si no estå, añådelo con cuidado sin borrar bindings existentes. Primero pégame tu openclaw config get bindings y te digo el patch exacto.
Y para ver si support estĂĄ ignorando el mensaje:
openclaw logs --limit 200 --max-bytes 1000000 | Select-String "support|discord-auto-reply|skipping|no-mention|allowlist|pairing|unauthorized|routed|binding|accountId"
Si le escribiste en un canal/thread, asegĂșrate de mencionarlo explĂcitamente, porque ahora support.guilds."*".requireMention estĂĄ en true.