Fetch URL Setup für externe APIs
Streamer.bot kann externe Web-APIs aufrufen via Core Network Fetch URL
Limitation
Abschnitt betitelt „Limitation“| Was geht | Was nicht geht |
|---|---|
| GET-Requests | POST / PUT / DELETE / PATCH |
| Custom Headers | Request Body |
| JSON-Response parsen | Status-Code abfragen |
| Variable mit Response-Body | Cookies / Sessions |
Für POST/PUT/DELETE und für HTTP-Status-Codes: C# nötig. Wir bleiben hier bei GET.
Fetch URL Sub-Action
Abschnitt betitelt „Fetch URL Sub-Action“| Feld | Bedeutung |
|---|---|
| URL | Vollständige Ziel-URL inkl. Query-Parameter |
| Variable Name | Variable in die die Response geschrieben wird |
| Parse result as JSON | Toggle: wenn an, wird JSON in %<var>.<key>% aufgesplittet |
| Headers | Optional, z.B. User-Agent, Accept, API-Keys |
Output ohne JSON-Parsing
Abschnitt betitelt „Output ohne JSON-Parsing“%<variableName>% enthält die komplette Response als String.
Output mit JSON-Parsing
Abschnitt betitelt „Output mit JSON-Parsing“Beispiel: API liefert {"fact": "Katzen schlafen 16h", "length": 23}, Variable Name cat:
%cat.fact%=Katzen schlafen 16h%cat.length%=23
Nested funktioniert: %data.user.name%, %data.user.age%.
Fehler-Handling ohne Status-Code
Abschnitt betitelt „Fehler-Handling ohne Status-Code“Stattdessen prüfen wir den Response-Body. Bei JSON-Parsing reicht ein Null-Check auf den erwarteten Key:
1. Fetch URL: https://api.example.com/data → meinResult (JSON-Parse aktiv)2. If/Else: %meinResult.feld% Is Null or Empty ├── Send Message: "@%user% API gerade nicht erreichbar." └── Break3. Send Message: "@%user% Antwort: %meinResult.feld%"Bei Plain-Text-APIs (zum Beispiel wttr.in) prüfst du den Response-String:
1. Fetch URL: https://wttr.in/München?format=3 → wetter (JSON-Parse aus)2. If/Else: %wetter% Is Null or Empty ├── Send Message: "@%user% Wetter-API nicht erreichbar." └── Break3. Send Message: "@%user% %wetter%"URL-Encoding
Abschnitt betitelt „URL-Encoding“User-Input gehört encoded:
URL: https://wttr.in/$urlencode(%rawInput%)$?format=3Oder die vom Trigger gesetzte Variable %input0URLEncoded%. Bei Umlauten (München) Pflicht.
Custom Headers
Abschnitt betitelt „Custom Headers“Manche APIs verlangen Header. User-Agent ist häufig sinnvoll, weil Default-Agents blockiert werden:
| Header | Wert |
|---|---|
User-Agent | AzaCraft Streamer.bot/1.0 |
Accept | application/json |
X-API-Key | dein Key |
API-Keys sicher ablegen
Abschnitt betitelt „API-Keys sicher ablegen“Statt hartkodieren:
- Einmalig im UI:
Globals→+ Add→weatherApiKey = "abc123"(Persisted Global). - In Fetch-URL:
&appid=~weatherApiKey~.
Damit liegt der Key nicht im Action-Export. Beim Import-String genauso: der Key ist nicht eingefroren.
API-Commands in dieser Section
Abschnitt betitelt „API-Commands in dieser Section“| Command | API | Aufwand |
|---|---|---|
!weather <stadt> | wttr.in (kostenlos, ohne Key) | einsteiger |
!joke | icanhazdadjoke (Header-Pflicht) | einsteiger |
!catfact | catfact.ninja (kostenlos) | einsteiger |
Edge-Cases
Abschnitt betitelt „Edge-Cases“- POST/PUT: geht nicht über Fetch URL. Nur C#.
- Rate-Limit (429): kostenlose APIs haben oft 1000/Tag. Mit Cooldown bremsen.
- CORS: irrelevant, SB ist kein Browser.
- JSON-Toggle vergessen: ohne Toggle ist
%var%der Raw-String, mit Toggle gesplittet. - Lange Responses: Twitch 500-Zeichen-Limit. Nur Teilfeld posten, nicht das ganze JSON.
- Schema-Änderung: kostenlose APIs sind nicht stabil. Bei „leeres Feld“ Verdacht: Doku checken.