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

一个按钮,运行您的工作流程

使用 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. 将其输出连接到 显示文字。将文字设为 Back in five minutes,并选择所需的时长和图层。
  5. 保存流程,然后启用。未保存的流程只存在于编辑器中;已禁用流程无法调用。入门模板会保持禁用,直到您完成设置。
  6. 打开您的 Flow Actions 叠加层 ,使用 SSN 生成的链接。面向观众时,将该 URL 添加为 OBS 浏览器来源。编辑器本身不是叠加层。

没有此命名触发器的流程无法通过工作流程 API 调用。调用工作流程不会向停靠面板注入模拟聊天。现有 OBS 事件和普通聊天继续使用各自现有触发器。

流程可通过逻辑节点将命名触发器与筛选器组合。将无关自动化保留在不同流程中:选定流程中的所有触发器/逻辑分支都会使用该 API 事件求值。重复按键会启动独立运行;如果需要冷却,请放置一个 速率限制器 状态节点,放在触发器之后。

连接 Stream Deck 按键

  1. 配置插件的 设置 操作,使用您的 SSN 会话和可选密码。使用 测试连接.
  2. 拖动 预设命令 到按键上。
  3. 选择 Event Flow 工作流程 → 运行工作流程.
  4. 选择 刷新工作流程,然后选择已保存的流程和触发器。按键会同时保存流程 ID 和触发器名称。
  5. 按一次并观察 Flow Actions 叠加层。按键上的勾号表示 SSN 已接受运行请求。

工作流程选择器会保留已缺失的选择。重命名、禁用、删除或导入流程后,请刷新并重新选择。作为新流程导入的工作流程具有不同 ID。如需按名称针对多个流程,请改用值字段。

自定义命令: 将操作设为 triggerWorkflow,将目标留空,输入 {"trigger":"intermission"} 作为值,并启用 等待响应。预设提供引导式选择和能力筛选。

多重操作: 每个工作流程请求都会快速确认接受。延迟工作流程操作完成前,下一步 Stream Deck 操作就可能启动。顺序重要时,请在 Event Flow 内安排执行顺序和延迟。

传递自定义值

在按键的值字段或 API 请求中:

{
  "trigger": "intermission",
  "flowId": "YOUR_SAVED_FLOW_ID",
  "data": { "name": "Back in five minutes", "minutes": 5 }
}

将显示文字设为 {meta.workflow.data.name}。比较属性可以读取 meta.workflow.data.minutes。数据是可选的 JSON 对象,保留在 meta.workflow.data ,不能替换事件身份或授予聊天权限。

省略 flowId ,以调用具有完全相同触发器名称的每个已启用流程。同一流程中的多个匹配触发器节点,仍只会让该流程求值一次。只运行一个流程时,请保留选择器或发现响应提供的流程 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 控制 ,在 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。第四个路径段可包含经 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 控件Flow Actions 使用配置的地址/密码连接到 OBS;场景/来源名称匹配。实际 OBS 状态。参见 OBS 指南.
置顶/精选消息已连接的默认停靠面板;选择真实消息 ID 或完整消息载荷。停靠面板置顶列表和精选叠加层。API 触发器的空聊天文字本身并不是有用的聊天内容。
调用 Webhook操作中的 URL、方法和 JSON 请求体。接收器响应和 Event Flow 错误字段;Stream Deck 的确认会先于延迟/外部结果到达。
发送消息/中继可写且已连接的来源,以及明确的目标。实际目标聊天。工作流程请求并不意味着获准绕过平台限制。
商品与支持已保存/启用的商品和电商叠加层。SSN 的选中/隐藏/计划状态。参见 商品控件.
抽奖、票券、积分已配置的抽奖/经济系统,以及合适的执行者。命名 API 事件没有观众身份。主持人控制请使用主持人级抽奖预设;不要将 API 事件当作观众购买。参见 抽奖与积分.
TTS、Spotify、打印、MIDI各集成自身的连接、权限、设备或账号设置。实际目标/设备。安装 Stream Deck 不会自动配置这些集成。

完整 Event Flow 指南 · 实用方案 · API 参考

计时器和聊天手势

计时器: 默认每转一格调整 ±10 秒; 按住旋钮并转动 可调整 ±1 分钟(配置步长的 6 倍)。不转动时按下再松开可开始/暂停。点按计时器显示屏可刷新;长按 显示屏 以重置。仅长按实体旋钮不会重置。

聊天回顾: 向左转查看较旧聊天,向右转查看较新聊天;按下旋钮可置顶当前回顾的消息。点按显示屏可精选下一条置顶消息;长按显示屏可取消置顶当前回顾的消息。保持默认停靠面板打开。WebSocket 模式下请启用通道 4 的聊天中继。

打开 帮助与诊断 → 控件、图标和工作流程指南 ,位于插件中,查看完整离线指南、全部五种操作类型、每项预设/图标、重置行为、默认值和故障排查。

Event Flow 节点面板参考

节点面板包含 45 个触发器、67 个操作、5 个逻辑节点和 4 个状态节点。每个条目的符号旁都有文字标签。选择节点可查看设置和集成前提条件;面板图标并不表明目标已连接。

触发器 决定流程何时启动。需要时用 AND/OR 连接条件。 操作 按连接顺序执行。 状态节点 在事件之间记住值。按钮冷却请选择 速率限制器 (THROTTLE),而不是延迟操作:延迟会推迟每次运行,不会抑制重复按键。

触发器:Stream Deck 与 API(1)
  • ▶ 从 Stream Deck/API 运行 — apiTrigger
触发器:📣 直播事件(9)
  • 👋 新关注者 — eventNewFollower
  • ⭐ 新订阅者 — eventNewSubscriber
  • 🔄 再次订阅/续订 — eventResub
  • 🎁 赠送订阅 — eventGiftSub
  • 💰 捐赠/打赏 — eventDonation
  • 🚀 突袭 — eventRaid
  • 💎 欢呼/Bits — eventCheer
  • 📋 其他事件… — eventOther
  • ✏️ 自定义事件 — eventCustom
触发器:OBS Studio(7)
  • OBS 直播开始 — obsStreamStarted
  • OBS 直播停止 — obsStreamStopped
  • OBS 录制开始 — obsRecordingStarted
  • OBS 录制停止 — obsRecordingStopped
  • OBS 场景更改 — obsSceneChanged
  • OBS 媒体结束 — obsMediaEnded
  • OBS 回放缓存已保存 — obsReplaybufferSaved
触发器:💬 聊天消息(6)
  • 💬 任意消息 — anyMessage
  • 🔍 消息包含 — messageContains
  • ▶️ 消息开头为 — messageStartsWith
  • ⏹️ 消息结尾为 — messageEndsWith
  • 🟰 消息等于 — messageEquals
  • 🔤 消息正则表达式 — messageRegex
触发器:📊 消息属性(7)
  • 📏 消息长度 — messageLength
  • 🔢 词数 — wordCount
  • 😀 包含 Emoji — containsEmoji
  • 🔗 包含链接 — containsLink
  • 💰 包含打赏 — hasDonation
  • ⚖️ 比较属性 — compareProperty
  • ⚙️ 消息属性筛选器 — messageProperties
触发器:👤 用户与来源(6)
  • 📡 来自来源 — fromSource
  • 📺 来自频道名称 — fromChannelName
  • 👤 来自用户 — fromUser
  • 👑 用户角色 — userRole
  • 🧠 用户已被记住 — userMemoryContains
  • 🎁 频道积分兑换 — channelPointRedemption
触发器:⏰ 定时与随机(4)
  • 🎲 随机概率 — randomChance
  • ⏰ 时间间隔 — timeInterval
  • 🎤 当我说… — voicePhrase
  • 🕐 一天中的时间 — timeOfDay
触发器:🎹 MIDI(3)
  • 🎹 MIDI 音符开启 — midiNoteOn
  • 🎹 MIDI 音符关闭 — midiNoteOff
  • 🎛️ MIDI 控制变更 — midiCC
触发器:📦 高级(2)
  • 📣 事件类型(高级)— eventType
  • 自定义代码 — customJs
操作:💬 消息操作(14)
  • 🚫 阻止消息 — blockMessage
  • ✅ 返回消息 — returnMessage
  • ⚡ 异步继续 — continueAsync
  • ✏️ 修改消息 — modifyMessage
  • ⬅️ 添加前缀 — addPrefix
  • ➡️ 添加后缀 — addSuffix
  • 🔄 查找和替换 — findReplace
  • ✂️ 移除文字 — removeText
  • 🎨 设置属性 — setProperty
  • 🌟 精选消息 — featureMessage
  • 置顶消息 — pinMessage
  • 💬 发送消息 — sendMessage
  • 📢 中继聊天 — relay
  • 🪞 回传筛选器 — reflectionFilter
操作:🔌 集成(6)
  • 执行自定义代码 — customJs
  • 🖨️ 打印热敏标签 — printThermal
  • 🌐 调用 Webhook — webhook
  • ⬆️ 添加积分 — addPoints
  • ⬇️ 消费积分 — spendPoints
  • 🎁 抽奖/票券 — giveawayControl
操作:🎨 媒体与效果(7)
  • 🖼️ 显示媒体叠加层 — playTenorGiphy
  • 👤 显示头像 — showAvatar
  • 🛍 商品与支持 — commerceControl
  • 📝 显示文字 — showText
  • 🗑️ 清除图层 — clearLayer
  • 🔊 播放音频片段 — playAudioClip
  • ⏱️ 延迟 — delay
操作:🎬 OBS Studio(14)
  • 🎬 更改场景 — obsChangeScene
  • 👁️ 切换来源 — obsToggleSource
  • 📝 设置文字来源 — obsSetText
  • ⏯️ 控制媒体来源 — obsMediaControl
  • 🔊 设置来源音量 — obsSetVolume
  • 🔄 刷新浏览器来源 — obsRefreshBrowser
  • 🎨 切换滤镜 — obsSetSourceFilter
  • 🔇 静音/取消静音 — obsMuteSource
  • 🔴 开始录制 — obsStartRecording
  • ⏹️ 停止录制 — obsStopRecording
  • 📡 开始直播 — obsStartStreaming
  • ⏹️ 停止直播 — obsStopStreaming
  • ⏺️ 控制回放缓存 — obsReplayBufferControl
  • 💾 保存回放缓存 — obsReplayBuffer
操作:🎵 Spotify(10)
  • ⏭️ 跳过曲目 — spotifySkip
  • ⏮️ 上一首 — spotifyPrevious
  • ⏸️ 暂停 — spotifyPause
  • ▶️ 恢复 — spotifyResume
  • ⏯️ 切换播放/暂停 — spotifyToggle
  • 🔊 设置音量 — spotifyVolume
  • 📋 添加到队列 — spotifyQueue
  • 🎵 公告正在播放 — spotifyNowPlaying
  • 🔀 切换随机播放 — spotifyShuffle
  • 🔁 设置重复模式 — spotifyRepeat
操作:🔊 文本转语音(5)
  • 🗣️ 朗读文字 — ttsSpeak
  • 🔇 切换 TTS — ttsToggle
  • ⏭️ 跳过 TTS — ttsSkip
  • 🗑️ 清空 TTS 队列 — ttsClear
  • 🔊 设置 TTS 音量 — ttsVolume
操作:🎹 MIDI(2)
  • 🎹 发送音符 — midiSendNote
  • 🎛️ 发送控制变更 — midiSendCC
操作:🧠 用户记忆(4)
  • 🧠 记住用户 — rememberUser
  • 👋 忘记用户 — forgetUser
  • 🧹 清除所有用户 — clearUserMemory
  • 🎟️ 随机选择用户 — pickRandomUser
操作:🔧 状态控制(5)
  • 🚦 设置门状态 — setGateState
  • 🔄 重置状态节点 — resetStateNode
  • 🔢 设置计数器值 — setCounter
  • ➕ 增加计数器 — incrementCounter
  • 检查计数器 — checkCounter
逻辑与状态节点
  • 🔀 与门 — AND
  • 🔄 或门 — OR
  • 🚫 非门 — NOT
  • 🎲 随机门 — RANDOM
  • 🚫 检查不良词语 — CHECK_BAD_WORDS
  • 🚦 开/关开关 — GATE
  • 🔢 计数器 — COUNTER
  • ⏲️ 速率限制器 — THROTTLE
  • 🧠 用户记忆 — USER_MEMORY

消息筛选器、观众积分和已记住用户的操作需要有意义的消息/用户数据。主持人按钮既不提供真实观众,也不提供来源回复目标。选择主持人控制或明确配置的目标;不要使用命名工作流程冒充观众。

详细连接说明,请参见 Event Flow 指南, 状态节点指南, 用户记忆指南,以及 OBS 指南.

逐步排查失败

  1. 先使用简单的显示文字流程,并验证其输出。
  2. 保存并启用;刷新 Stream Deck 工作流程列表。确认触发器名称和流程 ID。
  3. 确认 SSN 已启用、连接状态为在线,且目标叠加层连接到相同会话。
  4. 检查 API 回调或插件诊断中的查找/验证错误。请求被接受后发生的失败,请检查目标和 Event Flow 运行日志。
  5. 逐一添加更多集成。正式使用前,测试重复按键、禁用流程和重新连接。

编辑器的普通聊天测试面板发送聊天事件,不会模拟命名 API 触发器。通过 Stream Deck 或 API 测试此触发器,以验证完整路径。