Полное руководство по элементам управления, жестам и значкам Stream Deck
Создайте сценарий, который можно вызвать
- Именованный триггерStream Deck / API
- Условия и действияВаш сохранённый сценарий Event Flow
- НазначениеFlow Actions, OBS или другая интеграция
- Открыть Event Flow из SSN. Создайте отдельный сценарий или выберите шаблон Кнопка Stream Deck / API .
- Добавить Запуск из Stream Deck / API в группе триггеров Stream Deck и API .
- Задайте имя
intermission. Имена должны совпадать точно, с учётом регистра; выберите короткое описательное имя. - Соедините его выход с Показать текст. Задайте текст
Back in five minutesи выберите нужную длительность и слой. - Сохраните сценарий, затем включите его. Несохранённый сценарий существует только в редакторе; выключенный нельзя вызвать. Начальный шаблон намеренно выключен до завершения настройки.
- Откройте свой Оверлей Flow Actions по ссылке, созданной SSN. Для показа зрителям добавьте этот URL как источник «Браузер» OBS. Сам редактор оверлеем не является.
Сценарии без этого именованного триггера нельзя вызвать через API сценариев. Вызов сценария не добавляет фиктивный чат в док-панель. Существующие события OBS и обычный чат продолжают использовать свои триггеры.
Сценарий может объединять именованный триггер с фильтрами через логические узлы. Размещайте несвязанные автоматизации в отдельных сценариях: все ветви триггеров и логики выбранного сценария проверяются с событием API. Повторные нажатия создают отдельные запуски; добавьте Ограничитель частоты после триггера, если нужен интервал между запусками.
Подключить клавишу Stream Deck
- Настройте в плагине действие Настройка с вашей сессией SSN и необязательным паролем. Используйте Проверить подключение.
- Перетащите Готовая команда на клавишу.
- Выберите Сценарии Event Flow → Запустить сценарий.
- Выберите Обновить сценарии, затем выберите сохранённый сценарий и триггер. Клавиша хранит ID сценария вместе с именем триггера.
- Нажмите один раз и посмотрите на оверлей Flow Actions. Галочка на клавише означает, что SSN принял запуск.
Список сценариев сохраняет выбор даже при отсутствии выбранного элемента. После переименования, отключения, удаления или импорта сценария обновите список и выберите сценарий заново. У сценария, импортированного как новый, другой ID. Для обращения по имени к нескольким сценариям используйте поле Value.
Пользовательская команда: задайте для Action значение triggerWorkflow, оставьте Target пустым, введите {"trigger":"intermission"} в качестве Value и включите Ожидать ответ. Предустановка помогает выбрать параметры и отфильтровывает неподдерживаемые возможности.
Мультидействия: каждый запрос сценария быстро подтверждает принятие. Следующий шаг 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 для вызова всех включённых сценариев с точно таким именем триггера. Несколько совпадающих узлов триггера в одном сценарии всё равно проверяют этот сценарий только один раз. Чтобы запустить только один сценарий, сохраните его ID из списка выбора или ответа со списком сценариев.
Событие внутри выбранного сценария содержит type: "api", event: "workflow_trigger", chatname: "Stream Deck / API", пустое поле chatmessage и данные выше. Обычный чат с копиями этих полей не может активировать именованный триггер API.
Примеры API
SSN должен быть включён и запущен. Это вызовы удалённого управления Social Stream; они не используют отдельный локальный API ИИ/MCP в SSApp. Держите настоящий 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. Принятие означает, что включённый сценарий найден и поставлен на выполнение. Оно не означает, что все отложенные действия, вебхуки, вызовы OBS или воспроизведение медиа уже завершены.
WebSocket
Включить (Enable) удалённое управление расширением через 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. Четвёртый сегмент пути может содержать JSON со структурированными значениями, закодированный для URL. Кодируйте всё значение JSON с помощью encodeURIComponent(JSON.stringify(value)). Пользовательские каналы отправки используют ?channel=N.
P2P
Режим P2P, используемый плагином по умолчанию, отправляет тот же объект через существующий транспорт каналов данных VDO.Ninja в SSN. Для P2P не нужен переключатель размещённого WebSocket API. Существующие клиенты P2P должны отправлять этот запрос через установленное соединение управления SSN; открывать локальный 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 сам по себе не является полезным сообщением. |
| Вызвать вебхук | URL, метод и тело JSON в действии. | Ответ получателя и поля ошибок Event Flow; подтверждение Stream Deck приходит до результатов отложенных или внешних действий. |
| Отправка и пересылка сообщений | Подключённый источник с возможностью отправки и явно указанный адресат. | Сам целевой чат. Запрос сценария не разрешает обходить ограничения платформы. |
| Товары и поддержка | Сохранённые и включённые товары и торговый оверлей. | Состояние выбора, скрытия или расписания в SSN. См. управление товарами. |
| Розыгрыши, билеты, баллы | Настроенный розыгрыш или экономика и подходящий участник. У именованного события API нет личности зрителя. | Для управления розыгрышем со стороны ведущего используйте предустановки уровня ведущего; не считайте событие API покупкой зрителя. См. розыгрыши и баллы. |
| TTS, Spotify, печать, MIDI | Подключение, разрешения, устройство или аккаунт, необходимые каждой интеграции. | Сам адресат или устройство. Установка Stream Deck не настраивает эти интеграции. |
Жесты таймера и чата
Таймер: один шаг поворота по умолчанию изменяет время на ±10 секунд; поворачивайте регулятор, удерживая его нажатым для ±1 минуты (6× настроенный шаг). Нажмите и отпустите без поворота для запуска или паузы. Коснитесь экрана таймера для обновления; удерживайте экран для сброса. Одно лишь удержание физического регулятора не сбрасывает таймер.
Просмотр чата: поворачивайте влево для старых сообщений, вправо для новых; нажмите регулятор, чтобы закрепить просматриваемое сообщение. Коснитесь экрана, чтобы выделить следующее закреплённое сообщение; удерживайте экран, чтобы открепить просматриваемое сообщение. Стандартная док-панель должна быть открыта. В режиме WebSocket включите пересылку чата на канале 4.
Открыть Справка и диагностика → Руководство по управлению, значкам и сценариям в плагине: там находится полное автономное руководство, все пять типов действий, все предустановки и значки, правила сброса, значения по умолчанию и устранение неполадок.
Справочник палитры Event Flow
Палитра содержит 45 триггеров, 67 действий, пять логических узлов и четыре узла состояния. У каждого элемента рядом со значком есть текстовая подпись. Выберите узел, чтобы увидеть его настройки и требования к интеграции; значок в палитре не означает, что адресат подключён.
Триггеры определяют, когда начинается сценарий. При необходимости соединяйте условия через AND/OR. Действия выполняются в порядке соединения. Узлы состояния запоминают значения между событиями. Для интервала между нажатиями кнопки выберите Ограничитель частоты (THROTTLE), а не действие Delay: Delay откладывает каждый запуск, но не подавляет повторные нажатия.
Триггеры: Stream Deck и API (1)
- ▶ Запуск из Stream Deck / API —
apiTrigger
Триггеры: 📣 События трансляции (9)
- 👋 Новый фолловер —
eventNewFollower - ⭐ Новый подписчик —
eventNewSubscriber - 🔄 Повторная подписка / продление —
eventResub - 🎁 Подарочная подписка —
eventGiftSub - 💰 Пожертвование / чаевые —
eventDonation - 🚀 Рейд —
eventRaid - 💎 Cheer/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 - 😀 Содержит эмодзи —
containsEmoji - 🔗 Содержит ссылку —
containsLink - 💰 Есть пожертвование —
hasDonation - ⚖️ Сравнить свойство —
compareProperty - ⚙️ Фильтр свойств сообщения —
messageProperties
Триггеры: 👤 Пользователь и источник (6)
- 📡 Из источника —
fromSource - 📺 От канала с именем —
fromChannelName - 👤 От пользователя —
fromUser - 👑 Роль пользователя —
userRole - 🧠 Пользователь запомнен —
userMemoryContains - 🎁 Награда за баллы канала —
channelPointRedemption
Триггеры: ⏰ Время и случайность (4)
- 🎲 Случайная вероятность —
randomChance - ⏰ Интервал времени —
timeInterval - 🎤 Когда я говорю… —
voicePhrase - 🕐 Время суток —
timeOfDay
Триггеры: 🎹 MIDI (3)
- 🎹 MIDI Note On —
midiNoteOn - 🎹 MIDI Note Off —
midiNoteOff - 🎛️ MIDI Control Change —
midiCC
Триггеры: 📦 Дополнительно (2)
- 📣 Тип события (дополнительно) —
eventType - Пользовательский код —
customJs
Действия: 💬 Действия с сообщениями (14)
- 🚫 Заблокировать сообщение —
blockMessage - ✅ Вернуть сообщение —
returnMessage - ⚡ Продолжить асинхронно —
continueAsync - ✏️ Изменить сообщение —
modifyMessage - ⬅️ Добавить префикс —
addPrefix - ➡️ Добавить суффикс —
addSuffix - 🔄 Найти и заменить —
findReplace - ✂️ Удалить текст —
removeText - 🎨 Установить свойство —
setProperty - 🌟 Выделить сообщение —
featureMessage - Закрепить сообщение —
pinMessage - 💬 Отправить сообщение —
sendMessage - 📢 Переслать чат —
relay - 🪞 Фильтр отражений —
reflectionFilter
Действия: 🔌 Интеграции (6)
- Выполнить пользовательский код —
customJs - 🖨️ Напечатать термоэтикетку —
printThermal - 🌐 Вызвать вебхук —
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 - 🎛️ Отправить Control Change —
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.
Разобраться со сбоем
- Начните с простого сценария Show Text и проверьте его результат.
- Сохраните и включите сценарий; обновите список сценариев Stream Deck. Проверьте и имя триггера, и ID сценария.
- Убедитесь, что SSN включён, соединение имеет состояние Online, а целевой оверлей подключён к той же сессии.
- Проверьте ответ API или диагностику плагина на ошибки поиска и проверки данных. При сбоях после принятия запроса проверьте целевую систему и журнал выполнения Event Flow.
- Добавляйте остальные интеграции по одной. Перед использованием в эфире проверьте повторные нажатия, выключенный сценарий и переподключение.
Обычная тестовая панель чата в редакторе отправляет событие чата. Она не имитирует именованный триггер API. Проверяйте этот триггер через Stream Deck или API, чтобы проверить весь путь.