日本語
EnglishEspañolPortuguês (Brasil)РусскийFrançaisDeutsch日本語简体中文繁體中文ItalianoPolski한국어УкраїнськаالعربيةTürkçeČeštinaไทย

ボタン1つで、自分のワークフローを

Stream Deck、HTTP、WebSocketを使って、保存済みのEvent Flowワークフローを実行します。

Stream Deckの操作、ジェスチャー、アイコンの完全ガイド

呼び出せるワークフローを作る

  1. 名前付きトリガーStream Deck / API
  2. 条件とアクション保存済みのEvent Flow
  3. 送信先Flow Actions、OBS、または他の連携
  1. 開く項目: Event Flow をSSNから呼び出せます。専用フローを作成するか、次のテンプレートを選びます: Stream Deck / APIボタン テンプレートです。
  2. 追加する項目: Stream Deck / APIから実行 。所属するグループ: Stream DeckとAPI トリガーグループです。
  3. 名前を次にします: intermission。名前は大文字と小文字を区別し、完全一致で照合します。短く分かりやすい名前を使ってください。
  4. 出力を次へ接続します: テキスト表示(Show Text)。テキストを次に設定します: Back in five minutesを指定し、表示時間とレイヤーを選択します。
  5. フローを保存してから有効にしてください。未保存のフローはエディタ内にしかなく、無効なフローは呼び出せません。開始用テンプレートは、設定が終わるまで意図的に無効になっています。
  6. 次を開きます: Flow Actionsオーバーレイ に、SSNが生成したリンクで接続します。視聴者に表示するには、そのURLをOBSブラウザソースとして追加してください。エディタ自体はオーバーレイではありません。

この名前付きトリガーがないフローは、ワークフローAPIから呼び出せません。ワークフローの呼び出しは、ドックに偽のチャットを挿入しません。既存のOBSイベントや通常のチャットは、引き続き既存のトリガーを使用します。

フローでは、ロジックノードを通じて名前付きトリガーとフィルターを組み合わせられます。無関係な自動処理は別のフローにしてください。選択したフローのすべてのトリガー/ロジック分岐が、APIイベントで評価されます。繰り返し押すと別々の実行が始まるため、次を配置してください: レート制限(Rate Limiter) 状態ノードをトリガーの後に置くとクールダウンを設けられます。

Stream Deckキーを接続する

  1. プラグインの次の項目を設定します: 設定 アクションに、SSNセッションと任意のパスワードを設定します。次を使用します: 接続テスト(Test Connection).
  2. ドラッグする項目: プリセットコマンド(Preset Command) をキーへ配置します。
  3. 選択する項目: Event Flow workflows → Run workflow.
  4. 選ぶ項目: ワークフローを更新(Refresh workflows)を選び、保存済みのフローとトリガーを選択してください。キーにはトリガー名とフローIDの両方が保存されます。
  5. 一度押して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をインストールしても、これらの連携は設定されません。

Event Flow完全ガイド · レシピ · APIリファレンス

タイマーとチャットの操作

タイマー: 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ガイド.

失敗の原因を調べる

  1. まず単純なShow Textフローを使い、出力を確認してください。
  2. 保存して有効にし、Stream Deckのワークフロー一覧を更新してください。トリガー名とフローIDの両方を確認します。
  3. SSNが有効、接続がOnline、送信先オーバーレイが同じセッションに接続済みであることを確認してください。
  4. 検索や入力検証のエラーは、APIコールバックまたはプラグインの診断情報を確認してください。受け付け後の失敗については、送信先とEvent Flowの実行ログを確認します。
  5. 連携は1つずつ追加してください。本番で使用する前に、連続押下、無効なフロー、再接続をテストします。

エディタの通常のチャットテストパネルは、チャットイベントを送信します。名前付きAPIトリガーを再現するものではありません。経路全体を確認するには、Stream DeckまたはAPIからこのトリガーをテストしてください。