Vollständiger Leitfaden zu Stream-Deck-Steuerung, Gesten und Symbolen
Einen aufrufbaren Workflow erstellen
- Benannter AuslöserStream Deck / API
- Bedingungen und AktionenDein gespeicherter Event Flow
- ZielFlow Actions, OBS oder eine andere Integration
- Öffnen Event Flow aus SSN. Erstelle einen eigenen Flow oder wähle die Vorlage Stream-Deck-/API-Taste .
- Hinzufügen Über Stream Deck / API ausführen in der Auslösergruppe Stream Deck & API .
- Gib ihm den Namen
intermission. Namen müssen exakt übereinstimmen und beachten Groß-/Kleinschreibung; verwende einen kurzen aussagekräftigen Namen. - Verbinde seinen Ausgang mit Text anzeigen. Setze den Text auf
Back in five minutes, und wähle gewünschte Dauer und Ebene. - Speichere den Flow und aktiviere ihn anschließend. Ein ungespeicherter Flow existiert nur im Editor; ein deaktivierter Flow ist nicht aufrufbar. Die Startvorlage ist bewusst deaktiviert, bis du die Einrichtung abschließt.
- Öffne dein Flow-Actions-Overlay über SSNs erzeugten Link. Füge diese URL für dein Publikum als OBS-Browserquelle hinzu. Der Editor selbst ist nicht das Overlay.
Flows ohne diesen benannten Auslöser sind nicht über die Workflow-API aufrufbar. Der Workflow-Aufruf speist keinen künstlichen Chat in das Dock ein. Bestehende OBS-Ereignisse und normaler Chat verwenden weiterhin ihre bisherigen Auslöser.
Ein Flow kann seinen benannten Auslöser über Logikknoten mit Filtern kombinieren. Halte unabhängige Automatisierungen in getrennten Flows: Alle Auslöser-/Logikzweige des gewählten Flows werden mit dem API-Ereignis ausgewertet. Wiederholte Tastendrücke starten eigene Durchläufe; füge einen Zustandsknoten Ratenbegrenzer nach dem Auslöser ein, wenn du eine Abklingzeit möchtest.
Eine Stream-Deck-Taste verbinden
- Richte im Plugin die Aktion Einrichtung mit deiner SSN-Sitzung und optionalem Passwort ein. Verwende Verbindung testen.
- Ziehe Vorgegebener Befehl (Preset Command) auf eine Taste.
- Auswählen Event Flow workflows → Run workflow.
- Wähle Workflows aktualisieren, und wähle dann deinen gespeicherten Flow und Auslöser. Die Taste speichert sowohl Flow-ID als auch Auslösernamen.
- Drücke einmal und beobachte das Flow-Actions-Overlay. Das Häkchen der Taste bedeutet, dass SSN den Durchlauf angenommen hat.
Die Workflow-Auswahl behält fehlende Auswahlen bei. Aktualisiere und wähle einen Flow nach Umbenennen, Deaktivieren, Löschen oder Importieren erneut. Ein als neu importierter Flow erhält eine andere ID. Verwende stattdessen das Value-Feld, um mehrere Flows über den Namen anzusprechen.
Eigener Befehl: setze Action auf triggerWorkflow, lass Target leer und gib {"trigger":"intermission"} als Value ein und aktiviere Auf Antwort warten. Die Vorgabe bietet geführte Auswahl und Filterung nach Fähigkeiten.
Mehrfachaktionen: jede Workflow-Anfrage bestätigt die Annahme schnell. Der nächste Stream-Deck-Schritt kann starten, bevor verzögerte Workflow-Aktionen fertig sind. Lege Reihenfolge und Verzögerungen innerhalb von Event Flow fest, wenn die Reihenfolge wichtig ist.
Eigene Werte übergeben
Im Value-Feld der Taste oder in deiner API-Anfrage:
{
"trigger": "intermission",
"flowId": "YOUR_SAVED_FLOW_ID",
"data": { "name": "Back in five minutes", "minutes": 5 }
}Setze Show Text auf {meta.workflow.data.name}. Compare Property kann meta.workflow.data.minutes lesen. Data ist ein optionales JSON-Objekt; es bleibt in meta.workflow.data und kann weder die Ereignisidentität ersetzen noch Chatberechtigungen erteilen.
Lasse flowId weg, um jeden aktivierten Flow mit genau diesem Auslösernamen aufzurufen. Mehrere passende Auslöserknoten in einem Flow werten diesen trotzdem nur einmal aus. Behalte für einen einzelnen Flow dessen ID aus der Auswahl oder Erkennungsantwort.
Das im gewählten Flow verwendete Ereignis hat type: "api", event: "workflow_trigger", chatname: "Stream Deck / API", ein leeres chatmessage, und die obigen Daten. Normaler Chat, der diese Felder kopiert, kann den benannten API-Auslöser nicht aktivieren.
API-Beispiele
Lass SSN eingeschaltet und laufen. Dies sind Social-Stream-Fernsteuerungsaufrufe; sie verwenden nicht SSApps separate lokale KI-/MCP-API. Halte deine echte Sitzungs-ID privat.
Verfügbare Auslöser ermitteln
{"action":"getWorkflowTriggers","get":"list-1","apiid":"YOUR_SESSION"}Die Rückmeldung enthält result.payload.triggers:
{"triggers":[{"flowId":"flow-123","flowName":"Intermission","trigger":"intermission"}]}
Einen benannten Workflow ausführen
{
"action": "triggerWorkflow",
"value": {"trigger":"intermission","flowId":"flow-123","data":{"name":"Back shortly"}},
"get": "run-1",
"apiid": "YOUR_SESSION"
}Verwende eine eindeutige Zeichenfolge get für jede Anfrage. Eine erfolgreiche Rückmeldung enthält result.ok: true, result.status: "accepted", und result.payload.matchedFlows. Annahme bedeutet, dass der aktivierte Flow gefunden und eingeplant wurde. Sie bedeutet nicht, dass jede verzögerte Aktion, jeder Webhook, OBS-Aufruf oder jede Medienwiedergabe abgeschlossen ist.
WebSocket
Aktivieren Fernsteuerung der Erweiterung über API (remote API control of extension) in SSN. Verbinde mit wss://io.socialstream.ninja. Tritt mit {"join":"YOUR_SESSION","out":1,"in":2} bei, und sende dann die obige Anfrage. Kanal 1 überträgt Steuerungen, Kanal 2 Rückmeldungen. Für Workflows musst du den Chatkanal nicht aktivieren.
HTTP
Aktiviere dieselbe Einstellung zur Remote-API-Steuerung. Ersetze vor Verwendung den Sitzungsplatzhalter:
POST https://io.socialstream.ninja/YOUR_SESSION
Content-Type: application/json
{"action":"triggerWorkflow","value":{"trigger":"intermission","data":{"name":"Back shortly"}}}Für einen einfachen benannten Auslöser kannst du auch GET https://io.socialstream.ninja/YOUR_SESSION/triggerWorkflow/null/intermission verwenden. Das vierte Pfadsegment kann URL-kodiertes JSON für strukturierte Werte enthalten. Kodiere den gesamten JSON-Wert mit encodeURIComponent(JSON.stringify(value)). Eigene Sendekanäle verwenden ?channel=N.
P2P
Der Standard-P2P-Modus des Plugins sendet dieselben Nutzdaten über SSNs bestehenden VDO.Ninja-Datenkanaltransport. Der Schalter für die gehostete WebSocket-API ist für P2P nicht erforderlich. Bestehende P2P-Clients sollten diese Anfrage über ihre bestehende SSN-Steuerungsverbindung senden; die lokale KI-API muss nicht geöffnet werden.
Fehler und Kompatibilität
WORKFLOW_NOT_FOUND: kein gespeicherter, aktivierter Flow passt zu Auslöser/Flow-ID.INVALID_VALUE: fehlender/ungültiger Auslöser, fehlerhaftes JSON, ungültige Flow-ID oder Daten, die kein Objekt sind.CONTROL_UNAVAILABLE: SSN oder Remote-Host-Steuerung ist deaktiviert.TARGET_UNAVAILABLE: Event Flow lädt noch.- Ältere Social-Stream-Dateien melden diese Aktionen möglicherweise nicht. Prüfe
getCapabilities→ssn.actions.triggerWorkflowundgetWorkflowTriggers. Neuer Auslöser und aktualisiertes Plugin müssen beide installiert sein; die SSApp-Versionsnummer allein bestimmt nicht die aus der Ferne geladenen Social-Stream-Dateien.
Wiederhole einen zustandsändernden Aufruf nach verlorener Bestätigung nicht automatisch: Der Workflow kann bereits gestartet sein. Prüfe zuerst seine Ausgabe. Diese API bietet keine Warteschlange mit Ausführungszuständen.
Was jede Integration benötigt
| Workflow-Aktion | Erforderliches Ziel/Einrichtung | Was du prüfen solltest |
|---|---|---|
| Text anzeigen, Medien, Audio, Ebenen leeren | Verbundenes Flow-Actions-Overlay, gleiche Sitzung; OBS-Browserquelle für die Zuschauerausgabe. | Sichtbare Ausgabe, Ebene, Dauer und Audioweiterleitung. Ein erfolgreicher Befehl belegt keine OBS-Szenensichtbarkeit. |
| OBS-Steuerung | Mit OBS verbundene Flow Actions mit konfigurierter Adresse/Passwort; passende Szenen-/Quellnamen. | Tatsächlicher OBS-Zustand. Siehe den OBS-Leitfaden. |
| Nachricht anheften/hervorheben | Verbundenes Standard-Dock; wähle eine echte Nachrichten-ID oder vollständige Nachrichtennutzdaten. | Liste angehefteter Dock-Nachrichten und Featured-Overlay. Der leere Chattext eines API-Auslösers ist selbst kein nützlicher Chat. |
| Webhook aufrufen | URL, Methode und JSON-Inhalt in der Aktion. | Empfängerantwort und Event-Flow-Fehlerfelder; die Stream-Deck-Bestätigung kommt vor verzögerten/externen Ergebnissen. |
| Nachricht senden / weiterleiten | Schreibfähige verbundene Quelle und ausdrückliches Ziel. | Tatsächlicher Zielchat. Eine Workflow-Anfrage erlaubt nicht das Umgehen von Plattformlimits. |
| Produkte & Unterstützung | Gespeicherte/aktivierte Produkte und das Verkaufs-Overlay. | SSN-Zustand für ausgewählt/verborgen/geplant. Siehe Produktsteuerung. |
| Gewinnspiel, Tickets, Punkte | Konfiguriertes Gewinnspiel/Punktesystem und ein geeigneter Akteur. Ein benanntes API-Ereignis hat keine Zuschaueridentität. | Verwende für Host-Steuerung die Gewinnspielvorgaben auf Host-Ebene; behandle das API-Ereignis nicht als Zuschauerkauf. Siehe Gewinnspiele und Punkte. |
| Sprachausgabe, Spotify, Drucken, MIDI | Eigene Verbindung, Berechtigungen, Geräte- oder Kontoeinrichtung jeder Integration. | Tatsächliches Ziel/Gerät. Die Installation von Stream Deck richtet diese Integrationen nicht ein. |
Vollständiger Event-Flow-Leitfaden · Beispiele · API-Referenz
Timer- und Chatgesten
Timer: drehe standardmäßig einen Schritt für ±10 Sekunden; halte den Drehregler beim Drehen gedrückt für ±1 Minute (das 6-Fache der eingestellten Schrittweite). Drücken/Loslassen ohne Drehen startet/pausiert. Tippe zum Aktualisieren auf die Timeranzeige; halte die Anzeige gedrückt, um den Timer zurückzusetzen. Nur den physischen Drehregler gedrückt zu halten setzt nicht zurück.
Chat prüfen: drehe links für ältere und rechts für neuere Chatnachrichten; drücke den Regler, um die geprüfte Nachricht anzuheften. Tippe auf die Anzeige, um die nächste angeheftete Nachricht hervorzuheben; halte die Anzeige, um die geprüfte Nachricht zu lösen. Lass das Standard-Dock geöffnet. Aktiviere im WebSocket-Modus Chat-Weiterleitung auf Kanal 4.
Öffnen Help and diagnostics → Controls, icons and workflow guide im Plugin für den vollständigen Offline-Leitfaden, alle fünf Aktionstypen, jede Vorgabe/jedes Symbol, Rücksetzverhalten, Standardwerte und Fehlerbehebung.
Referenz der Event-Flow-Palette
Die Palette enthält 45 Auslöser, 67 Aktionen, fünf Logikknoten und vier Zustandsknoten. Jeder Eintrag hat neben dem Symbol eine Textbeschriftung. Wähle einen Knoten, um Einstellungen und Integrationsvoraussetzungen zu sehen; ein Palettensymbol belegt keine Verbindung zum Ziel.
Auslöser entscheiden, wann ein Flow startet. Verbinde Bedingungen bei Bedarf mit AND/OR. Aktionen werden in der verbundenen Reihenfolge ausgeführt. Zustandsknoten speichern Werte zwischen Ereignissen. Wähle für eine Tasten-Abklingzeit Ratenbegrenzer (THROTTLE), keine Delay-Aktion: Delay verschiebt jeden Durchlauf und unterdrückt keine wiederholten Tastendrücke.
Auslöser: Stream Deck & API (1)
- ▶ Über Stream Deck / API ausführen —
apiTrigger
Auslöser: 📣 Stream-Ereignisse (9)
- 👋 Neuer Follower —
eventNewFollower - ⭐ Neuer Abonnent —
eventNewSubscriber - 🔄 Erneutes Abo/Verlängerung —
eventResub - 🎁 Verschenktes Abonnement —
eventGiftSub - 💰 Spende / Trinkgeld —
eventDonation - 🚀 Raid —
eventRaid - 💎 Cheer/Bits —
eventCheer - 📋 Anderes Ereignis… —
eventOther - ✏️ Eigenes Ereignis —
eventCustom
Auslöser: OBS Studio (7)
- OBS-Stream gestartet —
obsStreamStarted - OBS-Stream beendet —
obsStreamStopped - OBS-Aufnahme gestartet —
obsRecordingStarted - OBS-Aufnahme beendet —
obsRecordingStopped - OBS-Szene gewechselt —
obsSceneChanged - OBS-Medienwiedergabe beendet —
obsMediaEnded - OBS-Wiederholungspuffer gespeichert —
obsReplaybufferSaved
Auslöser: 💬 Chatnachrichten (6)
- 💬 Beliebige Nachricht —
anyMessage - 🔍 Nachricht enthält —
messageContains - ▶️ Nachricht beginnt mit —
messageStartsWith - ⏹️ Nachricht endet mit —
messageEndsWith - 🟰 Nachricht entspricht —
messageEquals - 🔤 Nachrichten-Regex —
messageRegex
Auslöser: 📊 Nachrichteneigenschaften (7)
- 📏 Nachrichtenlänge —
messageLength - 🔢 Wortanzahl —
wordCount - 😀 Enthält Emoji —
containsEmoji - 🔗 Enthält Link —
containsLink - 💰 Hat Spende —
hasDonation - ⚖️ Eigenschaft vergleichen —
compareProperty - ⚙️ Nachrichteneigenschaften filtern —
messageProperties
Auslöser: 👤 Benutzer & Quelle (6)
- 📡 Von Quelle —
fromSource - 📺 Von Kanalname —
fromChannelName - 👤 Von Benutzer —
fromUser - 👑 Benutzerrolle —
userRole - 🧠 Benutzer ist gespeichert —
userMemoryContains - 🎁 Kanalpunkte einlösen —
channelPointRedemption
Auslöser: ⏰ Zeit & Zufall (4)
- 🎲 Zufallschance —
randomChance - ⏰ Zeitintervall —
timeInterval - 🎤 Wenn ich sage… —
voicePhrase - 🕐 Tageszeit —
timeOfDay
Auslöser: 🎹 MIDI (3)
- 🎹 MIDI Note On —
midiNoteOn - 🎹 MIDI Note Off —
midiNoteOff - 🎛️ MIDI Control Change —
midiCC
Auslöser: 📦 Erweitert (2)
- 📣 Ereignistyp (erweitert) —
eventType - Eigener Code —
customJs
Aktionen: 💬 Nachrichtenaktionen (14)
- 🚫 Nachricht blockieren —
blockMessage - ✅ Nachricht zurückgeben —
returnMessage - ⚡ Asynchron fortsetzen —
continueAsync - ✏️ Nachricht ändern —
modifyMessage - ⬅️ Präfix hinzufügen —
addPrefix - ➡️ Suffix hinzufügen —
addSuffix - 🔄 Suchen & Ersetzen —
findReplace - ✂️ Text entfernen —
removeText - 🎨 Eigenschaft festlegen —
setProperty - 🌟 Nachricht hervorheben —
featureMessage - Nachricht anheften —
pinMessage - 💬 Nachricht senden —
sendMessage - 📢 Chat weiterleiten —
relay - 🪞 Rückspiegelungsfilter —
reflectionFilter
Aktionen: 🔌 Integrationen (6)
- Eigenen Code ausführen —
customJs - 🖨️ Thermoetikett drucken —
printThermal - 🌐 Webhook aufrufen —
webhook - ⬆️ Punkte hinzufügen —
addPoints - ⬇️ Punkte ausgeben —
spendPoints - 🎁 Gewinnspiel / Tickets —
giveawayControl
Aktionen: 🎨 Medien & Effekte (7)
- 🖼️ Medien-Overlay anzeigen —
playTenorGiphy - 👤 Avatar anzeigen —
showAvatar - 🛍 Produkte & Unterstützung —
commerceControl - 📝 Text anzeigen —
showText - 🗑️ Ebene leeren —
clearLayer - 🔊 Audioclip abspielen —
playAudioClip - ⏱️ Verzögerung —
delay
Aktionen: 🎬 OBS Studio (14)
- 🎬 Szene wechseln —
obsChangeScene - 👁️ Quelle umschalten —
obsToggleSource - 📝 Textquelle festlegen —
obsSetText - ⏯️ Medienquelle steuern —
obsMediaControl - 🔊 Quellenlautstärke festlegen —
obsSetVolume - 🔄 Browserquelle aktualisieren —
obsRefreshBrowser - 🎨 Filter umschalten —
obsSetSourceFilter - 🔇 Audio stummschalten/aktivieren —
obsMuteSource - 🔴 Aufnahme starten —
obsStartRecording - ⏹️ Aufnahme stoppen —
obsStopRecording - 📡 Streaming starten —
obsStartStreaming - ⏹️ Streaming stoppen —
obsStopStreaming - ⏺️ Wiederholungspuffer steuern —
obsReplayBufferControl - 💾 Wiederholungspuffer speichern —
obsReplayBuffer
Aktionen: 🎵 Spotify (10)
- ⏭️ Titel überspringen —
spotifySkip - ⏮️ Vorheriger Titel —
spotifyPrevious - ⏸️ Pausieren —
spotifyPause - ▶️ Fortsetzen —
spotifyResume - ⏯️ Wiedergabe/Pause umschalten —
spotifyToggle - 🔊 Lautstärke festlegen —
spotifyVolume - 📋 Zur Warteschlange hinzufügen —
spotifyQueue - 🎵 Aktuellen Titel ansagen —
spotifyNowPlaying - 🔀 Zufallswiedergabe umschalten —
spotifyShuffle - 🔁 Wiederholungsmodus festlegen —
spotifyRepeat
Aktionen: 🔊 Sprachausgabe (5)
- 🗣️ Text sprechen —
ttsSpeak - 🔇 Sprachausgabe umschalten —
ttsToggle - ⏭️ Sprachausgabe überspringen —
ttsSkip - 🗑️ TTS-Warteschlange leeren —
ttsClear - 🔊 TTS-Lautstärke festlegen —
ttsVolume
Aktionen: 🎹 MIDI (2)
- 🎹 Note senden —
midiSendNote - 🎛️ Control Change senden —
midiSendCC
Aktionen: 🧠 Benutzerspeicher (4)
- 🧠 Benutzer merken —
rememberUser - 👋 Benutzer vergessen —
forgetUser - 🧹 Alle Benutzer löschen —
clearUserMemory - 🎟️ Zufälligen Benutzer wählen —
pickRandomUser
Aktionen: 🔧 Zustandssteuerung (5)
- 🚦 Schaltzustand festlegen —
setGateState - 🔄 Zustandsknoten zurücksetzen —
resetStateNode - 🔢 Zählerwert festlegen —
setCounter - ➕ Zähler erhöhen —
incrementCounter - Zähler prüfen —
checkCounter
Logik- und Zustandsknoten
- 🔀 AND-Verknüpfung —
AND - 🔄 OR-Verknüpfung —
OR - 🚫 NOT-Verknüpfung —
NOT - 🎲 RANDOM-Bedingung —
RANDOM - 🚫 Schimpfwörter prüfen —
CHECK_BAD_WORDS - 🚦 Ein-/Ausschalter —
GATE - 🔢 Zähler —
COUNTER - ⏲️ Ratenbegrenzer —
THROTTLE - 🧠 Benutzerspeicher —
USER_MEMORY
Nachrichtenfilter, Zuschauerpunkte und Aktionen für gespeicherte Benutzer benötigen sinnvolle Nachrichten-/Benutzerdaten. Eine Host-Taste liefert weder einen echten Zuschauer noch ein Antwortziel einer Quelle. Wähle Host-Steuerung oder ein ausdrücklich konfiguriertes Ziel; verwende keinen benannten Workflow, um einen Zuschauer vorzutäuschen.
Für genaue Verbindungen siehe: Event-Flow-Anleitung, Zustandsknoten-Leitfaden, Benutzerspeicher-Leitfaden, und OBS-Leitfaden.
Einen Fehler untersuchen
- Verwende zuerst einen einfachen Show-Text-Flow und prüfe seine Ausgabe.
- Speichere und aktiviere; aktualisiere die Stream-Deck-Workflow-Liste. Prüfe Auslösername und Flow-ID.
- Prüfe, ob SSN aktiviert, die Verbindung Online und das Zieloverlay mit derselben Sitzung verbunden ist.
- Prüfe API-Rückmeldung oder Plugin-Diagnose auf Such-/Validierungsfehler. Untersuche bei Fehlern nach Annahme das Ziel und Event Flows Laufzeitprotokolle.
- Füge weitere Integrationen einzeln hinzu. Teste vor dem Liveeinsatz wiederholte Tastendrücke, einen deaktivierten Flow und eine erneute Verbindung.
Das normale Chat-Testfeld des Editors sendet ein Chatereignis. Es stellt keinen benannten API-Auslöser dar. Teste diesen Auslöser über Stream Deck oder die API, um den vollständigen Weg zu prüfen.