























@@ -646,6 +646,139 @@ This repo ships a matching skill doc at `skills/voice-call/SKILL.md`.
646646| `voicecall.end` | `callId` |
647647| `voicecall.status` | `callId` |
648648649+## Troubleshooting
650+651+### Setup fails webhook exposure
652+653+Run setup from the same environment that runs the Gateway:
654+655+```bash
656+openclaw voicecall setup
657+openclaw voicecall setup --json
658+```
659+660+For `twilio`, `telnyx`, and `plivo`, `webhook-exposure` must be green. A
661+configured `publicUrl` still fails when it points at local or private network
662+space, because the carrier cannot call back into those addresses. Do not use
663+`localhost`, `127.0.0.1`, `0.0.0.0`, `10.x`, `172.16.x`-`172.31.x`,
664+`192.168.x`, `169.254.x`, `fc00::/7`, or `fd00::/8` as `publicUrl`.
665+666+Use one public exposure path:
667+668+```json5
669+{
670+ plugins: {
671+ entries: {
672+"voice-call": {
673+ config: {
674+ publicUrl: "https://voice.example.com/voice/webhook",
675+// or
676+ tunnel: { provider: "ngrok" },
677+// or
678+ tailscale: { mode: "funnel", path: "/voice/webhook" },
679+ },
680+ },
681+ },
682+ },
683+}
684+```
685+686+After changing config, restart or reload the Gateway, then run:
687+688+```bash
689+openclaw voicecall setup
690+openclaw voicecall smoke
691+```
692+693+`voicecall smoke` is a dry run unless you pass `--yes`.
694+695+### Provider credentials fail
696+697+Check the selected provider and the required credential fields:
698+699+- Twilio: `twilio.accountSid`, `twilio.authToken`, and `fromNumber`, or
700+`TWILIO_ACCOUNT_SID`, `TWILIO_AUTH_TOKEN`, and `TWILIO_FROM_NUMBER`.
701+- Telnyx: `telnyx.apiKey`, `telnyx.connectionId`, `telnyx.publicKey`, and
702+`fromNumber`.
703+- Plivo: `plivo.authId`, `plivo.authToken`, and `fromNumber`.
704+705+Credentials must exist on the Gateway host. Editing a local shell profile does
706+not affect an already running Gateway until it restarts or reloads its
707+environment.
708+709+### Calls start but provider webhooks do not arrive
710+711+Confirm the provider console points at the exact public webhook URL:
712+713+```text
714+https://voice.example.com/voice/webhook
715+```
716+717+Then inspect runtime state:
718+719+```bash
720+openclaw voicecall status --call-id <id>
721+openclaw voicecall tail
722+```
723+724+Common causes:
725+726+- `publicUrl` points at a different path than `serve.path`.
727+- The tunnel URL changed after the Gateway started.
728+- A proxy forwards the request but strips or rewrites host/proto headers.
729+- Firewall or DNS routes the public hostname somewhere other than the Gateway.
730+- The Gateway was restarted without the Voice Call plugin enabled.
731+732+When a reverse proxy or tunnel is in front of the Gateway, set
733+`webhookSecurity.allowedHosts` to the public hostname, or use
734+`webhookSecurity.trustedProxyIPs` for a known proxy address. Use
735+`webhookSecurity.trustForwardingHeaders` only when the proxy boundary is under
736+your control.
737+738+### Signature verification fails
739+740+Provider signatures are checked against the public URL OpenClaw reconstructs
741+from the incoming request. If signatures fail:
742+743+- Confirm the provider webhook URL exactly matches `publicUrl`, including
744+ scheme, host, and path.
745+- For ngrok free-tier URLs, update `publicUrl` when the tunnel hostname changes.
746+- Ensure the proxy preserves the original host and proto headers, or configure
747+`webhookSecurity.allowedHosts`.
748+- Do not enable `skipSignatureVerification` outside local testing.
749+750+### Google Meet Twilio joins fail
751+752+Google Meet uses this plugin for Twilio dial-in joins. First verify Voice Call:
753+754+```bash
755+openclaw voicecall setup
756+openclaw voicecall smoke --to "+15555550123"
757+```
758+759+Then verify the Google Meet transport explicitly:
760+761+```bash
762+openclaw googlemeet setup --transport twilio
763+```
764+765+If Voice Call is green but the Meet participant never joins, check the Meet
766+dial-in number, PIN, and `--dtmf-sequence`. The phone call can be healthy while
767+the meeting rejects or ignores an incorrect DTMF sequence.
768+769+### Realtime call has no speech
770+771+Confirm only one audio mode is enabled. `realtime.enabled` and
772+`streaming.enabled` cannot both be true.
773+774+For realtime Twilio calls, also verify:
775+776+- A realtime provider plugin is loaded and registered.
777+- `realtime.provider` is unset or names a registered provider.
778+- The provider API key is available to the Gateway process.
779+- `openclaw voicecall tail` shows the media stream accepted and realtime
780+ provider readiness before the initial greeting.
781+649782## Related
650783651784- [Talk mode](/nodes/talk)
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。