전체 Stream Deck 제어, 제스처 및 아이콘 가이드
호출 가능한 작업 흐름 만들기
- 이름 있는 트리거Stream Deck / API
- 조건 및 동작저장된 이벤트 흐름
- 대상흐름 동작, OBS 또는 다른 통합
- 열기 Event Flow 을 SSN에서 여세요. 전용 흐름을 만들거나 다음을 선택하세요: Stream Deck / API 버튼 템플릿을 선택하세요.
- 추가: Stream Deck / API에서 실행 (Run from Stream Deck / API) 의 위치: Stream Deck 및 API 트리거 그룹입니다.
- 이름을 다음으로 지정하세요:
intermission으로 지정하세요. 이름은 정확히 일치해야 하며 대소문자를 구분합니다. 짧고 알아보기 쉬운 이름을 사용하세요. - 출력을 다음에 연결하세요: 텍스트 표시 (Show Text)에 연결하세요. 텍스트를 다음으로 설정하세요:
Back in five minutes으로 설정하고 원하는 지속 시간과 레이어를 선택하세요. - 흐름을 저장한 뒤 활성화하세요. 저장하지 않은 흐름은 편집기에만 존재하며 비활성 흐름은 호출할 수 없습니다. 시작 템플릿은 설정을 마칠 때까지 의도적으로 비활성화되어 있습니다.
- 열 항목: 흐름 동작 오버레이 를 SSN이 생성한 링크로 여세요. 시청자용으로는 해당 URL을 OBS 브라우저 소스에 추가하세요. 편집기 자체는 오버레이가 아닙니다.
이 이름 있는 트리거가 없는 흐름은 작업 흐름 API로 호출할 수 없습니다. 작업 흐름을 호출해도 도크에 가짜 채팅이 삽입되지 않습니다. 기존 OBS 이벤트와 일반 채팅은 기존 트리거를 계속 사용합니다.
흐름은 논리 노드로 이름 있는 트리거와 필터를 결합할 수 있습니다. 관련 없는 자동화는 별도 흐름으로 유지하세요. 선택한 흐름의 모든 트리거/논리 분기가 API 이벤트로 평가됩니다. 반복해서 누르면 별도 실행이 시작됩니다. 대기시간을 두려면 다음을 배치하세요: 실행 빈도 제한 (Rate Limiter) 상태 노드를 트리거 뒤에 배치하면 대기시간을 둘 수 있습니다.
Stream Deck 키 연결
- 플러그인의 다음을 설정하세요: 설정 동작에 SSN 세션과 선택적 비밀번호를 설정하세요. 사용할 항목: 연결 테스트 (Test Connection).
- 드래그할 항목: 프리셋 명령 (Preset Command) 을 키로 드래그하세요.
- 선택: Event Flow workflows → Run workflow.
- 선택: 작업 흐름 새로고침 (Refresh workflows)를 선택한 뒤 저장된 흐름과 트리거를 선택하세요. 키는 트리거 이름뿐 아니라 흐름 ID도 저장합니다.
- 한 번 누르고 흐름 동작 오버레이를 확인하세요. 키의 체크 표시는 SSN이 실행을 수락했다는 뜻입니다.
작업 흐름 선택기는 누락된 선택을 유지합니다. 흐름 이름 변경, 비활성화, 삭제 또는 가져오기 후에는 새로고침하고 다시 선택하세요. 새 흐름으로 가져오면 ID가 달라집니다. 여러 흐름에서 이름으로 대상을 지정하려면 대신 Value 입력란을 사용하세요.
사용자 지정 명령: Action을 다음으로 설정하세요: triggerWorkflow로 설정하고 Target은 비워 두며 다음을 입력하세요: {"trigger":"intermission"} 를 Value에 입력하고 다음을 활성화하세요: 응답 대기 (Wait for response)를 활성화하세요. 프리셋은 안내에 따른 선택과 기능 필터링을 제공합니다.
다중 동작: 각 작업 흐름 요청은 수락 여부를 빠르게 확인합니다. 지연된 흐름 동작이 끝나기 전에 다음 Stream Deck 단계가 시작될 수 있습니다. 순서가 중요하다면 이벤트 흐름 안에 순서와 지연을 넣으세요.
사용자 지정 값 전달
키의 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 원격 제어 호출이며 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가 포함됩니다. 수락은 활성화된 흐름을 찾아 실행을 예약했다는 뜻입니다. 지연된 모든 동작, 웹훅, 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: 이벤트 흐름이 아직 로드 중입니다.- 이전 Social Stream 리소스는 이 동작들을 제공하지 않을 수 있습니다. 확인할 항목:
getCapabilities→ssn.actions.triggerWorkflow그리고getWorkflowTriggers를 확인하세요. 새 트리거와 업데이트된 플러그인이 모두 설치되어 있어야 합니다. SSApp 버전 번호만으로는 원격으로 로드된 Social Stream 리소스를 식별할 수 없습니다.
수신 확인이 끊겼다고 상태를 변경하는 호출을 자동으로 재시도하지 마세요. 작업 흐름이 이미 시작되었을 수 있습니다. 먼저 출력을 확인하세요. 이 API는 실행 상태 대기열을 제공하지 않습니다.
각 통합에 필요한 것
| 작업 흐름 동작 | 필요한 대상/설정 | 확인할 사항 |
|---|---|---|
| 텍스트 표시, 미디어, 오디오, 레이어 지우기 | 같은 세션에 연결된 흐름 동작 오버레이와 시청자 출력용 OBS 브라우저 소스가 필요합니다. | 표시된 출력, 레이어, 지속 시간, 오디오 라우팅입니다. 명령 성공이 OBS 장면 표시를 확인해 주지는 않습니다. |
| OBS 제어 | 설정한 주소/비밀번호로 OBS에 연결된 흐름 동작과 일치하는 장면/소스 이름이 필요합니다. | 실제 OBS 상태입니다. 참고: OBS 가이드. |
| 메시지 고정/강조 | 연결된 기본 도크가 필요합니다. 실제 메시지 ID 또는 전체 메시지 페이로드를 선택하세요. | 도크 고정 목록과 강조 오버레이를 확인하세요. API 트리거의 빈 채팅 텍스트 자체는 유용한 채팅이 아닙니다. |
| 웹훅 호출 (Call Webhook) | 동작의 URL, 메서드, JSON 본문. | 수신기 응답 및 이벤트 흐름 오류 필드입니다. Stream Deck 수신 확인은 지연된/외부 결과보다 먼저 도착합니다. |
| 메시지 전송 / 릴레이 | 쓰기 가능한 연결된 소스와 명시적인 대상이 필요합니다. | 실제 대상 채팅입니다. 작업 흐름 요청은 플랫폼 제한을 우회할 권한이 아닙니다. |
| 상품 및 후원 | 저장되고 활성화된 상품과 커머스 오버레이가 필요합니다. | SSN의 선택/숨김/일정 상태입니다. 참고: 상품 제어. |
| 경품 추첨, 티켓, 포인트 | 설정된 경품 추첨/포인트 경제와 적절한 실행 주체가 필요합니다. 이름 있는 API 이벤트에는 시청자 신원이 없습니다. | 진행자 제어에는 진행자 수준의 경품 추첨 프리셋을 사용하세요. API 이벤트를 시청자의 구매로 취급하지 마세요. 참고: 경품 추첨 및 포인트. |
| 음성 읽기, Spotify, 인쇄, MIDI | 각 통합의 자체 연결, 권한, 장치 또는 계정 설정이 필요합니다. | 실제 대상/장치를 확인하세요. Stream Deck을 설치해도 이 통합들이 설정되지는 않습니다. |
타이머 및 채팅 제스처
타이머: 기본적으로 한 칸 돌리면 ±10초입니다. 다이얼을 누른 채 돌리기 를 하면 ±1분(설정된 간격의 6배)씩 바뀝니다. 돌리지 않고 눌렀다 떼면 시작/일시 중지합니다. 타이머 화면을 탭하면 새로고침됩니다. 타이머를 초기화하려면 다음을 길게 누르세요: 화면 . 물리 다이얼만 길게 눌러도 초기화되지는 않습니다.
채팅 검토: 왼쪽으로 돌리면 이전 채팅, 오른쪽은 새 채팅을 봅니다. 다이얼을 누르면 검토 중인 메시지를 고정합니다. 화면을 탭하면 다음 고정 메시지를 강조하고 화면을 길게 누르면 검토 중인 메시지의 고정을 해제합니다. 기본 도크를 열어 두세요. WebSocket 모드에서는 채널 4의 채팅 릴레이를 활성화하세요.
열기 Help and diagnostics → Controls, icons and workflow guide 를 플러그인에서 열면 전체 오프라인 가이드, 다섯 가지 동작 유형, 모든 프리셋/아이콘, 초기화 동작, 기본값, 문제 해결을 볼 수 있습니다.
이벤트 흐름 팔레트 참고 문서
팔레트에는 트리거 45개, 동작 67개, 논리 노드 5개, 상태 노드 4개가 있습니다. 각 항목에는 기호와 함께 텍스트 레이블이 있습니다. 노드를 선택하면 설정과 통합 사전 요구 사항을 볼 수 있습니다. 팔레트 아이콘만으로 대상이 연결되었다고 볼 수는 없습니다.
트리거 는 흐름이 시작되는 시점을 결정합니다. 필요하면 AND/OR로 조건을 연결하세요. 동작 은 연결된 순서로 실행됩니다. 상태 노드 는 이벤트 사이에 값을 기억합니다. 버튼 대기시간에는 다음을 선택하세요: 실행 빈도 제한 (Rate Limiter) (THROTTLE)를 선택하세요. Delay 동작은 매 실행을 지연시킬 뿐 반복 누름을 억제하지 않습니다.
트리거: Stream Deck 및 API (1)
- ▶ Stream Deck / API에서 실행 —
apiTrigger
트리거: 📣 방송 이벤트 (9)
- 👋 새 팔로워 —
eventNewFollower - ⭐ 새 구독자 —
eventNewSubscriber - 🔄 재구독/갱신 —
eventResub - 🎁 구독 선물 —
eventGiftSub - 💰 후원 / 팁 —
eventDonation - 🚀 레이드 —
eventRaid - 💎 응원/비트 —
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 노트 온 —
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 - ⬆️ 포인트 추가 —
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 - 🔇 음성 읽기 전환 —
ttsToggle - ⏭️ 음성 읽기 건너뛰기 —
ttsSkip - 🗑️ 음성 읽기 대기열 지우기 —
ttsClear - 🔊 음성 읽기 볼륨 설정 —
ttsVolume
동작: 🎹 MIDI (2)
- 🎹 노트 전송 —
midiSendNote - 🎛️ 컨트롤 변경 전송 —
midiSendCC
동작: 🧠 사용자 기억 (4)
- 🧠 사용자 기억 —
rememberUser - 👋 사용자 잊기 —
forgetUser - 🧹 모든 사용자 지우기 —
clearUserMemory - 🎟️ 무작위 사용자 선택 —
pickRandomUser
동작: 🔧 상태 제어 (5)
- 🚦 게이트 상태 설정 —
setGateState - 🔄 상태 노드 초기화 —
resetStateNode - 🔢 카운터 값 설정 —
setCounter - ➕ 카운터 증가 —
incrementCounter - 카운터 확인 —
checkCounter
논리 및 상태 노드
- 🔀 AND 게이트 —
AND - 🔄 OR 게이트 —
OR - 🚫 NOT 게이트 —
NOT - 🎲 RANDOM 게이트 —
RANDOM - 🚫 비속어 확인 —
CHECK_BAD_WORDS - 🚦 켜기/끄기 스위치 —
GATE - 🔢 카운터 —
COUNTER - ⏲️ 실행 빈도 제한 —
THROTTLE - 🧠 사용자 기억 저장소 —
USER_MEMORY
메시지 필터, 시청자 포인트, 기억한 사용자 동작에는 의미 있는 메시지/사용자 데이터가 필요합니다. 진행자 버튼은 실제 시청자도 소스 답장 대상도 제공하지 않습니다. 진행자 제어 또는 명시적으로 설정한 대상을 선택하세요. 이름 있는 작업 흐름으로 시청자를 사칭하지 마세요.
자세한 연결 방법은 다음을 참고하세요: Event Flow 가이드, 상태 노드 가이드, 사용자 기억 가이드, 그리고 OBS 가이드.
실패 문제 해결
- 먼저 간단한 텍스트 표시 흐름을 사용하고 출력을 확인하세요.
- 저장하고 활성화한 뒤 Stream Deck 작업 흐름 목록을 새로고침하세요. 트리거 이름과 흐름 ID를 모두 확인하세요.
- SSN이 활성화되어 있고 연결이 Online이며 대상 오버레이가 같은 세션에 연결되어 있는지 확인하세요.
- API 콜백 또는 플러그인 진단에서 조회/검증 오류를 확인하세요. 수락 후 실패는 대상과 이벤트 흐름 런타임 로그를 살펴보세요.
- 다른 통합은 한 번에 하나씩 추가하세요. 라이브에서 사용하기 전에 반복 누름, 비활성 흐름, 재연결을 시험하세요.
편집기의 일반 채팅 테스트 패널은 채팅 이벤트를 보냅니다. 이름 있는 API 트리거를 대신하지 않습니다. 전체 경로를 검증하려면 Stream Deck 또는 API로 이 트리거를 시험하세요.