mock (Entwicklung, kein Netzwerk), plivo (Voice API + XML-Weiterleitung +
GetInput-Spracherkennung), telnyx (Call Control v2), twilio (Programmable Voice +
Media Streams).
Das Voice-Call-Plugin wird innerhalb des Gateway-Prozesses ausgeführt. Wenn Sie ein
entferntes Gateway verwenden, installieren und konfigurieren Sie das Plugin auf dem Rechner, auf dem das
Gateway ausgeführt wird, und starten Sie anschließend das Gateway neu, damit es das Plugin lädt.
Schnellstart
1
Plugin installieren
- Aus npm
- Aus einem lokalen Ordner (Entwicklung)
2
Provider und Webhook konfigurieren
Legen Sie die Konfiguration unter
plugins.entries.voice-call.config fest (siehe
Konfiguration unten). Mindestens erforderlich sind: provider, Provider-
Zugangsdaten, fromNumber und eine öffentlich erreichbare Webhook-URL.3
Einrichtung überprüfen
streaming oder realtime) aktiv ist.4
Smoke-Test
--yes hinzu, um einen kurzen ausgehenden
Benachrichtigungsanruf zu tätigen:Konfiguration
Wennenabled: true, dem ausgewählten Provider jedoch Zugangsdaten fehlen, protokolliert der Gateway-
Start eine Warnung über die unvollständige Einrichtung mit den fehlenden Schlüsseln und überspringt
den Start der Laufzeit. Befehle, RPC-Aufrufe und Agent-Tools geben bei Verwendung weiterhin die
exakt fehlende Konfiguration zurück.
Voice-Call-Zugangsdaten akzeptieren SecretRefs.
plugins.entries.voice-call.config.twilio.authToken, plugins.entries.voice-call.config.realtime.providers.*.apiKey, plugins.entries.voice-call.config.streaming.providers.*.apiKey und plugins.entries.voice-call.config.tts.providers.*.apiKey werden über die standardmäßige SecretRef-Oberfläche aufgelöst; siehe SecretRef-Zugangsdatenoberfläche.Konfigurationsreferenz
Oben nicht aufgeführte Schlüssel der obersten Ebene unterplugins.entries.voice-call.config:
Twilio verwendet standardmäßig seinen US1-REST-Endpunkt. Um Anrufe in einer unterstützten
Region außerhalb der USA zu verarbeiten, setzen Sie
twilio.region auf ie1 oder au1 und verwenden Sie Zugangsdaten aus
dieser Region. Siehe
Twilios Leitfaden zur REST API in Regionen außerhalb der USA.
Hinweise zur Provider-Bereitstellung und Sicherheit
Hinweise zur Provider-Bereitstellung und Sicherheit
- Twilio, Telnyx und Plivo benötigen jeweils eine öffentlich erreichbare Webhook-URL.
mockist ein lokaler Entwicklungs-Provider (keine Netzwerkaufrufe).- Telnyx benötigt
telnyx.publicKey(oderTELNYX_PUBLIC_KEY), sofernskipSignatureVerificationnicht true ist. skipSignatureVerificationist ausschließlich für lokale Tests vorgesehen.- Legen Sie im kostenlosen ngrok-Tarif
publicUrlauf die exakte ngrok-URL fest; die Signaturprüfung wird immer erzwungen. tunnel.allowNgrokFreeTierLoopbackBypass: trueerlaubt Twilio-Webhooks mit ungültigen Signaturen nur, wenntunnel.provider="ngrok"undserve.bindLoopback ist (lokaler ngrok-Agent). Nur für die lokale Entwicklung.- URLs des kostenlosen ngrok-Tarifs können sich ändern oder Zwischenseiten hinzufügen; wenn
publicUrlabweicht, schlägt die Twilio-Signaturprüfung fehl. Produktion: Bevorzugen Sie eine stabile Domain oder einen Tailscale-Funnel.
Limits für Streaming-Verbindungen
Limits für Streaming-Verbindungen
streaming.preStartTimeoutMs(Standardwert5000) schließt Sockets, die nie einen gültigenstart-Frame senden.streaming.maxPendingConnections(Standardwert32) begrenzt die Gesamtzahl nicht authentifizierter Sockets vor dem Start.streaming.maxPendingConnectionsPerIp(Standardwert4) begrenzt nicht authentifizierte Sockets vor dem Start pro Quell-IP.streaming.maxConnections(Standardwert128) begrenzt alle offenen Medienstream-Sockets (ausstehend + aktiv).
Migrationen veralteter Konfigurationen
Migrationen veralteter Konfigurationen
Die Konfigurationsanalyse normalisiert diese veralteten Schlüssel automatisch und protokolliert eine
Warnung, die den Ersatzpfad nennt; der Shim wird in einer zukünftigen
Version (
2026.6.0) entfernt. Führen Sie daher openclaw doctor --fix aus, um die eingecheckte
Konfiguration in die kanonische Form umzuschreiben:provider: "log"→provider: "mock"twilio.from→fromNumberstreaming.sttProvider→streaming.providerstreaming.openaiApiKey→streaming.providers.openai.apiKeystreaming.sttModel→streaming.providers.openai.modelstreaming.silenceDurationMs→streaming.providers.openai.silenceDurationMsstreaming.vadThreshold→streaming.providers.openai.vadThresholdrealtime.agentContext.includeSystemPromptwurde entfernt (der Echtzeitkontext verwendet nun die generierte Agent-Anweisung)
Sitzungsbereich
Standardmäßig verwendet Voice CallsessionScope: "per-phone", sodass wiederholte Anrufe desselben
Anrufers den Konversationsspeicher beibehalten. Legen Sie sessionScope: "per-call" fest, wenn
jeder Carrier-Anruf mit einem frischen Kontext beginnen soll, beispielsweise für Empfang,
Buchung, IVR oder Google-Meet-Brückenabläufe, bei denen dieselbe Telefonnummer
verschiedene Besprechungen repräsentieren kann.
Voice Call speichert generierte Sitzungsschlüssel im konfigurierten Agent-Namensraum
(agent:<agentId>:voice:*). Explizite rohe Integrationsschlüssel werden in denselben
Namensraum aufgelöst: Ein kanonischer agent:<configuredAgentId>:*-Schlüssel behält diesen
Eigentümer bei und berücksichtigt das core-seitige session.mainKey/Global-Scope-Aliasing; fremde oder
fehlerhafte agent:*-Eingaben werden als undurchsichtiger Schlüssel unter dem konfigurierten
Agent eingeordnet; global und unknown bleiben globale Sentinelwerte.
Echtzeit-Sprachkonversationen
realtime wählt einen bidirektionalen Echtzeit-Sprach-Provider für Live-Anrufaudio aus.
Dies ist unabhängig von streaming, das Audio lediglich an Provider für die Echtzeit-
Transkription weiterleitet.
Aktuelles Laufzeitverhalten:
realtime.enabledwird für Twilio und Telnyx unterstützt.realtime.providerist optional. Wenn nicht festgelegt, verwendet Voice Call den ersten registrierten Realtime-Sprach-Provider.- Gebündelte Realtime-Sprach-Provider: Google Gemini Live (
google) und OpenAI (openai), die von ihren Provider-Plugins registriert werden. - Die Provider-eigene Rohkonfiguration befindet sich unter
realtime.providers.<providerId>. - Voice Call stellt standardmäßig das gemeinsame Realtime-Tool
openclaw_agent_consultbereit. Das Realtime-Modell kann es aufrufen, wenn der Anrufer nach tiefergehender Schlussfolgerung, aktuellen Informationen oder regulären OpenClaw-Tools fragt. realtime.consultPolicyfügt optional Anweisungen dazu hinzu, wann das Realtime-Modellopenclaw_agent_consultaufrufen soll.realtime.agentContext.enabledist standardmäßig deaktiviert. Wenn diese Option aktiviert ist, fügt Voice Call beim Einrichten der Sitzung eine begrenzte Agentenidentität und eine Kapsel ausgewählter Workspace-Dateien in die Anweisungen für den Realtime-Provider ein.realtime.fastContext.enabledist standardmäßig deaktiviert. Wenn diese Option aktiviert ist, durchsucht Voice Call zunächst den indizierten Speicher-/Sitzungskontext nach der Konsultationsfrage und gibt diese Ausschnitte innerhalb vonrealtime.fastContext.timeoutMsan das Realtime-Modell zurück, bevor nur dann auf den vollständigen Konsultationsagenten zurückgegriffen wird, wennrealtime.fastContext.fallbackToConsultwahr ist.- Wenn
realtime.providerauf einen nicht registrierten Provider verweist oder überhaupt kein Realtime-Sprach-Provider registriert ist, protokolliert Voice Call eine Warnung und überspringt Realtime-Medien, statt das gesamte Plugin fehlschlagen zu lassen. inboundPolicydarf nicht"disabled"sein, wennrealtime.enabledwahr ist;validateProviderConfiglehnt diese Kombination ab.- Konsultations-Sitzungsschlüssel verwenden, sofern verfügbar, die gespeicherte Anrufsitzung erneut und greifen andernfalls auf den konfigurierten Wert
sessionScopezurück (standardmäßigper-phoneoderper-callfür isolierte Anrufe).
Tool-Richtlinie
realtime.toolPolicy steuert den Konsultationslauf:
realtime.consultPolicy steuert nur die Anweisungen für das Realtime-Modell:
Sprachkontext des Agenten
Aktivieren Sierealtime.agentContext, wenn die Sprachbrücke wie der
konfigurierte OpenClaw-Agent klingen soll, ohne bei gewöhnlichen Gesprächsbeiträgen den vollständigen
Roundtrip einer Agentenkonsultation in Kauf zu nehmen. Die Kontextkapsel wird einmal beim Erstellen der
Realtime-Sitzung hinzugefügt und verursacht daher keine zusätzliche Latenz pro Gesprächsbeitrag. Aufrufe von
openclaw_agent_consult führen weiterhin den vollständigen OpenClaw-Agenten aus und sollten
für Tool-Aufgaben, aktuelle Informationen, Speicherabfragen oder den Workspace-Zustand verwendet werden.
Beispiele für Realtime-Provider
- Google Gemini Live
- OpenAI
Standardwerte: API-Schlüssel aus
realtime.providers.google.apiKey, GEMINI_API_KEY
oder GOOGLE_API_KEY; Modell gemini-3.1-flash-live-preview;
Stimme Kore. sessionResumption und contextWindowCompression sind standardmäßig
für längere, wiederverbindbare Anrufe aktiviert. Verwenden Sie silenceDurationMs,
startSensitivity und endSensitivity, um einen schnelleren Sprecherwechsel bei
Telefonieaudio einzustellen.Streaming-Transkription
streaming verbindet Twilio Media Streams mit einem Realtime-Transkriptions-Provider.
Der klassische Streaming-Pfad erfordert provider: "twilio"; eine Konfiguration mit
Telnyx, Plivo oder Mock wird abgelehnt. Live-Audio von Telnyx verwendet stattdessen den separat
authentifizierten Pfad realtime.enabled.
Aktuelles Laufzeitverhalten:
streaming.providerist optional. Wenn nicht festgelegt, verwendet Voice Call den ersten registrierten Realtime-Transkriptions-Provider.- Gebündelte Realtime-Transkriptions-Provider: Deepgram (
deepgram), ElevenLabs (elevenlabs), Mistral (mistral), OpenAI (openai) und xAI (xai), die von ihren Provider-Plugins registriert werden. - Die Provider-eigene Rohkonfiguration befindet sich unter
streaming.providers.<providerId>. - Nachdem Twilio eine akzeptierte Stream-Nachricht
startgesendet hat, registriert Voice Call den Stream sofort, stellt eingehende Medien während des Verbindungsaufbaus durch den Transkriptions-Provider in eine Warteschlange und beginnt mit der ersten Begrüßung erst, wenn die Realtime-Transkription bereit ist. - Wenn
streaming.providerauf einen nicht registrierten Provider verweist oder keiner registriert ist, protokolliert Voice Call eine Warnung und überspringt das Medienstreaming, statt das gesamte Plugin fehlschlagen zu lassen.
Beispiele für Streaming-Provider
- OpenAI
- xAI
Standardwerte: API-Schlüssel
streaming.providers.openai.apiKey oder
OPENAI_API_KEY; Modell gpt-4o-transcribe; silenceDurationMs: 800;
vadThreshold: 0.5.TTS für Anrufe
Voice Call verwendet die Kernkonfigurationtts für die Streaming-Sprachausgabe bei
Anrufen. Sie können sie in der Plugin-Konfiguration mit derselben Struktur überschreiben —
sie wird rekursiv mit tts zusammengeführt.
- Veraltete
tts.<provider>-Schlüssel innerhalb der Plugin-Konfiguration (openai,elevenlabs,microsoft,edge) werden durchopenclaw doctor --fixrepariert; die gespeicherte Konfiguration solltetts.providers.<provider>verwenden. - Kern-TTS wird verwendet, wenn Twilio-Medienstreaming aktiviert ist; andernfalls greifen Anrufe auf Provider-native Stimmen zurück.
- Wenn bereits ein Twilio-Medienstream aktiv ist, greift Voice Call nicht auf TwiML
<Say>zurück. Wenn Telefonie-TTS in diesem Zustand nicht verfügbar ist, schlägt die Wiedergabeanforderung fehl, statt zwei Wiedergabepfade zu vermischen. - Wenn Telefonie-TTS auf einen sekundären Provider zurückgreift, protokolliert Voice Call zu Debuggingzwecken eine Warnung mit der Provider-Kette (
from,to,attempts). - Wenn Twilio-Barge-in oder der Stream-Abbau die ausstehende TTS-Warteschlange leert, werden Wiedergabeanforderungen in der Warteschlange abgeschlossen, statt Anrufer, die auf den Abschluss der Wiedergabe warten, unbegrenzt warten zu lassen.
TTS-Beispiele
- Nur Core-TTS
- Überschreiben mit ElevenLabs (nur Anrufe)
- OpenAI-Modell überschreiben (Deep Merge)
Eingehende Anrufe
Die Richtlinie für eingehende Anrufe ist standardmäßigdisabled. Um eingehende Anrufe zu aktivieren, legen Sie Folgendes fest:
responseModel,
responseSystemPrompt und responseTimeoutMs an.
Routing pro Nummer
Verwenden Sienumbers, wenn ein Voice-Call-Plugin Anrufe für mehrere Telefonnummern
empfängt und jede Nummer wie eine andere Leitung funktionieren soll. Beispielsweise
kann eine Nummer einen informellen persönlichen Assistenten verwenden, während eine andere eine geschäftliche
Persona, einen anderen Antwort-Agenten und eine andere TTS-Stimme verwendet.
Routen werden anhand der vom Provider bereitgestellten gewählten Nummer To ausgewählt. Schlüssel müssen
E.164-Nummern sein. Wenn ein Anruf eingeht, ermittelt Voice Call einmalig die passende
Route, speichert sie im Anrufdatensatz und verwendet diese
effektive Konfiguration erneut für die Begrüßung, den klassischen Pfad für automatische Antworten, den Echtzeit-
Konsultationspfad und die TTS-Wiedergabe. Wenn keine Route übereinstimmt, wird die globale Voice-Call-
Konfiguration verwendet. Ausgehende Anrufe verwenden numbers nicht; übergeben Sie beim Einleiten des Anrufs
das ausgehende Ziel, die Nachricht und die Sitzung explizit.
Routenüberschreibungen unterstützen derzeit:
inboundGreetingttsagentIdresponseModelresponseSystemPromptresponseTimeoutMs
tts wird per Deep Merge über die globale Voice-Call-Konfiguration tts gelegt, sodass
Sie in der Regel nur die Provider-Stimme überschreiben müssen:
Vertrag für gesprochene Ausgaben
Für automatische Antworten hängt Voice Call einen strikten Vertrag für gesprochene Ausgaben an den System-Prompt an, der eine JSON-Antwort vom Typ{"spoken":"..."} verlangt. Voice Call
extrahiert den Sprachtext defensiv:
- Ignoriert Nutzdaten, die als Reasoning-/Fehlerinhalt gekennzeichnet sind.
- Parst direktes JSON, JSON in Codeblöcken oder eingebettete Schlüssel vom Typ
"spoken". - Greift auf Klartext zurück und entfernt wahrscheinliche einleitende Planungs-/Metaabsätze.
Verhalten beim Gesprächsbeginn
Bei ausgehenden Anrufen vom Typconversation ist die Verarbeitung der ersten Nachricht an den aktiven
Wiedergabestatus gekoppelt:
- Das Leeren der Barge-in-Warteschlange und automatische Antworten werden nur unterdrückt, solange die anfängliche Begrüßung aktiv gesprochen wird.
- Wenn die anfängliche Wiedergabe fehlschlägt, kehrt der Anruf zu
listeningzurück und die anfängliche Nachricht bleibt für einen erneuten Versuch in der Warteschlange. - Die anfängliche Wiedergabe für Twilio-Streaming beginnt beim Verbindungsaufbau des Streams ohne zusätzliche Verzögerung.
- Barge-in bricht die aktive Wiedergabe ab und entfernt Twilio-TTS-Einträge aus der Warteschlange, deren Wiedergabe noch nicht begonnen hat. Entfernte Einträge werden als übersprungen aufgelöst, sodass die Logik für Folgeantworten fortfahren kann, ohne auf Audio zu warten, das niemals abgespielt wird.
- Echtzeit-Sprachunterhaltungen verwenden den eigenen Eröffnungsbeitrag des Echtzeit-Streams. Voice Call sendet für diese anfängliche Nachricht kein veraltetes TwiML-Update vom Typ
<Say>, sodass ausgehende Sitzungen vom Typ<Connect><Stream>verbunden bleiben.
Kulanzfrist bei Trennung eines Twilio-Streams
Wenn ein Twilio-Medienstream getrennt wird, wartet Voice Call 2000 ms, bevor der Anruf automatisch beendet wird:- Wenn der Stream innerhalb dieses Zeitfensters erneut verbunden wird, wird das automatische Beenden abgebrochen.
- Wenn nach Ablauf der Kulanzfrist kein Stream erneut registriert wird, wird der Anruf beendet, um dauerhaft aktive Anrufe zu verhindern.
Bereinigung veralteter Anrufe
Verwenden SiestaleCallReaperSeconds (Standardwert 120), um Anrufe zu beenden, die nie
angenommen werden und nie einen aktiven Gesprächszustand erreichen, beispielsweise Anrufe im Benachrichtigungsmodus,
bei denen der Provider nie einen abschließenden Webhook zustellt. Setzen Sie den Wert zum
Deaktivieren auf 0.
Die Bereinigung wird alle 30 Sekunden ausgeführt und beendet nur Anrufe, die keinen
Zeitstempel answeredAt aufweisen und sich noch nicht in einem abschließenden oder aktiven
Zustand (speaking/listening) befinden. Angenommene Gespräche werden daher von diesem Timer nie bereinigt;
maxDurationSeconds (Standardwert 300) ist die separate Obergrenze,
die angenommene Anrufe beendet, wenn sie zu lange dauern.
Erhöhen Sie für benachrichtigungsartige Abläufe, bei denen Mobilfunkanbieter Klingel-/Annahme-
Webhooks möglicherweise langsam zustellen, staleCallReaperSeconds über den Standardwert hinaus, damit langsame, aber normale
Anrufe nicht vorzeitig bereinigt werden; 120-300 Sekunden sind ein angemessener Bereich für den Produktivbetrieb.
Webhook-Sicherheit
Wenn sich ein Proxy oder Tunnel vor dem Gateway befindet, rekonstruiert das Plugin die öffentliche URL für die Signaturprüfung. Diese Optionen steuern, welchen weitergeleiteten Headern vertraut wird:string[]
Hosts aus Weiterleitungs-Headern zulassen.
boolean
Weitergeleiteten Headern ohne Zulassungsliste vertrauen.
string[]
Weitergeleiteten Headern nur vertrauen, wenn die Remote-IP der Anfrage mit der Liste übereinstimmt.
- Der Wiederholungsschutz für Webhooks ist für Twilio, Telnyx und Plivo aktiviert. Wiederholt gesendete gültige Webhook-Anfragen werden bestätigt, ihre Nebenwirkungen jedoch übersprungen.
- Twilio-Gesprächsbeiträge enthalten in Rückrufen vom Typ
<Gather>ein Token pro Beitrag, sodass veraltete/wiederholte Sprachrückrufe keinen neueren ausstehenden Transkriptbeitrag erfüllen können. - Nicht authentifizierte Webhook-Anfragen werden vor dem Lesen des Bodys abgelehnt, wenn die erforderlichen Signatur-Header des Providers fehlen.
- Der Voice-Call-Webhook verwendet vor der Signaturprüfung das gemeinsame Profil zum Lesen des Bodys vor der Authentifizierung (maximal 64 KB Body-Größe, 5 Sekunden Lesezeitüberschreitung) sowie eine Obergrenze für gleichzeitig laufende Anfragen pro Schlüssel (standardmäßig 8 gleichzeitige Anfragen pro Schlüssel).
CLI
voicecall
an die Gateway-eigene Voice-Call-Laufzeit, sodass die CLI keinen
zweiten Webhook-Server bindet. Wenn kein Gateway erreichbar ist, greifen die Befehle auf
eine eigenständige CLI-Laufzeit zurück.
latency liest calls.jsonl aus dem standardmäßigen Voice-Call-Speicherpfad. Verwenden Sie
--file <path>, um auf ein anderes Protokoll zu verweisen, und --last <n>, um
die Analyse auf die letzten N Datensätze (Standardwert 200) zu beschränken. Die Ausgabe enthält Minimum/Maximum/Durchschnitt,
p50 und p95 für Beitragslatenz und Wartezeiten beim Zuhören.
Agentenwerkzeug
Werkzeugname:voice_call.
Das Voice-Call-Plugin enthält ein entsprechendes Agenten-Skill.
Gateway-RPC
dtmfSequence ist nur mit mode: "conversation" gültig; Anrufe im Benachrichtigungsmodus
sollten voicecall.dtmf verwenden, nachdem der Anruf existiert, wenn sie nach dem Verbindungsaufbau
Ziffern benötigen.
Fehlerbehebung
Einrichtung der Webhook-Bereitstellung schlägt fehl
Führen Sie die Einrichtung in derselben Umgebung aus, in der auch das Gateway ausgeführt wird:twilio, telnyx und plivo muss webhook-exposure grün sein. Eine
konfigurierte publicUrl schlägt weiterhin fehl, wenn sie auf einen lokalen oder privaten
Netzwerkbereich verweist, da der Telefonieanbieter diese Adressen nicht zurückrufen kann.
Verwenden Sie localhost, 127.0.0.1, 0.0.0.0, 10.x, 172.16.x-172.31.x,
192.168.x, 169.254.x, fc00::/7, fd00::/8 oder andere
Carrier-Grade-NAT-Bereiche nicht als publicUrl.
Ausgehende Twilio-Anrufe im Benachrichtigungsmodus senden ihr anfängliches <Say>-TwiML direkt
in der Anfrage zur Anruferstellung, sodass die erste gesprochene Nachricht nicht davon abhängt,
dass Twilio Webhook-TwiML abruft. Ein öffentlicher Webhook ist weiterhin für Statusrückmeldungen,
Konversationsanrufe, DTMF vor dem Verbindungsaufbau, Echtzeitstreams und
Anrufsteuerung nach dem Verbindungsaufbau erforderlich.
Verwenden Sie einen öffentlichen Bereitstellungsweg:
voicecall smoke ist ein Probelauf, sofern Sie nicht --yes übergeben.
Provider-Anmeldedaten schlagen fehl
Prüfen Sie den ausgewählten Provider und die erforderlichen Anmeldedatenfelder:- Twilio:
twilio.accountSid,twilio.authTokenundfromNumberoderTWILIO_ACCOUNT_SID,TWILIO_AUTH_TOKENundTWILIO_FROM_NUMBER. - Telnyx:
telnyx.apiKey,telnyx.connectionId,telnyx.publicKeyundfromNumberoderTELNYX_API_KEY,TELNYX_CONNECTION_IDundTELNYX_PUBLIC_KEY. - Plivo:
plivo.authId,plivo.authTokenundfromNumberoderPLIVO_AUTH_IDundPLIVO_AUTH_TOKEN.
Anrufe starten, aber Provider-Webhooks treffen nicht ein
Vergewissern Sie sich, dass die Provider-Konsole auf die genaue öffentliche Webhook-URL verweist:publicUrlverweist auf einen anderen Pfad alsserve.path.- Die Tunnel-URL wurde nach dem Start des Gateways geändert.
- Ein Proxy leitet die Anfrage weiter, entfernt oder schreibt jedoch die Host-/Protokoll-Header um.
- Firewall oder DNS leitet den öffentlichen Hostnamen an ein anderes Ziel als das Gateway weiter.
- Das Gateway wurde neu gestartet, ohne dass das Voice-Call-Plugin aktiviert war.
webhookSecurity.allowedHosts auf den öffentlichen Hostnamen oder verwenden Sie
webhookSecurity.trustedProxyIPs für eine bekannte Proxy-Adresse. Verwenden Sie
webhookSecurity.trustForwardingHeaders nur, wenn die Proxy-Grenze
unter Ihrer Kontrolle steht.
Signaturüberprüfung schlägt fehl
Provider-Signaturen werden anhand der öffentlichen URL geprüft, die OpenClaw aus der eingehenden Anfrage rekonstruiert. Wenn Signaturen fehlschlagen:- Vergewissern Sie sich, dass die Provider-Webhook-URL exakt mit
publicUrlübereinstimmt, einschließlich Schema, Host und Pfad. - Aktualisieren Sie bei URLs der kostenlosen ngrok-Stufe
publicUrl, wenn sich der Tunnel-Hostname ändert. - Stellen Sie sicher, dass der Proxy die ursprünglichen Host- und Protokoll-Header beibehält, oder konfigurieren Sie
webhookSecurity.allowedHosts. - Aktivieren Sie
skipSignatureVerificationnicht außerhalb lokaler Tests.
Twilio-Beitritte zu Google Meet schlagen fehl
Google Meet verwendet dieses Plugin für Einwahlbeitritte über Twilio. Überprüfen Sie zunächst Voice Call:--dtmf-sequence. Der Telefonanruf kann ordnungsgemäß funktionieren,
während die Besprechung eine falsche DTMF-Sequenz ablehnt oder ignoriert.
Google Meet startet die Twilio-Telefonverbindung über voicecall.start mit einer
DTMF-Sequenz vor dem Verbindungsaufbau. Von der PIN abgeleitete Sequenzen enthalten
voiceCall.dtmfDelayMs des Google-Meet-Plugins (Standardwert 12000 ms) als vorangestellte
Twilio-Warteziffern, da Meet-Einwahlaufforderungen verspätet eintreffen können. Voice Call leitet
anschließend zurück zur Echtzeitverarbeitung, bevor die Begrüßung angefordert wird.
Verwenden Sie openclaw logs --follow für die Live-Phasenverfolgung. Ein ordnungsgemäßer Twilio-Meet-
Beitritt protokolliert diese Reihenfolge:
- Google Meet delegiert den Twilio-Beitritt an Voice Call.
- Voice Call speichert das DTMF-TwiML vor dem Verbindungsaufbau.
- Das anfängliche Twilio-TwiML wird verarbeitet und vor der Echtzeitverarbeitung bereitgestellt.
- Voice Call stellt Echtzeit-TwiML für den Twilio-Anruf bereit.
- Google Meet fordert nach der Verzögerung nach DTMF die Begrüßungssprache mit
voicecall.speakan.
openclaw voicecall tail zeigt weiterhin persistierte Anrufdatensätze an; dies ist für
Anrufstatus und Transkripte nützlich, dort wird jedoch nicht jeder Webhook-/Echtzeitübergang
angezeigt.
Echtzeitanruf hat keine Sprachausgabe
Stellen Sie sicher, dass nur ein Audiomodus aktiviert ist:realtime.enabled und
streaming.enabled können nicht beide wahr sein.
Überprüfen Sie bei Echtzeitanrufen über Twilio/Telnyx außerdem Folgendes:
- Ein Echtzeit-Provider-Plugin ist geladen und registriert.
realtime.providerist nicht gesetzt oder benennt einen registrierten Provider.- Der Provider-API-Schlüssel ist für den Gateway-Prozess verfügbar.
openclaw logs --followzeigt, dass Echtzeit-TwiML bereitgestellt, die Echtzeit-Bridge gestartet und die anfängliche Begrüßung in die Warteschlange gestellt wurde.