Fehlerbehebung
Häufige Probleme
401 Unauthorized bei Webhook-POST
Symptom: Alle Webhook-Anfragen geben HTTP 401 zurück.
Ursachen:
Fehlender Signatur-Header. Die Anfrage muss entweder
X-Webhook-SignatureoderX-OpenPR-Signatureim Formatsha256={hex-digest}enthalten.Falsches Secret. Der HMAC-SHA256-Digest muss mit einem der Secrets in
security.webhook_secretsübereinstimmen. Sicherstellen, dass Sender und Empfänger dasselbe Secret verwenden.Body-Mismatch. Die Signatur wird über den rohen Request-Body berechnet. Wenn ein Proxy oder Middleware den Body modifiziert (z.B. JSON neu kodiert), stimmt die Signatur nicht überein.
Debug:
# Debug-Protokollierung aktivieren
RUST_LOG=openpr_webhook=debug ./openpr-webhook config.toml
# Vorübergehend unsignierte Anfragen zum Testen erlauben
# (config.toml)
[security]
allow_unsigned = trueEvent wird ignoriert (not_bot_task)
Symptom: Die Antwort ist {"status": "ignored", "reason": "not_bot_task"}.
Ursache: Die Webhook-Nutzlast enthält kein bot_context.is_bot_task = true. OpenPR-Webhook verarbeitet nur Events, die explizit als Bot-Tasks markiert sind.
Lösung: Sicherstellen, dass die OpenPR-Plattform so konfiguriert ist, dass der Bot-Kontext in Webhook-Nutzlasten enthalten ist:
{
"event": "issue.updated",
"bot_context": {
"is_bot_task": true,
"bot_name": "my-agent",
"bot_agent_type": "cli"
},
"data": { ... }
}Kein Agent gefunden
Symptom: Die Antwort ist {"status": "no_agent", "bot_name": "..."}.
Ursache: Kein konfigurierter Agent stimmt mit dem bot_name oder bot_agent_type aus der Nutzlast überein.
Lösung:
- Überprüfen, ob ein Agent mit einer
idoder einemnamekonfiguriert ist, der mit dembot_name-Wert übereinstimmt - Überprüfen, ob der
agent_typedes Agenten mitbot_agent_typeübereinstimmt - Agenten-Namensabgleich ignoriert Groß-/Kleinschreibung, aber
id-Abgleich ist exakt
CLI-Agent gibt "disabled" zurück
Symptom: CLI-Dispatch gibt "cli disabled by feature flag or safe mode" zurück.
Ursachen:
features.cli_enabledist nicht auftruegesetzt- Die Umgebungsvariable
OPENPR_WEBHOOK_SAFE_MODEist gesetzt
Lösung:
[features]
cli_enabled = trueUnd überprüfen, ob Safe Mode nicht aktiv ist:
echo $OPENPR_WEBHOOK_SAFE_MODE
# Sollte leer oder nicht gesetzt seinCLI-Executor "not allowed"
Symptom: Fehlermeldung "executor not allowed: {name}".
Ursache: Das Feld executor in der CLI-Agenten-Konfiguration enthält einen Wert, der nicht in der Whitelist ist.
Erlaubte Executors:
codexclaude-codeopencode
Jeder andere Wert wird aus Sicherheitsgründen abgelehnt.
Tunnel schlägt bei Verbindung fehl
Symptom: Protokollmeldungen zeigen wiederholt tunnel connect failed: ....
Ursachen:
- Ungültige URL. Die Tunnel-URL muss mit
wss://oderws://beginnen. - Netzwerkproblem. Überprüfen, ob der Steuerungsebenen-Server erreichbar ist.
- Auth-Fehler. Überprüfen, ob
tunnel.auth_tokenkorrekt ist. - Fehlende erforderliche Felder. Beide
tunnel.agent_idundtunnel.auth_tokenmüssen nicht leer sein.
Debug:
# WebSocket-Konnektivität manuell testen
# (erfordert wscat oder websocat)
wscat -c wss://control.example.com/ws -H "Authorization: Bearer your-token"Tunnel verbindet sich immer wieder
Symptom: Protokolle zeigen tunnel disconnected, reconnecting in Ns in einer Schleife.
Normales Verhalten: Der Tunnel verbindet sich automatisch mit exponentiellem Backoff wieder (bis tunnel_reconnect_backoff_max_secs). Die Steuerungsebenen-Protokolle auf den Trennungsgrund prüfen.
Feinabstimmung:
[tunnel]
reconnect_secs = 3 # Basis-Retry-Intervall
heartbeat_secs = 20 # Keep-alive-Intervall
[runtime]
tunnel_reconnect_backoff_max_secs = 120 # Max. BackoffCallback-Fehler
Symptom: Protokolle zeigen start callback failed: ... oder final callback failed: ....
Ursachen:
- callback_enabled ist false. Callbacks erfordern
features.callback_enabled = true. - Ungültige callback_url. Überprüfen, ob die URL erreichbar ist.
- Auth-Fehler. Wenn der Callback-Endpunkt Auth erfordert,
callback_tokensetzen. - Timeout. Der Standard-HTTP-Timeout beträgt 15 Sekunden. Mit
runtime.http_timeout_secserhöhen.
OpenClaw/Custom-Agenten-Ausführungsfehler
Symptom: Antwort enthält exec_error: ... oder error: ....
Ursachen:
- Binary nicht gefunden. Überprüfen, ob der
command-Pfad existiert und ausführbar ist. - Berechtigung verweigert. Der openpr-webhook-Prozess muss Ausführungsberechtigung haben.
- Fehlende Abhängigkeiten. Das CLI-Tool kann andere Programme oder Bibliotheken erfordern.
Debug:
# Den Befehl manuell testen
/usr/local/bin/openclaw --channel signal --target "+1234567890" --message "test"Diagnose-Checkliste
Dienst-Integrität prüfen:
bashcurl http://localhost:9000/health # Sollte zurückgeben: okGeladene Agenten prüfen: Im Startprotokoll nach
Loaded N agent(s)suchen.Debug-Protokollierung aktivieren:
bashRUST_LOG=openpr_webhook=debug ./openpr-webhook config.tomlSignatur manuell verifizieren:
bashecho -n '{"event":"test"}' | openssl dgst -sha256 -hmac "your-secret"Mit unsignierten Anfragen testen (nur Entwicklung):
toml[security] allow_unsigned = trueSafe-Mode-Status prüfen:
bash# Falls gesetzt, sind Tunnel/CLI/Callback deaktiviert echo $OPENPR_WEBHOOK_SAFE_MODE
Protokollmeldungen-Referenz
| Protokollebene | Meldung | Bedeutung |
|---|---|---|
| INFO | Loaded N agent(s) | Konfiguration erfolgreich geladen |
| INFO | openpr-webhook listening on ... | Server gestartet |
| INFO | Received webhook event: ... | Eingehendes Event geparst |
| INFO | Dispatching to agent: ... | Agent abgeglichen, weiterleiten |
| INFO | tunnel connected: ... | WSS-Tunnel hergestellt |
| WARN | Invalid webhook signature | Signaturverifizierung fehlgeschlagen |
| WARN | No agent for bot_name=... | Kein übereinstimmender Agent gefunden |
| WARN | tunnel disconnected, reconnecting | Tunnel-Verbindung unterbrochen |
| WARN | tunnel using insecure ws:// transport | Kein TLS verwendet |
| ERROR | tunnel connect failed: ... | WebSocket-Verbindungsfehler |
| ERROR | openclaw failed: ... | OpenClaw-Befehl gab Nicht-Null zurück |