Referencia de eventos en vivo

Esta página documenta los datos canónicos de eventos que Social Stream Ninja emite para las principales plataformas. Úsala como referencia compartida al conectar nuevas fuentes, resolver problemas de integraciones o alinear etiquetas de interfaz. Para una tabla más breve orientada a consumidores, consulta Compatibilidad de eventos y alertas.

Importante: La disponibilidad de eventos depende de la fuente, los permisos y los ajustes de captura. Para ocultar filas marcadas como eventos en el Dock o superposiciones de destacados, añade &hideevents o &hideallevents. Para ocultar eventos seleccionados, usa &filterevents=subscription_gift,new_follower,gifted. Estos filtros también pueden ocultar filas de pago que tengan un event; los filtros de eventos no coinciden con filas normales de donación sin marcador de evento. Los demás filtros de mensajes siguen aplicándose.
Elige el método de captura: Para YouTube, Twitch y Kick, Modo WebSocket suele proporcionar una cobertura más amplia de eventos. La captura Standard del DOM lee las filas y tarjetas realmente renderizadas en la página. Los Super Chats, Super Stickers y regalos Jewel de YouTube tienen rutas de captura en ambos modos; otros eventos de regalos, propinas y membresías varían según la fuente. Consulta las tablas de plataformas para ver las rutas compatibles y los ajustes necesarios.
¿Creas automatizaciones? Consulta la Guía de Event Flow para aprender a usar estos datos de eventos en disparadores, alertas y flujos personalizados. La guía incluye una Referencia de variables de plantilla para el formato de texto.
Estructura de datos: Las filas de chat con donaciones deben usar hasDonation y el opcional donoValue. No establezcas event: "donation" solo porque una fila normal de chat/propina tenga valor; usa nombres específicos de eventos solo para acciones reales de plataforma o tipos de artículos pagados, como superchat, supersticker, gift, o jeweldonation. Usa meta solo para datos estructurados adicionales que los consumidores necesiten y que los campos existentes no cubran.

Disponibilidad rápida de funciones

Usa esta tabla para ver qué tipos de alerta entrega actualmente cada método de captura. Las notas detalladas sobre los datos aparecen debajo.

El cuadro dedicado de alertas multistream agrupa los eventos en vivo en seis categorías principales: Follow, Subscription/Member, Donation, Bits/Cheers, Raid/Host, y Purchase, más dos categorías opcionales (Auction y Hype Train) habilitadas mediante parámetros de URL. Obtiene esas categorías a partir de los campos existentes event, membership, subtitle, hasDonation, y meta campos documentados aquí; no se requiere un formato de datos aparte.

Fuente Nuevos suscriptores / miembros Nuevos seguidores Donaciones Recuentos y extras
YouTube (puente de Data API) Altas, renovaciones y regalos de membresías Alertas individuales de suscriptores* + totales Super Chats y Super Stickers Totales de espectadores, suscriptores y vistas (consulta periódica)
Twitch – Captura del DOM Líneas de paquetes de regalos y avisos de destinatario - Bits marcados mediante hasDonation Recuento de espectadores, tarjetas de recompensas y tarjetas de destacados comunitarios
Twitch – EventSub/WebSocket Suscripciones, renovaciones y regalos instantáneos Seguimientos instantáneos + total de seguidores Cheers, Power-ups y canjes de puntos del canal Totales de espectadores/suscriptores/seguidores, estado de transmisión y avisos de anuncios
TikTok Live - Tarjetas de seguimiento (cuando TikTok las muestra) Regalos convertidos a totales de monedas Recuento de espectadores, alertas de incorporación y lluvias de me gusta
YouNow - Actividad de fans y público - Recuento de espectadores del panel de público en vivo
Favorited Studio - - - Recuento de espectadores de la pestaña de espectadores en vivo
Whatnot - - - Recuento de espectadores, alertas de incorporación, metadatos de subasta en vivo, productos e instantáneas de sorteos
eBay Live - - - Recuento de espectadores, seguidores, instantáneas de tarjetas de eventos en vivo, metadatos del pie de subasta (cuando se exponen), corazones de reacción y metadatos de próximos eventos
Cuadro de alertas de Streamlabs Suscripciones, regalos, patrocinadores, seguimientos Cheers/Bits, donaciones (con moneda) Cheers/Bits, donaciones (hasDonation) Mientras esté abierto un cuadro de alertas; también disponible mediante sources/websocket/streamlabs.html token del socket
Flow Actions de OBS - - - Eventos de salida, escena, búfer de repetición y fin de medios de OBS para Event Flow cuando actions.html está conectado a OBS WebSocket
Kick – DOM - - - Recuento de espectadores y avisos básicos de recompensas/regalos; usa el puente de Kick para alertas más completas
Kick – WebSocket/Puente Nuevas suscripciones, renovaciones y regalos Alertas de seguimiento + total de seguidores Eventos de apoyo/propina (importe + moneda) Estado de transmisión, canjes de recompensas y metadatos de perfil
Facebook Live - - Estrellas cuando son visibles en el DOM Filas de chat, Estrellas y consultas de recuento de espectadores
Rumble – Captura del DOM - - Precios visibles de Rant Chat, raids entrantes y consultas de recuento de espectadores
Rumble – WebSocket/URL de API Nuevas suscripciones y suscripciones regaladas Alertas de seguimiento + total de seguidores Rants/propinas (importe + moneda) Totales de espectadores, suscriptores, estado en vivo y flujo de chat
Streamplace - - - Recuento de espectadores y nombres de chat, colores, insignias, respuestas y enlaces
WorldsWave - - Etiquetas de donación cuando están presentes Chat en vivo renderizado y actualizaciones opcionales de espectadores
CHZZK - - Filas visibles de donación de queso Filas de chat, imágenes de insignias, emotes y consultas de recuento de espectadores
BEAM - - - Filas de chat y consultas de recuento de espectadores cuando la página solo de chat expone un contador
Seal Team Sloth - - - Filas de chat emergente renderizadas más viewer_update consulta cuando los recuentos de espectadores están habilitados
Castyr - - - Filas de chat emergente renderizadas y actualizaciones opcionales de espectadores
RPLAY - - - Con sesión iniciada /live/chat/box/ ventana emergente: type: "rplay" chat, avatares, imágenes de insignias de nivel y emotes. Las propinas en monedas conservan su importe/unidad en hasDonation para la conversión compartida a USD, sin evento de donación. El opcional viewer_update las consultas usan un entero meta desde el punto público de transmisión de RPLAY. Se excluyen las filas reenviadas de Twitch.
FLEX TV - - - Filas renderizadas de chat con nombres, colores de autores, imágenes de insignias y metadatos de miembros

*Las alertas de suscriptores de YouTube se consultan periódicamente y pueden llegar tarde o incompletas. La referencia de API no promete una ventana fija de entrega de cuatro horas. Consulta la límites oficiales de la API de suscripciones.

Resumen de campos

data aquí significa el objeto del mensaje, no una envoltura adicional que haya que añadir. Las filas de chat y los eventos solo de metadatos tienen estructuras distintas: los contadores e instantáneas de estado pueden omitir chatname/chatmessage. En las tablas de plataformas, mensaje describe una fila normal de chat, no un valor literal event: "message".

Campo Estructura Uso
data.type cadena Identificador de fuente usado por superposiciones, filtros y Event Flow. Instagram mantiene el chat en vivo como instagramlive y los comentarios fuera de directo como instagram. Consulta la Guía de tipos de fuentes para variantes, fuentes genéricas y enrutamiento saliente.
data.chatname cadena Nombre visible proporcionado por la fuente y usado por el procesamiento de mensajes y las salidas ajenas a las superposiciones. Un alias de nombre visible configurado solo puede sustituir este valor en copias de datos de transporte del Dock y superposiciones.
data.username cadena Nombre de usuario de origen cuando está disponible. Los datos de Dock o superposición con alias pueden añadir este campo para conservar el original chatname para acciones de usuario; el mensaje canónico no cambia.
data.userid cadena Identificador de usuario específico de la plataforma. Las acciones de usuario prefieren este valor a username y chatname.
data.platformcadena (opcional)Algunas integraciones lo incluyen junto con type. Muchos adaptadores de fuentes lo omiten; usa type para el enrutamiento de fuentes.
data.idcadena | número (opcional)Identificador del mensaje o evento. Su significado depende de la fuente y el transporte; no supongas que siempre es un ID nativo de moderación de la plataforma. Usa meta.messageId cuando el adaptador lo expone para sincronizar eliminaciones.
data.donoValuenúmero (opcional)Equivalente numérico en USD proporcionado por la fuente, incluidas estimaciones. Un valor válido (incluido cero) tiene prioridad sobre la conversión de currency.js. Sin él, los consumidores estiman USD a partir de hasDonation y el contexto de la fuente. Los importes y unidades originales permanecen en hasDonation y en los metadatos existentes del proveedor.
data.chatbadgesmatriz | cadena (opcional)URL de imágenes de insignias u objetos de insignia (type: "img" con src, type: "svg" con html, o type: "text" con text). El relé conserva la etiqueta literal de una insignia de texto en el campo opcional rawText y produce contenido escapado en text para superposiciones antiguas. En pasadas posteriores de reenvío, regenera text desde rawText; no escapes text de nuevo. Los renderizadores actuales muestran rawText literalmente cuando esté presente y conserva el manejo heredado de texto codificado en caso contrario. Es un campo de representación, no permiso para renderizar HTML. Las fuentes antiguas pueden enviar una sola cadena HTML en lugar de una matriz. Las superposiciones que renderizan insignias aceptan ambos formatos y sanean localmente el HTML y las URL de insignias, incluso si el emisor es una extensión antigua. Las insignias inválidas no deben impedir que aparezca el mensaje de chat o membresía.
data.event cadena | booleano Identificador de actividad del sistema (por ejemplo viewer_update, subscription_gift, giftpurchase). El chat normal debe dejarlo vacío/false para que las superposiciones distingan los avisos del sistema del texto de conversación.
data.chatmessage cadena Cuerpo del mensaje. Puede contener HTML saneado/renderizable solo cuando data.textonly es false.
data.textonly booleano Solo se aplica a data.chatmessage. true significa renderizar chatmessage como texto sin formato, conservando etiquetas literales y texto que parezca entidades; no decodifiques, sanees como HTML ni añadas etiquetas de formato a ese cuerpo. Aplica el estilo del evento al elemento mostrado. false significa chatmessage puede contener HTML saneado/renderizable; los mensajes antiguos sin el indicador conservan ese comportamiento HTML. Los demás campos normales son texto sin formato, excepto campos multimedia como chatimg y contentimg. Muestra los campos de texto sin formato con textContent, o escápalos una vez al construir una plantilla HTML; no elimines ni decodifiques repetidamente su contenido.
data.contentimg cadena (opcional) Imagen de contenido o URL multimedia compatible. En la extensión y la aplicación de escritorio, la opción allowExternalGifs el ajuste rellena un campo vacío con el primer enlace GIF HTTP(S) directo del texto del mensaje o de un enlace HTML. La ruta de la URL debe terminar en .gif (sin distinguir mayúsculas y minúsculas); se conservan los parámetros de consulta y fragmentos. No requiere clave API, conserva chatmessage y los adjuntos existentes, y respeta removeContentImage. El opcional hideExternalGifUrl el ajuste añade meta.hideExternalGifUrl: true; el Dock y la superposición de destacados ocultan después el enlace del GIF correspondiente solo cuando carga su imagen, conservando el texto circundante y los datos originales. Las imágenes fallidas o agotadas ocultan su contenedor de adjuntos y dejan visible el enlace. La superposición solo de GIF intenta mostrar directamente la imagen si falla la obtención de sus bytes y usa el tiempo de visualización configurado si no conoce la duración de la animación; las cargas fallidas o bloqueadas hacen avanzar la cola. No añade un event o cambia la fuente type. Las imágenes externas no pasan filtros de contenido y pueden no cargar si el alojamiento bloquea la inserción.
data.membership cadena Estado legible de membresía, como MEMBERSHIP, new_sponsor, gift_recipient. Las interfaces lo usan para insignias, filtros y anuncios.
data.subtitle cadena Descripción complementaria (antigüedad de membresía, mejoras de nivel, regalado por…). Mantenla breve y como texto sin formato para que las superposiciones puedan colocarla debajo del nombre visible.
data.hasDonation cadena Importe monetario o de regalo virtual ($5.00, 500 bits, 300 coins). Rellénalo incluso cuando data.event está vacío para que las superposiciones de donaciones lo detecten.
data.meta número | objeto | cadena (heredado) Usa enteros simples para contadores individuales (espectadores, seguidores, suscriptores) y objetos para contexto más completo. Algunos eventos antiguos, como el del DOM de Twitch community_highlight, contienen una cadena. Comprueba la estructura específica del evento antes de leer propiedades de objeto; los nuevos detalles estructurados pertenecen a un objeto.
data.firsttime booleano Establecer en true cuando la detección de primera intervención y la base de datos local están habilitadas, y este es el primer mensaje guardado de ese usuario/fuente. El Dock lo usa para destacar primeras intervenciones y filtrar sus pitidos; el ajuste opcional de insignia de primera intervención antepone una hoja a chatbadges.
data.lastactivity número Marca de tiempo Unix en segundos de la actividad de chat anterior guardada de ese usuario, cuando están habilitadas la detección de primera intervención y la base de datos local. Se omite para usuarios nuevos.

El transporte de control de superposiciones es independiente del chat/eventos capturados. Los receptores actualizados usan un ssnControl envoltura que contiene un identificador de entrega id, función target, canal de respuesta opcional e ID de cliente de instantánea. Los cuerpos de funciones existentes se mantienen. Los controles públicos de funciones usan el canal 7; Actions conserva el canal 6. El estado de Encuesta y Mapa incluye un valor del anfitrión epoch, revision y reset marcador; Timer, Ticker y Spotify usan ssnState con una época y una revisión. Estos marcadores describen el estado del anfitrión, no un historial restaurado de votos/chat. Las fuentes no deben añadir campos de la envoltura de control a mensajes capturados. Un acuse de recibo no establece que la acción se haya completado ni que sea visible en OBS. Consulta la estado de migración para funciones compatibles, negociación de respuestas y límites de reconexión.

Phrase Guess usa el nativo {response: text} solicitud para respuestas de chat por server2 y {action: "phraseGuessResponse", value: {type: "bot", chatname: name, chatmessage: text}} para anuncios solo en el Dock. El anfitrión debe habilitar mensajes entrantes de server3; desactivar el control del anfitrión sigue bloqueando estas solicitudes. Los anuncios del Dock se reenvían como filas normales de chat de bot con textonly: true, sin enviarlos a las entradas de chat de las fuentes de captura. El modo API heredado conserva su formato de comandos existente.

Convenciones de meta

Para mantener coherentes los paneles y automatizaciones, sigue estas convenciones al ampliar data.meta:

  • viewer_update, follower_update, subscriber_update, y likes_update usa un entero simple meta valor. likes_update es un total oficial de la plataforma: los consumidores deben establecer el valor mostrado en lugar de sumarlo. El script en segundo plano agrega los recuentos de espectadores en viewer_updates con un objeto cuyas claves son data.type.
  • giveaway_state es una instantánea solo de metadatos generada por el anfitrión para visualizaciones gestionadas. meta.giveaway la versión 2 incluye giveawayId, persistente roundId/epoch, aumentando generation entre rondas nuevas, revision dentro de una ronda, status, open, draw, keyword, count, ticketCount, congelado config, hasta 120 elementos de vista previa entrants, y los últimos 20 winners. Las entradas exponen id, name, platform y tickets; los ganadores añaden drawnAt y el valor concedido points. Coin Flip Pot añade outcome; Number Hunt añade number con el público low, high y los recientes guesses, nunca el secreto. Los consumidores filtran por ID del sorteo y descartan generaciones/revisiones anteriores. Son muestras para visualización, no un registro completo de boletos ni una instrucción de pago. Las claves de monedero, saldos y reservas no aparecen en las instantáneas para el público. El anfitrión publica en el giveaway etiqueta P2P y flujos WebSocket de superposiciones habilitados; esto no implica visibilidad en OBS. Guía.
  • meta.giveawayControlResult contiene el resultado de una acción de sorteo de Event Flow (ok, opcional error, giveaway o simulated). meta.giveawayHandled enumera los ID de sorteos ya procesados por una acción de entrada/compra del flujo para que el comando automático de chat no pueda cobrarlos de nuevo. El editor añade meta.economyTest para acciones de sorteo simuladas; no es un evento de plataforma ni una credencial de autorización.
  • video_stats usa un objeto estructurado meta objeto para el estado del codificador/servidor externo, incluido provider, label, online, bitrateKbps, rttMs, bufferMs, contadores de pérdida/descarte de paquetes y detalles opcionales del códec.
  • Los eventos de tipo donación pueden incluir un objeto descriptivo: por ejemplo { amount, currency, supporter } para Kick, { bits } para Cheers de Twitch. Los eventos de membresía tienen sus propios metadatos específicos de fuente; no son automáticamente donaciones monetarias.
  • Los mensajes normalizados de webhooks de Stripe, Ko-fi, Buy Me a Coffee y Fourthwall incluyen un valor por proveedor meta.webhookId, copiado del identificador estable de evento del proveedor, para que las páginas receptoras puedan eliminar duplicados de reintentos y transportes mixtos.
  • Las raids de Twitch transmiten { fromId, fromLogin, viewers }. Otras fuentes difieren: Whatnot usa meta.numRaiders, mientras SharePlay usa el opcional meta.fromLogin/meta.viewers. Revisa la fila específica de la fuente antes de leer los metadatos de raids.
  • Los canjes de recompensas de EventSub de Twitch exponen meta.rewardId, cost, rewardTitle, redemptionId, y un campo heredado alias junto con el mensaje preparado. Las tarjetas de recompensas del DOM y otras fuentes pueden proporcionar menos campos o campos distintos.
  • user_banned contiene solo metadatos para widgets de moderación. Omite deliberadamente chatname y chatmessage; usa meta.username, meta.displayName, meta.avatarUrl, y meta.profileUrl.
  • Los transportes de chat que admitan sincronización de eliminaciones desde el control de fuentes deben exponer el identificador nativo de chat como meta.messageId en lugar de depender del campo interno del Dock data-mid valor.
  • Las eliminaciones de origen usan {delete: {type, id}} para un ID conocido de mensaje del Dock, o {delete: {type, meta: {messageId}}} para un ID nativo de mensaje de plataforma. Un ID conocido elimina solo los mensajes coincidentes. Cuando solo se conoce el usuario objetivo, envía {delete: {type, userid}} o {delete: {type, chatname}} para eliminar los mensajes de ese usuario de esa plataforma. Nunca sustituyas la identidad del usuario objetivo por la del moderador. Las eliminaciones entrantes no requieren el ajuste opcional de sincronización de moderación del Dock a la plataforma.
  • Los metadatos de identidad de fuente de SSApp pueden añadir meta.ssnAccountRole, meta.ssnSourceId, y meta.ssnSession cuando una fuente tiene asignado un rol de cuenta distinto del normal.
  • Event Flow puede solicitar un destacado estableciendo meta.featured = true en los datos de chat, lo que destaca automáticamente el mensaje en el Dock/superposiciones de destacados.
  • AI Event Overlay: la acción showAiEventOverlay envía una copia del mensaje que la activó a la etiqueta aievent-CONFIGURATION_ID, añadiendo meta.aiEventOverlay: {profile: "CONFIGURATION_ID"}. Se conservan los campos existentes del mensaje y los metadatos que sean objetos; los metadatos escalares se conservan como meta.value. Se trata de una entrega a un destino específico, no de un nuevo evento de la plataforma. El mensaje original no se modifica. Consulta la guía de configuración.
  • Opcional meta.aiEventOverlay.variation selecciona una frase exacta aprobada en la configuración guardada del overlay. El texto del espectador y los metadatos rellenan los campos de la plantilla después de generarla.
  • Las solicitudes de visualización de AI Event Overlay requieren un perfil y su token privado de visualización. La configuración y las claves API se gestionan únicamente desde la ventana emergente local de SSN. Las respuestas usan {aiEventResponse: {target, value}} o {aiEventResponse: {target, error}}. Los resultados generados contienen template, duration, warnings, y URL de datos multimedia opcionales en image/audio.
  • Las recompensas de overlays de IA pagadas con puntos usan aiEventPresentation (id, profile, expiresAt, result, message) y confirman la recepción con aiEventDelivered (ID de entrega). Los registros de cargos y los importes de reembolso permanecen en el anfitrión.
  • Event Flow puede solicitar fijar en el Dock estableciendo meta.pinned = true; opcional meta.pinnedTarget limita ese mensaje fijado a un Dock con el correspondiente label.
  • La impresión térmica de Event Flow registra su resultado bajo meta.thermalPrintResult (success y el opcional code/error), conservando el evento de chat y los demás metadatos. Para eventos con metadatos numéricos o de otro tipo no objeto, el diagnóstico queda en el resultado de la acción y el evento no cambia.
  • Recompensas opcionales de pegatinas de SSN: event: "sticker" se envía solo al stickers etiqueta de superposición tras descontar puntos de fidelidad. Establece platform y type al campo del mensaje de origen type, y conserva chatname, con vacío chatmessage, textonly: true, y contentimg que contiene una ruta relativa de imagen incluida o una URL multimedia HTTPS aprobada por el anfitrión. meta.sticker contiene id, pack, name, cost, duration (segundos), motion, redemptionId, y expiresAt (milisegundos Unix). Es una recompensa de SSN, no una donación de plataforma ni un evento nativo de puntos del canal. Consulta la galería y guía de configuración.
  • El reproductor de pegatinas devuelve un paquete de control {action: "stickerReceipt", meta: {sticker: {redemptionId, success}}} a su remitente cuando carga la imagen o falla. Solo los acuses de recibo de un stickers par resuelven un canje pendiente. Una entrega fallida o sin confirmar provoca un reembolso; este paquete de control no es un evento de chat. Se recomienda una sola visualización activa de pegatinas por sesión.
  • Los comandos de superposición de escenario de IA usan { action: "aiOverlay", target, meta } o la reproducción del copresentador controlada desde el Dock usa { action: "cohostOverlay", target, meta }; conserva todos los detalles del comando, como command, text, emotion, avatar, y tts dentro de meta.
  • Si una plataforma expone varios contadores juntos, prefiere un objeto estructurado con claves explícitas (meta.viewer_count, meta.follower_count) en lugar de sobrecargar cadenas de texto.
  • Las superposiciones de comercio deben usar objetos de instantánea bajo meta (por ejemplo auction_update y commerce_update) y evita campos improvisados de nivel superior.

Cobertura de plataformas

YouTube – Captura Standard del DOM

Implementación: sources/youtube.js

  • Mantén abierta la pestaña de chat en vivo. La captura lee las tarjetas de membresía y regalo renderizadas en esa sesión; no requiere que el espectador sea el propietario o moderador del canal. El acceso de cuenta y la vista de chat seleccionada pueden afectar a las filas visibles.
  • Al abrir la superposición de número de espectadores y actividad del chat con los espectadores visibles, se solicitan automáticamente los recuentos de espectadores. Las opciones Mostrar recuento de espectadores y Seguir a los participantes activos del chat también activan la recopilación de datos.
  • Para alertas de seguidores y eventos adicionales, activa el modo WebSocket en los ajustes de la extensión.
Evento Cuándo se activa Notas sobre los datos
sponsorship Encabezado de bienvenida de membresía sin texto de chat explícito (nuevos miembros, llegada de paquetes regalados), incluidas tarjetas estructuradas o texto localizado «Bienvenido a…». membership se rellena con la traducción de «MEMBERSHIP»; subtitle contiene la racha/nivel cuando se detecta; nameColor usa el verde de membresía cuando está permitido.
giftpurchase Banner de compra de paquete de regalos (ytd-sponsorships-live-chat-gift-purchase). membership se convierte en gift_giver; subtitle contiene el recuento de regalos si se conoce; sin hasDonation o donoValue.
giftredemption Anuncio de canje de regalo para destinatarios. membership se convierte en «MEMBERSHIP»; subtitle incluye «Regalado por…».
resub Banners de mejora que incluyen «ha subido a…». subtitle captura la etiqueta del nuevo nivel; membership sigue siendo «MEMBERSHIP».
superchat, supersticker, jeweldonation Super Chats, Super Stickers, tarjetas de anuncios de donaciones y regalos de YouTube con Jewels (yt-gift-message-view-model). hasDonation contiene el valor; event identifica el tipo de artículo pagado de YouTube. Los regalos de YouTube usan N Jewels cuando existe, o 1 YouTube Gift cuando YouTube oculta el recuento. Las imágenes de regalos usan contentimg, las etiquetas de regalos usan subtitle, y los detalles mínimos del regalo se reflejan bajo meta.youtubeGift.
jeweldonation efecto de regalo YouTube muestra un regalo Jewel animado sobre el chat en vivo (ytls-gift-overlay-item-view-model). Se envía directamente al destino específico de GIF/medios para reproducir la animación sin duplicar la fila normal del regalo. contentimg contiene el recurso animado y meta.youtubeGift.animationUrl/animationDescription conservan los detalles del efecto.
reaction Aparece una reacción de espectador en la fuente de emojis en vivo de YouTube. Se envía directamente al destino específico de reacciones. El emoji anónimo y la URL de imagen se conservan en chatmessage/contentimg y bajo meta.reactionType/reactionImage. Las variantes conocidas en vivo incluyen ❤, 😄, 🎉, 😳 y 💯.
thankyou Mensaje alternativo cuando hay un importe de donación, pero no se proporcionó texto de chat. Conserva hasDonation e inserta automáticamente «¡Gracias por tu donación!» para las superposiciones.
redirect Aparece un banner de redirección de YouTube en el chat en vivo (lo más parecido a un aviso de raid). Captura solo del DOM desde yt-live-chat-banner-redirect-renderer. Establece event a redirect y usa membership como etiqueta para que las superposiciones lo rendericen como otros avisos del sistema.
viewer_update Consulta cada 30 s al punto de acceso de espectadores de Social Stream (captura de página como alternativa si hay errores de cuota). meta es el entero de espectadores en vivo; contribuye al agregado viewer_updates en el script en segundo plano.

Los bloques de membresía también establecen membership para chat de moderadores/miembros, mientras que subtitle contiene recuentos de meses o nombres de niveles. sourceName/sourceImg se rellenan una vez que getChannelInfo tiene éxito. El chat Standard del DOM ahora incluye meta.messageId cuando YouTube expone un ID nativo de mensaje de chat en vivo, que el Dock usa para sincronizar eliminaciones.

YouTube – Captura WebSocket/Data API

Implementación: sources/websocket/youtube.html, utilidades compartidas bajo shared/

  • Usa por defecto los permisos OAuth youtube.readonly y youtube.channel-memberships.creator. El acceso opcional de escritura añade youtube.force-ssl para enviar chat, moderar, bloquear y editar detalles de transmisiones; Google puede presentarlo como un permiso amplio de gestión de YouTube porque YouTube no ofrece un permiso de escritura solo de chat.
  • Las estadísticas del canal respetan los interruptores de cada ajuste (showsubscount, showviewercount).
  • La API no puede entregar imágenes de insignias personalizadas; como alternativa se usan los iconos emoji indicados abajo.
  • Cuando la API informa explícitamente de authorDetails.isChatModerator: true, los datos de chat, Super Chat, Super Sticker, regalos de YouTube y membresías regaladas incluyen mod: true. El estado de moderador no se deduce ni se almacena entre eventos.
  • Las alertas de nuevos suscriptores usan el myRecentSubscribers API (consultada cada 5 minutos). Nota: los resultados pueden llegar tarde o incompletos; solo se pueden identificar suscripciones visibles públicamente.
  • Data API no expone los banners de redirección de YouTube, por lo que redirect sigue disponible solo mediante captura Standard del DOM.
Evento Cuándo se activa Notas sobre los datos
superchat Entradas de Super Chat del historial de Data API o de las consultas de la transmisión. hasDonation conserva el importe del sitio (moneda + valor); event es superchat. Las versiones antiguas de WebSocket usaban event: "donation" para esta fila, por lo que los consumidores pueden seguir aceptándolo como alias heredado.
supersticker Super Stickers (solo texto alternativo del mensaje; la API no proporciona imagen). hasDonation contiene el importe; chatmessage contiene el texto decodificado de la descripción.
jeweldonation YouTube giftEvent mensajes cuando los espectadores canjean Jewels por regalos. hasDonation contiene N Jewels, o 1 YouTube Gift cuando YouTube oculta el recuento; contentimg usa la URL del recurso del regalo cuando se expone; subtitle contiene la etiqueta del regalo; meta.youtubeGift contiene detalles adicionales del regalo.
sponsorship Nuevo miembro mediante newSponsorEvent. membership se convierte en new_sponsor o new_member; meta incluye originalEventType, duraciones e información de nivel.
resub Renovaciones de miembros o cambios a un nivel superior. membership se convierte en renewed_member (renovaciones) o upgraded_member (mejoras); subtitle muestra el nivel.
giftpurchase Paquetes de regalos comprados mediante la API. membership establecido en gift_giver; subtitle indica recuento/nivel; sin hasDonation o donoValue.
giftredemption Avisos de canje de regalos. membership gift_recipient; las insignias usan 🎁 por defecto; subtitle indica el nivel regalado.
membermilestone Chats de hitos (memberMonth o displayMessage presente). membership member_milestone; subtitle resume meses + nivel; meta captura la correspondencia original del hito.
viewer_update Estadísticas de transmisión (espectadores simultáneos) cuando está habilitado el informe de espectadores. meta es un recuento entero; refleja los scripts del DOM para que los consumidores puedan combinar ambos flujos. Un Dock que use &showviewercount solicita recopilar el recuento de espectadores durante 70 minutos y renueva esa solicitud cada hora sin cambiar permanentemente el ajuste global.
likes_update Consulta de estadísticas oficiales de vídeo cuando Enviar totales de me gusta de la plataforma está habilitado. meta es el recuento entero actual de me gusta del vídeo. Se emite cuando cambia y periódicamente sin cambios para mantener actualizados los consumidores. La opción global captureliketotals el ajuste habilita esto; el heredado captureyoutubelikes sigue siendo un alias de compatibilidad. Activar la opción por Dock del menú &showlikecount la opción también habilita de forma persistente esos ajustes globales de captura, mientras que añadir manualmente el parámetro de URL solo controla el renderizado. Desactivar la opción de visualización no desactiva la recopilación global.
subscriber_update Consulta de estadísticas del canal (suscriptores) cuando showsubscount no deshabilitado explícitamente. meta es el recuento total de suscriptores; la interfaz actualiza los contadores del panel.
view_update Consulta de estadísticas del canal (vistas acumuladas) cuando showviewercount o el modo Hype está activo. meta es el entero del recuento de vistas.
live_chat_ended El chat en vivo deja de estar disponible para la emisión vinculada. meta.streamTitle se rellena cuando los metadatos de la transmisión estaban en caché.
user_banned userBannedEvent desde la API de chat en vivo o el flujo gRPC. Evento solo con metadatos para widgets de moderación. meta incluye nombre de usuario/visible, ID del canal, URL de avatar/perfil, moderador, duración del bloqueo/silenciamiento y permanencia.
new_follower Nuevo suscriptor detectado mediante myRecentSubscribers API (consultada cada 5 minutos). chatname es el nombre del canal del suscriptor; chatmessage está vacío salvo que los mensajes de alertas de suscriptores estén habilitados en la página de origen de YouTube. meta incluye channelId, title, subscribedAt, y las ráfagas agrupadas añaden grouped, count, others, y subscribers. Nota: los resultados pueden llegar tarde o incompletos; solo se pueden identificar suscripciones visibles públicamente.

Los reenvíos de chat desde la API usan meta.plainText para el mensaje de texto sin formato junto al enriquecido chatmessage contenido. Es texto, no HTML, y puede contener emojis Unicode. Las insignias de membresía usan emojis como alternativa (⭐, 💝, 🏅, etc.) para mantener coherencia con la captura del DOM. Los mensajes normales de chat también incluyen meta.messageId para que las acciones de eliminación del Dock vuelvan a la API de moderación de YouTube.

Alertas de suscriptores de YouTube (new_follower)

Social Stream ahora puede detectar nuevos suscriptores de YouTube usando el myRecentSubscribers punto de acceso de API. Funciona de forma similar a las alertas de suscriptores de Streamlabs.

Cómo funciona:

  • Consulta la API de YouTube cada 5 minutos para obtener suscriptores recientes
  • Registra los suscriptores vistos en localStorage para detectar los nuevos
  • Emite new_follower eventos con el nombre del suscriptor, avatar e ID del canal
  • Mantiene desactivados por defecto los mensajes de alertas de suscriptores; al activarlos usa la cadena de traducción actual de alert-just-subscribed
  • Agrupa por defecto ráfagas de más de tres nuevos suscriptores para que las reconexiones no saturen las superposiciones o Event Flow
  • Requiere activar el modo WebSocket en los ajustes de la extensión

Limitaciones (son restricciones de la API de YouTube, no de Social Stream):

  • Sin demora de entrega garantizada – SSN consulta cada cinco minutos, pero la API puede devolver resultados retrasados o incompletos. No dependas de una ventana fija de cuatro horas.
  • Solo suscripciones públicas – Los suscriptores que hayan configurado su lista de suscripciones como privada no activarán alertas. En YouTube las suscripciones son privadas por defecto.
  • Solo el propietario del canal – Solo puedes recibir alertas de suscriptores de canales que te pertenezcan y en los que estés autenticado.
  • Uso de cuota de API – Cada consulta cuesta 1 unidad de API. A intervalos de 5 minutos, se usan aproximadamente 288 unidades al día (de la cuota predeterminada de 10 000).

Disparador del editor de Event Flow: Usa data.event === "new_follower" y data.type === "youtube"

WebSocket de YouTube: referencia rápida de eventos y membresías

data.event data.membership Situación
sponsorshipnew_sponsorNuevo miembro mediante newSponsorEvent
sponsorshipnew_memberNuevo miembro mediante processMembership
resubrenewed_memberRenovación de membresía
resubupgraded_memberMejora de nivel
giftpurchasegift_giverMembresías regaladas al canal
giftredemptiongift_recipientRecibió una membresía regalada
membermilestonemember_milestoneChat de aniversario de membresía
superchat-Super Chat
supersticker-Super Sticker
user_banned-Evento de bloqueo/silenciamiento solo con metadatos
new_follower-Nuevo suscriptor (consulta periódica; puede retrasarse)

Twitch – Captura Standard del DOM

Implementación: sources/twitch.js

  • Mantén abierto el chat de Twitch. Los avisos de membresía y usuario se capturan cuando Twitch los renderiza; no están restringidos a cuentas de emisores o moderadores. Puede hacer falta autenticación para funciones específicas de la cuenta.
  • Las solicitudes de recuento de espectadores acceden a https://api.socialstream.ninja/twitch/viewers cada 30 segundos.
  • Para alertas de seguidores, raids y compatibilidad completa de eventos, activa el modo WebSocket en los ajustes de la extensión.
  • Los avisos de racha de visualización compartidos por espectadores están desactivados por defecto y requieren la opción Mostrar rachas de visualización de Twitch ajuste.
  • La opción PluralMind el ajuste puede sustituir chatname, nameColor, y la parte envuelta por el proxy de chatmessage, y puede añadir una insignia de texto con pronombres. username sigue siendo el nombre de usuario de Twitch; las eliminaciones relacionadas contienen delete.meta.pluralmind para que el Dock use ese nombre de usuario estable.
Evento Cuándo se activa Notas sobre los datos
reward Tarjetas de canje de puntos del canal (incluido el contenedor de recompensas de 7TV). chatmessage contiene el texto del canje; membership sin cambios.
giftpurchase Líneas del sistema como «El usuario está regalando X suscripciones en el canal». chatmessage es la línea del sistema, que permite a las superposiciones destacar campañas de regalos.
subscription_gift Avisos de suscripciones regaladas («El usuario regaló una suscripción a…»). Marca el evento para los filtros de destacados; membership sigue siendo la etiqueta de insignia del destinatario.
viewer_update Consulta cada 30 s al proxy de espectadores de Social Stream (0 si hay error). meta recuento entero de espectadores.
hype_train El destacado comunitario fijo de Twitch muestra un tren del Hype activo en el chat emergente. Alternativa del DOM solo con metadatos y meta.sourceMode establecido en dom. Usa el nivel visible, el temporizador y meta.progressPercent cuando Twitch no expone totales de puntos de EventSub.
community_highlight Elementos dentro del widget «Community Highlight» de Twitch. meta es el texto extraído del destacado para enlaces de automatización.
knock Invitaciones de colaboración de Stream Together mostradas encima del chat. chatmessage contiene el texto de la invitación; chatname se deriva del usuario de la alerta cuando está disponible.
watch_streak Aviso opcional de racha de visualización compartido por el espectador y renderizado en el chat de Twitch. meta.streakCount contiene el recuento visible cuando se detecta; meta.milestoneId usa el identificador del aviso del DOM cuando está disponible.

Los Bits/Cheers rellenan hasDonation (por ejemplo, «500 bits»), aunque data.event permanece vacío; usa ese campo al renderizar widgets de donaciones. La información de rachas de suscriptores aparece en subtitle cuando las insignias exponen meses.

Twitch – EventSub/WebSocket

Implementación: sources/websocket/twitch.js con el núcleo compartido providers/twitch/chatClient.js

  • Permisos OAuth: chat:read, chat:edit, user:write:chat, bits:read, moderator:read:followers, moderator:read:chatters, channel:read:subscriptions, channel:read:hype_train, channel:moderate, moderator:manage:banned_users, moderator:manage:chat_messages, channel:manage:broadcast, channel:read:redemptions, channel:read:ads, channel:manage:ads. Los tokens del emisor habilitan los recuentos de suscriptores/seguidores.
  • Eventos entregados por EventSub, más consultas Helix de totales de espectadores/seguidores/suscriptores.
  • El modo WebSocket proporciona en tiempo real alertas de seguidores, eventos de suscripción, raids, Cheers, Power-ups, canjes de puntos del canal y metadatos del tren del Hype.
  • Las filas de Shared Chat usan el campo IRC de Twitch source-room-id para rellenar sourceName/sourceImg con el canal de origen cuando difiere del canal conectado.
  • Los avisos de racha de visualización compartidos por espectadores están desactivados por defecto y requieren la opción Mostrar rachas de visualización de Twitch ajuste.
  • La opción PluralMind el ajuste puede sustituir chatname, nameColor, y la parte envuelta por el proxy de chatmessage, y puede añadir una insignia de texto con pronombres. username y userid conservan la identidad de Twitch; las eliminaciones relacionadas contienen delete.meta.pluralmind para que el Dock use esos campos estables.
Evento Cuándo se activa Notas sobre los datos
cheer Avisos de Cheers de EventSub channel.bits.use. hasDonation «N bits»; meta.bits numérico; chatmessage conserva el mensaje original; los usuarios identificados que envían Cheers incluyen chatimg.
powerup Avisos de Power-up integrados o personalizados de EventSub channel.bits.use. Datos solo de evento con un campo vacío chatmessage y sin hasDonation, por lo que no crea una fila normal de chat. meta.bits es numérico y meta.powerUp conserva el subtipo de Twitch, título/ID de recompensa, detalles del efecto y texto del mensaje proporcionado cuando está disponible.
new_subscriber channel.subscribe o USERNOTICE con msg-id=sub. meta incluye { userId, tier, isGift }; el total de suscriptores en caché aumenta cuando está disponible; los totales de espectadores se consultan por separado.
resub channel.subscription.message o USERNOTICE msg-id=resub. meta contiene la racha y los meses acumulados; chatmessage incluye el texto de la renovación.
subscription_gift channel.subscription.gift o USERNOTICE msg-id=subgift. meta expone el total regalado y el nivel; chatmessage resume la acción.
reward channel.channel_points_custom_reward_redemption.add. meta incluye ID de recompensa, título, coste, indicación, entrada del usuario, ID/estado del canje y alias heredado. Sin campo de nivel superior reward objeto emitido por este controlador de EventSub. Los consumidores antiguos aún pueden mostrar channel_points como alias obsoleto.
raid EventSub channel.raid o USERNOTICE msg-id=raid. meta = { fromId, fromLogin, viewers }.
watch_streak USERNOTICE opcional del IRC de Twitch con msg-id=viewermilestone y msg-param-category=watch-streak. Incluye al espectador en chatname, el texto del aviso de Twitch en chatmessage, y meta.streakCount/meta.milestoneId. Los demás tipos genéricos de USERNOTICE siguen ignorándose.
new_follower channel.follow Avisos de EventSub. Incrementa automáticamente follower_update; meta registra { userId, followedAt }.
viewer_update Helix streams consulta cada 30 segundos. meta recuento entero de espectadores; se suprime salvo que las estadísticas estén habilitadas en los ajustes.
follower_update Total de seguidores de Helix, activado tras eventos de seguimiento o consultas periódicas. meta recuento entero de seguidores.
subscriber_update Total de suscriptores de Helix (requiere token del emisor con permiso de suscripciones). meta recuento entero de suscriptores.
stream_online / stream_offline EventSub stream.online/stream.offline. meta.startedAt presente para eventos en línea; los desconectados usan un objeto vacío.
ad_break / ad_request / ad_schedule Respuestas de la API de gestión de anuncios (channel.ad_break.begin, manual POST channels/ads, GET channels/ads). meta detalla la duración, el solicitante y los datos de programación para los paneles.
hype_train EventSub channel.hype_train.begin, channel.hype_train.progress, y channel.hype_train.end avisos v2. Evento solo con metadatos: sin chatname o chatmessage. meta.phase es begin, progress, o end; meta incluye ID del tren, nivel, progreso, objetivo, total, colaboradores, campos de tiempo, indicador de tren compartido y trainType. Los trenes del tesoro se muestran mediante meta.trainType cuando Twitch los identifica.
user_banned EventSub channel.ban, o IRC CLEARCHAT como alternativa cuando no hay eventos de bloqueo de EventSub. Evento solo con metadatos para widgets de moderación. meta incluye nombre de usuario/visible, ID de usuario, URL de avatar/perfil, moderador, motivo, duración del bloqueo/silenciamiento y permanencia.

Los datos de chat reutilizan el proveedor compartido, por lo que data.event se rellena para `/me` (action) y el heredado bits etiquetas incluso fuera de flujos de EventSub. Los mensajes GIF de Twitch colocan el recurso de Giphy en contentimg, deja chatmessage vacío, y conserva la etiqueta alternativa de Twitch en meta.gifLabel. La deduplicación y la eliminación usan ID de mensajes; los mensajes enviados mediante SSN usan el nativo message_id desde el eco IRC de Twitch en data.id.

Metadatos del tren del Hype de Twitch

hype_train contiene solo metadatos y no incluye chatname o chatmessage. Los paneles deben actualizar la visualización existente del tren mediante meta.id en lugar de añadir cada actualización de progreso como chat. La barra de metadatos (meta.html) representa estos eventos como una barra superior de progreso.

Campo Escribe Notas
typecadenaSiempre twitch.
eventcadenaSiempre hype_train.
meta.phasecadenabegin, progress, o end.
meta.idcadenaID estable del tren. Úsalo para insertar o actualizar un único widget de tren visible.
meta.broadcasterUserIdcadenaID de usuario del emisor de Twitch.
meta.broadcasterUserLogincadenaNombre de usuario del emisor de Twitch.
meta.broadcasterUserNamecadenaNombre visible del emisor de Twitch.
meta.totalnúmero | nullValor total de apoyo que Twitch informa para el tren.
meta.progressnúmero | nullProgreso actual hacia el objetivo del nivel.
meta.goalnúmero | nullObjetivo del nivel actual.
meta.progressPercentnúmero | nullPorcentaje alternativo del DOM cuando Twitch solo expone la barra de progreso visible de la ventana emergente.
meta.levelnúmero | nullNivel actual o final del tren.
meta.topContributionsmatrizPrincipales colaboradores. Cada entrada incluye userId, userLogin, userName, type, y el campo numérico total.
meta.lastContributionobjeto | nullAportación más reciente, con la misma estructura de aportación que topContributions.
meta.sharedTrainParticipantsmatrizDatos originales de participantes en trenes compartidos de Twitch cuando se proporcionan.
meta.startedAtcadenaMarca de tiempo ISO del inicio del tren.
meta.expiresAtcadenaMarca de tiempo ISO del vencimiento actual del tren.
meta.endedAtcadenaMarca de tiempo ISO del final del tren, o vacía antes de terminar.
meta.cooldownEndsAtcadenaMarca de tiempo ISO del fin del período de espera, o vacía antes de terminar.
meta.isSharedTrainbooleanoTrue cuando Twitch marca el tren como compartido.
meta.trainTypecadenaNormalmente regular; aquí se muestran los trenes del tesoro cuando Twitch los identifica.
meta.allTimeHighLevelnúmero | nullNivel máximo histórico del tren cuando Twitch lo proporciona.
meta.allTimeHighTotalnúmero | nullTotal máximo histórico del tren cuando Twitch lo proporciona.
meta.sourceModecadenaMarcador de fuente opcional, como dom.
meta.eventSubTypecadenaTipo original de EventSub: channel.hype_train.begin, channel.hype_train.progress, channel.hype_train.end, o dom.community_highlight.

EventSub de Twitch: referencia rápida de eventos

data.event Situación
new_followerUn usuario siguió el canal
new_subscriberNueva suscripción
resubRenovación de suscripción con mensaje
subscription_giftSuscripciones regaladas al canal
cheerBits enviados con Cheers
powerupUso de Power-up integrado o personalizado
rewardCanje de puntos del canal
raidRaid entrante
viewer_updateRecuento de espectadores simultáneos
follower_updateRecuento total de seguidores
subscriber_updateRecuento total de suscriptores
stream_onlineTransmisión iniciada
stream_offlineTransmisión finalizada
ad_breakInicio de bloque de anuncios
hype_trainMetadatos de estado del tren del Hype/tren del tesoro
user_bannedUn usuario fue bloqueado o silenciado temporalmente

Flow Actions de OBS

Implementación: actions.html mediante eventos de OBS WebSocket v5, con dock.html Eventos de fuentes de navegador de OBS como alternativa

  • Mantén abierta la superposición Flow Actions con la misma sesión de Social Stream que el editor/proceso en segundo plano de Event Flow, o mantén el Dock cargado dentro de OBS.
  • Configura OBS WebSocket v5 en OBS 28 o posterior; la URL predeterminada es ws://127.0.0.1:4455.
  • Estos son eventos del sistema de Event Flow. No incluyen chatname o chatmessage, y los detalles adicionales de OBS permanecen dentro de meta.
Evento Cuándo se activa Notas sobre los datos
stream_started OBS informa de que la salida de transmisión llegó al estado iniciado. type es obs; event es stream_started; meta.source es obs-websocket o obs-browser-source; meta.outputState puede contener el estado original de salida de OBS.
stream_stopped OBS informa de que la salida de transmisión llegó al estado detenido. type es obs; event es stream_stopped; meta.outputActive puede ser false.
recording_started OBS informa de que empezó la grabación. type es obs; meta.obsEvent identifica la fuente del evento de OBS.
recording_stopped OBS informa de que terminó la grabación. type es obs; meta.outputState puede contener el estado original de WebSocket.
scene_changed OBS cambia la escena activa del programa. type es obs; meta.sceneName contiene el nombre de la escena cuando OBS lo proporciona.
media_ended Una entrada multimedia de OBS termina la reproducción. type es obs; meta.inputName y meta.inputUuid identifican la entrada multimedia.
replay_buffer_saved OBS guarda el búfer de repetición. type es obs; meta.savedReplayPath puede contener la ruta de la repetición guardada.

Cuadro de alertas de Streamlabs

Implementación: sources/streamlabs.js (DOM del cuadro de alertas); puente de socket opcional en sources/websocket/streamlabs.html

  • Mantén abierto el cuadro de alertas de Streamlabs en una pestaña o fuente de navegador para que se rendericen; el script de contenido lee mensajes, imágenes y tokens del DOM de alertas.
  • Las alertas de tipo donación establecen hasDonation (por ejemplo, «$10 USD» o «100 bits») y, opcionalmente, donoValue en USD.
  • Tipos de eventos inferidos: follow, subscription, gift, cheer, donation, superchat, raid, redeem, merch, sponsor.
  • Para el puente de socket, pega tu token de Socket API de Streamlabs y conecta; las alertas se reenvían sin la página del cuadro de alertas.
Evento Cuándo se activa Notas sobre los datos
donation Propinas, caridad, JustGiving o alertas genéricas de «donó». hasDonation conserva el texto de la moneda (por ejemplo, «$36» o «$10 CAD»); donoValue se proporciona solo cuando hay un valor en USD; otros importes etiquetados usan la conversión compartida de moneda.
cheer Alertas de Bits/Cheers de Twitch. hasDonation se convierte en «100 bits» y donoValue captura el valor en USD.
subscription Alertas de suscripciones. Campos estándar establecidos; chatmessage es la línea de alerta; meta.tokens contiene valores de tokens (name, amount, levelName, etc.).
gift Membresías/suscripciones regaladas. meta.tokens.amount puede mostrar el recuento de regalos; meta.tokens.levelName puede contener el nivel.
follow Alertas de seguidores. Sin campos de donación; chatname refleja el token de nombre de la alerta.
raid Alertas de raids. meta.tokens.count contiene el recuento de participantes de la raid cuando existe.
redeem Alertas de canje de Cloudbot. meta.tokens.product captura el artículo canjeado.
merch Alertas de compra de merchandising. meta.tokens.product contiene el nombre del artículo comprado.
superchat Alertas de tipo Super Chat de YouTube o integraciones de alertas compatibles. hasDonation contiene el importe; los consumidores pueden seguir aceptando el heredado donation como alias.
sponsor Alertas de patrocinador/miembro mostradas por Streamlabs. Campos estándar; sin donación salvo que el texto incluya un importe.

TikTok Live – Captura del DOM y feed de TikFinity

Implementación: sources/tiktok.js para páginas nativas de TikTok y sources/tikfinity.js para el widget/iframe de actividad de TikFinity. SSApp sigue teniendo una integración nativa con TikTok con la cobertura de eventos más amplia (consulta la documentación de SSApp).

  • Funciona en la página del directo del emisor. Los banners de regalos/me gusta/seguimientos solo se rellenan con una sesión autenticada.
  • TikTok proporciona muchos eventos mediante detección del DOM sin necesitar modo WebSocket – los regalos, seguimientos, me gusta e incorporaciones opcionales se capturan de filas renderizadas.
  • Páginas de widgets de TikFinity en tikfinity.zerody.one/widget/activity-feed* también funcionan. El iframe integrado del feed de actividad emite los mismos campos canónicos de TikTok para chat, seguimientos, compartidos, regalos, suscripciones, incorporaciones opcionales y cofres del tesoro.
  • No requiere autenticación adicional de API.
  • Modo nativo de SSApp sigue añadiendo eventos más allá de las rutas de captura de página/widget: question_new, emote, viewer_update, y el agregado opcional likes_update.
Evento Cuándo se activa Notas sobre los datos
gift Filas de banner de regalo o DivGiftMessage entradas. hasDonation convierte a «N coins» (con consulta de regalos como alternativa); membership usa el texto de la insignia cuando está disponible.
joined Avisos de incorporación cuando la opción global Capturar eventos de transmisión «joined» el ajuste está habilitado. Omite avisos de compartir; chatname puede estar vacío para algunas cadenas del sistema.
followed Mensajes de seguimiento interpretados a partir de tarjetas sociales. Garantiza chatname existe antes de emitir.
shared Filas de compartir de TikFinity. chatmessage es el texto renderizado de compartir.
subscribe Filas de suscripción de TikFinity. membership se establece en SUBSCRIBER.
envelope Filas de cofres del tesoro de TikFinity. meta.coins y meta.canOpen contienen los detalles del cofre.
liked Resúmenes de lluvia de me gusta activados por tarjetas sociales de TikTok. chatname se incluye cuando TikTok lo expone; las tarjetas anónimas/del sistema de me gusta pueden seguir emitiéndose. TikTok lo envía por la ruta normal en segundo plano. El proceso en segundo plano dirige una copia a la superposición de Reacciones y luego continúa al procesamiento principal de chat/eventos solo cuando capturelikeevent está habilitado.
likes_update SSApp recibe un total acumulado fiable de TikTok LIVE mientras captureliketotals está habilitado. meta es el total entero actual. SSApp envía el primer valor inmediatamente, agrupa ráfagas para enviar como máximo una actualización cada cinco segundos, repite el último valor aproximadamente cada 90 segundos y envía cero cuando termina la transmisión. Es independiente del evento específico de espectador liked eventos.
true (booleano) Emisiones sociales/del sistema genéricas cuando TikTok no proporciona subtipo. Usa chatmessage contenido para decidir la presentación; el booleano true indica «evento del sistema: tipo desconocido».

membership refleja las descripciones emergentes de insignias (niveles de suscriptor). La caché de avatares mantiene chatimg válido entre eventos; si el DOM suprime el color de moderadores, el script borra nameColor. Las filas de regalos de TikFinity también establecen contentimg al icono del regalo cuando esté disponible. Las actualizaciones de rachas de regalos del DOM nativo y TikFinity incluyen meta.tiktokGiftStreakId, meta.tiktokGiftCount, y meta.tiktokGiftQuietMs para que las superposiciones agrupen actualizaciones repetidas; los ID heredados de rachas son únicos de la instancia de página. Los metadatos de regalos también pueden incluir tiktokGiftMessageId (ID del mensaje original de TikTok), tiktokGiftSenderId, groupId, giftId, giftName, streakable, y repeatEnd. Los ID nativos identifican el mismo regalo entre ventanas de captura; un ID de grupo distinto de cero junto con los ID del remitente y regalo identifica actualizaciones acumulativas de rachas. La captura WebSocket de SSApp proporciona los mismos campos al estabilizarse una racha, con count se conserva por compatibilidad. Su interruptor de donaciones se comprueba al reenviar cada regalo: desactivar las donaciones de TikTok elimina hasDonation y donoValue conservando el evento y los metadatos del regalo. La síntesis de voz usa estas identidades para agrupar actualizaciones y suprimir duplicados completados hasta diez minutos (caché limitada), y lee los regalos de TikTok como remitente, cantidad y nombre del regalo. Los datos antiguos usan como alternativa sus ID de racha y texto existentes; no se deduce identidad solo del texto del regalo. La voz de regalos de TikTok usa el idioma seleccionado de síntesis de voz, independientemente del idioma de la interfaz. Los verbos de anuncios están localizados en inglés, español, portugués, francés, alemán, italiano y neerlandés; otros idiomas usan remitente, cantidad y nombre del regalo sin verbo en inglés. La síntesis simplificada conserva ese formato neutral. Los nombres de regalos se mantienen como los proporciona la plataforma; esto no traduce automáticamente catálogos de regalos ni mensajes de chat, ni deduce el idioma de una transmisión.

En estas actualizaciones de rachas, el recuento y la etiqueta de donación son acumulativos: 1, 2, 3 significa tres regalos, no seis. Los consumidores de totales deben sumar solo el aumento respecto al mayor importe ya visto para ese ID de racha. La captura Standard admite las clases heredadas de regalos y las filas actuales de imagen/recuento; ambas conservan event: "gift" y hasDonation. Los precios desconocidos conservan los recuentos/nombres de regalos para visualizarlos y usan una estimación en USD de una moneda por regalo. El valor proporcionado por la fuente donoValue tiene prioridad; los metadatos renderizados del regalo pueden proporcionar coinsPerGift o diamondsPerGift antes de necesitar la tabla de regalos o el valor predeterminado. Las estimaciones de monedas de Standard/TikFinity y las estimaciones nativas de diamantes de SSApp usan sus conversiones distintas existentes; ninguna representa un pago en efectivo garantizado.

Whatnot

Implementación: sources/whatnot.js

  • Abre la página del directo de Whatnot con el chat visible; la captura WebSocket existente proporciona chat, avisos de subastas/ventas, fallos de pago, raids, donaciones y actualizaciones rápidas de espectadores. Las instantáneas de productos/sorteos siguen dependiendo de secciones del DOM renderizadas en la vista del programa.
  • Capturar eventos del directo (Capture Stream Events) controla los eventos del sistema de Whatnot y las actualizaciones de metadatos de subastas/catálogos; las filas de incorporación también requieren Capturar eventos de transmisión «joined»; los recuentos de espectadores siguen respetando los interruptores de espectadores/Hype.
Evento Cuándo se activa Notas sobre los datos
viewer_update Cambios de recuento de espectadores desde actualizaciones WebSocket de transmisiones, con consultas del DOM como alternativa. meta es un recuento entero de espectadores.
donation Propinas y eventos de aportación a impulso comunitario por WebSocket de Whatnot. hasDonation contiene el importe formateado; el contexto específico de WebSocket permanece bajo meta.
raid Eventos WebSocket de raids de Whatnot, incluidas respuestas de actividad del historial. meta.numRaiders se incluye cuando Whatnot lo proporciona.
joined Filas de chat cuyo cuerpo normalizado comienza por joined, cuando Capturar eventos de transmisión «joined» está habilitado. Usa etiquetas de evento de cadena para avisos de incorporación (no el booleano true).
auction_update Cuando cambia el estado de la subasta en el pie del directo (texto de ganador/ganando, título, pujas, precio, temporizador, estado vendido), a menudo acelerado por paquetes WebSocket del ciclo de vida de subastas. Evento solo con metadatos. Sin chatname/chatmessage; los datos están en meta (por ejemplo meta.title, meta.bids, meta.price, meta.timer, meta.status).
commerce_update Cuando cambian las secciones del catálogo (productos, conjuntos sorpresa, próximos sorteos), a menudo acelerado por paquetes WebSocket del ciclo de vida de sorteos/productos. Instantánea solo con metadatos con recuentos de secciones y matrices de elementos bajo meta.products, meta.surpriseSets, y meta.upcomingGiveaways.
auction_started, new_bid, auction_ended, product_sold Llega el aviso WebSocket en vivo correspondiente. Son eventos individuales, separados de las instantáneas de visualización existentes. platform/type: "whatnot", texto sin formato chatname, userid cuando se proporciona, nombre del producto en subtitle, y un campo de texto sin formato chatmessage con textonly: true. Los identificadores y detalles de subasta disponibles están bajo meta: productId, auctionId, orderId, transactionId, livestreamId, bidId, bids, auctionEndTime, y status. Opcional price está en unidades monetarias principales, con priceText y currency cuando se proporciona.
payment_failed Llega un aviso WebSocket en vivo de pago fallido. Los mismos campos disponibles de comprador, producto e identificadores, con meta.paymentStatus: "failed". Cuando solo product.purchaserUserId identifica al comprador, rellena userid en eventos de venta/pago y el nombre del comprador queda vacío. No se deduce un comprador de otra subasta o de una anterior.
payment_succeeded Llega un aviso WebSocket en vivo de pago correcto. meta.paymentStatus: "succeeded", con el comprador, artículo, ID de pedido y otros campos permitidos proporcionados por ese aviso. Sigue siendo un evento de pago distinto; no emite otro purchase o donación. Los campos ausentes permanecen vacíos u omitidos, aunque una venta anterior los proporcionara.

Las actualizaciones visuales de subastas/comercio siguen siendo instantáneas del DOM. Para coincidir con un evento WebSocket concreto en Event Flow, usa Tipo de evento (avanzado), selecciona Evento personalizado (Custom Event), e introduce su nombre exacto. Las etiquetas pueden usar **{username}**\n{subtitle} con grosor de texto seleccionado; las condiciones pueden comparar meta.paymentStatus con failed. Un ejemplo importable de etiquetas de Whatnot está disponible. Los ajustes existentes de captura de eventos de transmisión siguen aplicándose.

Otros campos opcionales son meta.catalogProductId (el campo del paquete product.productId), meta.parentProductId (product.parentId), meta.transactionType (tipo de venta de Whatnot, sin cambios), y meta.placeOrderErrorReason (código de error de pedido/pago proporcionado por Whatnot). Estas referencias de producto describen el catálogo o el anuncio principal; no sustituyen a un ID de pedido. La cantidad en stock no se trata como cantidad comprada.

Para automatizar pagos correctos, establece un Tipo de evento (avanzado) el disparador en Evento personalizado (Custom Event): payment_succeeded, y filtra la fuente a Whatnot. Las condiciones y plantillas existentes pueden usar los campos de ese evento userid, chatname, subtitle y meta.orderId directamente. No hace falta una compra guardada cuando el aviso contiene los detalles necesarios.

Que termine una subasta o un artículo se marque como vendido no confirma que se haya pagado: estos avisos no se emiten como eventos de pago purchase eventos y no establecen importes de donación. Solo se emite un evento de éxito al recibir un payment_succeeded aviso; la captura no consulta si se completó el pago ni lo deduce de una venta. Otros paymentStatus los valores se reenvían solo cuando se proporcionan explícitamente en un paquete capturado. Se omiten los identificadores ausentes; un ID de producto puede abarcar varias ventas, así que usa el ID de pedido/subasta proporcionado para relacionar avisos. La captura no recuerda compras ni empareja actualizaciones de pagos; ese flujo debe configurarse explícitamente en Event Flow. Se suprimen los paquetes duplicados próximos en el tiempo de los dos puentes de captura existentes. No se reenvían objetos originales de pedidos/pagos.

eBay Live

La conexión de vendedor de eBay de Monetización requiere un servicio de eBay de SSN configurado y consentimiento OAuth del vendedor; la captura de eBay Live de abajo es independiente. El modo de pruebas usa URL de anuncios de pruebas, etiqueta al comprador como «eBay Sandbox buyer» y antepone al mensaje «Sandbox test purchase:». Las compras de pruebas conservan el mismo contrato de compra y pueden activar alertas/acciones de chat habilitadas durante las pruebas. Su contrato de pago implementado emite event: "purchase", con type y platform establecido en ebay. Requiere un pedido pagado que coincida con un producto seleccionado. id es un identificador opaco estable de línea de pedido; chatname es «eBay buyer», chatmessage es texto sin formato (textonly: true), subtitle es el nombre del producto y el opcional contentimg es su imagen. meta.ebayPurchase contiene itemId, itemName, quantity, y el público url. Sin identidad del comprador, datos de envío, hasDonation o donoValue se incluye. Esto difiere de las actualizaciones de subastas o stock capturadas, que no demuestran el pago.

Implementación: sources/ebay.js

  • Abre cualquiera de /ebaylive/events/<id>/chat o /ebaylive/events/<id>/stream. Ambos reciben el mismo flujo de subastas en vivo.
  • El flujo público de WebSocket proporciona subastas, pujas, ganadores, extensiones de tiempo y cambios de stock; una consulta GraphQL de solo lectura proporciona detalles de anuncios. La captura del DOM sigue como alternativa cuando no hay datos de red.
  • Capturar eventos del directo (Capture Stream Events) controla las instantáneas de metadatos (auction_update, commerce_update); los contadores de espectadores siguen respetando los interruptores de espectadores/Hype.
Evento Cuándo se activa Notas sobre los datos
viewer_update Cuando cambia el recuento de espectadores del evento activo (recuento del encabezado o indicador del evento en vivo como alternativa). meta es un recuento entero de espectadores.
follower_update Cuando el punto de estadísticas del vendedor devuelve su recuento de seguidores. meta es un recuento entero de seguidores. La fuente consulta el punto del vendedor cada 60 segundos; este puede seguir devolviendo un valor en caché hasta 5 minutos.
auction_update Cuando cambian los metadatos de la subasta activa. Evento solo con metadatos. La captura de red establece meta.sourceMode a network y proporciona título, precio, pujador, ganador, pujas, temporizador y endingAt. meta.ebay contiene eventId, listingId, el registro de anuncio GraphQL (listing), anuncio público actual del socket (eventListing), y última actualización de subasta (update). Estos conservan categoría, imágenes, monedas, cantidades, detalles de lotes, resultados de subastas y campos de tiempo sin perder los detalles de la plataforma al aplanarlos. El registro GraphQL es una instantánea obtenida; el anuncio del socket y la actualización contienen un estado en vivo más reciente. El historial inicial o de reconexión se incorpora a la instantánea actual, en lugar de emitirse como victorias antiguas. Quitar todos los anuncios presentados emite status: "idle" con cardCount: 0 para borrar la subasta. La alternativa del DOM conserva los campos de tarjeta del reproductor o vista previa del evento.
commerce_update Cuando cambian las secciones de instantáneas de catálogo/eventos en vivo. Instantánea solo con metadatos bajo meta. El modo de red incluye eventId, navigation.viewerCount y playerCards para los anuncios presentados actualmente, cada uno con el mismo objeto detallado ebay objeto como instantánea de subasta. Una lista vacía de tarjetas borra los anuncios eliminados. La alternativa del DOM también puede incluir liveEvents, livePreview, currentEvent y upcomingEvents.
reaction Cuando eBay Live renderiza una animación de corazón/reacción. Se envía directamente al destino específico de reacciones. meta.reactionType es heart; eBay no expone un nombre de usuario para estas animaciones del DOM.

Los eventos de metadatos de eBay omiten deliberadamente chatname/chatmessage; las superposiciones receptoras deben renderizar a partir de data.event + data.meta solamente.

Kick – Captura Standard del DOM

Implementación: sources/kick.js

  • Necesita una sesión autenticada para resolver imágenes de perfil e insignias de suscriptores.
  • Detección limitada de eventos mediante coincidencias de texto de chat e insignias; los recuentos de espectadores siguen funcionando cuando está activado el interruptor.
Evento Cuándo se activa Notas sobre los datos
gift Regalos KICKs detectados mediante la imagen de sticker y el importe visible de la moneda de Kick. hasDonation contiene N KICKs (1 KICK para uno) cuando el importe visible esté disponible; contentimg contiene la imagen del regalo. Se conserva el texto existente del mensaje.
reward Canjes de recompensas («ha canjeado…»). chatmessage contiene el texto del canje.
true (booleano) Avisos genéricos del sistema que no coinciden con patrones de regalos o recompensas. Usa chatmessage contenido para decidir la presentación; el booleano true indica «evento del sistema: tipo desconocido».
viewer_update Consulta la API de canales de Kick cada 30 segundos (solo si están activadas las estadísticas de espectadores). meta recuento entero de espectadores; para suscripciones, seguimientos o propinas usa el puente de Kick de abajo.

Kick – WebSocket/Puente

Implementación: sources/websocket/kick.js con utilidades compartidas bajo providers/kick/core.js

  • OAuth mediante el puente de Kick de Social Stream. Los permisos actuales son user:read, channel:read, channel:write, channel:rewards:read, chat:write, events:subscribe, moderation:ban, moderation:chat_message:manage, y kicks:read. Los tokens se renuevan automáticamente.
  • La configuración de webhooks de Kick puede tardar varios minutos; la interfaz enumera las suscripciones activas por canal.
Evento Cuándo se activa Notas sobre los datos
message Datos de chat del puente. meta.plainText contiene el mensaje en texto sin formato (que puede incluir emojis); las insignias combinan plataforma y caché de perfil. Las respuestas en hilos rellenan initial, reply, y meta.reply cuando hay detalles de respuesta o un mensaje principal en caché.
reward channel.reward.redemption.updated, más datos de chat/sistema del puente que parecen canjes. meta incluye ID de recompensa/canje, título, coste, estado, entrada del usuario y quién canjea.
new_subscriber channel.subscription.new. membership asignado al rol de suscriptor; meta incluye { subscriber, plan }.
resub channel.subscription.renewal. meta.duration (meses) y meta.plan disponible; subtitle resume la racha.
subscription_gift channel.subscription.gifts. meta.totalGifted, meta.gifter; las insignias usan el icono 💝 como alternativa.
donation Eventos de apoyo/propina detectados mediante heurísticas de tipo de evento; los regalos KICKs usan gift abajo. hasDonation contiene el importe formateado; meta contiene { amount, currency, supporter, message, giftName }.
gift kicks.gifted (regalos KICKs), igual que el capturador del DOM. hasDonation contiene N KICKs (1 KICK para uno); contentimg contiene la imagen del regalo cuando está disponible. Los detalles estructurados del regalo permanecen bajo meta.
raid Compatibilidad con datos de socket heredados de tipo host, como App\Events\StreamHostEvent. El catálogo oficial actual de eventos de Kick no tiene suscripción de raid/host. Si llegan datos heredados compatibles, se asignan al evento canónico raid; no dependas de esto para un flujo de trabajo actual de Kick.
new_follower channel.followed. Los iconos de seguidores proceden de la caché de perfiles; follower_update se activa cuando Kick proporciona totales acumulados.
follower_update El puente proporciona recuentos de seguidores en los datos del webhook. meta total entero; los paneles lo usan para objetivos de seguidores.
stream_online / stream_offline livestream.status.updated. meta contiene el cuerpo original de estado de Kick (is_live, title, etc.).
viewer_update livestream.status.updated cuando Kick incluye totales de espectadores simultáneos. meta recuento entero de espectadores; emite 0 al pasar a desconectado para borrar contadores obsoletos.
user_banned moderation.banned desde el puente/webhook o eventos de bloqueo del socket de chat de Kick. Evento solo con metadatos para widgets de moderación. meta incluye nombre de usuario/visible, ID de usuario, URL de avatar/perfil, moderador, motivo, duración del bloqueo/silenciamiento y permanencia.

Las consultas de perfiles usan profileCache; mapBadges combina los recursos de insignias de Kick con SVG en caché cuando están disponibles. Cuando Kick informa de donaciones en KICKs, el puente las convierte en hasDonation más meta.amount con currency usa «KICKs» como alternativa. Los datos de chat incluyen meta.messageId cuando el puente expone un ID nativo de mensaje de Kick para que la sincronización de eliminaciones apunte al mensaje correcto. Los datos de respuestas incluyen meta.reply con el principal messageId, author, y text cuando se conoce. Los detalles de respuesta proporcionados siguen disponibles aunque el mensaje original no esté en caché; una respuesta solo con ID y sin contexto en caché puede carecer de cita visible.

WebSocket de Kick: referencia rápida de eventos

data.event Situación
new_followerUn usuario siguió el canal
new_subscriberNueva suscripción
resubRenovación de suscripción
subscription_giftSuscripciones regaladas
rewardCanje de recompensa del canal o mensaje de chat/sistema con formato de recompensa
donationEvento de propina/apoyo
giftEvento de regalo KICKs
raidEntrada heredada de host/raid solo por compatibilidad; no es una suscripción oficial actual de Kick
follower_updateRecuento total de seguidores
stream_onlineTransmisión iniciada
stream_offlineTransmisión finalizada
user_bannedUn usuario fue bloqueado o silenciado temporalmente

VPZone - WebSocket

Implementación: sources/websocket/vpzone.js

  • Se conecta a wss://chat.vpzone.tv/ws?channel=USERNAME; OAuth solicita profile:read, chat:read, chat:write, channel:read, channel:write, y chat:moderate. También puede proporcionarse manualmente un token Bearer.
  • Tramas planas de VPZone como type: "msg" se normalizan en datos estándar de chat.
  • Del lado de la plataforma delete_message / clear_chat las tramas quitan las filas correspondientes del Dock; los interruptores opcionales sincronizan eliminaciones y bloqueos del Dock con VPZone (solo propietario del canal).
  • Los propietarios del canal disponen de un panel Información de la transmisión local a la página para actualizar el título y la categoría del directo (el mismo patrón que la página de origen de Twitch).
Evento Cuándo se activa Notas sobre los datos
message VPZone msg, message, new_message, o chat_message trama WebSocket. chatname procede de username; chatmessage procede de body; los indicadores de suscriptor/propietario/moderador/VIP se copian en chatbadges, indicadores de rol de nivel superior y meta. Los ID nativos rellenan data.id y meta.messageId.
viewer_update VPZone presence trama con count o campo equivalente de espectadores. meta es el entero de espectadores en vivo; contribuye al agregado viewer_updates.
new_subscriber VPZone subscribe / subscription trama. membership se establece en Subscriber cuando hay indicadores de suscripción.
subscription_gift VPZone gift / gift_subscription trama. Usa el mismo nombre de evento de suscripción regalada que Twitch, Kick, Rumble y Velora. subtitle contiene el recuento de regalos (x5) o destinatario.
message + hasDonation VPZone system trama con metadata.kind: "pixels_cheer" (propina en Pixels). Fila de chat con donación; hasDonation es la etiqueta del importe (por ejemplo 100 Pixels), meta.pixels el entero. event permanece vacío; detecta esta propina a partir de hasDonation. Los eventos de apoyo del puente de Kick usan en cambio event: "donation".
message respuestas VPZone msg trama que contiene metadata.reply_to (ID del mensaje, autor, fragmento: desnormalizados en el servidor). Se renderiza como las respuestas de Kick: initial contiene la etiqueta «autor: fragmento», reply el texto original de la respuesta, meta.reply el destino estructurado. Respeta el excluir «respondiendo a» ajuste.
raid VPZone raid trama con metadata.kind: "incoming". Se omiten las tramas de raids salientes; meta.viewers contiene el tamaño de la raid cuando se proporciona.
shoutout VPZone shoutout trama (!so comando). meta.targetUser nombra el canal mencionado.
reward VPZone system trama con metadata.kind: "channel_points_redeem". Canje de puntos del canal, con el mismo nombre de evento que las recompensas de Twitch.
stream_online / stream_offline VPZone system tramas con metadata.kind: "stream_started" / "stream_ended". Se atribuye al nombre del canal (las tramas no incluyen usuario).
new_follower VPZone follow trama. Se asigna a la estructura estándar de evento de seguidor.
joined Eventos WebSocket de incorporación/presencia de VPZone, cuando Capturar eventos de transmisión «joined» está habilitado. Se asigna a un evento del sistema con formato de chat y metadatos del usuario de VPZone bajo meta.

Joystick

Implementaciones: sources/joystick.js, sources/inject/joystick-ws.js, y sources/websocket/joystick.js

  • La fuente normal del sitio Joystick 2.0 funciona en la página con sesión iniciada /u/<channel>/chat página. Lee el campo de la página ChatChannel, WhisperChatChannel, EventLogChannel, y SystemEventChannel Tramas de Action Cable, con filas renderizadas como alternativa para Electron y reconexiones.
  • Los mensajes del chat del sitio usan los mismos campos principales que YouTube, Twitch y Kick: el nativo id, chatname, chatmessage, chatimg, chatbadges, nameColor, membership, mod, private, username/userid, y timestamp cuando Joystick los proporciona. Si el socket omite el color del nombre de usuario, la fila renderizada proporciona el mismo nameColor campo usado por los docks con colores habilitados.
  • Las ediciones de mensajes en el sitio sustituyen la fila correspondiente del Dock; las eliminaciones, silenciamientos y bloqueos quitan filas coincidentes mediante ID nativo o nombre de usuario.
  • La fuente WebSocket independiente usa credenciales de bot de Joystick (client_id + client_secret); la fuente del sitio web usa la sesión iniciada de la página.
  • Se autoriza en https://joystick.tv/api/oauth/authorize, luego intercambia/renueva tokens en https://api.joystick.tv/api/oauth/token.
  • Se conecta a wss://api.joystick.tv/cable y se suscribe a GatewayChannel.
  • Se usa intercambio opcional de tokens OAuth para puntos de acceso auxiliares, como https://api.joystick.tv/api/users/stream-settings.
  • La fuente independiente con credenciales de bot no emite viewer_update. La fuente del sitio con sesión iniciada sí emite recuentos de espectadores cuando el socket de su página los proporciona, como se describe abajo.
Evento Cuándo se activa Notas sobre los datos
message Joystick ChatMessage, BotMessage, new_message, bot_message, event_bot_message, pvp_message, y susurros. El chat normal no tiene event. El ID nativo se coloca en el campo de nivel superior id y meta.messageId; los roles y el estado privado usan los campos establecidos de nivel superior/insignias.
new_follower Joystick StreamEvent con tipo Followed. Usa la estructura estándar de seguidor y se deduplica frente a la fila de bot correspondiente de Joystick. El opcional meta.userId/meta.followedAt solo se incluyen cuando Joystick los proporciona.
new_subscriber / subscription_gift Tipos de eventos de Joystick NewSubscription / GiftedSubscription. Usa las claves de metadatos de suscripción compatibles con Kick: eventType, subscriber, gifter, totalGifted, duration, y plan.
donation Joystick StreamEvent tipos Tipped / TipMenu. hasDonation contiene el importe y la unidad de tokens para la conversión compartida a USD cuando están disponibles, y se deduplica la fila de bot correspondiente de Joystick. meta usa las claves establecidas de eventos de apoyo de Kick: eventType, supporter, amount, currency, message, giftName, giftType, y tier.
stream_online / stream_offline Joystick StreamEvent tipos como Started, StreamResuming, Ended, StreamEnding. Se usa para automatizaciones de conexión/desconexión que tienen en cuenta el transporte.
user_enter / user_leave Joystick UserPresence tipos enter_stream / leave_stream. Los avisos de presencia se emiten como mensajes de evento y pueden suprimirse con los ajustes de ocultar eventos. Ocultar eventos también suprime eventos de transmisión sin donación.
viewer_update La fuente del sitio con sesión iniciada recibe ViewerCountUpdated mediante EventLogChannel. Usa un entero simple meta, igual que YouTube, Twitch y Kick. Solo se emite si la captura de espectadores o el modo Hype están habilitados. La fuente independiente con credenciales de bot sigue sin recibir recuentos de espectadores.
follower_update / subscriber_update Eventos de actualización del recuento de seguidores/suscriptores de Joystick. Usa un entero simple meta, de acuerdo con el contrato del contador de Twitch.
Avisos internos ignorados ChatMessageReceived, estado del dispositivo y actualizaciones de widgets sin asignación, como objetivos de propinas/PvP/subatón. Son avisos de transporte o estado de página, no eventos de Social Stream. No se convierten en eventos inventados snake_case nombres de eventos; el real ChatChannel/new_message la fila sigue siendo el único mensaje de datos de chat.

XP Sync

Implementación: sources/xpsync.js

  • Las filas de chat usan los campos canónicos de datos con type: "xpsync", incluidos autor, mensaje, avatar, insignias de imagen y SVG en línea, color del nombre, membresía, indicadores de moderador/miembro/bot y UUID nativo del mensaje como id cuando esté disponible.
  • Las respuestas siguen la convención de las fuentes del DOM de YouTube, Twitch y Kick: salvo que los prefijos de respuesta estén desactivados, initial contiene el usuario al que se responde, reply conserva el mensaje sin prefijo, y chatmessage recibe el prefijo visible de respuesta.
  • Se capturan las filas destacadas con Sparks aunque XPSync las renderice sin la clase normal de fila de chat ni ID de mensaje; el importe visible se expone mediante hasDonation como N Sparks.
  • Con la captura de eventos habilitada, las filas que contienen «acaba de seguir» o «siguió el canal» emiten event: "new_follower".
  • Cuando los recuentos de espectadores están habilitados, el Dock de chat permanente emite event: "viewer_update" desde el recuento del vídeo en vivo ya cargado por la página de XPSync y lo actualiza con las actualizaciones de esa página. No se requieren credenciales de SSN aparte.

Instagram – Captura REST en vivo y bandeja de noticias

Implementación: sources/instagram.js y sources/instagramlive.js (copias idénticas)

  • En páginas de directos (/<user>/live/?broadcast_id=...), el chat en vivo procede de la API web de Instagram, consultada desde el mismo origen con la cookie de sesión: GET /api/v1/live/{broadcast_id}/get_comment/?last_comment_ts={ts} cada ~2 s, y POST /api/v1/live/{broadcast_id}/heartbeat_and_get_viewer_count/ cada ~5 s si los recuentos de espectadores están habilitados. Tras 3 fallos consecutivos (o cuando no haya broadcast_id se puede descubrir), la fuente pasa a interpretar el DOM renderizado del chat.
  • El feed de actividad de la propia cuenta se consulta mediante POST /api/v1/news/inbox/ cada ~45 s en cualquier página de Instagram. La primera consulta solo inicializa el conjunto de deduplicación para no reproducir nunca el historial; las noticias se deduplican por tuuid.
  • Cabeceras obligatorias de API (todas estáticas o derivables): X-IG-App-ID: 936619743392459, X-CSRFToken (desde la cookie), X-ASBD-ID: 359341, X-Requested-With: XMLHttpRequest, Content-Type: application/x-www-form-urlencoded.
  • Todos los eventos del feed de actividad usan type: "instagram"; el chat en vivo sigue siendo type: "instagramlive". Los eventos de me gusta usan la ruta normal del proceso en segundo plano: este envía una copia a la superposición específica de Reacciones y luego los incluye en el flujo principal de chat/eventos solo cuando capturelikeevent está habilitado, igual que TikTok y MeetMe. hideevents y el filtro de eventos personalizados los bloquean en todas partes. Como los eventos de la bandeja pertenecen a la cuenta conectada, se suprimen al ver el directo de otra persona (ambos /<user>/live/ páginas y directos del visor de historias; la propiedad se resuelve por perfil y se reintenta tras fallos de consulta) y se emiten en tu propio directo y todas las páginas fuera de directo. Una sola pestaña activa de Instagram consulta la bandeja de la cuenta a la vez, y solo lo hace con sesión iniciada.
Evento Cuándo se activa Notas sobre los datos
message (en vivo) Nuevas entradas en el get_comment respuesta (comments[]/system_comments[]), o nuevas filas de chat del DOM cuando REST no está disponible. Datos estándar de chat, type: "instagramlive". REST proporciona valores exactos de user.username, user.profile_pic_url, y un valor único pk usado para deduplicación.
viewer_update heartbeat_and_get_viewer_count informa de un cambio en viewer_count, cuando la captura de espectadores o el modo Hype están habilitados. meta recuento entero de espectadores. Las consultas se detienen cuando broadcast_status ya no es "live".
stream_online / stream_offline stream_online se activa una vez cuando comienza una sesión de emisión REST; stream_offline se activa cuando el latido informa de un estado fuera de directo broadcast_status (requiere captura de espectadores o modo Hype). Eventos solo con metadatos que coinciden con el vocabulario compartido de estado de transmisión de Twitch y Joystick.
new_follower Una noticia de la bandeja con un tipo de seguimiento notif_name (o story_type 12) aparece. chatname es el nuevo seguidor, chatimg su imagen de perfil, chatmessage el texto de la bandeja (por ejemplo, «x empezó a seguirte»).
follow_request Un private_user_follow_request aparece la noticia (las cuentas privadas reciben solicitudes en lugar de seguimientos directos). Misma estructura que new_follower, mantenidos por separado para que las automatizaciones puedan aprobar solicitudes o saludar de forma distinta.
liked Una noticia de la bandeja con un tipo de me gusta notif_name (incluido comment_like) aparece. Vocabulario de me gusta compartido con TikTok/MeetMe. chatname es el usuario que actúa, chatmessage el texto de la bandeja (por ejemplo, «a x le gustó tu foto»).
message (comentario en publicación propia) Una noticia de la bandeja con un tipo de comentario notif_name aparece. Fila normal de chat (event: false), type: "instagram"; chatmessage contiene el texto de la bandeja, incluido el fragmento del comentario.
notification Cualquier otro tipo de noticia de la bandeja (menciones, etiquetas, compras, etc.). Tipo genérico para el resto; meta.notifName y meta.storyType conservan la clasificación original de la noticia.

Facebook Live

Implementación: sources/facebook.js (captura del DOM) y puente opcional de Graph API en sources/websocket/facebook.html

  • La captura del DOM lee los comentarios renderizados de Facebook; el puente Graph API para páginas administradas lee comentarios de vídeos. Ambos usan type: "facebook", los campos estándar de chat y sin event para comentarios normales. El puente API también incluye el opcional platform: "facebook".
  • El puente API usa userid para el ID del autor cuando está disponible, timestamp para una hora de creación válida en milisegundos Unix, y contentimg para una imagen adjunta HTTP(S) proporcionada por la API. Los comentarios solo con imagen pueden tener vacío el campo chatmessage. textonly solo se aplica al cuerpo del mensaje: texto original cuando es true y HTML escapado cuando es false.
  • El contexto de comentarios de API usa meta.messageId (ID nativo del comentario), meta.permalink, meta.videoId, y meta.pageId. Las versiones anteriores de API usaban meta.commentId, campos duplicados de autor/hora bajo meta, y pasaba allí los adjuntos originales. Las versiones nuevas usan los campos estándar de autor/hora/medios; esto no añade sincronización de eliminaciones.
  • Los recuentos de espectadores solo se actualizan si están habilitados. El puente API lee el valor simultáneo live_views; no sustituye el recuento por vistas acumuladas del vídeo ni inventa un cero si no está disponible. La captura API no deduce Estrellas, membresías, destacados ni respuestas del texto de comentarios normales.
  • Las Estrellas se capturan del DOM renderizado del chat en vivo cuando Facebook muestra el elemento visible N sent marcador; rellenan hasDonation y donoValue a razón de 100 Estrellas = 1 USD sin establecer data.event.
  • Para pruebas, añade ssnreplay=1 a la URL de Facebook Live para procesar filas de chat ya visibles después de actualizar.
Evento Cuándo se activa Notas sobre los datos
viewer_update El DOM consulta la insignia de espectadores en vivo; el puente API consulta las vistas simultáneas en vivo cuando está habilitado. meta recuento entero de espectadores, igual que otras fuentes. Se omiten los recuentos ausentes o que no se pueden interpretar; un cero real es válido.
hasDonation Estrellas de Facebook renderizadas en el DOM del chat en vivo. Datos estándar de chat; hasDonation contiene el importe visible de Estrellas, como 100 Stars, y donoValue contiene el valor en USD. Las Estrellas no establecen data.event.
highlightColor Facebook renderiza un elemento visible HIGHLIGHTED etiqueta. Usa los campos normales de chat y highlightColor; sin data.event está establecido. Las Estrellas siguen usando hasDonation.

Online Church

Implementación: sources/onlinechurch.js

  • Depende de la captura del DOM del chat público y del encabezado multimedia.
  • Los recuentos de espectadores solo se actualizan cuando Mostrar recuento de espectadores o el modo Hype está habilitado.
Evento Cuándo se activa Notas sobre los datos
message Aparecen nuevas entradas bajo #publicchat. Datos estándar de chat con nombre del remitente, avatar, insignias y etiqueta opcional de membresía cuando exista en el DOM.
viewer_update Consulta la insignia de ocupación en vivo del encabezado multimedia cada 10 s. meta recuento entero de espectadores; envía 0 cuando la insignia falta o no se puede leer, para borrar contadores obsoletos.

SharePlay.tv

Implementación: sources/shareplay.js

  • Depende de la captura del DOM del panel desplegable de chat en vivo de las páginas de canales de SharePlay.
  • Solo se emiten las filas y tarjetas de chat insertadas después de conectar el capturador; el historial existente se ignora deliberadamente.
Evento Cuándo se activa Notas sobre los datos
message Aparecen nuevas filas dentro del flujo principal de chat. Datos estándar de chat con autor, avatar, imágenes de insignias y emotes conservados en HTML. Las respuestas de hilos también rellenan initial, reply, y meta.reply cuando la fila principal sigue presente.
raid SharePlay inserta una tarjeta Blitz en el flujo de chat en vivo. Se asigna al evento canónico de raid. meta.cardType es "blitz", con el opcional meta.fromLogin y meta.viewers cuando el texto de la tarjeta los expone.
shoutout SharePlay inserta una tarjeta de mención/seguimiento en el flujo de chat. Se emite como data.event = "shoutout". La imagen del banner de la tarjeta se reenvía mediante contentimg, mientras que meta.cardType y meta.action conservan la etiqueta de la tarjeta/texto del botón.
viewer_update Consulta la insignia visible de espectadores del encabezado cada 10 s. meta recuento entero de espectadores; solo se emite cuando Mostrar recuento de espectadores o el modo Hype está habilitado, y envía 0 si la insignia deja de ser legible, para borrar contadores obsoletos.

Streamplace

Implementación: sources/streamplace.js

  • Lee la página en vivo de Streamplace renderizada con React y omite el historial visible de chat al conectar.
  • Mensajes de tipo reenvío, como Name (Discord): message se normalizan al nombre del remitente reenviado.
Evento Cuándo se activa Notas sobre los datos
message Aparecen nuevas filas de chat de Streamplace después de conectar. Datos estándar de chat con nameColor, chatbadges, enlaces conservados en HTML y campos de respuesta initial, reply, y meta.reply cuando es visible.
viewer_update Cambia la insignia de espectadores del encabezado mientras la captura de espectadores o el modo Hype están habilitados. meta recuento entero de espectadores.

WorldsWave

Implementación: sources/worldswave.js

  • Admite páginas en vivo y URL solo de chat de WorldsWave, como https://worldswave.com/kn_livecmd.php?cmd=viewStream&streamId=STREAM_ID&chatonly=1.
  • Usa el estable data-ww-*/ww-chat-* marcado cuando está disponible, conservando los selectores heredados de kontackt para páginas solo de chat y diseños antiguos.
  • Se omite el historial de chat existente al conectar la captura; prueba con un mensaje nuevo.
  • Los recuentos de espectadores requieren Mostrar recuento de espectadores o modo Hype. No están implementados eventos específicos de regalos/propinas ni respuestas. Una fila renderizada aún puede proporcionar una etiqueta de donación mediante data-ww-donation.
Evento Cuándo se activa Notas sobre los datos
message Aparece una nueva fila renderizada de chat de WorldsWave. Datos estándar de chat con type: "worldswave", nombre del remitente, avatar, ID de usuario opcional, color del nombre, insignias, estado de moderador, membresía, valor de donación, adjunto e identidad del canal. Los ID estables de mensajes de WorldsWave se exponen como meta.messageId y se deduplican entre los paneles simultáneos de vista previa/chat completo. Las imágenes de mensajes en línea se mantienen saneadas cuando el modo solo texto está desactivado.
viewer_update Cambia el total visible de espectadores en vivo mientras la captura de espectadores o el modo Hype están habilitados. meta es el recuento entero de espectadores. El estable data-ww-viewer-count se prefiere el valor; los valores heredados compactos como 1.2K se normalizan como alternativa.

FLEX TV

Implementación: sources/flextv.js

  • Lee el panel de chat renderizado en https://www.flextv.co.kr/channels/*/live páginas.
  • El panel de chat debe estar visible. Se omite el historial existente al conectar la fuente, así que prueba con una fila nueva.
  • Aún no se documenta recuento de espectadores, donaciones ni ruta de respuesta para esta fuente.
Evento Cuándo se activa Notas sobre los datos
message Nuevo elemento visible de FLEX TV .chat-item aparecen filas en el flujo de chat en vivo. Datos estándar de chat con type: "flextv", chatname, chatmessage, nameColor, imágenes de insignias en chatbadges, y detalles de miembros FLEX bajo meta cuando lo expone data-member.

Seal Team Sloth

Implementación: sources/sealteamsloth.js

  • Lee el chat emergente renderizado en https://sealteamsloth.com/popout-chat/* páginas.
  • Los recuentos de espectadores requieren Mostrar recuento de espectadores o modo Hype.
Evento Cuándo se activa Notas sobre los datos
message Aparece una nueva fila renderizada de chat de Seal Team Sloth. Datos estándar de chat con type: "sealteamsloth", nombre del remitente, avatar y contenido del mensaje.
viewer_update Cambia el total visible de espectadores en vivo mientras la captura de espectadores o el modo Hype están habilitados. meta es el recuento entero de espectadores; valores compactos como 1.2K se normalizan.

MeetMe - Captura del DOM y WebSocket

Implementación: sources/meetme.js

  • Lee el DOM renderizado del chat en vivo de MeetMe en app.meetme.com/live/view/... páginas y dentro del api.gateway.meetme-live.com/web-live/... iframe.
  • Cuando el WebSocket del iframe está disponible, wss://video-live.meetme.com/ las tramas se interpretan antes de la alternativa del DOM para capturar eventos en vivo más completos.
  • hideevents suprime los eventos sin donación; los regalos y donaciones de diamantes de MeetMe siguen rellenando campos de donación. capturejoinedevent habilita avisos de incorporación/reincorporación. Los específicos de usuario liked los eventos usan el enrutamiento compartido en segundo plano controlado por capturelikeevent; agregado reaction los efectos siguen dirigidos explícitamente a la superposición de Reacciones.
  • Los recuentos prefieren el valor visible del encabezado de MeetMe y usan totales WebSocket solo si no está disponible en el DOM. Se emiten al cambiar y repiten el último valor aproximadamente cada 30 segundos mientras showviewercount/hypemode está habilitado; los totales de seguidores solo se emiten al cambiar y están limitados a unos 60 segundos.
Evento Cuándo se activa Notas sobre los datos
message Nuevo SNSChatMessage llegan tramas WebSocket, o nuevas ChatMessage_* Las filas del DOM aparecen bajo ChatHistoryContainer_*. Datos estándar de chat con nombre del remitente, avatar, HTML/texto del mensaje e imágenes/texto de insignias. Los detalles de filas del DOM son campos planos meta claves, incluidas messageId, roomId, level, levelColor, badgeLabels, badgeSrcs, badgeClasses, isBouncer, isTopStreamer, isBestOfTheWeek, rank, y rowClassName. Los datos de WebSocket establecen meta.source = "websocket".
joined / rejoined / left SNSChatParticipant llegan tramas WebSocket de creación, actualización o eliminación, o MeetMe renderiza un elemento del DOM join-cell fila. Los avisos de incorporación/reincorporación requieren Capturar eventos de transmisión «joined». Emite avisos del sistema con formato de chat y nombre/avatar del usuario cuando MeetMe los expone. meta.isNewViewer, meta.viewerLevelId, meta.isBouncer, y meta.isSubscriber conservan el estado de los participantes.
new_follower MeetMe renderiza una fila del DOM de favorito/seguimiento, como Favorited. Usa el vocabulario compartido de eventos de seguidores. chatname es el usuario que actúa, chatimg es la foto de perfil detectada cuando está disponible, y los campos planos meta.favoriteText/meta.targetName conservan los detalles originales de la fila.
gift SNSGiftMessage llegan tramas WebSocket, o MeetMe renderiza una imagen de regalo en una fila de chat. hasDonation contiene la etiqueta visible del regalo o el valor en diamantes, contentimg contiene la imagen del regalo cuando se expone, y claves planas como meta.giftName, meta.giftCount, meta.amount, y meta.currency conservan los detalles estructurados. El gift el evento se reserva para tramas/filas reales de regalos; el renderizado de donaciones debe seguir basándose en hasDonation.
donation SNSDiamond las tramas WebSocket exponen actividad de diamantes. Las tramas específicas de diamantes se tratan como eventos de donación. hasDonation se formatea como diamantes para la conversión compartida a USD, y meta.amount/meta.currency permanecen planos para las automatizaciones.
liked / reaction SNSLike llegan tramas WebSocket. Los me gusta atribuidos a un usuario usan el mismo liked vocabulario y enrutamiento centralizado en segundo plano que TikTok. Los totales agregados/anónimos de me gusta se envían solo al destino de reacciones como reaction, con campos planos meta.reactionType, meta.totalLikes, y meta.subscriberLikes. La diferencia está en el significado del evento, no en el anonimato: capturelikeevent controla solo los individuales liked/like eventos.
follower_update SNSVideo los metadatos WebSocket exponen totales de seguidores. meta es el entero de seguidores, siguiendo la convención compartida de eventos de contadores.
guest_update SNSVideoGuestBroadcast llegan tramas de creación/actualización. Evento solo con metadatos para el estado de invitados/copresentadores en vivo. Los campos planos meta las claves incluyen status, position, totalGuests, isMuted, guestBroadcastId, videoViewerId, y broadcastId.
viewer_update Cambia la insignia visible de espectadores del encabezado, o SNSVideo los metadatos WebSocket exponen totales de espectadores cuando no está disponible la insignia; los totales sin cambios se repiten aproximadamente cada 30 segundos mientras esté habilitado. meta recuento entero de espectadores; solo se emite si la captura de espectadores o el modo Hype están habilitados.

Velora

Implementación: sources/velora.js y sources/websocket/velora.js

  • El modo Standard lee el DOM visible del chat; el modo WebSocket usa la API de eventos de Velora con OAuth.
  • Las URL compatibles con el modo Standard incluyen https://velora.tv/*, https://velora.tv/dashboard/stream/popout?panels=chat%2Cactivity&channel=CHANNEL&layout=vertical, y https://velora.tv/dashboard/stream/popout/CHANNEL/obs-chat.
  • Las tarjetas de Volts y de puntos del canal se emiten como datos de eventos cuando el DOM o la API de eventos las exponen.
Evento Cuándo se activa Notas sobre los datos
message Aparecen nuevas filas de chat de Velora o llegan mensajes de chat de la API de eventos. Datos estándar de chat con insignias, color del autor, enlaces y emotes conservados cuando no se usa modo solo texto.
volts Tarjetas de Volts de Velora o channel.volts Llegan datos de la API de eventos. hasDonation contiene el importe visible de Volts; las capturas del DOM incluyen meta.source = "dom".
channel_points Tarjetas de puntos del canal/canjes de Velora o channel.channel_points_redemption Llegan datos de la API de eventos. chatmessage contiene el mensaje de canje o el título de la recompensa; meta.rewardTitle identifica la recompensa cuando está disponible.
subscription Una fila visible de actividad de Velora indica que un usuario se hizo miembro/suscriptor del canal. membership contiene la etiqueta visible de membresía.
viewer_update Cambia el recuento visible de espectadores mientras la captura de espectadores o el modo Hype están habilitados. meta recuento entero de espectadores.

Parti - Captura de chat de perfil / emergente

Implementación: sources/parti.js

  • Admite URL de perfiles, como https://parti.com/USERNAME y URL emergentes, como https://parti.com/popout-chat?id=USER_ID.
  • Los recuentos de espectadores usan el punto de latido de transmisiones de Parti cuando la captura de espectadores o el modo Hype están habilitados.
Evento Cuándo se activa Notas sobre los datos
message Aparecen filas visibles de chat de Parti en el perfil o chat emergente. Datos estándar de chat; nameColor conserva el color del autor renderizado por Parti y chatmessage conserva el contenido en línea salvo en modo solo texto.
donation Las filas visibles de propinas de Parti indican que un usuario dio un importe. hasDonation contiene el importe mostrado, meta.amount/meta.currency se rellenan cuando se pueden interpretar, meta.amountText conserva el texto original del importe, y donoValue se establece para propinas en USD.
viewer_update El latido de Parti devuelve un recuento de espectadores en vivo. meta es el recuento entero de espectadores; la página reutiliza un token de latido por ventana de origen para evitar inflar los recuentos.

CHZZK - Captura de chat emergente

Implementación: sources/chzzk.js

  • Admite https://chzzk.naver.com/live/*/chat y https://chzzk.naver.com/iframe/live/*/chat.
  • Los recuentos de espectadores usan el punto de consulta de estado en vivo de CHZZK cuando la captura de espectadores o el modo Hype están habilitados.
Evento Cuándo se activa Notas sobre los datos
message Aparecen filas visibles de chat de CHZZK en el flujo del chat emergente. Datos estándar de chat con type: "chzzk", nameColor, URL de imágenes de insignias en chatbadges, y emotes renderizados en chatmessage salvo que el modo solo texto esté habilitado.
chat con hasDonation Aparecen filas visibles de donación de queso de CHZZK en el chat. hasDonation contiene el importe visible de queso. Estas filas no establecen data.event.
viewer_update La consulta de estado en vivo devuelve un recuento de espectadores. meta es el recuento entero de espectadores.

Rumble - Captura Standard del DOM

Implementación: sources/rumble.js

  • Requiere cookies de sesión autenticada para que el service.php responde la API de espectadores.
  • Las filas renderizadas de Rant proporcionan hasDonation; las tarjetas de raids entrantes proporcionan event: "raid". Esta fuente del DOM no emite el flujo de eventos de suscriptores/seguidores del puente API.
Evento Cuándo se activa Notas sobre los datos
message Aparecen filas visibles de chat de Rumble en la página o chat emergente. Datos estándar de chat; chatmessage conserva el HTML de imágenes de emotes de Rumble después de que la página lo renderice, salvo en modo solo texto.
viewer_update Llama al recurso de Rumble video.watching-now servicio cada 30 s. meta recuento entero de espectadores; usa credentials: 'include' para reutilizar las cookies de sesión.
chat con hasDonationUna fila visible de Rant contiene un precio.hasDonation conserva el precio renderizado; no se añade un marcador de evento de donación.
raidAparece una tarjeta de raid entrante en el chat.Usa el mensaje visible de raid y la imagen opcional de tarjeta en contentimg.

Rumble - WebSocket/URL de API

Implementación: sources/websocket/rumble.js

  • Requiere la URL de Live Stream API del creador obtenida en https://rumble.com/account/livestream-api. Rumble documenta que esta URL incluye la clave de la transmisión en vivo, no requiere autenticación aparte y solo debe compartirse con terceros de confianza.
  • Transporte de solo lectura. La documentación pública de la API de Rumble Live Stream no describe un punto de acceso oficial para enviar chat, por lo que esta fuente reenvía mensajes/eventos a Social Stream, pero no envía chat de vuelta a Rumble.
  • livestreams[].chat solo se rellena mientras la transmisión seleccionada esté en vivo. Usa ?streamId=... para fijar una transmisión específica cuando la API expone más de una; los ID inválidos ahora fallan en lugar de usar silenciosamente otra transmisión.
  • La página también resuelve https://rumble.com/chat/popup/<livestreams[].id> para que puedas abrir directamente el chat emergente normal insertado sin cargar antes la página del emisor /live página.
Evento Cuándo se activa Notas sobre los datos
message Llegan nuevas entradas del flujo de chat SSE de Rumble después de que la API oficial resuelva livestreams[].id; usa como alternativa livestreams[].chat.recent_messages. Datos estándar de chat. meta.source es rumble_sse cuando el flujo de chat SSE está disponible e incluye URL de avatares de users[].image.1; en caso contrario, usa como alternativa live_stream_api sin avatares. Cuando el catálogo de emotes de la ventana emergente está disponible, chatmessage renderiza los emotes de códigos cortos de Rumble como imágenes HTML y meta.plainText conserva el texto original del código corto.
donation Aparecen nuevas entradas de Rant en livestreams[].chat.recent_rants. hasDonation contiene el importe formateado en USD; meta incluye amount_cents, amount_dollars, y expiresOn.
new_follower Aparecen nuevas entradas en followers.recent_followers. Evento del sistema con chatname establecido en el nombre del seguidor y la marca de tiempo bajo meta.followedOn.
new_subscriber Aparecen nuevas entradas en subscribers.recent_subscribers. membership se establece en SUBSCRIBER; subtitle refleja el importe en USD documentado cuando Rumble lo proporciona.
subscription_gift Aparecen nuevas entradas en gifted_subs.recent_gifted_subs. chatname es quien regala, hasDonation se convierte en N Gifted, y meta incluye totalGifted, remainingGifts, giftType, y videoId.
follower_update Siempre que cambie el contador de seguidores seleccionado. meta recuento entero de seguidores. Usa por defecto followers.num_followers; con ?followerMode=total, usa followers.num_followers_total cuando Rumble lo proporciona.
subscriber_update Siempre que subscribers.num_subscribers cambia. meta recuento entero de suscriptores.
stream_online / stream_offline Cuando la transmisión seleccionada cambia entre en vivo y desconectada. meta incluye un subconjunto saneado de campos de transmisión (id, title, createdOn, etiquetas de categoría, me gusta/no me gusta y totales de espectadores). Los valores sensibles, como stream_key no se reenvían deliberadamente.
viewer_update Siempre que livestreams[].watching_now cambia para la transmisión seleccionada. meta recuento entero de espectadores simultáneos; emite 0 cuando la transmisión seleccionada se desconecta, para borrar contadores obsoletos.

Este transporte está pensado para canales que posees o administras. Como la URL de API contiene una clave de transmisión en vivo, no la expongas en superposiciones, registros, capturas ni perfiles de navegador compartidos. Los avatares proceden del flujo de chat SSE de Rumble una vez que la API oficial resuelve el ID de transmisión; este transporte no captura páginas de Rumble para obtener avatares.

YouNow - Captura del DOM

Implementación: sources/younow.js

  • Lee el DOM renderizado de chat en vivo y emite datos estándar de chat con type: "younow".
  • Líneas de actividad del público como is watching, I became a fan!, y invited N fans to this broadcast. se marcan con event: true para que los filtros de eventos puedan enrutarlos.
Evento Cuándo se activa Notas sobre los datos
message Aparecen nuevas filas en el chat en vivo del público. Datos estándar de chat; las filas de actividad de fans/público establecen event: true.
viewer_update Cambia el recuento visible del panel del público mientras showviewercount/hypemode está habilitado. meta recuento entero de espectadores; emite 0 cuando desaparece el contador.

Favorited Studio - Captura del DOM

Implementación: sources/favorited.js

  • Lee el DOM renderizado de chat en vivo y emite datos estándar de chat con type: "favorited".
Evento Cuándo se activa Notas sobre los datos
message Aparecen nuevas filas de chat. Datos estándar de chat.
viewer_update Cambia el recuento de la pestaña de espectadores en vivo mientras showviewercount/hypemode está habilitado. meta recuento entero de espectadores leído del content-live-viewers pestaña.

BEAM - Captura del DOM

Implementación: sources/beamstream.js

  • Lee el DOM renderizado de chat en vivo y emite datos estándar de chat con type: "beamstream".
Evento Cuándo se activa Notas sobre los datos
message Aparecen nuevas filas de chat. Datos estándar de chat con el campo de texto sin formato chatname, URL del avatar en chatimg, y URL de imágenes u objetos de insignia SVG en chatbadges. Los campos ocultos en la página de captura de Beam permanecen vacíos. Los enlaces nativos de perfiles de Beam no se tratan como fuentes de reenvío externas. contentimg puede contener adjuntos de vídeo/webm en línea cuando se exponen.
viewer_update Cambia un elemento de contador de espectadores mientras showviewercount/hypemode está habilitado. meta recuento entero de espectadores; solo se emite si la página de chat expone un contador.

Castyr - Captura del DOM

Implementación: sources/castyr.js

  • Lee nuevas filas de chat renderizadas desde https://castyr.live/homebeta/popout-chat/* y emite datos estándar de chat con type: "castyr".
  • Se omite el historial de chat existente al conectar la fuente.
Evento Cuándo se activa Notas sobre los datos
message Un nuevo .chat-message aparece una fila. Datos estándar de chat con nombre del remitente, contenido renderizado del mensaje y color del nombre cuando se exponga.
viewer_update Cambia el recuento visible de chat activo mientras showviewercount/hypemode está habilitado. meta es el recuento entero leído del elemento de chat activo con título de Castyr.

SOOP - Captura del DOM del reproductor

Implementación: sources/sooplive.js. Admite el formato unificado play.sooplive.com reproductor y el heredado play.sooplive.co.kr URL. El diseño anterior de chat global sigue siendo reconocido cuando se sirve.

El chat público emite type/platform: "sooplive", texto sin formato chatname/userid, nameColor, y contenido saneado en chatmessage. Se excluyen las filas existentes, los ID de mensajes duplicados, las copias de traducción y los susurros privados. Los emotes se convierten en imágenes seguras o texto alternativo en modo solo texto.

Con showviewercount o hypemode habilitado, viewer_update contiene un entero meta desde el campo del reproductor #nAllViewer. Las ventanas emergentes solo de chat pueden no exponer este recuento. SSApp usa el reproductor completo al abrir una ventana separada, porque las ventanas emergentes actuales de SOOP dependen de la ventana que las abre.

Gosh - Captura de chat del canal

Implementación: sources/gosh.js. Abre https://gosh.com/USERNAME con el chat visible, o pega esa URL en Añadir otra fuente de SSApp. No hace falta una ventana emergente de chat.

Las nuevas filas de chat emiten type/platform: "gosh", texto sin formato chatname, nameColor, y contenido saneado en chatmessage. Las imágenes y GIF en línea conservan URL HTTP(S) seguras. Con textonlymode, las imágenes se convierten en texto alternativo o [image] cuando no hay texto alternativo. Los avatares, insignias, donaciones y membresías quedan vacíos cuando no están en la fila capturada.

Mantén el chat virtualizado desplazado hasta los mensajes más recientes. Se excluyen el historial existente, las filas renderizadas de nuevo y los avisos del sistema sin autor. Los índices de renderizado son internos y no se emiten como ID nativos de mensajes. No se deducen eventos de seguimiento, donación, recuento de espectadores ni moderación.

Livacha - Captura de sala de chat

Implementación: sources/livacha.js. Abre https://livacha.com/chat/ROOM con el chat visible, o pega la URL de la sala en Añadir otra fuente de SSApp.

Las nuevas filas de chat emiten type/platform: "livacha", texto sin formato chatname, chatimg, nameColor, y contenido saneado en chatmessage. Las URL relativas de avatar e imágenes en línea se convierten en URL HTTP(S) absolutas. Párrafos, saltos de línea y listas se aplanan en un mensaje de chat. Con textonlymode, las imágenes se convierten en texto alternativo o [image].

Los ID de mensajes se usan internamente para evitar recapturar ediciones y filas montadas de nuevo. Se omiten el historial inicial y los mensajes antiguos añadidos al principio; las marcas de tiempo y menús de reacciones quedan fuera del cuerpo capturado. No se deducen eventos de donación, membresía, moderación ni recuento de espectadores.

Stream.space - Captura experimental del DOM

Implementación: sources/streamspace.js. Solo coincide con https://beta.stream.space/chat-popup.php?channel=USERNAME y el equivalente https://stream.space ventana emergente.

Las nuevas filas renderizadas de chat emiten type: "streamspace", platform: "streamspace", texto sin formato chatname/userid, chatmessage, avatar chatimg, nivel basado en imagen chatbadges, y nameColor. Los emotes en línea se reconstruyen como imágenes seguras, o como su texto alternativo cuando textonlymode está habilitado. Se excluyen el historial existente, los avisos de bienvenida, las vistas previas de respuestas y los duplicados fijados.

viewer_update contiene un entero meta leído de #popupViewersNum cuando showviewercount o hypemode está habilitado. No se deducen eventos de donación, membresía ni moderación.

Experimental: el menú de beta permaneció en Cargando durante la inspección. SSApp cargó el menú y capturó actualizaciones de espectadores, pero siguen sin verificarse la entrega de chat en vivo y el menú de producción. SSN no puede capturar mensajes que el sitio no renderiza.

w.tv y Prime - Captura del DOM

Implementaciones: sources/wtv.js en https://w.tv/USERNAME/chat y sources/prime.js en https://prime.gs/USERNAME?chat_popout=1.

Las nuevas filas de chat usan type/platform de wtv o prime, texto sin formato chatname, nameColor, y contenido saneado en chatmessage. Los emotes en línea se convierten en imágenes seguras o texto alternativo en modo solo texto. Prime también incluye el campo de la fila userid y admite tanto enlaces de perfiles con sesión iniciada como etiquetas de nombre de usuario sin sesión. Los avatares e insignias quedan vacíos cuando no están disponibles en la estructura de fila verificada.

Se excluyen el historial inicial, las tarjetas fijadas y las vistas previas de respuestas. w.tv virtualiza el chat: mantenlo desplazado hasta los mensajes más recientes para capturarlo. Sus ID de prueba del DOM son índices de renderizado, no ID nativos de mensajes. Prime omite el historial antiguo cargado encima de los mensajes iniciales y los marcadores de usuarios ignorados.

Ninguna ventana emergente expone un recuento verificado de espectadores de la transmisión, por lo que estos adaptadores no emiten actualizaciones de espectadores ni deducen eventos de donación, suscripción o moderación.

Coherencia de eventos entre plataformas

Usa esta tabla para entender cómo se corresponden conceptos similares entre plataformas. Cuando sea posible, las nuevas fuentes deben ajustarse a los nombres comunes de eventos de la primera columna.

Concepto WS de YouTube WS de Twitch WS de Kick
Nuevo miembro/suscriptor sponsorship new_subscriber new_subscriber
Renovación/resuscripción resub resub resub
Suscripciones regaladas giftpurchase subscription_gift subscription_gift
Regalo recibido giftredemption - -
Hito membermilestone - -
Donación/propina superchat, supersticker, jeweldonation con hasDonation cheer (bits) donation
Nuevo seguidor new_follower (consultados periódicamente)* new_follower new_follower
Recuento de espectadores viewer_update viewer_update viewer_update
Recuento de seguidores - follower_update follower_update
Recuento de suscriptores subscriber_update subscriber_update -
Estado de la transmisión live_chat_ended stream_online/stream_offline stream_online/stream_offline
Raid - raid -
Canje de recompensa - reward reward

Notas de coherencia

  • YouTube usa sponsorship para nuevos miembros, mientras Twitch y Kick usan new_subscriber. Considera comprobar ambos al crear disparadores entre plataformas.
  • resub es coherente en las tres plataformas para renovaciones.
  • Los eventos de regalos difieren: YouTube usa giftpurchase/giftredemption, mientras Twitch y Kick usan subscription_gift.
  • Las donaciones varían según la plataforma: YouTube usa nombres específicos de eventos de pago, como superchat, supersticker, y jeweldonation con hasDonation; Twitch tiene bits (cheer); Kick tiene propinas (donation).
  • new_follower ahora es coherente en las tres plataformas, pero YouTube consulta suscriptores recientes y puede devolver resultados retrasados o incompletos.
  • Los me gusta y las reacciones tienen contratos separados: individual liked/like los eventos llegan a la superposición de Reacciones salvo filtrado global, y entran en el procesamiento principal solo cuando capturelikeevent está habilitado. Los visuales o nativos de plataforma reaction los eventos conservan el enrutamiento definido por el productor. Los agregados likes_update los contadores se controlan por separado mediante captureliketotals.

Límites de cobertura y compatibilidad

Esta referencia describe datos implementados, no garantiza que cada plataforma entregue todos los eventos. Los campos vacíos hasDonation asignados en una fuente no demuestran compatibilidad con donaciones. La visibilidad del DOM, los permisos de cuenta, los interruptores de captura y la disponibilidad de API siguen determinando qué se recibe. El reenvío de eliminaciones depende de la fuente; no supongas sincronización universal de moderación.

Diferencias y carencias registradas

Par/Área Diferencia / carencia observada Impacto
Twitch: Standard frente a WebSocket Compartido: reward, subscription_gift, viewer_update, hype_train, y el campo opcional watch_streak. Solo Standard: giftpurchase, knock, community_highlight. Solo WebSocket: new_subscriber, resub, cheer, powerup, raid, new_follower, follower_update, subscriber_update. channel_points ahora es un alias heredado obsoleto de los canjes de recompensas de Twitch; las nuevas integraciones deben basarse en reward.
Kick: Standard frente a WebSocket Standard emite marcadores ligeros (gift, reward, booleano true, viewer_update). WebSocket añade eventos oficiales de seguimiento, suscripción, regalos, canje de recompensas, KICKs, moderación y estado en vivo. Conserva compatibilidad con un evento heredado raid datos, pero Kick no ofrece actualmente una suscripción oficial de raid/host. El modo WebSocket es más completo; al cambiar hay que revisar las automatizaciones basadas en nombres de eventos exclusivos de Standard. No exijas un evento de raid de Kick.
YouTube: Standard frente a WebSocket Compartido: superchat, supersticker, jeweldonation, sponsorship, resub, giftpurchase, giftredemption, viewer_update. Solo Standard: thankyou, redirect. Solo WebSocket: membermilestone, new_follower, subscriber_update, view_update, likes_update (opcional). Los nombres principales de miembros/eventos están alineados entre ambos; Super Chat, Super Sticker y Jewels usan hasDonation, mientras las compras/canjes de membresías regaladas no.
Todas las interfaces Muchas fuentes rellenan hasDonation sin establecer data.event. Esto es correcto; el renderizado de donaciones debe basarse en hasDonation, con data.event reservado para la semántica de sistema/evento.

Alias específicos de fuentes y nombres heredados

Estas correspondencias son específicas de la fuente/contexto indicado, no sustituciones globales. La compatibilidad con alias varía según la página. Las fuentes actuales del DOM de TikTok y TikFinity siguen emitiendo followed; Velora usa subscription y channel_points, y Streamlabs usa subscription. Acepta el contrato actual de la fuente y sus alias heredados pertinentes en lugar de renombrar cada evento coincidente.

Alias / Nombre heredado Sustitución canónica Contexto
subscriptionnew_subscriberNueva suscripción de Twitch/Kick
subgiftsubscription_giftSuscripción regalada de Twitch
membershipsponsorshipNuevo miembro de YouTube (genérico)
new_membersponsorshipNuevo miembro de YouTube
new_membershipsponsorshipNuevo miembro de YouTube
newmembersponsorshipNuevo miembro de YouTube
new-membershipsponsorshipCapturador del DOM de YouTube (variante con guion)
upgraded_membershipresubMejora de nivel de YouTube
upgraded-membershipresubCapturador del DOM de YouTube (variante con guion)
membership_upgraderesubMejora de nivel de YouTube
membership_milestonemembermilestoneChat de hito de YouTube
member_milestonemembermilestoneChat de hito de YouTube (variante con guion bajo)
gift_membershipgiftpurchasePaquete de regalos de YouTube
membership_giftgiftpurchasePaquete de regalos de YouTube
giftmembershipsgiftpurchasePaquete de regalos de YouTube (variante plural)
gifted_membershipgiftredemptionRegalo de YouTube recibido
gifted_membershipsgiftpurchasePaquete de regalos de YouTube (variante plural)
community_giftgiftpurchasePaquete de regalos a la comunidad
channel_pointsrewardCanje de recompensa por WebSocket de Twitch (alias heredado)
followednew_followerSalida actual del DOM de TikTok/TikFinity; acepta ambos nombres al combinar modos de captura de TikTok.

Uso de esta referencia

  • Al añadir un evento nuevo, reutiliza el vocabulario existente (subscription_gift, viewer_update, etc.) siempre que sea posible. Si es inevitable una desviación, documéntala aquí junto con el motivo.
  • Mantén data.meta predecible: prefiere claves planas, nunca sobrecargues cadenas con datos mezclados e incluye siempre unidades (currency, bits, duration).
  • Actualiza esta página junto con los cambios de datos; actualiza las instrucciones de agentes solo cuando cambien las reglas de desarrollo compartidas.
  • Valida los cambios de datos tanto con la fuente emisora como con la superposición o disparador de Event Flow que los consume.
  • La captura depende de la compatibilidad y los ajustes de la fuente. Para ocultar filas marcadas como eventos en el Dock o las superposiciones de destacados, añade &hideevents o &hideallevents. Para ocultar eventos seleccionados, usa &filterevents=subscription_gift,new_follower,gifted.
  • Para YouTube, Twitch y Kick, activa Modo WebSocket para la compatibilidad más amplia con eventos específicos de plataforma. La captura de regalos/donaciones de YouTube (incluidos regalos y Super Chats) está disponible en modos Standard y WebSocket; WebSocket añade tipos de eventos. La compatibilidad exacta sigue variando según plataforma, rol de cuenta y permisos concedidos.

Volver arriba

Superposiciones de monetización

Las propinas de NinjaBacker usan platform: "ninjabacker", type: "ninjabacker", chatname, texto sin formato chatmessage, textonly: true, un campo con prefijo de fuente id, formateado hasDonation, y el campo numérico donoValue. Son filas normales con donación sin un event valor de anulación. meta.ninjabacker contiene el valor ISO currency y en unidades monetarias principales amount. Las propinas anónimas usan el nombre visible Anonymous. La fuente usa SSE en vivo (sin repetición) o el receptor opcional de webhooks firmados de la API de SSN (hasta siete días de entrega en cola). Las entregas fiables usan un identificador estable ninjabacker:delivery:DELIVERY_ID ID. Ningún modo recibe reversiones por reembolsos/disputas. Las credenciales del receptor y secretos de firma nunca entran en los datos de eventos. Los valores callbackId controlados por quien llama no identifican pagos ni se reenvían. Las propinas de prueba del panel se excluyen de las filas de donación. Emiten event: "monetization_test" con meta.ninjabackerTest que contiene id y at (milisegundos Unix), solo para la alerta específica de vista previa.

event: "monetization_update" es una instantánea solo de metadatos de type/platform: "socialstream". meta.monetization.wishlist contiene enabled, qr, position, rank, total, url pública y el artículo actual (name, amount, currency, image, url pública) o null. meta.monetization.ninja contiene enabled, qr, position, username y la url pública de propinas. Nunca se incluyen los Tip ID privados. meta.monetization.ebay contiene enabled, qr, position, display (cycle/cheapest/first), seconds, ajustes opcionales de anuncios y artículos públicos. Cada artículo tiene id, name, amount, currency, image, url, auction, startingBid, endsAt, available, bought y updatedAt. Los tiempos son milisegundos Unix. No se incluyen credenciales del vendedor ni identidad del comprador.

Una compra de lista de deseos confirmada por el anfitrión también incluye meta.wishlistPurchase con id, name, supporter opcional y at (milisegundos Unix). Es una confirmación del anfitrión, no un aviso de pago de Amazon, y no cuenta como donación monetaria. Las superposiciones deben deduplicar su id e ignorar avisos antiguos de compra.

Pedidos pagados de Shopify

El receptor firmado opcional de Shopify emite platform/type: "shopify" y event: "purchase" solo para orders/paid con financial_status: "paid", un total positivo, test: false, sin cancelación y con una marca de tiempo de actualización vigente en el cuerpo firmado. Las notificaciones de prueba, impagadas, obsoletas, canceladas o de reembolso no emiten acciones de compra. No se infiere intención de regalo.

chatname es Anonymous; se excluyen campos del cliente, notas privadas y URL de pedidos. chatmessage es texto sin formato con textonly: true; subtitle contiene hasta tres títulos públicos de productos. meta.commerce contiene orderTotal y currency en la moneda de la tienda, más quantity cuando se conoce un recuento completo válido. No se establecen el destinatario ni la finalidad física/digital. Sin hasDonation o donoValue está establecido. id es un hash opaco estable asociado a tienda/pedido con prefijo de Shopify; no es un identificador de pedido original.

Las compras usan las rutas existentes de actividad, la categoría Compra de multi-alerts y Event Flow. La promoción de productos usa el existente meta.monetization.commerce catálogo. Importar un producto o establecer su etiqueta promocional en Regalo no genera un evento de compra o regalo. Configuración y límites de entrega de Shopify.

Regalos y comercio

Usa event: "gift" para un regalo, giftcontribution para apoyo pagado destinado a un regalo, giftfunded para completar la financiación, y purchase para una venta de producto. Estos nombres son independientes del proveedor y de si el artículo es físico o digital. Reserva el heredado giftpurchase evento para membresías regaladas; Throne usaba antes ese nombre incorrectamente y ahora emite gift. Los productores de membresías existentes no cambian. Los filtros personalizados de nombres de eventos de Throne deben cambiar a gift; los filtros de donaciones no necesitan cambios.

hasDonation sigue siendo la señal de compatibilidad para apoyo pagado, con donoValue que contiene su valor en USD proporcionado o estimado. Los regalos y aportaciones conservan esos campos. La financiación completada omite ambos para evitar contar aportaciones dos veces. Las ventas normales de productos los omiten por defecto, conservando el contrato de eBay. No deduzcas intención de regalo de una tienda, URL de lista de deseos o artículo físico: una compra para el comprador u otro destinatario sigue siendo una venta salvo que la fuente identifique explícitamente un regalo para el creador.

Campo compartido opcional meta.commerce los campos son recipient (creador, comprador, otro), itemType (físico, digital, servicio), quantity (recuento positivo de artículos), currency (moneda ISO), goalAmount (objetivo de financiación en unidades monetarias principales, nunca ingresos nuevos), y orderTotal (total conocido del pedido pagado en unidades monetarias principales; comercio, no ingresos por donaciones). Omite los detalles desconocidos. Mantén los nombres de artículos en subtitle, imágenes en contentimg, y texto del colaborador en chatmessage. Los metadatos existentes del proveedor siguen disponibles. Throne proporciona destinatario y moneda, además de goalAmount al completarse; eBay proporciona cantidad. Ninguno deduce el tipo de artículo ni expone datos privados del destinatario.

El feed de actividad muestra estos eventos incluso sin texto del colaborador. Multi-alerts usa la presentación de donaciones para regalos y aportaciones, incluido un aviso distinto de Regalo totalmente financiado sin valor monetario. Las compras tienen una categoría Compra independiente, habilitada por defecto, con purchasestyle, purchasesound, purchaseaccent, y disablepurchases controles de URL. Las alertas de compra no cambian los totales de donaciones.

Event Flow ofrece estos nombres en los disparadores Tipo de evento y Otro evento. Los disparadores de Donación siguen inspeccionando hasDonation; los disparadores de Gift Sub conservan la semántica de membresía. Compare Property acepta rutas anidadas como meta.commerce.recipient. Las plantillas de acciones aceptan {meta.commerce.quantity} y {meta.commerce.currency}, junto con los existentes {donation}, {subtitle}, y {meta}. Las rutas anidadas distinguen mayúsculas y minúsculas, los valores ausentes se muestran vacíos y está prohibido recorrer prototipos.

Webhooks de comercio para creadores y superposiciones promocionales

Los pagos públicos Donation de Ko-fi conservan hasDonation y obtienen el valor en USD donoValue. Los pagos de suscripción usan new_subscriber o resub, con el nivel en membership. Shop Order y Commission usan purchase sin valores de donación. Los eventos privados de Ko-fi siguen excluidos. El JSON codificado como formulario se decodifica una vez; los nombres y mensajes son texto sin formato.

Buy Me a Coffee donation.created conserva el apoyo monetario; extra_purchase.created y commission_order.created se convierten en purchase. wishlist_payment.created se convierte en giftcontribution usando solo ese importe de pago; meta.commerce.completed registra el indicador de finalización del proveedor sin emitir otra fila monetaria. membership.started se convierte en new_subscriber con el nivel en membership, sin seguir usando incorrectamente hasDonation para un nombre de nivel. Un importe de inicio de suscripción no se trata por sí solo como un cobro pagado. Los eventos de prueba, reembolso, fallo y actualización/ciclo de vida no compatibles no generan alertas de pago. Se omiten las notas ocultas del colaborador.

Fourthwall admite ORDER_PLACED (purchase), GIFT_PURCHASE (gift, destinatario otro), DONATION (fila normal de donación) y SUBSCRIPTION_PURCHASED (new_subscriber). Los totales de pedidos existentes conservan hasDonation por compatibilidad con versiones anteriores, marcado meta.commerce.legacyDonationValue: true; esta es una excepción explícita a los valores predeterminados de nuevas ventas de productos. Los pedidos con tarjetas de regalo aplicadas emiten una alerta de compra sin valor de donación: no puede deducirse con fiabilidad el nuevo cobro a partir del total del pedido y la compra del regalo ya se contó. Los nombres de facturación y correos electrónicos no se usan como identidad pública. Los eventos de prueba del panel y las actualizaciones de pedidos no generan alertas de pago.

Estos adaptadores conservan el reenvío, las acciones de bot, Event Flow y el enrutamiento de destinos existentes, con meta.webhookId deduplicación. Exponen nombres públicos, mensajes de texto sin formato, nombres conocidos de artículos en subtitle, y la moneda ISO meta.commerce.currency junto con los valores numéricos de donación cuando corresponda. No añaden contabilidad de reembolsos ni autenticación nueva del receptor; usa la ruta de webhook configurada del proveedor.

meta.monetization.commerce en monetization_update contiene enabled, qr, position, display (first/cycle), seconds y una matriz pública items. Cada artículo tiene name, url, image, amount opcional (null si se desconoce), currency y purpose (shop/gift/support/membership). Son detalles promocionales introducidos por el anfitrión, no pruebas de pago. Añadir o editar artículos no emite eventos de donación o compra. La superposición genérica usa mode=commerce; view=both|showcase|card|alerts separa la promoción de la actividad. Los parámetros opcionales de URL style, scale, cardevery, cardfor y onlytype controlan la presentación. Los modos existentes de proveedores también aceptan controles de vista y programación. Consulta la guía de configuración.

Eventos de regalos de Throne

La integración opcional de Monetización reenvía eventos firmados de Throne con platform y type establecido en throne. Los tres usan un identificador estable de entrega id, texto sin formato chatname, chatmessage con textonly: true, nombre del artículo en subtitle, y una miniatura HTTPS opcional en contentimg.

eventoSignificadoImporte de donación / rango
giftUn regalo compradohasDonation y el valor en USD donoValue; +1 al rango de regalos
giftcontributionUna aportación para un regaloSolo el importe de aportación; sin aumento de rango
giftfundedUn regalo financiado colectivamente completadoNo hasDonation o donoValue, evitando contar dos veces las aportaciones anteriores; +1 al rango de regalos

meta.throne contiene itemName, creator (nombre de usuario público), completed, currency y en unidades monetarias principales amount. Para giftfunded, el importe describe el objetivo, no ingresos nuevos. Los remitentes anónimos siguen siendo Anonymous; los regalos comunitarios completados usan Community. Nunca se reenvían campos privados de pago y envío.

monetization_update las instantáneas también contienen meta.monetization.throne: enabled, username, url, qr, position, rank, y gifts. Estas instantáneas no contienen URL de webhook ni credenciales de escucha.

Comandos de voz del anfitrión (vista previa de escritorio)

El nodo de Event Flow Cuando digo... el disparador recibe comandos de confianza del micrófono local de SSApp. Su contexto interno de acción usa chatname: "Host", type: "hostvoice", la frase reconocida en chatmessage, y textonly: true. No es un evento de plataforma entrante ni un nuevo transporte de chat. Enviar estos campos por el chat no puede activar un disparador de voz.

Requiere una versión de escritorio actualizada, iniciar explícitamente el micrófono y habilitar las acciones después del modo Prueba. Consulta la configuración de vista previa y estado de validación.

Controles de visualización de productos

Existente monetization_update las instantáneas pueden incluir meta.monetization.commerce.live: null para la programación guardada, o {mode: "show" | "hide", url?: "https://...", until: 0 | epochMilliseconds}. Mostrar busca la URL exacta del producto guardado; si falta el producto, no muestra tarjeta. Un until positivo caduca y vuelve a la programación guardada; cero dura hasta que se cambia o se reinicia SSN. Ocultar suprime las promociones, no las alertas de actividad pagada.

commerce.viewerURL es la URL publicada de la tienda de solo lectura, o una cadena vacía. Cuando existe, los códigos QR promocionales enlazan allí. Nunca contiene la sesión de SSN ni la clave de publicación. Los productos permanecen en commerce.items. Los controles de visualización, las importaciones y la publicación no emiten eventos de donación/compra. Consulta Controles de productos para Event Flow y uso de API remota.

El nodo de Event Flow commerceControl la acción espera la respuesta directa/de Chrome (hasta ocho segundos). En datos normales de eventos conserva el evento y añade meta.commerceControlResult: {success: true, commerce: controlState} o {success: false, error: "..."}. Para un valor existente numérico, matriz u otro tipo no objeto de meta, los metadatos no cambian y el diagnóstico se devuelve como commerceControlResult en el resultado de la acción. Los controles fallidos detienen las acciones posteriores de esa cadena sin suprimir el evento de pago original. Un tiempo de espera agotado no demuestra que el control no se aplicó; revisa el estado antes de reintentar un comando relativo como Siguiente. El éxito confirma el estado local seleccionado/oculto/programado, nunca la visibilidad en OBS ni la sincronización de la página pública.

Flujos con nombre de Stream Deck / API

El disparador de flujo con nombre crea un mensaje interno de Event Flow con type: "api", event: "workflow_trigger", chatname: "Stream Deck / API", vacío chatmessage, y textonly: true. Su meta.workflow el objeto contiene el nombre del disparador y un JSON proporcionado por quien llama data objeto. Lee valores mediante plantillas como {meta.workflow.data.minutes}. Solo se evalúan los flujos guardados y habilitados que coincidan explícitamente con ese disparador. No es un evento entrante de espectador/chat y no se emite como chat; copiar estos campos al chat no activa el disparador con nombre.

Piloto de público de NinjaChatter

El conector experimental de extensión emparejada envía filas solo para visualización con type: socialstreamchat, platform: ninjachatter, y textonly: true. meta.ninjachatter contiene origin: audience, el descriptivo provider, y el público room ID. Estas filas omiten respuestas de plataforma, bots, disparadores de Event Flow y puntos. Que se muestre un proveedor no implica autorización. Las capturas heredadas de NinjaChatter incluyen meta.ninjachatter.room para suprimir duplicados de cada sala.

Cheer usa una ruta independiente autenticada de solicitud y resultado, nunca un comando especial de chat. La configuración fija emite el comando existente de la superposición Actions show_text mensaje durante tres segundos. Recibirlo significa aceptación del transporte, no visualización verificada en OBS. Ningún dato del público puede seleccionar acciones arbitrarias. El piloto está deshabilitado por defecto en NinjaChatter; Electron conserva su relé existente hasta que se valide el nuevo límite de emparejamiento privado.

Tableros de plazas comerciales y ventas recientes

El existente monetization_update evento (type/platform: socialstream) también incluye meta.monetization.boards. Su board contiene title, style (plazas/equipos), columns (1–20), visible, y hasta 120 spots. Cada plaza tiene una cadena id, texto sin formato label, status (disponible/reservada/revelada) y result (texto sin formato, vacío hasta revelarse). Las reservas y revelaciones son estados de visualización introducidos por el anfitrión, no pruebas de compra ni asignaciones aleatorias.

boards.sales contiene hasta 100 registros recientes: id, title, opcional amount (null si se desconoce), currency, quantity, source, y at (milisegundos Unix al registrarse). automatic activa la recopilación, salesVisible controla la visualización y revision aumenta con los cambios. La recopilación automática solo acepta purchase eventos de Shopify, vendedor de eBay, Fourthwall, Ko-fi y Buy Me a Coffee; se excluyen eventos privados/de prueba. No trata los metadatos de subastas, propinas, regalos ni reservas de plazas como compras. Los registros automáticos no sustituyen el precio de un artículo por totales de pedidos, precios de anuncios ni importes de donación. Los registros manuales usan source: "Host confirmed".

El estado persiste en el almacenamiento privado de monetización de esta instalación; las instantáneas públicas excluyen ID de deduplicación de entregas, identidad del comprador y secretos. Las ventas mostradas explícitamente conservan sus ID de evento para eliminarlas. Los reembolsos requieren que el anfitrión las elimine. Los ID de compras duplicadas se recuerdan aparte (hasta 2000), incluso tras borrar el historial visible. El existente getCommerceState la respuesta incluye commerce.boards; commerceControl acepta los comandos de tablero/ventas documentados en la guía del tablero. Las ediciones manuales emiten el estado actualizado, pero nunca crean eventos de compra, totales de donaciones ni recompensas de pago. Las superposiciones se ocultan si no reciben la instantánea del anfitrión durante 35 segundos.

Añadidos al flujo de trabajo de vendedores: commerce.boards.board.id identifica una generación del tablero. Un valor manual saleAdd puede proporcionar boardId y spotId para registrar la venta y reservar esa plaza de forma atómica; se rechazan las ventas vinculadas duplicadas que sigan en el historial reciente. saleRemove con reopenSpot: true libera esa plaza solo si la generación del tablero sigue coincidiendo. Las entradas públicas de ventas omiten estos campos de vinculación del operador. Un campo opcional platform en una venta manual conserva su fuente para el filtrado, mientras que source: "Host confirmed" identifica el método de confirmación. amount es el total de la entrada, incluido su quantity. El campo del adaptador de pedidos pagados de eBay meta.ebayPurchase.quantity se conserva.

salesSettings.auctionSource activa la ayuda de artículos de Whatnot o eBay Live. El campo de la respuesta de control commerce.auction contiene solo source, title, priceText, status y at del último evento capturado auction_update, o null. Caduca a los cinco minutos y se borra al cambiar de fuente, recibir una instantánea inactiva o reiniciar. La ayuda es solo para operadores: no se guarda ni se incluye en emisiones al público; se descarta la identidad del pujador/ganador. Los scripts de fuentes y los datos de eventos de subasta no cambian. Copiar un borrador no confirma el pago ni crea una venta.