Guía completa de controles, gestos e iconos de Stream Deck
Crea un flujo que se pueda invocar
- Disparador con nombreStream Deck / API
- Condiciones y accionesTu flujo guardado de Event Flow
- DestinoFlow Actions, OBS u otra integración
- Abrir Event Flow desde SSN. Crea un flujo dedicado o elige la plantilla Botón de Stream Deck / API .
- Añade Ejecutar desde Stream Deck / API (Run from Stream Deck / API) en el grupo de disparadores Stream Deck y API .
- Ponle el nombre
intermission. Los nombres deben coincidir exactamente y distinguen mayúsculas de minúsculas; usa un nombre corto y descriptivo. - Conecta su salida a Mostrar texto (Show Text). Establece el texto en
Back in five minutes, y elige la duración y la capa deseadas. - Guarda el flujo y actívalo. Un flujo sin guardar solo existe en el editor; uno desactivado no se puede invocar. La plantilla inicial está desactivada intencionadamente hasta que termines la configuración.
- Abre tu overlay Flow Actions con el enlace generado por SSN. Para la audiencia, añade esa URL como fuente de navegador de OBS. El editor en sí no es el overlay.
Los flujos sin este disparador con nombre no se pueden invocar mediante la API de flujos. Invocar un flujo no inyecta chat ficticio en el dock. Los eventos existentes de OBS y el chat normal siguen usando sus disparadores actuales.
Un flujo puede combinar su disparador con nombre y filtros mediante nodos lógicos. Mantén las automatizaciones independientes en flujos separados: todas las ramas de disparadores y lógica del flujo seleccionado se evalúan con el evento de API. Las pulsaciones repetidas inician ejecuciones separadas; coloca un nodo de estado Limitador de frecuencia (Rate Limiter) después del disparador si quieres un tiempo de espera.
Conecta una tecla de Stream Deck
- Configura la acción Configuración con tu sesión de SSN y contraseña opcional. Usa Probar conexión (Test Connection).
- Arrastra Comando predefinido (Preset Command) a una tecla.
- Selecciona Flujos de Event Flow → Ejecutar flujo (Event Flow workflows → Run workflow).
- Elige Actualizar flujos (Refresh workflows), y selecciona el flujo y el disparador guardados. La tecla guarda tanto el ID del flujo como el nombre del disparador.
- Pulsa una vez y observa el overlay Flow Actions. La marca de verificación de la tecla significa que SSN aceptó la ejecución.
El selector de flujos conserva las selecciones ausentes. Después de renombrar, desactivar, eliminar o importar un flujo, actualiza y selecciónalo de nuevo. Un flujo importado como nuevo tiene un ID distinto. Usa el campo Value para seleccionar por nombre en varios flujos.
Comando personalizado: establece Action en triggerWorkflow, deja Target vacío, introduce {"trigger":"intermission"} como Value y activa Esperar respuesta (Wait for response). El ajuste predefinido ofrece selección guiada y filtrado por capacidades.
Acciones múltiples: cada solicitud de flujo confirma rápidamente la aceptación. El siguiente paso de Stream Deck puede comenzar antes de terminar las acciones retrasadas del flujo. Coloca la secuencia y las demoras dentro de Event Flow cuando el orden importe.
Pasar valores personalizados
En el campo Value de la tecla o en tu solicitud de API:
{
"trigger": "intermission",
"flowId": "YOUR_SAVED_FLOW_ID",
"data": { "name": "Back in five minutes", "minutes": 5 }
}Establece Show Text en {meta.workflow.data.name}. Comparar propiedad (Compare Property) puede leer meta.workflow.data.minutes. Data es un objeto JSON opcional; permanece en meta.workflow.data y no puede reemplazar la identidad del evento ni conceder privilegios de chat.
Omite flowId para invocar todos los flujos activados con ese nombre exacto de disparador. Varios nodos coincidentes de disparador en un flujo siguen evaluando ese flujo una sola vez. Para ejecutar solo uno, conserva su ID del selector o de la respuesta de descubrimiento.
El evento usado dentro del flujo seleccionado tiene type: "api", event: "workflow_trigger", chatname: "Stream Deck / API", un valor vacío de chatmessage, y los datos anteriores. Un mensaje de chat normal que copie esos campos no puede activar el disparador de API con nombre.
Ejemplos de API
Mantén SSN activado y en ejecución. Son llamadas de control remoto de Social Stream; no usan la API local separada de IA/MCP de SSApp. Mantén privado tu ID de sesión real.
Descubre los disparadores disponibles
{"action":"getWorkflowTriggers","get":"list-1","apiid":"YOUR_SESSION"}La respuesta contiene result.payload.triggers:
{"triggers":[{"flowId":"flow-123","flowName":"Intermission","trigger":"intermission"}]}
Ejecutar un flujo con nombre
{
"action": "triggerWorkflow",
"value": {"trigger":"intermission","flowId":"flow-123","data":{"name":"Back shortly"}},
"get": "run-1",
"apiid": "YOUR_SESSION"
}Usa una cadena única de get para cada solicitud. Una respuesta correcta tiene result.ok: true, result.status: "accepted", y result.payload.matchedFlows. La aceptación significa que se encontró y programó el flujo activado. No significa que hayan terminado todas las acciones retrasadas, webhooks, llamadas a OBS o reproducciones multimedia.
WebSocket
Activa control remoto de la extensión mediante API (remote API control of extension) en SSN. Conéctalo a wss://io.socialstream.ninja. Únete con {"join":"YOUR_SESSION","out":1,"in":2}, y envía la solicitud anterior. El canal 1 lleva controles; el canal 2 lleva respuestas. No necesitas activar el canal de chat para los flujos de trabajo.
HTTP
Activa el mismo ajuste de control remoto de la API. Sustituye el marcador de sesión antes de usarlo:
POST https://io.socialstream.ninja/YOUR_SESSION
Content-Type: application/json
{"action":"triggerWorkflow","value":{"trigger":"intermission","data":{"name":"Back shortly"}}}Para un disparador con nombre sencillo también puedes usar GET https://io.socialstream.ninja/YOUR_SESSION/triggerWorkflow/null/intermission. El cuarto segmento de la ruta puede contener JSON codificado para URL para valores estructurados. Codifica todo el valor JSON con encodeURIComponent(JSON.stringify(value)). Los canales personalizados de envío usan ?channel=N.
P2P
El modo P2P predeterminado del plugin envía los mismos datos mediante el transporte de canales de datos VDO.Ninja existente de SSN. La opción de API WebSocket alojada no es necesaria para P2P. Los clientes P2P existentes deben enviar esta solicitud mediante su conexión de control de SSN establecida; no hace falta abrir la API local de IA.
Errores y compatibilidad
WORKFLOW_NOT_FOUND: ningún flujo guardado y activado coincide con el disparador o ID de flujo.INVALID_VALUE: disparador ausente o no válido, JSON mal formado, ID de flujo no válido o datos que no son un objeto.CONTROL_UNAVAILABLE: SSN o el control remoto del anfitrión están desactivados.TARGET_UNAVAILABLE: Event Flow aún está cargando.- Los recursos antiguos de Social Stream pueden no anunciar estas acciones. Comprueba
getCapabilities→ssn.actions.triggerWorkflowygetWorkflowTriggers. Deben estar instalados tanto el disparador nuevo como el plugin actualizado; la versión de SSApp por sí sola no identifica los recursos de Social Stream cargados a distancia.
No reintentes automáticamente una llamada que modifique datos después de perder su confirmación: el flujo puede haber empezado ya. Comprueba su salida primero. Esta API no proporciona una cola de estado de ejecución.
Qué necesita cada integración
| Acción de flujo de trabajo | Destino o configuración necesarios | Qué comprobar |
|---|---|---|
| Mostrar texto, multimedia, audio y vaciado de capas | Overlay Flow Actions conectado, con la misma sesión; fuente de navegador de OBS para la salida de la audiencia. | Salida visible, capa, duración y enrutamiento de audio. Un comando correcto no confirma la visibilidad de una escena de OBS. |
| Controles de OBS | Flow Actions conectado a OBS con la dirección y contraseña configuradas; nombres de escenas y fuentes coincidentes. | Estado real de OBS. Consulta la guía de OBS. |
| Fijar o destacar mensaje | Dock predeterminado conectado; elige un ID de mensaje real o los datos completos de un mensaje. | Lista de fijados del dock y overlay de destacados. El texto de chat vacío de un disparador de API no es por sí mismo un mensaje útil. |
| Llamar a webhook (Call Webhook) | URL, método y cuerpo JSON en la acción. | Respuesta del receptor y campos de error de Event Flow; la confirmación de Stream Deck llega antes que los resultados retrasados o externos. |
| Enviar mensaje / reenviar | Fuente conectada con capacidad de envío y destino explícito. | Chat real de destino. Una solicitud de flujo no da permiso para eludir los límites de la plataforma. |
| Productos y apoyo | Productos guardados y activados y el overlay de comercio. | Estado seleccionado, oculto o programado de SSN. Consulta controles de productos. |
| Sorteos, boletos y puntos | Sorteo o economía configurados y un actor adecuado. Un evento de API con nombre no tiene identidad de espectador. | Usa los ajustes de sorteos de nivel anfitrión para controles del anfitrión; no trates el evento de API como una compra de espectador. Consulta sorteos y puntos. |
| TTS, Spotify, impresión, MIDI | La conexión, los permisos, el dispositivo o la configuración de cuenta propios de cada integración. | El destino o dispositivo real. Instalar Stream Deck no configura estas integraciones. |
Guía completa de Event Flow · Ejemplos prácticos · Referencia de la API
Gestos de temporizador y chat
Temporizador: gira un paso para ±10 segundos de forma predeterminada; mantén pulsado el dial mientras giras para ±1 minuto (6 veces el paso configurado). Pulsa y suelta sin girar para iniciar o pausar. Toca la pantalla del temporizador para actualizar; mantén pulsada la pantalla para reiniciar. Mantener pulsado solo el dial físico no reinicia.
Revisión del chat: gira a la izquierda para chat anterior y a la derecha para el más reciente; pulsa el dial para fijar el mensaje revisado. Toca la pantalla para destacar el siguiente mensaje fijado; mantén pulsada la pantalla para desfijar el mensaje revisado. Mantén abierto el dock predeterminado. En modo WebSocket, activa el reenvío de chat en el canal 4.
Abrir Ayuda y diagnósticos → Guía de controles, iconos y flujos (Help and diagnostics → Controls, icons and workflow guide) en el plugin para ver la guía completa sin conexión, los cinco tipos de acción, todos los ajustes e iconos, el comportamiento de reinicio, los valores predeterminados y la resolución de problemas.
Referencia de la paleta de Event Flow
La paleta tiene 45 disparadores, 67 acciones, cinco nodos lógicos y cuatro nodos de estado. Cada entrada tiene una etiqueta de texto junto a su símbolo. Selecciona un nodo para ver sus ajustes y requisitos de integración; un icono en la paleta no demuestra que un destino esté conectado.
Disparadores deciden cuándo empieza un flujo. Conecta condiciones con AND/OR cuando haga falta. Acciones se ejecutan en el orden conectado. Nodos de estado recuerdan valores entre eventos. Para un tiempo de espera de botón, elige Limitador de frecuencia (Rate Limiter) (THROTTLE), no una acción Delay: Delay retrasa cada ejecución y no suprime pulsaciones repetidas.
Disparadores: Stream Deck y API (1)
- ▶ Ejecutar desde Stream Deck / API —
apiTrigger
Disparadores: 📣 Eventos del directo (9)
- 👋 Nuevo seguidor —
eventNewFollower - ⭐ Nuevo suscriptor —
eventNewSubscriber - 🔄 Resuscripción/Renovación —
eventResub - 🎁 Suscripción regalada —
eventGiftSub - 💰 Donación / Propina —
eventDonation - 🚀 Raid —
eventRaid - 💎 Cheers/Bits —
eventCheer - 📋 Otro evento… —
eventOther - ✏️ Evento personalizado —
eventCustom
Disparadores: OBS Studio (7)
- Emisión de OBS iniciada (OBS Stream Started) —
obsStreamStarted - Emisión de OBS detenida (OBS Stream Stopped) —
obsStreamStopped - Grabación de OBS iniciada (OBS Recording Started) —
obsRecordingStarted - Grabación de OBS detenida (OBS Recording Stopped) —
obsRecordingStopped - Escena de OBS cambiada (OBS Scene Changed) —
obsSceneChanged - Multimedia de OBS finalizada (OBS Media Ended) —
obsMediaEnded - Búfer de repetición de OBS guardado (OBS Replay Buffer Saved) —
obsReplaybufferSaved
Disparadores: 💬 Mensajes de chat (6)
- 💬 Cualquier mensaje —
anyMessage - 🔍 El mensaje contiene —
messageContains - ▶️ El mensaje empieza por —
messageStartsWith - ⏹️ El mensaje termina por —
messageEndsWith - 🟰 El mensaje es igual a —
messageEquals - 🔤 Expresión regular del mensaje —
messageRegex
Disparadores: 📊 Propiedades de mensajes (7)
- 📏 Longitud del mensaje —
messageLength - 🔢 Número de palabras —
wordCount - 😀 Contiene emoji —
containsEmoji - 🔗 Contiene enlace —
containsLink - 💰 Tiene donación —
hasDonation - ⚖️ Comparar propiedad —
compareProperty - ⚙️ Filtro de propiedades de mensajes —
messageProperties
Disparadores: 👤 Usuario y fuente (6)
- 📡 De fuente —
fromSource - 📺 Del nombre de canal —
fromChannelName - 👤 De usuario —
fromUser - 👑 Rol de usuario —
userRole - 🧠 El usuario está recordado —
userMemoryContains - 🎁 Canje de puntos de canal —
channelPointRedemption
Disparadores: ⏰ Tiempo y azar (4)
- 🎲 Probabilidad aleatoria —
randomChance - ⏰ Intervalo de tiempo —
timeInterval - 🎤 Cuando diga… —
voicePhrase - 🕐 Hora del día —
timeOfDay
Disparadores: 🎹 MIDI (3)
- 🎹 Nota MIDI activada —
midiNoteOn - 🎹 Nota MIDI desactivada —
midiNoteOff - 🎛️ Cambio de control MIDI —
midiCC
Disparadores: 📦 Avanzados (2)
- 📣 Tipo de evento (avanzado) —
eventType - Código personalizado (Custom Code) —
customJs
Acciones: 💬 Acciones de mensajes (14)
- 🚫 Bloquear mensaje —
blockMessage - ✅ Devolver mensaje —
returnMessage - ⚡ Continuar de forma asíncrona —
continueAsync - ✏️ Modificar mensaje —
modifyMessage - ⬅️ Añadir prefijo —
addPrefix - ➡️ Añadir sufijo —
addSuffix - 🔄 Buscar y reemplazar —
findReplace - ✂️ Eliminar texto —
removeText - 🎨 Establecer propiedad —
setProperty - 🌟 Destacar mensaje —
featureMessage - Fijar mensaje (Pin Message) —
pinMessage - 💬 Enviar mensaje —
sendMessage - 📢 Reenviar chat —
relay - 🪞 Filtro de reflejos —
reflectionFilter
Acciones: 🔌 Integraciones (6)
- Ejecutar código personalizado (Execute Custom Code) —
customJs - 🖨️ Imprimir etiqueta térmica —
printThermal - 🌐 Llamar a webhook —
webhook - ⬆️ Añadir puntos —
addPoints - ⬇️ Gastar puntos —
spendPoints - 🎁 Sorteo / Boletos —
giveawayControl
Acciones: 🎨 Multimedia y efectos (7)
- 🖼️ Mostrar overlay multimedia —
playTenorGiphy - 👤 Mostrar avatar —
showAvatar - 🛍 Productos y apoyo —
commerceControl - 📝 Mostrar texto —
showText - 🗑️ Vaciar capa —
clearLayer - 🔊 Reproducir clip de audio —
playAudioClip - ⏱️ Demora —
delay
Acciones: 🎬 OBS Studio (14)
- 🎬 Cambiar escena —
obsChangeScene - 👁️ Alternar fuente —
obsToggleSource - 📝 Establecer fuente de texto —
obsSetText - ⏯️ Controlar fuente multimedia —
obsMediaControl - 🔊 Establecer volumen de fuente —
obsSetVolume - 🔄 Actualizar fuente de navegador —
obsRefreshBrowser - 🎨 Alternar filtro —
obsSetSourceFilter - 🔇 Silenciar/activar audio —
obsMuteSource - 🔴 Iniciar grabación —
obsStartRecording - ⏹️ Detener grabación —
obsStopRecording - 📡 Iniciar emisión —
obsStartStreaming - ⏹️ Detener emisión —
obsStopStreaming - ⏺️ Controlar búfer de repetición —
obsReplayBufferControl - 💾 Guardar búfer de repetición —
obsReplayBuffer
Acciones: 🎵 Spotify (10)
- ⏭️ Saltar pista —
spotifySkip - ⏮️ Pista anterior —
spotifyPrevious - ⏸️ Pausar —
spotifyPause - ▶️ Reanudar —
spotifyResume - ⏯️ Alternar reproducción/pausa —
spotifyToggle - 🔊 Establecer volumen —
spotifyVolume - 📋 Añadir a la cola —
spotifyQueue - 🎵 Anunciar lo que suena —
spotifyNowPlaying - 🔀 Alternar reproducción aleatoria —
spotifyShuffle - 🔁 Establecer modo de repetición —
spotifyRepeat
Acciones: 🔊 Texto a voz (5)
- 🗣️ Pronunciar texto —
ttsSpeak - 🔇 Alternar TTS —
ttsToggle - ⏭️ Saltar TTS —
ttsSkip - 🗑️ Vaciar cola de TTS —
ttsClear - 🔊 Establecer volumen de TTS —
ttsVolume
Acciones: 🎹 MIDI (2)
- 🎹 Enviar nota —
midiSendNote - 🎛️ Enviar cambio de control —
midiSendCC
Acciones: 🧠 Memoria de usuarios (4)
- 🧠 Recordar usuario —
rememberUser - 👋 Olvidar usuario —
forgetUser - 🧹 Borrar todos los usuarios —
clearUserMemory - 🎟️ Elegir usuario aleatorio —
pickRandomUser
Acciones: 🔧 Control de estado (5)
- 🚦 Establecer estado de puerta —
setGateState - 🔄 Reiniciar nodo de estado —
resetStateNode - 🔢 Establecer valor del contador —
setCounter - ➕ Incrementar contador —
incrementCounter - Comprobar contador (Check Counter) —
checkCounter
Nodos de lógica y estado
- 🔀 Puerta AND —
AND - 🔄 Puerta OR —
OR - 🚫 Puerta NOT —
NOT - 🎲 Puerta aleatoria RANDOM —
RANDOM - 🚫 Comprobar palabras ofensivas —
CHECK_BAD_WORDS - 🚦 Interruptor de encendido/apagado —
GATE - 🔢 Contador —
COUNTER - ⏲️ Limitador de frecuencia —
THROTTLE - 🧠 Memoria de usuarios —
USER_MEMORY
Los filtros de mensajes, puntos de espectadores y acciones de usuarios recordados necesitan datos significativos de mensaje o usuario. Un botón del anfitrión no proporciona un espectador real ni un destino de respuesta de origen. Elige controles del anfitrión o un destino configurado explícito; no uses un flujo con nombre para suplantar a un espectador.
Para detalles de conexión, consulta la Guía de Event Flow, guía de nodos de estado, guía de memoria de usuarios, y guía de OBS.
Resolver un fallo
- Empieza con un flujo sencillo de Show Text y comprueba su salida.
- Guarda y activa; actualiza la lista de flujos de Stream Deck. Comprueba el nombre del disparador y el ID del flujo.
- Comprueba que SSN esté activado, que la conexión esté Online y que el overlay de destino esté conectado a la misma sesión.
- Consulta la respuesta de la API o los diagnósticos del plugin para ver errores de búsqueda o validación. Para fallos posteriores a la aceptación, inspecciona el destino y los registros de ejecución de Event Flow.
- Añade más integraciones una a una. Prueba pulsaciones repetidas, un flujo desactivado y una reconexión antes de usarlo en directo.
El panel normal de prueba de chat del editor envía un evento de chat. No imita un disparador de API con nombre. Prueba este disparador mediante Stream Deck o la API para comprobar todo el recorrido.