API-Call läuft in Timeout
Symptom
Abschnitt betitelt „Symptom“Fetch URL-Sub-Action liefert keine Daten oder timeout:
%apiResponse%ist leer- Im Logs:
[ERROR] Fetch URL timed out after 10 seconds - Im Logs:
[ERROR] Fetch URL returned HTTP 429(Rate-Limit) - Im Logs:
[ERROR] JSON parse failed: Unexpected token - API antwortet, aber
%apiResponse.feldname%ist immer leer
Schnell-Check (30 Sekunden)
Abschnitt betitelt „Schnell-Check (30 Sekunden)“URL aus der Sub-Action kopieren, in einem Browser-Tab öffnen. Wenn der Browser eine valide JSON-Response zeigt, liegt das Problem in den Fetch URL-Settings. Wenn der Browser einen Fehler zeigt oder gar nichts, liegt das Problem an der API selbst (down, falsche URL, Auth).
Schritt-für-Schritt-Debug
Abschnitt betitelt „Schritt-für-Schritt-Debug“1. URL prüfen
Abschnitt betitelt „1. URL prüfen“Sub-Action Core Network Fetch URL
| Häufiger Fehler | Beispiel | Fix |
|---|---|---|
http:// statt https:// | http://api.openweather... | API erzwingt HTTPS: auf https:// ändern |
| Trailing-Slash zuviel | https://api.example.com/v1/ | Manche APIs verweigern. Slash entfernen |
| Variable nicht aufgelöst | https://api.example.com/q/%city% und %city% ist leer | Vor dem Call mit If/Else prüfen ob %city% gesetzt ist |
| Encoding-Issue | q=Köln statt q=K%C3%B6ln | Sub-Action Core Arguments Set Argument |
| API-Key in URL fehlt | api.example.com/...? ohne &apikey=... | API-Key als Query-Param oder Header anhängen |
2. HTTP-Methode
Abschnitt betitelt „2. HTTP-Methode“Fetch URL unterstützt nur GET-Requests. Wenn die API POST/PUT/DELETE erwartet:
| Was du brauchst | Lösung |
|---|---|
| POST mit JSON-Body | Nicht via Sub-Action möglich. C# in Execute Code Sub-Action notwendig |
| PUT für Updates | Wie oben |
| GET mit Custom-Headers | Sub-Action-Felder Headers: ein Key pro Zeile, Format Key: Value |
3. JSON-Parse aktivieren
Abschnitt betitelt „3. JSON-Parse aktivieren“Default ist: %apiResponse% enthält die Raw-String-Response. Damit Field-Access wie %apiResponse.temperature% funktioniert, musst du Parse JSON aktivieren.
Sub-Action öffnen → Häkchen Parse JSON Response aktivieren.
Danach sind die Felder zugreifbar:
| Beispiel-Response | Zugriff |
|---|---|
{"temp": 12.5} | %apiResponse.temp% → 12.5 |
{"city": {"name": "Köln"}} | %apiResponse.city.name% → Köln |
[{"id": 1}, {"id": 2}] | %apiResponse[0].id% → 1 |
4. Timeout
Abschnitt betitelt „4. Timeout“Default-Timeout für Fetch URL ist 10 Sekunden. Wenn die API langsam ist:
- In der Sub-Action gibt es ein
Timeout-Feld: auf30000(30s) erhöhen. - Bei wiederholtem Timeout: API ist down: anderen Endpoint testen oder Fallback einbauen.
5. Rate-Limit (HTTP 429)
Abschnitt betitelt „5. Rate-Limit (HTTP 429)“Viele kostenlose APIs limitieren auf z.B. 60 Requests pro Minute. Im Log:
[ERROR] Fetch URL returned HTTP 429 Too Many RequestsFixes:
- Im Command Cooldown erhöhen (Commands-Pane → Cooldown auf z.B. 30s Global).
- API-Key anlegen falls die API mit Key höhere Limits anbietet.
- Response 5 Min cachen via Persisted Global → in der Action erst prüfen ob Cache noch frisch ist.
6. CORS
Abschnitt betitelt „6. CORS“CORS ist eine Browser-Sicherheits-Policy. Streamer.bot ist kein Browser. CORS ist hier irrelevant. Wenn du im Browser einen CORS-Error siehst, aber die API in curl oder Postman funktioniert, dann funktioniert sie auch in Streamer.bot.
7. Response zu lang für Twitch-Chat
Abschnitt betitelt „7. Response zu lang für Twitch-Chat“Twitch-Chat hat 500-Zeichen-Limit. Wenn die API-Response zu lang ist und du sie direkt postest, wird sie abgeschnitten.
Fix: Nur das relevante Feld posten, nicht die ganze Response:
# Statt:Message: %apiResponse%
# Besser:Message: %apiResponse.weather[0].description% bei %apiResponse.main.temp%°CFalls du eine lange Antwort brauchst: Core Arguments Set Argument Substring 0 480 um zu kürzen, dann den gekürzten Wert posten.
8. SSL-Zertifikat
Abschnitt betitelt „8. SSL-Zertifikat“Sehr selten: Fetch URL lehnt expired oder self-signed SSL-Zertifikate ab. Im Log:
[ERROR] Fetch URL: SSL handshake failedFix: API per Browser-Test prüfen ob das Zertifikat valide ist. Bei self-signed Zertifikaten (z.B. interne API) hilft nur ein Execute Code Sub-Action mit eigener HttpClient-Config.
Häufige Ursachen. Top 5
Abschnitt betitelt „Häufige Ursachen. Top 5“| Ursache | Fix |
|---|---|
Parse JSON Response Häkchen fehlt | Sub-Action öffnen → Häkchen aktivieren |
| URL hat unaufgelöste Variable | Vor dem Call If/Else-Check ob Variable gesetzt |
| API erwartet POST, nicht GET | C#-Code via Execute Code Sub-Action |
| Rate-Limit erreicht | Command-Cooldown erhöhen, Response cachen |
| Response > 500 Zeichen → Chat schneidet ab | Nur relevantes Feld posten, nicht ganze Response |
Verwandt
Abschnitt betitelt „Verwandt“- Fetch-URL-Setup: Grundsetup für API-Sub-Actions
- Variable bleibt leer: wenn
%apiResponse.x%nicht funktioniert !weather: vollständiges Beispiel mit JSON-Parse