Zum Inhalt springen
  • Dunkel
  • Hell
  • System

API-Call läuft in Timeout

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

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).

Sub-Action Core Network Fetch URL öffnen → URL-Feld.

Häufiger FehlerBeispielFix
http:// statt https://http://api.openweather...API erzwingt HTTPS: auf https:// ändern
Trailing-Slash zuvielhttps://api.example.com/v1/Manche APIs verweigern. Slash entfernen
Variable nicht aufgelösthttps://api.example.com/q/%city% und %city% ist leerVor dem Call mit If/Else prüfen ob %city% gesetzt ist
Encoding-Issueq=Köln statt q=K%C3%B6lnSub-Action Core Arguments Set Argument nutzen
API-Key in URL fehltapi.example.com/...? ohne &apikey=...API-Key als Query-Param oder Header anhängen

Fetch URL unterstützt nur GET-Requests. Wenn die API POST/PUT/DELETE erwartet:

Was du brauchstLösung
POST mit JSON-BodyNicht via Sub-Action möglich. C# in Execute Code Sub-Action notwendig
PUT für UpdatesWie oben
GET mit Custom-HeadersSub-Action-Felder Headers: ein Key pro Zeile, Format Key: Value

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-ResponseZugriff
{"temp": 12.5}%apiResponse.temp%12.5
{"city": {"name": "Köln"}}%apiResponse.city.name%Köln
[{"id": 1}, {"id": 2}]%apiResponse[0].id%1

Default-Timeout für Fetch URL ist 10 Sekunden. Wenn die API langsam ist:

  • In der Sub-Action gibt es ein Timeout-Feld: auf 30000 (30s) erhöhen.
  • Bei wiederholtem Timeout: API ist down: anderen Endpoint testen oder Fallback einbauen.

Viele kostenlose APIs limitieren auf z.B. 60 Requests pro Minute. Im Log:

[ERROR] Fetch URL returned HTTP 429 Too Many Requests

Fixes:

  • 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.

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.

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%°C

Falls du eine lange Antwort brauchst: Core Arguments Set Argument mit Substring 0 480 um zu kürzen, dann den gekürzten Wert posten.

Sehr selten: Fetch URL lehnt expired oder self-signed SSL-Zertifikate ab. Im Log:

[ERROR] Fetch URL: SSL handshake failed

Fix: 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.

UrsacheFix
Parse JSON Response Häkchen fehltSub-Action öffnen → Häkchen aktivieren
URL hat unaufgelöste VariableVor dem Call If/Else-Check ob Variable gesetzt
API erwartet POST, nicht GETC#-Code via Execute Code Sub-Action
Rate-Limit erreichtCommand-Cooldown erhöhen, Response cachen
Response > 500 Zeichen → Chat schneidet abNur relevantes Feld posten, nicht ganze Response