#Cron messages to Discord

1 messages · Page 1 of 1 (latest)

tired jacinth
#

How can we send cron messages to discord? it only works for the user for me.

mental loomBOT
#

To help others find answers, you can mark your question as solved via Right click solution message -> Apps -> âś… Mark Solution

tired jacinth
#

I get info No reply from agent. always.

#
 "delivery": {
        "mode": "announce",
        "channel": "discord",
        "to": "channel:12345"
      },
#

this is what i tried

white sorrelBOT
#

Cron can deliver to Discord, but if you don’t pin the delivery target it’ll often fall back to the “last route” (which is usually your DM) — so it looks like “it only works for the user”.

Use an isolated cron job + announce + explicit Discord channel target:

openclaw cron add \
--name "Discord cron test" \
--at "5m" \
--session isolated \
--message "Hello from cron đź‘‹" \
--announce \
--channel discord \
--to "channel:1474685426949296351"

For recurring:

#
openclaw cron add \
--name "Every hour" \
--cron "0 * * * *" \
--session isolated \
--message "Hourly ping" \
--announce \
--channel discord \
--to "channel:1474685426949296351"

Things to double-check if it still DMs you / fails:

  • The Discord bot/user your Gateway is using is actually in that server and has Send Messages permission in that channel.
  • If you have multiple Discord accounts/tokens configured: cron “announce” delivery currently resolves the default Discord account — so make sure the default is the one that can post in that channel.

Docs:

#

Yep — that delivery block is the right shape for an isolated cron job (i.e. sessionTarget: "isolated" + payload.kind: "agentTurn"). A couple of gotchas:

  • delivery is top-level on the job, not inside payload.
  • Delivery is only supported for isolated jobs. If you use sessionTarget: "main" / payload.kind: "systemEvent", it won’t “announce” to Discord (it’ll just enqueue a system event).

A full minimal job (tool-call JSON) looks like:

{
  "name": "Discord cron test",
  "schedule": { "kind": "cron", "expr": "*/5 * * * *" },
  "sessionTarget": "isolated",
  "payload": {
    "kind": "agentTurn",
    "message": "Hello from cron"
  },
#

If you paste:

  1. openclaw --version
  2. openclaw cron list
  3. openclaw cron runs --id <jobId>
    …I can tell you exactly where it’s routing and why.
#
  "delivery": {
    "mode": "announce",
    "channel": "discord",
    "to": "channel:12345"
  }
}

Notes:

  • to should be the real Discord channel ID and the channel:<id> prefix is recommended.
  • If you don’t want the job to fail when Discord delivery has an issue, add: "bestEffort": true.

Docs: https://docs.openclaw.ai/automation/cron-jobs (see “Delivery (channel + target)”).

#

That log line is coming from the delivery layer and it literally means: the cron run completed, but the agent produced zero outbound message payloads, so there was nothing to “announce” to Discord.

Common reasons:

  1. Your prompt/agent is “silent by default” (e.g. it returns NO_REPLY, or a heartbeat-style HEARTBEAT_OK, or otherwise outputs nothing unless it “needs” to).
  2. You told it to use the message tool and then it ends with a silent token / no normal text output.
  3. The run is happening, but the model is erroring/aborting before it emits any message (less common — then cron runs will show it).

Quick sanity test (force a plain text reply; no tools):

openclaw cron add \
  --name "discord announce test" \
  --at "1m" \
  --session isolated \
  --message "Reply with exactly this text and nothing else: CRON_OK" \
#
  --announce \
  --channel discord \
  --to "channel:1474685426949296351"

If that still prints “No reply from agent.”, paste:

  • openclaw --version
  • openclaw cron runs --id <jobId> --limit 5

That run record will usually show whether the model aborted, timed out, or whether your agent is intentionally emitting no payloads.

#

I don’t see what you tried (your last message didn’t include the command / job JSON). Can you paste either:

  • the exact openclaw cron add ... command you ran, or
  • openclaw cron list output for that job (JSON), plus
  • openclaw cron runs --id <jobId> --limit 5

About the info No reply from agent. message: it means the cron run executed, but the agent produced zero “outbound payloads” (no normal text message), so there’s nothing to announce to Discord.

The two most common causes:

  1. Job is “main session” (sessionTarget: "main" / payload.kind: "systemEvent").
    Main-session cron jobs do not do delivery.announce. For Discord delivery you want:

    • sessionTarget: "isolated"
    • payload.kind: "agentTurn"
    • top-level delivery: { mode:"announce", channel:"discord", to:"channel:<id>" }
  2. Your prompt allows silence (e.g. “only reply if …”, or your agent instructions say to return NO_REPLY / be silent).