#Windows Scheduled Task can't find ngrok for voice-call plugin (spawn ngrok ENOENT)

1 messages Β· Page 1 of 1 (latest)

tropic bobcatBOT
#

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

dreamy thunderBOT
#

spawn ngrok ENOENT is coming from the voice-call plugin literally doing spawn("ngrok", …) (no config option for a full path right now). So the fix is: make ngrok resolvable in the PATH of the Gateway process (the Scheduled Task), or bypass the plugin’s tunnel and provide your own publicUrl.

Why this happens on Windows Scheduled Task

When you install the Gateway as a Scheduled Task, OpenClaw writes a task script:

  • %USERPROFILE%\.openclaw\gateway.cmd (or %USERPROFILE%\.openclaw-<profile>\gateway.cmd)

That script contains set ... lines (including a pinned PATH=... from the moment you installed the service). If you updated PATH afterwards, the task can still be running with the old pinned PATH.

Fix option A (recommended): reinstall the Gateway task after PATH is correct

  1. Open a brand new PowerShell window (important), then verify ngrok resolves:
Get-Command ngrok
ngrok version
  1. Reinstall the scheduled task so gateway.cmd gets regenerated with the correct PATH:
#
openclaw gateway install --force
openclaw gateway restart

Fix option B: edit gateway.cmd to add ngrok to PATH

Open %USERPROFILE%\.openclaw\gateway.cmd and either:

  • append ;C:\ngrok to the existing set PATH=... line, or
  • add a line near the top:
set "PATH=%PATH%;C:\ngrok"

Then restart the task (openclaw gateway restart).

Fix option C: bypass the plugin tunnel completely (no ngrok spawn)

#

Run ngrok yourself (with full path), and set publicUrl in config:

{
plugins: {
entries: {
"voice-call": {
config: {
publicUrl: "https://<your-domain>.ngrok-free.app/voice/webhook",
tunnel: { provider: "none" }
}
}
}
}
}