Stream Deckの操作、ジェスチャー、アイコンの完全ガイド
呼び出せるワークフローを作る
- 名前付きトリガーStream Deck / API
- 条件とアクション保存済みのEvent Flow
- 送信先Flow Actions、OBS、または他の連携
- 開く項目: Event Flow をSSNから呼び出せます。専用フローを作成するか、次のテンプレートを選びます: Stream Deck / APIボタン テンプレートです。
- 追加する項目: Stream Deck / APIから実行 。所属するグループ: Stream DeckとAPI トリガーグループです。
- 名前を次にします:
intermission。名前は大文字と小文字を区別し、完全一致で照合します。短く分かりやすい名前を使ってください。 - 出力を次へ接続します: テキスト表示(Show Text)。テキストを次に設定します:
Back in five minutesを指定し、表示時間とレイヤーを選択します。 - フローを保存してから有効にしてください。未保存のフローはエディタ内にしかなく、無効なフローは呼び出せません。開始用テンプレートは、設定が終わるまで意図的に無効になっています。
- 次を開きます: Flow Actionsオーバーレイ に、SSNが生成したリンクで接続します。視聴者に表示するには、そのURLをOBSブラウザソースとして追加してください。エディタ自体はオーバーレイではありません。
この名前付きトリガーがないフローは、ワークフローAPIから呼び出せません。ワークフローの呼び出しは、ドックに偽のチャットを挿入しません。既存のOBSイベントや通常のチャットは、引き続き既存のトリガーを使用します。
フローでは、ロジックノードを通じて名前付きトリガーとフィルターを組み合わせられます。無関係な自動処理は別のフローにしてください。選択したフローのすべてのトリガー/ロジック分岐が、APIイベントで評価されます。繰り返し押すと別々の実行が始まるため、次を配置してください: レート制限(Rate Limiter) 状態ノードをトリガーの後に置くとクールダウンを設けられます。
Stream Deckキーを接続する
- プラグインの次の項目を設定します: 設定 アクションに、SSNセッションと任意のパスワードを設定します。次を使用します: 接続テスト(Test Connection).
- ドラッグする項目: プリセットコマンド(Preset Command) をキーへ配置します。
- 選択する項目: Event Flow workflows → Run workflow.
- 選ぶ項目: ワークフローを更新(Refresh workflows)を選び、保存済みのフローとトリガーを選択してください。キーにはトリガー名とフローIDの両方が保存されます。
- 一度押してFlow Actionsオーバーレイを確認してください。キーのチェックマークは、SSNが実行を受け付けたことを示します。
ワークフロー選択欄は、見つからなくなった選択も保持します。フローの名前変更、無効化、削除、取り込み後は、一覧を更新して選び直してください。新しいフローとして取り込んだワークフローは別のIDになります。複数のフローを名前で指定するには、代わりにValue欄を使ってください。
カスタムコマンド: Actionを次に設定します: triggerWorkflowを選び、Targetを空欄にして、次を入力します: {"trigger":"intermission"} をValueに指定し、次を有効にします: 応答を待つ(Wait for response)。プリセットでは、案内に沿った選択と対応機能による絞り込みができます。
マルチアクション: 各ワークフローのリクエストは、受け付けたことをすぐに返します。遅延したワークフローのアクションが終わる前に、次のStream Deckステップが始まる場合があります。順序が重要な場合は、Event Flow内で順番と待機時間を設定してください。
カスタム値を渡す
キーのValue欄またはAPIリクエストに指定します:
{
"trigger": "intermission",
"flowId": "YOUR_SAVED_FLOW_ID",
"data": { "name": "Back in five minutes", "minutes": 5 }
}Show Textを次に設定します: {meta.workflow.data.name}。Compare Propertyでは次を読み取れます: meta.workflow.data.minutes。Dataは任意のJSONオブジェクトで、次に保持されます: meta.workflow.data に格納され、イベントの識別情報を書き換えたり、チャットの権限を与えたりすることはできません。
次を省略すると、 flowId そのトリガー名と完全一致する、有効なすべてのフローを呼び出します。1つのフロー内に一致するトリガーノードが複数あっても、そのフローの評価は1回だけです。1つのフローだけを実行するには、選択欄または検出応答から取得したIDを保持してください。
選択したフロー内で使うイベントには、次が入ります: type: "api", event: "workflow_trigger", chatname: "Stream Deck / API"、空の chatmessageと上記のデータが入ります。通常のチャットがこれらのフィールドをまねても、名前付きAPIトリガーは起動できません。
APIの例
SSNを有効にして起動したままにしてください。これはSocial Streamのリモート制御呼び出しであり、SSAppの別系統のローカルAI/MCP APIは使用しません。実際のセッションIDは非公開にしてください。
利用可能なトリガーを調べる
{"action":"getWorkflowTriggers","get":"list-1","apiid":"YOUR_SESSION"}コールバックには次が含まれます: result.payload.triggers:
{"triggers":[{"flowId":"flow-123","flowName":"Intermission","trigger":"intermission"}]}
名前付きワークフローを実行
{
"action": "triggerWorkflow",
"value": {"trigger":"intermission","flowId":"flow-123","data":{"name":"Back shortly"}},
"get": "run-1",
"apiid": "YOUR_SESSION"
}一意の次の値を使います: get 文字列をリクエストごとに指定します。成功時のコールバックには次が入ります: result.ok: true, result.status: "accepted"、および result.payload.matchedFlows。受け付けたという応答は、有効なフローが見つかり、実行を予約したことを意味します。遅延アクション、Webhook、OBS呼び出し、メディア再生のすべてが完了したという意味ではありません。
WebSocket
有効化 拡張機能のリモートAPI制御(remote API control of extension) をSSNで有効にし、次へ接続します: wss://io.socialstream.ninja。参加には次を使います: {"join":"YOUR_SESSION","out":1,"in":2}。その後、上記のリクエストを送信します。チャネル1は制御、チャネル2はコールバックに使います。ワークフローにチャットチャネルを有効にする必要はありません。
HTTP
同じリモートAPI制御設定を有効にします。使用前にセッションのプレースホルダーを置き換えてください:
POST https://io.socialstream.ninja/YOUR_SESSION
Content-Type: application/json
{"action":"triggerWorkflow","value":{"trigger":"intermission","data":{"name":"Back shortly"}}}単純な名前付きトリガーには、次も使用できます: GET https://io.socialstream.ninja/YOUR_SESSION/triggerWorkflow/null/intermission。パスの4番目の部分には、構造化した値をURLエンコードしたJSONで指定できます。JSON値全体を次でエンコードしてください: encodeURIComponent(JSON.stringify(value))。カスタム送信チャネルには次を使用します: ?channel=N.
P2P
プラグインの標準P2Pモードは、SSNの既存のVDO.Ninjaデータチャネル経由で同じペイロードを送信します。P2Pではホスト型WebSocket APIのスイッチは不要です。既存のP2Pクライアントは、確立済みのSSN制御接続からこのリクエストを送信してください。ローカルAI APIを公開する必要はありません。
エラーと互換性
WORKFLOW_NOT_FOUND:トリガー/フローIDに一致する、保存済みで有効なフローがありません。INVALID_VALUE:トリガーが未指定または無効、JSON形式が不正、フローIDが無効、またはデータがオブジェクトではありません。CONTROL_UNAVAILABLE:SSNまたはリモートホスト制御が無効です。TARGET_UNAVAILABLE:Event Flowがまだ読み込み中です。- 古いSocial Streamアセットでは、これらのアクションを公開していない場合があります。確認先:
getCapabilities→ssn.actions.triggerWorkflowおよびgetWorkflowTriggers。新しいトリガーと更新版プラグインの両方が必要です。SSAppのバージョン番号だけでは、リモートから読み込まれたSocial Streamアセットの版を判断できません。
確認応答が失われても、状態を変更する呼び出しを自動で再試行しないでください。すでにワークフローが始まっている可能性があります。先に出力を確認してください。このAPIに実行状況のキューはありません。
各連携に必要なもの
| ワークフローのアクション | 必要な送信先/設定 | 確認すること |
|---|---|---|
| テキスト表示、メディア、音声、レイヤーの消去 | 同じセッションに接続したFlow Actionsオーバーレイ。視聴者向け出力にはOBSブラウザソースが必要です。 | 表示出力、レイヤー、表示時間、音声の経路。コマンドが成功しても、OBSシーンが表示されていることは確認できません。 |
| OBS操作 | 設定したアドレス/パスワードでOBSに接続したFlow Actionsと、一致するシーン/ソース名。 | 実際のOBSの状態。参照: OBSガイド. |
| メッセージの固定/強調表示 | 接続済みの標準ドック。実在するメッセージIDまたは完全なメッセージペイロードを選びます。 | ドックの固定済み一覧と強調表示オーバーレイ。APIトリガーの空のチャットテキスト自体は、有用なチャットになりません。 |
| Webhookを呼び出す(Call Webhook) | アクション内のURL、メソッド、JSON本文。 | 受信側の応答とEvent Flowのエラーフィールド。Stream Deckの確認応答は、遅延処理や外部処理の結果より先に届きます。 |
| メッセージ送信 / 中継 | 書き込み可能で接続済みのソースと、明示的な送信先。 | 実際の送信先チャット。ワークフローのリクエストは、プラットフォームの制限を回避する許可ではありません。 |
| 商品とサポート | 保存済みで有効な商品とコマースオーバーレイ。 | SSNの選択済み/非表示/予約済み状態。参照: 商品操作. |
| 抽選、チケット、ポイント | 設定済みの抽選/ポイント経済と、適切な実行者。名前付きAPIイベントには視聴者の識別情報がありません。 | 配信者の操作には配信者向け抽選プリセットを使い、APIイベントを視聴者の購入として扱わないでください。参照: 抽選とポイント. |
| TTS、Spotify、印刷、MIDI | 各連携固有の接続、権限、デバイス、アカウント設定。 | 実際の送信先/デバイス。Stream Deckをインストールしても、これらの連携は設定されません。 |
タイマーとチャットの操作
タイマー: 1段階回すと、初期設定では±10秒になります。 ダイヤルを押しながら回す と±1分(設定した刻み幅の6倍)になります。回さずに押して離すと開始/一時停止します。タイマー表示をタップすると更新します。リセットするには、次を長押しします: 表示部 。物理ダイヤルを長押しするだけではリセットされません。
チャットレビュー: 左に回すと古いチャット、右に回すと新しいチャットを表示します。ダイヤルを押すと確認中のメッセージを固定します。表示部をタップすると次の固定メッセージを強調表示し、表示部を長押しすると確認中のメッセージの固定を解除します。標準ドックを開いておいてください。WebSocketモードではチャネル4のチャット中継を有効にしてください。
開く項目: Help and diagnostics → Controls, icons and workflow guide をプラグインで開くと、完全なオフラインガイド、全5種類のアクション、各プリセット/アイコン、リセット動作、初期値、問題解決の手順を確認できます。
Event Flowパレットのリファレンス
パレットには45のトリガー、67のアクション、5つのロジックノード、4つの状態ノードがあります。各項目には記号とテキストラベルがあります。ノードを選ぶと設定と連携の前提条件を確認できます。パレットにアイコンがあるだけでは、送信先が接続されていることにはなりません。
トリガー はフローを開始する条件を決めます。必要に応じて条件をAND/ORで接続してください。 アクション は接続された順序で実行します。 状態ノード はイベント間で値を記憶します。ボタンにクールダウンを設けるには、次を選びます: レート制限(Rate Limiter) (THROTTLE)を置いてください。Delayアクションは各実行を遅らせるだけで、連続押下による実行を抑制しません。
トリガー:Stream DeckとAPI(1)
- ▶ Stream Deck / APIから実行(Run from Stream Deck / API)—
apiTrigger
トリガー:📣 配信イベント(9)
- 👋 新規フォロワー(New Follower)—
eventNewFollower - ⭐ 新規サブスクライバー(New Subscriber)—
eventNewSubscriber - 🔄 再サブスク/更新(Resub/Renewal)—
eventResub - 🎁 ギフトサブスク(Gift Sub)—
eventGiftSub - 💰 寄付 / 投げ銭(Donation / Tip)—
eventDonation - 🚀 レイド(Raid)—
eventRaid - 💎 Cheer/Bits —
eventCheer - 📋 その他のイベント(Other Event...)—
eventOther - ✏️ カスタムイベント(Custom Event)—
eventCustom
トリガー:OBS Studio(7)
- OBS配信開始(OBS Stream Started)—
obsStreamStarted - OBS配信停止(OBS Stream Stopped)—
obsStreamStopped - OBS録画開始(OBS Recording Started)—
obsRecordingStarted - OBS録画停止(OBS Recording Stopped)—
obsRecordingStopped - OBSシーン変更(OBS Scene Changed)—
obsSceneChanged - OBSメディア終了(OBS Media Ended)—
obsMediaEnded - OBSリプレイバッファ保存(OBS Replay Buffer Saved)—
obsReplaybufferSaved
トリガー:💬 チャットメッセージ(6)
- 💬 任意のメッセージ(Any Message)—
anyMessage - 🔍 メッセージに含まれる(Message Contains)—
messageContains - ▶️ メッセージ先頭が一致(Message Starts With)—
messageStartsWith - ⏹️ メッセージ末尾が一致(Message Ends With)—
messageEndsWith - 🟰 メッセージが一致(Message Equals)—
messageEquals - 🔤 メッセージ正規表現(Message Regex)—
messageRegex
トリガー:📊 メッセージのプロパティ(7)
- 📏 メッセージの長さ(Message Length)—
messageLength - 🔢 単語数(Word Count)—
wordCount - 😀 絵文字を含む(Contains Emoji)—
containsEmoji - 🔗 リンクを含む(Contains Link)—
containsLink - 💰 寄付あり(Has Donation)—
hasDonation - ⚖️ プロパティを比較(Compare Property)—
compareProperty - ⚙️ メッセージプロパティフィルター(Message Properties Filter)—
messageProperties
トリガー:👤 ユーザーとソース(6)
- 📡 指定ソースから(From Source)—
fromSource - 📺 指定チャネル名から(From Channel Name)—
fromChannelName - 👤 指定ユーザーから(From User)—
fromUser - 👑 ユーザーロール(User Role)—
userRole - 🧠 ユーザーが記憶済み(User Is Remembered)—
userMemoryContains - 🎁 チャンネルポイント交換(Channel Point Redemption)—
channelPointRedemption
トリガー:⏰ 時間とランダム(4)
- 🎲 ランダム確率(Random Chance)—
randomChance - ⏰ 時間間隔(Time Interval)—
timeInterval - 🎤 私がこう言ったら(When I say...)—
voicePhrase - 🕐 時刻(Time of Day)—
timeOfDay
トリガー:🎹 MIDI(3)
- 🎹 MIDIノートオン(MIDI Note On)—
midiNoteOn - 🎹 MIDIノートオフ(MIDI Note Off)—
midiNoteOff - 🎛️ MIDIコントロールチェンジ(MIDI Control Change)—
midiCC
トリガー:📦 高度な機能(2)
- 📣 イベントタイプ(高度)(Event Type (Advanced))—
eventType - カスタムコード(Custom Code)—
customJs
アクション:💬 メッセージ操作(14)
- 🚫 メッセージをブロック(Block Message)—
blockMessage - ✅ メッセージを返す(Return Message)—
returnMessage - ⚡ 非同期で続行(Continue Async)—
continueAsync - ✏️ メッセージを変更(Modify Message)—
modifyMessage - ⬅️ 接頭辞を追加(Add Prefix)—
addPrefix - ➡️ 接尾辞を追加(Add Suffix)—
addSuffix - 🔄 検索と置換(Find & Replace)—
findReplace - ✂️ テキストを削除(Remove Text)—
removeText - 🎨 プロパティを設定(Set Property)—
setProperty - 🌟 メッセージを強調表示(Feature Message)—
featureMessage - メッセージを固定(Pin Message)—
pinMessage - 💬 メッセージを送信(Send Message)—
sendMessage - 📢 チャットを中継(Relay Chat)—
relay - 🪞 反射フィルター(Reflection Filter)—
reflectionFilter
アクション:🔌 連携(6)
- カスタムコードを実行(Execute Custom Code)—
customJs - 🖨️ 感熱ラベルを印刷(Print Thermal Label)—
printThermal - 🌐 Webhookを呼び出す(Call Webhook)—
webhook - ⬆️ ポイントを追加(Add Points)—
addPoints - ⬇️ ポイントを消費(Spend Points)—
spendPoints - 🎁 抽選 / チケット(Giveaway / Tickets)—
giveawayControl
アクション:🎨 メディアとエフェクト(7)
- 🖼️ メディアオーバーレイを表示(Display Media Overlay)—
playTenorGiphy - 👤 アバターを表示(Show Avatar)—
showAvatar - 🛍 商品と支援(Products & Support)—
commerceControl - 📝 テキストを表示(Show Text)—
showText - 🗑️ レイヤーを消去(Clear Layer)—
clearLayer - 🔊 音声クリップを再生(Play Audio Clip)—
playAudioClip - ⏱️ 遅延(Delay)—
delay
アクション:🎬 OBS Studio(14)
- 🎬 シーンを変更(Change Scene)—
obsChangeScene - 👁️ ソースを切り替え(Toggle Source)—
obsToggleSource - 📝 テキストソースを設定(Set Text Source)—
obsSetText - ⏯️ メディアソースを操作(Control Media Source)—
obsMediaControl - 🔊 ソース音量を設定(Set Source Volume)—
obsSetVolume - 🔄 ブラウザソースを更新(Refresh Browser Source)—
obsRefreshBrowser - 🎨 フィルターを切り替え(Toggle Filter)—
obsSetSourceFilter - 🔇 音声をミュート/解除(Mute/Unmute Audio)—
obsMuteSource - 🔴 録画開始(Start Recording)—
obsStartRecording - ⏹️ 録画停止(Stop Recording)—
obsStopRecording - 📡 配信開始(Start Streaming)—
obsStartStreaming - ⏹️ 配信停止(Stop Streaming)—
obsStopStreaming - ⏺️ リプレイバッファを操作(Control Replay Buffer)—
obsReplayBufferControl - 💾 リプレイバッファを保存(Save Replay Buffer)—
obsReplayBuffer
アクション:🎵 Spotify(10)
- ⏭️ 次の曲へ(Skip Track)—
spotifySkip - ⏮️ 前の曲へ(Previous Track)—
spotifyPrevious - ⏸️ 一時停止(Pause)—
spotifyPause - ▶️ 再開(Resume)—
spotifyResume - ⏯️ 再生/一時停止を切り替え(Toggle Play/Pause)—
spotifyToggle - 🔊 音量を設定(Set Volume)—
spotifyVolume - 📋 キューに追加(Add to Queue)—
spotifyQueue - 🎵 再生中の曲を通知(Announce Now Playing)—
spotifyNowPlaying - 🔀 シャッフルを切り替え(Toggle Shuffle)—
spotifyShuffle - 🔁 リピートモードを設定(Set Repeat Mode)—
spotifyRepeat
アクション:🔊 テキスト読み上げ(5)
- 🗣️ テキストを読み上げ(Speak Text)—
ttsSpeak - 🔇 TTSを切り替え(Toggle TTS)—
ttsToggle - ⏭️ TTSをスキップ(Skip TTS)—
ttsSkip - 🗑️ TTSキューを消去(Clear TTS Queue)—
ttsClear - 🔊 TTS音量を設定(Set TTS Volume)—
ttsVolume
アクション:🎹 MIDI(2)
- 🎹 ノートを送信(Send Note)—
midiSendNote - 🎛️ コントロールチェンジを送信(Send Control Change)—
midiSendCC
アクション:🧠 ユーザー記憶(4)
- 🧠 ユーザーを記憶(Remember User)—
rememberUser - 👋 ユーザーを忘れる(Forget User)—
forgetUser - 🧹 すべてのユーザーを消去(Clear All Users)—
clearUserMemory - 🎟️ ユーザーをランダム選択(Pick Random User)—
pickRandomUser
アクション:🔧 状態制御(5)
- 🚦 ゲート状態を設定(Set Gate State)—
setGateState - 🔄 状態ノードをリセット(Reset State Node)—
resetStateNode - 🔢 カウンター値を設定(Set Counter Value)—
setCounter - ➕ カウンターを増加(Increment Counter)—
incrementCounter - カウンターを確認(Check Counter)—
checkCounter
ロジックと状態ノード
- 🔀 ANDゲート(AND Gate)—
AND - 🔄 ORゲート(OR Gate)—
OR - 🚫 NOTゲート(NOT Gate)—
NOT - 🎲 RANDOMゲート(RANDOM Gate)—
RANDOM - 🚫 禁止語を確認(Check Bad Words)—
CHECK_BAD_WORDS - 🚦 オン/オフスイッチ(On/Off Switch)—
GATE - 🔢 カウンター(Counter)—
COUNTER - ⏲️ レート制限(Rate Limiter)—
THROTTLE - 🧠 ユーザー記憶(User Memory)—
USER_MEMORY
メッセージフィルター、視聴者ポイント、記憶したユーザーへのアクションには、意味のあるメッセージ/ユーザーデータが必要です。配信者のボタンは実在の視聴者でも返信先ソースでもありません。配信者用の操作または明示的に設定した送信先を選び、名前付きワークフローで視聴者になりすまさないでください。
詳しい接続方法は、次をご覧ください: Event Flowガイド, 状態ノードガイド, ユーザー記憶ガイド、および OBSガイド.
失敗の原因を調べる
- まず単純なShow Textフローを使い、出力を確認してください。
- 保存して有効にし、Stream Deckのワークフロー一覧を更新してください。トリガー名とフローIDの両方を確認します。
- SSNが有効、接続がOnline、送信先オーバーレイが同じセッションに接続済みであることを確認してください。
- 検索や入力検証のエラーは、APIコールバックまたはプラグインの診断情報を確認してください。受け付け後の失敗については、送信先とEvent Flowの実行ログを確認します。
- 連携は1つずつ追加してください。本番で使用する前に、連続押下、無効なフロー、再接続をテストします。
エディタの通常のチャットテストパネルは、チャットイベントを送信します。名前付きAPIトリガーを再現するものではありません。経路全体を確認するには、Stream DeckまたはAPIからこのトリガーをテストしてください。