#webhook received but not taking action
21 messages · Page 1 of 1 (latest)
Yep, that usually means the webhook part works, but the completion delivery path is broken.
For async/background work, OpenClaw needs all 3 of these to line up:
- the task reaches a terminal state
- the task is still bound to the original session and requesterOrigin
- if direct send fails, the session-queued + heartbeat wake path still works
So if you see the webhook being received, but no follow-up message, the usual failure modes are:
deliveryStatus: parent_missing→ task was not bound to the originating session/origindeliveryStatus: failed→ Discord send faileddeliveryStatus: session_queued→ direct send fell back to session queue, but heartbeat got skipped/deferred- older routing bug → stored
lastChannel/lastTogot overwritten, so completion had nowhere good to go
Please paste these:
openclaw --version
openclaw status --all
openclaw tasks show <taskId-or-runId-or-sessionKey>
openclaw tasks audit
And check logs for these lines:
openclaw logs --follow
Look for:
webhook receivedwebhook processed
Failed to deliver background task updateFailed to queue background task session deliveryheartbeat skippedrequests-in-flight
If this is your own plugin/tool, the big gotcha is this: receiving the webhook is not enough. The task/flow must be created from tool context, or rebound later with a trusted stored session binding, so OpenClaw knows which chat to wake.
Relevant docs:
- https://docs.openclaw.ai/help/faq
- https://docs.openclaw.ai/automation/tasks
- https://docs.openclaw.ai/plugins/sdk-runtime
- https://docs.openclaw.ai/plugins/webhooks
If you paste the tasks show output, I can probably tell which branch it’s failing on pretty quickly.
where do i find the run id or sessoin key
Easiest way, don’t hunt the session key first, just grab the task ID.
Run:
openclaw tasks list
That list includes columns for:
- Task ID
- Run ID
- Child Session
Then use the Task ID directly:
openclaw tasks show <taskId>
If you want the raw fields:
openclaw tasks list --json
If you’re already in the same chat/thread, /tasks can also show the active background task.
So basically:
- run id → from
openclaw tasks list - session key → often visible in task details after
openclaw tasks show <taskId> - best first step → use the task id, since
tasks showaccepts that too
If you paste the output of openclaw tasks list, I can tell you exactly which value to use.
it says Background tasks: 0
Task pressure: 0 queued · 0 running · 0 issues
No background tasks found.
Ah, that’s the clue.
If openclaw tasks list is empty, then OpenClaw is not tracking that job as a background task. In that state, the webhook can arrive, but there’s nothing for OpenClaw to wake/follow up from.
So this is usually one of these:
- custom tool/plugin: it receives the webhook, but never created or bound a task/flow to the original session
- the work started outside a real session, so no
sessionKey/requesterOriginwas captured - older version / bug, if this is supposed to be a built-in async path
Important bit: built-in follow-up does not happen automatically just because a webhook was received.
If this is your own tool, you usually need to create/bind it from tool context, for example:
api.runtime.taskFlow.fromToolContext(ctx)- or later
bindSession({ sessionKey, requesterOrigin })from trusted stored state
If it’s a built-in tool and you still get 0 tasks, that’s not expected.
Can you paste:
openclaw --version
and tell me which tool/plugin is doing the webhook callback?
If you can also grab the matching log lines around the callback, even better:
openclaw logs --follow
and look for webhook received / webhook processed.
That’ll tell us pretty fast if this is “webhook handled, but no task bound” vs an actual bug.
penclaw task list
15:30:48+00:00 [plugins] [webhooks] skipping route joblisten: plugins.entries.webhooks.routes.joblisten.secret SecretRef is unresolved (env:default:OPENCLAW_WEBHOOK_SECRET).
Yep, that warning is probably the problem.
OpenClaw is saying it skipped the joblisten webhook route entirely because this secret could not be resolved:
plugins.entries.webhooks.routes.joblisten.secret -> env:default:OPENCLAW_WEBHOOK_SECRET
So if that’s the route you expect callbacks on, it is not actually active.
Fix
Make sure OPENCLAW_WEBHOOK_SECRET is set in the Gateway process environment, then restart the gateway:
openclaw gateway restart
Then check that the warning is gone.
Important gotcha
If you’re running OpenClaw as a service, setting the env var in your current shell is often not enough. It has to exist where the gateway service starts.
What to verify next
- set
OPENCLAW_WEBHOOK_SECRET - restart gateway
- confirm you no longer see:
skipping route joblisten ... OPENCLAW_WEBHOOK_SECRET
- then retry the webhook flow
If you want, paste how you’re setting OPENCLAW_WEBHOOK_SECRET and I can tell you if it’s being set in the wrong place. Docs: https://docs.openclaw.ai/plugins/webhooks
0 [plugins] [webhooks] skipping route joblisten: plugins.entries.webhooks.routes.joblisten.secret SecretRef is unresolved (env:default:OPENCLAW_WEBHOOK_SECRET).
Yep, same warning, same root cause.
joblisten is still disabled. OpenClaw is not resolving OPENCLAW_WEBHOOK_SECRET, so that webhook route never gets registered.
So until this warning disappears, that webhook path will not work.
Fast sanity check
Temporarily replace the SecretRef with a literal string for that route:
plugins: {
entries: {
webhooks: {
enabled: true,
config: {
routes: {
joblisten: {
// ...
secret: "some-test-secret"
}
}
}
}
}
}
Then restart: