Referência de eventos ao vivo

Esta página documenta os payloads canônicos de eventos emitidos pelo Social Stream Ninja para as principais plataformas. Use como referência compartilhada ao conectar novas fontes, resolver problemas de integrações ou alinhar rótulos da interface. Para uma matriz menor voltada a consumidores, veja Compatibilidade de eventos e alertas.

Importante: A disponibilidade de eventos depende da fonte, das permissões e das configurações de captura. Para ocultar linhas marcadas como evento no dock ou nas sobreposições de destaque, adicione &hideevents ou &hideallevents. Para ocultar eventos selecionados, use &filterevents=subscription_gift,new_follower,gifted. Esses filtros também podem ocultar linhas pagas que contêm um event; linhas comuns de doação sem marcador de evento não correspondem a filtros de eventos. Outros filtros de mensagem continuam valendo.
Escolha o método de captura: Para YouTube, Twitch e Kick, Modo WebSocket geralmente oferece cobertura de eventos mais ampla. A captura DOM Standard lê as linhas e os cartões realmente renderizados na página. Super Chats, Super Stickers e presentes de Joias do YouTube têm caminhos de captura nos dois modos; outros eventos de presentes, gorjetas e membros variam conforme a fonte. Veja as tabelas de plataformas para os caminhos suportados e configurações necessárias.
Criando automações? Confira o Guia do Event Flow para aprender a usar esses payloads de eventos em gatilhos, alertas e fluxos personalizados. O guia inclui um Referência de variáveis de modelos para formatação de texto.
Formato do payload: Linhas de chat no estilo doação devem usar hasDonation e opcional donoValue. Não defina event: "donation" apenas porque uma linha normal de chat/gorjeta tem valor; use nomes específicos de evento somente para ações reais da plataforma ou tipos de itens pagos, como superchat, supersticker, gift, ou jeweldonation. Use meta somente para dados estruturados adicionais que os consumidores realmente precisam e que os campos existentes ainda não cobrem.

Disponibilidade rápida de recursos

Use esta tabela para ver quais tipos de alerta cada método de captura fornece atualmente. Notas detalhadas de payload aparecem abaixo.

A Caixa de alertas Multi-Stream dedicada agrupa eventos ao vivo em seis categorias principais: Follow, Subscription/Member, Donation, Bits/Cheers, Raid/Host, e Purchase, além de duas categorias opcionais (Auction e Hype Train) ativadas por parâmetros de URL. Deriva essas categorias dos campos existentes event, membership, subtitle, hasDonation, e meta documentados aqui; não é necessário um formato separado de payload.

Fonte Novos inscritos / membros Novos seguidores Doações Contagens e extras
YouTube (ponte Data API) Entradas de membros, renovações, presentes Alertas individuais de inscritos* + totais Super Chats e Super Stickers Totais de espectadores, inscritos e visualizações (consulta periódica)
Twitch – Captura DOM Linhas de pacotes de presentes e avisos de destinatários - Bits identificados por hasDonation Contagem de espectadores, cartões de recompensas e cartões de destaques da comunidade
Twitch – EventSub/WebSocket Inscrições, renovações e presentes instantâneos Novos seguidores instantâneos + total de seguidores Cheers, Power-ups e resgates de Pontos do Canal Totais de espectadores/inscritos/seguidores, status da transmissão, avisos de anúncios
TikTok Live - Cartões de seguidores (quando o TikTok os mostra) Presentes convertidos em totais de moedas Contagem de espectadores, alertas de entrada e tempestades de curtidas
YouNow - Atividades de fãs e do público - Contagem de espectadores do painel de público ao vivo
Favorited Studio - - - Contagem de espectadores da aba de espectadores ao vivo
Whatnot - - - Contagem de espectadores, alertas de entrada, metadados de leilão ao vivo, produtos e retratos de sorteios
eBay Live - - - Contagem de espectadores, contagem de seguidores, retratos de cartões de eventos ao vivo, metadados do rodapé do leilão (quando disponibilizados), corações de reação e metadados de eventos futuros
Caixa de alertas do Streamlabs Inscrições, presentes, patrocinadores, seguidores Cheer/bits, doações (com moeda) Cheer/bits, doações (hasDonation) Enquanto uma caixa de alertas está aberta; também disponível por sources/websocket/streamlabs.html token de socket
OBS Flow Actions - - - Eventos de saída, cena, buffer de replay e fim de mídia do OBS para o Event Flow quando actions.html está conectado ao OBS WebSocket
Kick – DOM - - - Contagem de espectadores e avisos básicos de sistema de recompensas/presentes; use a ponte Kick para alertas mais completos
Kick – WebSocket/Ponte Novas inscrições, renovações e presentes Alertas de seguidores + total de seguidores Eventos de apoio/gorjeta (valor + moeda) Status da transmissão, resgates de recompensas e metadados de perfil
Facebook Live - - Estrelas quando visíveis no DOM Linhas de chat, Estrelas e consultas de contagem de espectadores
Rumble – Captura DOM - - Preços visíveis de Rant Chat, raids recebidas e consultas de contagem de espectadores
Rumble – WebSocket/URL da API Novas inscrições e inscrições presenteadas Alertas de seguidores + total de seguidores Rants/gorjetas (valor + moeda) Totais de espectadores, totais de inscritos, status ao vivo e feed de chat
Streamplace - - - Contagem de espectadores e nomes, cores, distintivos, respostas e links do chat
WorldsWave - - Rótulos de doação quando presentes Chat ao vivo renderizado e atualizações opcionais da contagem de espectadores
CHZZK - - Linhas visíveis de doação de queijo Linhas de chat, imagens de distintivos, emotes e consultas de contagem de espectadores
BEAM - - - Linhas de chat e consultas de contagem de espectadores quando a página somente de chat disponibiliza um contador
Seal Team Sloth - - - Linhas renderizadas de chat em janela separada e viewer_update consulta quando contagens de espectadores estão ativadas
Castyr - - - Linhas renderizadas de chat em janela separada e atualizações opcionais da contagem de espectadores
RPLAY - - - Com login /live/chat/box/ janela separada: type: "rplay" chat, avatares, imagens de distintivos de nível e emotes. Gorjetas em moedas mantêm seu valor/unidade em hasDonation para conversão compartilhada em USD, sem evento de doação. O recurso opcional viewer_update consultas usam inteiro meta do endpoint público de transmissão do RPLAY. Linhas repassadas do Twitch são excluídas.
FLEX TV - - - Linhas renderizadas de chat com nomes, cores dos autores, imagens de distintivos e metadados de membros

*Alertas de inscritos do YouTube são consultados periodicamente e podem atrasar ou estar incompletos. A referência da API não promete uma janela fixa de entrega de quatro horas. Veja a limites oficiais da API de inscrições.

Visão geral dos campos

data aqui significa o objeto de mensagem, não um wrapper extra para adicionar. Linhas de chat e eventos apenas de metadados têm formatos diferentes: contadores e retratos de status podem omitir chatname/chatmessage. Nas tabelas de plataformas, mensagem descreve uma linha comum de chat, não um literal event: "message".

Campo Formato Uso
data.type string Identificador de fonte usado por sobreposições, filtros e Event Flow. O Instagram mantém o chat ao vivo como instagramlive e comentários fora de lives como instagram. Veja o Guia de tipos de fontes para variantes, fontes genéricas e encaminhamento de saída.
data.chatname string Nome de exibição fornecido pela fonte, usado no processamento de mensagens e nas saídas que não são sobreposições. Um alias configurado de nome de usuário só pode substituir este valor em cópias de payloads de transporte do dock e sobreposições.
data.username string Nome de usuário da fonte, quando disponível. Um payload do dock ou sobreposição com alias pode adicionar este campo para preservar o original chatname para ações de usuário; a mensagem canônica permanece inalterada.
data.userid string Identificador de usuário específico da plataforma. Ações de usuário preferem este valor a username e chatname.
data.platformstring (opcional)Algumas integrações incluem isso junto com type. Muitos adaptadores de fontes o omitem; use type para encaminhamento por fonte.
data.idstring | número (opcional)Identificador de mensagem ou evento. O significado depende da fonte e do transporte; não presuma que seja sempre um ID nativo da plataforma para moderação. Use meta.messageId quando o adaptador o disponibiliza para sincronização de exclusão.
data.donoValuenúmero (opcional)Equivalente numérico em USD fornecido pela fonte, incluindo estimativas. Um valor válido (incluindo zero) substitui a conversão de currency.js. Sem ele, consumidores estimam USD a partir de hasDonation e do contexto da fonte. Valores e unidades originais permanecem em hasDonation e nos metadados existentes do provedor.
data.chatbadgesarray | string (opcional)URLs de imagens ou objetos de distintivos (type: "img" com src, type: "svg" com html, ou type: "text" com text). O relay retém o rótulo literal de um distintivo de texto no campo opcional rawText e produz valores escapados em text para sobreposições antigas. Em repasses posteriores, regenere text de rawText; não escape text novamente. Os renderizadores atuais exibem rawText literalmente quando presente e mantenha o tratamento legado de texto codificado caso contrário. Este é um campo de representação, não permissão para renderizar HTML. Fontes antigas podem enviar uma única string HTML em vez de um array. Sobreposições que renderizam distintivos aceitam ambos os formatos e higienizam localmente o HTML e as URLs dos distintivos, inclusive quando o remetente é uma extensão antiga. Distintivos inválidos não devem impedir a exibição da mensagem de chat ou de membro.
data.event string | booleano Identificador de atividade do sistema (por exemplo viewer_update, subscription_gift, giftpurchase). Chats normais devem deixar isso vazio/false para que as sobreposições distingam avisos de sistema de texto de conversa.
data.chatmessage string Corpo da mensagem. Pode conter HTML higienizado/renderizável somente quando data.textonly é false.
data.textonly booleano Aplica-se somente a data.chatmessage. true significa renderizar chatmessage como texto simples, preservando tags literais e textos que parecem entidades; não decodifique, higienize como HTML nem adicione tags de formatação a esse corpo. Aplique o estilo de evento ao elemento exibido. false significa chatmessage pode conter HTML higienizado/renderizável; mensagens antigas sem o indicador mantêm esse comportamento de HTML. Outros campos normais são texto simples, exceto campos de mídia, como chatimg e contentimg. Exiba campos simples com textContent, ou escape-os uma única vez ao montar um modelo HTML; não remova nem decodifique seu conteúdo repetidamente.
data.contentimg string (opcional) Imagem de conteúdo ou URL de mídia compatível. Na extensão e no aplicativo para desktop, a opção allowExternalGifs preenche um campo vazio com o primeiro link HTTP(S) direto de GIF no texto da mensagem ou em um link HTML. O caminho da URL precisa terminar em .gif (sem diferenciar maiúsculas/minúsculas); parâmetros de consulta e fragmentos são preservados. Não exige chave de API, preserva chatmessage e anexos existentes, e respeita removeContentImage. O campo opcional hideExternalGifUrl adiciona meta.hideExternalGifUrl: true; o dock e a sobreposição de destaque ocultam o link correspondente do GIF apenas depois que sua imagem carrega, preservando o texto ao redor e o payload original. Imagens que falham ou excedem o tempo recolhem seu contêiner de anexo e deixam o link visível. A sobreposição somente de GIF tenta exibir a imagem diretamente se a obtenção dos bytes falhar, usando o tempo de exibição configurado quando o tempo da animação não estiver disponível; carregamentos com falha ou travados avançam a fila. Isso não adiciona um event ou altere a fonte type. Imagens externas não passam por filtragem de conteúdo e podem não carregar se o servidor bloquear a incorporação.
data.membership string Estado legível de membro, como MEMBERSHIP, new_sponsor, gift_recipient. As interfaces o usam para distintivos, filtros e anúncios.
data.subtitle string Descrição complementar (tempo como membro, upgrades de nível, presenteado por…). Mantenha curta e somente texto para que as sobreposições possam colocá-la abaixo do nome de exibição.
data.hasDonation string Valor monetário ou de presente virtual ($5.00, 500 bits, 300 coins). Preencha mesmo quando data.event fica vazio para que sobreposições de doação possam detectá-lo.
data.meta número | objeto | string (legado) Use inteiros simples para contadores únicos (espectadores, seguidores, inscritos) e objetos para contexto mais rico. Alguns eventos antigos, como o Twitch DOM community_highlight, contêm uma string. Confira o formato específico do evento antes de ler propriedades de objetos; novos detalhes estruturados devem ficar em um objeto.
data.firsttime booleano Defina como true quando a detecção de primeira mensagem e o banco de dados local estão ativados e esta é a primeira mensagem de chat armazenada para esse usuário/fonte. O dock usa isso para destaque de primeira mensagem e filtros de bipe de primeira mensagem; a configuração opcional de distintivo de primeira mensagem adiciona um distintivo de folha no início de chatbadges.
data.lastactivity número Horário Unix em segundos da atividade anterior armazenada desse usuário no chat, quando a detecção de primeira mensagem e o banco de dados local estão ativados. Omitido para usuários totalmente novos.

O transporte de controle da sobreposição é separado do chat/eventos capturados. Receptores atualizados usam um ssnControl envelope contendo um identificador de entrega id, destacar target, canal opcional de resposta e ID do cliente do retrato de estado. Os corpos existentes dos recursos permanecem intactos. Controles públicos de recursos usam o canal 7; Actions mantém o canal 6. O estado de Enquete e Mapa inclui um campo do anfitrião epoch, revision e reset marcador; Timer, Ticker e Spotify usam ssnState com uma época e revisão. Esses marcadores descrevem o estado do anfitrião, não histórico restaurado de votos/chat. Fontes não devem adicionar campos de envelope de controle às mensagens capturadas. Uma confirmação de recebimento não comprova conclusão da ação nem visibilidade no OBS. Veja o status da migração para recursos suportados, negociação de respostas e limites de reconexão.

Phrase Guess usa o evento nativo {response: text} para respostas de chat server2 e {action: "phraseGuessResponse", value: {type: "bot", chatname: name, chatmessage: text}} para anúncios somente no dock. O anfitrião precisa permitir mensagens server3 recebidas; desativar o controle do anfitrião ainda bloqueia essas solicitações. Anúncios do dock são encaminhados como linhas comuns de chat de bot com textonly: true, sem enviá-los aos campos de chat das fontes de captura. O modo de API legado mantém seu formato de comando existente.

Convenções de meta

Para manter painéis e automações alinhados, siga estas convenções ao ampliar data.meta:

  • viewer_update, follower_update, subscriber_update, e likes_update usam um inteiro simples meta valor. likes_update é um total oficial da plataforma: consumidores devem definir o valor exibido em vez de somá-lo. O script de segundo plano agrega contagens de espectadores em viewer_updates com um objeto cujas chaves são data.type.
  • giveaway_state é um retrato apenas de metadados gerado pelo anfitrião para exibições gerenciadas. meta.giveaway versão 2 inclui giveawayId, persistente roundId/epoch, aumentando generation entre novas rodadas, revision dentro de uma rodada, status, open, draw, keyword, count, ticketCount, congelado config, até 120 entradas de prévia entrants, e os 20 últimos winners. As entradas disponibilizam id, name, platform e tickets; vencedores adicionam drawnAt e concedido points. Coin Flip Pot adiciona outcome; Number Hunt adiciona number com campos públicos low, high e recentes guesses, nunca o segredo. Consumidores filtram por ID de sorteio e descartam gerações/revisões antigas. Estas são amostras de exibição, não um registro completo de bilhetes nem uma instrução de pagamento. Chaves de carteiras, saldos e reservas ficam fora dos retratos enviados ao público. O anfitrião publica no giveaway rótulo P2P e feeds WebSocket de sobreposição ativados; isso não implica visibilidade no OBS. Guia.
  • meta.giveawayControlResult contém o resultado de uma ação de sorteio do Event Flow (ok, opcional error, giveaway ou simulated). meta.giveawayHandled lista IDs de sorteios já tratados por uma ação de entrada/compra do fluxo para que o comando automático de chat não possa cobrá-los novamente. O editor adiciona meta.economyTest para ações simuladas de sorteio; não é um evento da plataforma de origem nem uma credencial de autorização.
  • video_stats usa um objeto estruturado meta para integridade de codificador/servidor externo, incluindo provider, label, online, bitrateKbps, rttMs, bufferMs, contadores de perda/descarte de pacotes e detalhes opcionais de codec.
  • Eventos no estilo doação podem incluir um objeto descritivo: por exemplo { amount, currency, supporter } para Kick, { bits } para cheers do Twitch. Eventos de membros têm seus próprios metadados específicos da fonte; não são automaticamente doações monetárias.
  • Mensagens normalizadas de webhooks de Stripe, Ko-fi, Buy Me a Coffee e Fourthwall incluem identificadores restritos ao provedor meta.webhookId, copiado do identificador estável de evento do provedor, para que páginas consumidoras possam suprimir duplicatas de novas tentativas e transportes mistos.
  • Raids do Twitch transmitem { fromId, fromLogin, viewers }. Outras fontes diferem: Whatnot usa meta.numRaiders, enquanto SharePlay usa opcionalmente meta.fromLogin/meta.viewers. Confira a linha específica da fonte antes de ler metadados de raid.
  • Resgates de recompensas do Twitch EventSub disponibilizam meta.rewardId, cost, rewardTitle, redemptionId, e um campo legado alias junto com a mensagem preparada. Cartões de recompensa do DOM e outras fontes podem fornecer menos campos ou campos diferentes.
  • user_banned é apenas de metadados para widgets de moderação. Omite intencionalmente chatname e chatmessage; use meta.username, meta.displayName, meta.avatarUrl, e meta.profileUrl.
  • Transportes de chat que suportam sincronização de exclusão por controle de fonte devem disponibilizar o identificador nativo da plataforma como meta.messageId em vez de depender do campo interno do dock data-mid valor.
  • Exclusões de fontes usam {delete: {type, id}} para um ID conhecido de mensagem do dock, ou {delete: {type, meta: {messageId}}} para um ID nativo de mensagem da plataforma. Um ID conhecido remove apenas mensagens correspondentes. Quando apenas o usuário de destino é conhecido, envie {delete: {type, userid}} ou {delete: {type, chatname}} para remover as mensagens desse usuário nessa plataforma. Nunca substitua a identidade do usuário de destino pela do moderador. Exclusões recebidas não exigem a configuração opcional de sincronização de moderação do dock para a plataforma.
  • Metadados de identidade de fontes do SSApp podem adicionar meta.ssnAccountRole, meta.ssnSourceId, e meta.ssnSession quando uma fonte recebe uma função de conta diferente da normal.
  • O Event Flow pode solicitar um destaque definindo meta.featured = true no payload de chat, o que destaca automaticamente a mensagem no dock/sobreposições de destaque.
  • AI Event Overlay: a ação showAiEventOverlay envia uma cópia da mensagem que a acionou para o rótulo aievent-CONFIGURATION_ID, adicionando meta.aiEventOverlay: {profile: "CONFIGURATION_ID"}. Os campos existentes da mensagem e os metadados em forma de objeto são preservados; os metadados escalares são mantidos como meta.value. Trata-se de uma entrega direcionada, não de um novo evento da plataforma. A mensagem original não é modificada. Consulte o guia de configuração.
  • Opcional meta.aiEventOverlay.variation seleciona uma frase exata aprovada nas configurações salvas do overlay. O texto do espectador e os metadados preenchem os campos do modelo após a geração.
  • As solicitações de exibição do AI Event Overlay exigem um perfil e seu token privado de exibição. As configurações e chaves de API são gerenciadas apenas pelo popup local do SSN. As respostas usam {aiEventResponse: {target, value}} ou {aiEventResponse: {target, error}}. Os resultados gerados contêm template, duration, warnings, e URLs de dados de mídia opcionais em image/audio.
  • As recompensas de overlays de IA pagas com pontos usam aiEventPresentation (id, profile, expiresAt, result, message) e confirmam o recebimento com aiEventDelivered (ID de entrega). Os registros de cobrança e os valores de reembolso ficam no host.
  • O Event Flow pode solicitar fixação no dock definindo meta.pinned = true; opcional meta.pinnedTarget limita essa fixação a um dock com o correspondente label.
  • A impressão térmica do Event Flow registra seu resultado em meta.thermalPrintResult (success e opcional code/error), preservando o evento de chat e outros metadados. Para eventos com metadados numéricos ou que não sejam objetos, o diagnóstico fica no resultado da ação e o evento permanece inalterado.
  • Recompensas opcionais de figurinhas do SSN: event: "sticker" é enviado apenas para o stickers da sobreposição após um débito de pontos de fidelidade. Define platform e type para o campo da mensagem de origem type, e preserva chatname, com vazio chatmessage, textonly: true, e contentimg contendo um caminho relativo de imagem empacotada ou uma URL HTTPS de mídia aprovada pelo anfitrião. meta.sticker contém id, pack, name, cost, duration (segundos), motion, redemptionId, e expiresAt (milissegundos Unix). Esta é uma recompensa do SSN, não uma doação da plataforma nem um evento nativo de Pontos do Canal. Veja o galeria e guia de configuração.
  • O player de figurinhas retorna um pacote de controle {action: "stickerReceipt", meta: {sticker: {redemptionId, success}}} ao remetente quando a imagem carrega ou falha. Somente confirmações de um par conectado stickers resolve um resgate pendente. Entrega com falha ou não confirmada dispara um reembolso; este pacote de controle não é um evento de chat. Recomenda-se uma exibição ativa de figurinhas por sessão.
  • Comandos da sobreposição de palco de IA usam { action: "aiOverlay", target, meta } ou a reprodução do coapresentador controlada pelo dock usa { action: "cohostOverlay", target, meta }; mantenha todos os detalhes de comando, como command, text, emotion, avatar, e tts dentro de meta.
  • Se uma plataforma disponibilizar vários contadores juntos, prefira um objeto estruturado com chaves explícitas (meta.viewer_count, meta.follower_count) em vez de sobrecarregar strings.
  • Sobreposições de comércio devem usar objetos de retrato de estado em meta (por exemplo auction_update e commerce_update) e evite campos improvisados no nível superior.

Cobertura de plataformas

YouTube – Captura DOM Standard

Implementação: sources/youtube.js

  • Mantenha a aba do chat ao vivo aberta. A captura lê os cartões de membros e presentes renderizados nessa sessão; não exige que o espectador seja dono do canal ou moderador. O acesso da conta e a visualização de chat selecionada podem afetar quais linhas ficam visíveis.
  • Abrir a sobreposição de contagem de espectadores e atividade do chat com os espectadores exibidos solicita automaticamente as contagens de espectadores. As opções Mostrar contagem de espectadores e Acompanhar participantes ativos do chat também ativam a coleta de dados.
  • Para alertas de seguidores e eventos adicionais, ative o modo WebSocket nas configurações da extensão.
Evento Quando é disparado Notas do payload
sponsorship Cabeçalho de boas-vindas a membro sem texto explícito de chat (novos membros, chegada de pacotes presenteados), incluindo cartões estruturados de boas-vindas ou texto localizado “Bem-vindo a…”. membership preenchido com “MEMBERSHIP” traduzido; subtitle contém sequência/nível quando detectado; nameColor usa verde de membro quando permitido.
giftpurchase Banner de compra de pacote de presentes (ytd-sponsorships-live-chat-gift-purchase). membership torna-se gift_giver; subtitle contém a quantidade de presentes quando conhecida; sem hasDonation ou donoValue.
giftredemption Anúncio de resgate de presente para destinatários. membership torna-se “MEMBERSHIP”; subtitle inclui “Presenteado por …”.
resub Banners de upgrade que incluem “mudou para …”. subtitle captura o novo rótulo de nível; membership continua como “MEMBERSHIP”.
superchat, supersticker, jeweldonation Super Chats, Super Stickers, cartões de anúncio de doações e Presentes do YouTube com Joias (yt-gift-message-view-model). hasDonation contém o valor; event identifica o tipo de item pago do YouTube. Presentes do YouTube usam N Jewels quando presente, ou 1 YouTube Gift quando o YouTube oculta a contagem. Imagens de presentes usam contentimg, rótulos de presentes usam subtitle, e detalhes mínimos do presente são espelhados em meta.youtubeGift.
jeweldonation efeito de presente O YouTube exibe um presente animado de Joia sobre o chat ao vivo (ytls-gift-overlay-item-view-model). Enviado diretamente ao destino dedicado de GIF/mídia para que a animação seja reproduzida sem duplicar a linha normal do presente. contentimg contém o recurso animado e meta.youtubeGift.animationUrl/animationDescription preservam os detalhes do efeito.
reaction Uma reação de espectador aparece na fonte de emojis ao vivo do YouTube. Enviado diretamente ao destino dedicado de reações. O emoji anônimo e a URL da imagem são preservados em chatmessage/contentimg e em meta.reactionType/reactionImage. Variantes ao vivo conhecidas incluem ❤, 😄, 🎉, 😳 e 💯.
thankyou Mensagem alternativa quando existe um valor de doação, mas nenhum texto de chat foi fornecido. Mantém hasDonation e insere automaticamente “Obrigado pela sua doação!” para as sobreposições.
redirect Um banner de redirecionamento do YouTube aparece no chat ao vivo (o equivalente mais próximo a um aviso de raid). Captura somente DOM de yt-live-chat-banner-redirect-renderer. Define event como redirect e usa membership como rótulo para que as sobreposições o renderizem como outros avisos de sistema.
viewer_update Consulta a cada 30s ao endpoint de espectadores do Social Stream (recorre à captura da página em erros de cota). meta é a contagem inteira de espectadores ao vivo; contribui para o agregado viewer_updates no script de segundo plano.

Blocos de membros também definem membership para chat de moderadores/membros, enquanto subtitle contém contagens de meses ou nomes de níveis. sourceName/sourceImg são preenchidos quando getChannelInfo é bem-sucedido. O chat DOM Standard agora inclui meta.messageId quando o YouTube disponibiliza um ID nativo de mensagem de chat ao vivo, usado pelo dock para sincronização de exclusão.

YouTube – Captura WebSocket/Data API

Implementação: sources/websocket/youtube.html, auxiliares compartilhados em shared/

  • Usa por padrão os escopos OAuth youtube.readonly e youtube.channel-memberships.creator. Acesso opcional de escrita adiciona youtube.force-ssl para envio de chat, moderação, banimentos e edição de detalhes da transmissão; o Google pode apresentar isso como permissão ampla de gerenciamento do YouTube porque o YouTube não fornece um escopo de escrita exclusivo de chat.
  • Estatísticas do canal respeitam as opções de cada configuração (showsubscount, showviewercount).
  • A API não consegue fornecer imagens de distintivos personalizados; as alternativas usam os ícones de emoji indicados abaixo.
  • Quando a API informa explicitamente authorDetails.isChatModerator: true, payloads de chat, Super Chat, Super Sticker, Presente do YouTube e presente de membros incluem mod: true. O status de moderador não é inferido nem armazenado em cache entre eventos.
  • Alertas de novos inscritos usam o myRecentSubscribers API (consultada a cada 5 minutos). Nota: os resultados podem atrasar ou estar incompletos; apenas inscrições publicamente visíveis podem ser identificadas.
  • Banners de redirecionamento do YouTube não são disponibilizados pela Data API, portanto redirect continua disponível apenas pela captura DOM Standard.
Evento Quando é disparado Notas do payload
superchat Entradas de Super Chat do histórico da Data API ou de consultas periódicas da transmissão. hasDonation preserva o valor do site (moeda + valor); event é superchat. Versões antigas de WebSocket usavam event: "donation" para esta linha, então consumidores podem continuar aceitando isso como alias legado.
supersticker Super Stickers (apenas texto alternativo da mensagem, sem imagem da API). hasDonation contém o valor; chatmessage contém o texto decodificado da descrição.
jeweldonation YouTube giftEvent quando espectadores resgatam Joias por Presentes. hasDonation contém N Jewels, ou 1 YouTube Gift quando o YouTube oculta a contagem; contentimg usa a URL do recurso do presente quando disponibilizada; subtitle contém o rótulo do presente; meta.youtubeGift contém detalhes extras do presente.
sponsorship Novo membro entra por newSponsorEvent. membership torna-se new_sponsor ou new_member; meta inclui originalEventType, durações e informações de nível.
resub Renovações de membros ou upgrades de nível. membership torna-se renewed_member (renovações) ou upgraded_member (upgrades); subtitle mostra o nível.
giftpurchase Pacotes de presentes comprados pela API. membership definido como gift_giver; subtitle lista contagem/nível; sem hasDonation ou donoValue.
giftredemption Notificações de resgate de presentes. membership gift_recipient; os distintivos usam 🎁 por padrão; subtitle indica o nível presenteado.
membermilestone Mensagens de marcos (memberMonth ou displayMessage presente). membership member_milestone; subtitle resume meses + nível; meta captura o mapeamento bruto do marco.
viewer_update Estatísticas da transmissão (espectadores simultâneos) quando a comunicação de espectadores está ativada. meta é uma contagem inteira; espelha os scripts DOM para que consumidores possam combinar os dois fluxos. Um dock usando &showviewercount solicita coleta de contagem de espectadores por 70 minutos e renova a solicitação a cada hora sem alterar permanentemente a configuração global.
likes_update Consulta oficial de estatísticas de vídeo quando Enviar totais de curtidas da plataforma está ativado. meta é a contagem inteira atual de curtidas do vídeo. É emitida quando a contagem muda e periodicamente enquanto permanece igual para manter os consumidores atualizados. A opção global captureliketotals ativa isso; o legado captureyoutubelikes continua como alias de compatibilidade. Ativar a opção por dock do popup &showlikecount também ativa persistentemente essas configurações globais de captura, enquanto adicionar o parâmetro manualmente à URL controla apenas a renderização. Desativar a opção de exibição não desativa a coleta global.
subscriber_update Consulta de estatísticas do canal (inscritos) quando showsubscount não explicitamente desativado. meta é a contagem total de inscritos; a interface atualiza os contadores do painel.
view_update Consulta de estatísticas do canal (visualizações totais) quando showviewercount ou modo Hype está ativo. meta é a contagem inteira de visualizações.
live_chat_ended O chat ao vivo fica indisponível para a transmissão vinculada. meta.streamTitle preenchido quando os metadados da transmissão estavam em cache.
user_banned userBannedEvent da API de chat ao vivo ou do fluxo gRPC. Evento apenas de metadados para widgets de moderação. meta inclui nome de usuário/exibição, ID do canal, URL de avatar/perfil, moderador, duração do banimento/suspensão temporária e permanência.
new_follower Novo inscrito detectado por myRecentSubscribers API (consultada a cada 5 minutos). chatname é o nome do canal do inscrito; chatmessage fica vazio, a menos que mensagens de alerta de inscritos estejam ativadas na página da fonte do YouTube. meta inclui channelId, title, subscribedAt, e rajadas agrupadas adicionam grouped, count, others, e subscribers. Nota: os resultados podem atrasar ou estar incompletos; apenas inscrições publicamente visíveis podem ser identificadas.

Repasses de chat pela API usam meta.plainText para a mensagem em texto simples junto com o conteúdo rico de chatmessage conteúdo. É texto, não HTML, e ainda pode conter emoji Unicode. Distintivos de membros usam emoji como alternativa (⭐, 💝, 🏅, etc.) para manter consistência com a captura DOM. Payloads normais de chat também incluem meta.messageId para que ações de exclusão no dock possam voltar à API de moderação do YouTube.

Alertas de inscritos do YouTube (new_follower)

O Social Stream agora pode detectar novos inscritos do YouTube usando o myRecentSubscribers da API. Funciona de forma semelhante aos alertas de inscritos do Streamlabs.

Como funciona:

  • Consulta a API do YouTube a cada 5 minutos para inscritos recentes
  • Registra inscritos já vistos no localStorage para detectar novos
  • Emite new_follower com nome, avatar e ID de canal do inscrito
  • Mantém mensagens de alerta de inscritos desativadas por padrão; ativá-las usa a string de tradução atual para alert-just-subscribed
  • Agrupa por padrão rajadas de mais de três novos inscritos para que reconexões não sobrecarreguem sobreposições nem o Event Flow
  • Exige que o modo WebSocket esteja ativado nas configurações da extensão

Limitações (são restrições da API do YouTube, não do Social Stream):

  • Sem prazo garantido de entrega – O SSN consulta a cada cinco minutos, mas a API pode retornar resultados atrasados ou incompletos. Não dependa de uma janela fixa de quatro horas.
  • Somente inscrições públicas – Inscritos que definiram sua lista de inscrições como privada não disparam alertas. As inscrições são privadas por padrão no YouTube.
  • Somente o dono do canal – Você só pode receber alertas de inscritos de canais que possui e nos quais está autenticado.
  • Uso de cota da API – Cada consulta custa 1 unidade de API. Em intervalos de 5 minutos, isso usa aproximadamente 288 unidades por dia (da cota diária padrão de 10.000).

Gatilho do editor Event Flow: Use data.event === "new_follower" e data.type === "youtube"

YouTube WebSocket: referência rápida de eventos e membros

data.event data.membership Cenário
sponsorshipnew_sponsorNovo membro por newSponsorEvent
sponsorshipnew_memberNovo membro por processMembership
resubrenewed_memberRenovação de membro
resubupgraded_memberUpgrade de nível
giftpurchasegift_giverMembros presenteados ao canal
giftredemptiongift_recipientRecebeu uma assinatura de membro presenteada
membermilestonemember_milestoneMensagem de aniversário de membro
superchat-Super Chat
supersticker-Super Sticker
user_banned-Evento apenas de metadados de banimento/suspensão temporária
new_follower-Novo inscrito (consulta periódica; pode atrasar)

Twitch – Captura DOM Standard

Implementação: sources/twitch.js

  • Mantenha o chat do Twitch aberto. Avisos de membros e usuários são capturados quando o Twitch os renderiza; não são restritos a contas de donos do canal ou moderadores. A autenticação pode ser necessária para recursos específicos da conta.
  • Requisições de contagem de espectadores acessam https://api.socialstream.ninja/twitch/viewers a cada 30 segundos.
  • Para alertas de seguidores, raids e suporte completo a eventos, ative o modo WebSocket nas configurações da extensão.
  • Avisos de sequência de visualização compartilhados pelo espectador ficam desativados por padrão e exigem a opção Mostrar sequências de visualização do Twitch configuração.
  • A opção PluralMind pode substituir chatname, nameColor, e a parte encapsulada pelo proxy de chatmessage, e pode adicionar um distintivo de texto de pronome. username continua sendo o login do Twitch; exclusões relacionadas contêm delete.meta.pluralmind para que o dock use esse login estável.
Evento Quando é disparado Notas do payload
reward Cartões de resgate de Pontos do Canal (incluindo o contêiner de recompensas do 7TV). chatmessage contém o texto de resgate; membership inalterado.
giftpurchase Linhas de sistema, como “Usuário presenteando X inscrições no canal”. chatmessage é a linha de sistema, permitindo que sobreposições destaquem campanhas de presentes.
subscription_gift Avisos de inscrição presenteada (“Usuário presenteou uma inscrição para…”). Marca o evento para filtros de destaque; membership continua sendo o rótulo do distintivo do destinatário.
viewer_update Consulta a cada 30s ao proxy de espectadores do Social Stream (retorna 0 em caso de erro). meta contagem inteira de espectadores.
hype_train O destaque comunitário fixo do Twitch mostra um Trem do Hype ativo no chat em janela separada. Alternativa DOM apenas com metadados e meta.sourceMode definido como dom. Usa nível visível, cronômetro e meta.progressPercent quando o Twitch não disponibiliza totais de pontos do EventSub.
community_highlight Elementos dentro do widget “Destaque da comunidade” do Twitch. meta é o texto de destaque extraído para pontos de integração de automação.
knock Convites de colaboração do Stream Together exibidos acima do chat. chatmessage contém o texto do convite; chatname é derivado do usuário do alerta quando disponível.
watch_streak Aviso opcional de sequência de visualização compartilhado pelo espectador, renderizado no chat do Twitch. meta.streakCount contém a contagem visível quando detectada; meta.milestoneId usa o identificador do aviso DOM quando disponível.

Bits/Cheers preenchem hasDonation (por exemplo, “500 bits”), embora data.event continua vazio; use esse campo ao renderizar widgets de doação. Informações de sequência de inscrição aparecem em subtitle quando distintivos disponibilizam meses.

Twitch – EventSub/WebSocket

Implementação: sources/websocket/twitch.js com o núcleo compartilhado providers/twitch/chatClient.js

  • Escopos 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. Tokens do dono do canal liberam contagens de inscritos/seguidores.
  • Eventos entregues pelo EventSub, além de consultas Helix de totais de espectadores/seguidores/inscritos.
  • O modo WebSocket fornece em tempo real alertas de seguidores, eventos de inscrições, raids, cheers, Power-ups, resgates de Pontos do Canal e metadados de Trem do Hype.
  • Linhas de Chat compartilhado usam o IRC do Twitch source-room-id para preencher sourceName/sourceImg com o canal de origem quando diferente do canal conectado.
  • Avisos de sequência de visualização compartilhados pelo espectador ficam desativados por padrão e exigem a opção Mostrar sequências de visualização do Twitch configuração.
  • A opção PluralMind pode substituir chatname, nameColor, e a parte encapsulada pelo proxy de chatmessage, e pode adicionar um distintivo de texto de pronome. username e userid preservam a identidade do Twitch; exclusões relacionadas contêm delete.meta.pluralmind para que o dock use esses campos estáveis.
Evento Quando é disparado Notas do payload
cheer Notificações de cheer do EventSub channel.bits.use. hasDonation “N bits”; meta.bits numérico; chatmessage preserva a mensagem bruta; participantes identificados de cheers incluem chatimg.
powerup Notificações de Power-up integradas ou personalizadas do EventSub channel.bits.use. Payload somente de evento com um campo vazio chatmessage e nenhum hasDonation, portanto não cria uma linha normal de chat. meta.bits é numérico e meta.powerUp preserva o subtipo do Twitch, título/ID da recompensa, detalhes do efeito e texto fornecido da mensagem quando disponível.
new_subscriber channel.subscribe ou USERNOTICE com msg-id=sub. meta inclui { userId, tier, isGift }; o total de inscritos em cache aumenta quando disponível; totais de espectadores são consultados separadamente.
resub channel.subscription.message ou USERNOTICE msg-id=resub. meta contém sequência e meses acumulados; chatmessage inclui o texto da renovação de inscrição.
subscription_gift channel.subscription.gift ou USERNOTICE msg-id=subgift. meta disponibiliza o total presenteado e o nível; chatmessage resume a ação.
reward channel.channel_points_custom_reward_redemption.add. meta inclui ID, título, custo, prompt, entrada do usuário, ID/status do resgate e alias legado da recompensa. Sem campo de nível superior reward é emitido por este manipulador do EventSub. Consumidores antigos ainda podem mostrar channel_points como um alias obsoleto.
raid EventSub channel.raid ou USERNOTICE msg-id=raid. meta = { fromId, fromLogin, viewers }.
watch_streak USERNOTICE opcional de IRC do Twitch com msg-id=viewermilestone e msg-param-category=watch-streak. Inclui o espectador em chatname, o texto do aviso do Twitch em chatmessage, e meta.streakCount/meta.milestoneId. Outros tipos genéricos de USERNOTICE continuam sendo ignorados.
new_follower channel.follow Notificações do EventSub. Incrementa automaticamente follower_update; meta registra { userId, followedAt }.
viewer_update Helix streams consulta a cada 30 segundos. meta contagem inteira de espectadores; suprimida, a menos que as estatísticas de espectadores estejam ativadas nas configurações.
follower_update Total de seguidores do Helix, acionado após eventos de seguidores ou consulta periódica. meta contagem inteira de seguidores.
subscriber_update Total de inscritos do Helix (exige token do dono do canal com escopo de inscrições). meta contagem inteira de inscritos.
stream_online / stream_offline EventSub stream.online/stream.offline. meta.startedAt presente para eventos online; offline usa objeto vazio.
ad_break / ad_request / ad_schedule Respostas da API do gerenciador de anúncios (channel.ad_break.begin, manual POST channels/ads, GET channels/ads). meta detalha duração, solicitante e payload de programação para painéis.
hype_train EventSub channel.hype_train.begin, channel.hype_train.progress, e channel.hype_train.end notificações v2. Evento apenas de metadados: sem chatname ou chatmessage. meta.phase é begin, progress, ou end; meta inclui ID do trem, nível, progresso, meta, total, contribuidores, campos de tempo, indicador de trem compartilhado e trainType. Trens de tesouros são disponibilizados por meta.trainType quando o Twitch os identifica.
user_banned EventSub channel.ban, ou IRC CLEARCHAT como alternativa quando eventos de banimento do EventSub estão indisponíveis. Evento apenas de metadados para widgets de moderação. meta inclui nome de usuário/exibição, ID do usuário, URL de avatar/perfil, moderador, motivo, duração do banimento/suspensão temporária e permanência.

Payloads de chat reutilizam o provedor compartilhado, portanto data.event é preenchido para `/me` (action) e o legado bits mesmo fora dos fluxos EventSub. Mensagens GIF do Twitch colocam o recurso Giphy em contentimg, deixe chatmessage vazio, e preserve o rótulo alternativo do Twitch em meta.gifLabel. A lógica de deduplicação e exclusão usa IDs de mensagem; mensagens enviadas pelo SSN usam o identificador nativo message_id do eco IRC do Twitch em data.id.

Metadados do Trem do Hype do Twitch

hype_train é apenas de metadados e não inclui chatname ou chatmessage. Painéis devem atualizar uma exibição existente de trem por meta.id em vez de adicionar cada atualização de progresso como chat. A Barra de metadados (meta.html) renderiza esses eventos como uma barra de progresso superior.

Campo Digite Notas
typestringSempre twitch.
eventstringSempre hype_train.
meta.phasestringbegin, progress, ou end.
meta.idstringID estável do trem. Use para inserir/atualizar um único widget visível de trem.
meta.broadcasterUserIdstringID de usuário do dono do canal do Twitch.
meta.broadcasterUserLoginstringLogin do dono do canal do Twitch.
meta.broadcasterUserNamestringNome de exibição do dono do canal do Twitch.
meta.totalnúmero | nullValor total de apoio informado pelo Twitch para o trem.
meta.progressnúmero | nullProgresso atual em direção à meta do nível.
meta.goalnúmero | nullMeta do nível atual.
meta.progressPercentnúmero | nullPorcentagem alternativa do DOM quando o Twitch disponibiliza apenas a barra de progresso visível da janela separada.
meta.levelnúmero | nullNível atual ou final do trem.
meta.topContributionsarrayPrincipais contribuidores. Cada entrada inclui userId, userLogin, userName, type, e numérico total.
meta.lastContributionobjeto | nullContribuição mais recente, usando o mesmo formato de contribuição de topContributions.
meta.sharedTrainParticipantsarrayDados brutos de participantes de trem compartilhado do Twitch, quando fornecidos.
meta.startedAtstringHorário ISO do início do trem.
meta.expiresAtstringHorário ISO da expiração atual do trem.
meta.endedAtstringHorário ISO do fim do trem, ou vazio antes do fim.
meta.cooldownEndsAtstringHorário ISO do fim do tempo de espera, ou vazio antes do fim.
meta.isSharedTrainbooleanoVerdadeiro quando o Twitch marca o trem como compartilhado.
meta.trainTypestringGeralmente regular; trens de tesouros são disponibilizados aqui quando o Twitch os identifica.
meta.allTimeHighLevelnúmero | nullNível máximo histórico do trem quando fornecido pelo Twitch.
meta.allTimeHighTotalnúmero | nullTotal máximo histórico do trem quando fornecido pelo Twitch.
meta.sourceModestringMarcador opcional de fonte, como dom.
meta.eventSubTypestringTipo original do EventSub: channel.hype_train.begin, channel.hype_train.progress, channel.hype_train.end, ou dom.community_highlight.

Twitch EventSub: referência rápida de eventos

data.event Cenário
new_followerUsuário seguiu o canal
new_subscriberNova inscrição
resubRenovação de inscrição com mensagem
subscription_giftInscrições presenteadas ao canal
cheerBits enviados em cheer
powerupPower-up integrado ou personalizado usado
rewardResgate de Pontos do Canal
raidRaid recebida
viewer_updateContagem de espectadores simultâneos
follower_updateContagem total de seguidores
subscriber_updateContagem total de inscritos
stream_onlineTransmissão entrou ao vivo
stream_offlineTransmissão encerrada
ad_breakIntervalo de anúncios iniciado
hype_trainMetadados de status do Trem do Hype/Trem de tesouros
user_bannedUsuário foi banido ou suspenso temporariamente

OBS Flow Actions

Implementação: actions.html por eventos do OBS WebSocket v5, com dock.html Eventos de Fonte de navegador do OBS como alternativa

  • Mantenha a sobreposição Flow Actions aberta com a mesma sessão do Social Stream do editor/serviço de segundo plano do Event Flow, ou mantenha o dock carregado dentro do OBS.
  • Configure OBS WebSocket v5 no OBS 28+; a URL padrão é ws://127.0.0.1:4455.
  • Estes são eventos de sistema do Event Flow. Eles não incluem chatname ou chatmessage, e detalhes extras do OBS ficam dentro de meta.
Evento Quando é disparado Notas do payload
stream_started O OBS informa que a saída de transmissão atingiu o estado iniciado. type é obs; event é stream_started; meta.source é obs-websocket ou obs-browser-source; meta.outputState pode conter o estado bruto de saída do OBS.
stream_stopped O OBS informa que a saída de transmissão atingiu o estado parado. type é obs; event é stream_stopped; meta.outputActive pode ser false.
recording_started O OBS informa que a gravação começou. type é obs; meta.obsEvent identifica a fonte de eventos do OBS.
recording_stopped O OBS informa que a gravação parou. type é obs; meta.outputState pode conter o estado bruto do WebSocket.
scene_changed O OBS altera a cena ativa de programa. type é obs; meta.sceneName contém o nome da cena quando fornecido pelo OBS.
media_ended Uma entrada de mídia do OBS termina a reprodução. type é obs; meta.inputName e meta.inputUuid identificam a entrada de mídia.
replay_buffer_saved O OBS salva o buffer de replay. type é obs; meta.savedReplayPath pode conter o caminho do replay salvo.

Caixa de alertas do Streamlabs

Implementação: sources/streamlabs.js (DOM da caixa de alertas); ponte opcional de socket em sources/websocket/streamlabs.html

  • Mantenha a caixa de alertas do Streamlabs aberta em uma aba ou Fonte de navegador para que os alertas sejam renderizados; o script de conteúdo lê o DOM dos alertas para mensagem/imagem/tokens.
  • Alertas no estilo doação definem hasDonation (ex.: “$10 USD” ou “100 bits”) e opcionalmente donoValue em USD.
  • Tipos de evento inferidos: follow, subscription, gift, cheer, donation, superchat, raid, redeem, merch, sponsor.
  • Para a ponte de socket, cole seu token Streamlabs Socket API e conecte; os alertas são repassados sem a página da caixa de alertas.
Evento Quando é disparado Notas do payload
donation Gorjetas, caridade, JustGiving ou alertas genéricos de “doou”. hasDonation preserva o texto da moeda (ex.: “$36” ou “$10 CAD”); donoValue é fornecido somente quando há um valor em USD; outros valores rotulados usam a conversão compartilhada de moedas.
cheer Alertas de bits/cheer do Twitch. hasDonation torna-se “100 bits” e donoValue captura o valor em USD.
subscription Alertas de inscrições. Campos padrão definidos; chatmessage é a linha do alerta; meta.tokens contém valores em tokens (name, amount, levelName etc.).
gift Membros/inscrições presenteados. meta.tokens.amount pode mostrar a quantidade de presentes; meta.tokens.levelName pode conter o nível.
follow Alertas de seguidores. Sem campos de doação; chatname reflete o token de nome do alerta.
raid Alertas de raids. meta.tokens.count contém a quantidade de participantes da raid quando presente.
redeem Alertas de resgate do Cloudbot. meta.tokens.product captura o item resgatado.
merch Alertas de compra de produtos. meta.tokens.product contém o nome do item comprado.
superchat Alertas no estilo Super Chat do YouTube ou de integrações de alertas compatíveis. hasDonation contém o valor; consumidores podem continuar aceitando o legado donation aliases.
sponsor Alertas no estilo patrocinador/membro disponibilizados pelo Streamlabs. Campos padrão; sem doação, a menos que o texto inclua um valor.

TikTok Live – Captura DOM e feed do TikFinity

Implementação: sources/tiktok.js para páginas nativas do TikTok e sources/tikfinity.js para o widget/iframe do feed de atividades do TikFinity. O SSApp ainda tem uma integração nativa com o TikTok com a maior cobertura de eventos (veja a documentação do SSApp).

  • Funciona na página ao vivo do criador. Banners de presentes/curtidas/seguidores só são preenchidos quando a sessão está autenticada.
  • O TikTok fornece muitos eventos por detecção DOM sem exigir modo WebSocket – presentes, seguidores, curtidas e entradas opcionais são capturados de linhas renderizadas.
  • Páginas de widgets do TikFinity em tikfinity.zerody.one/widget/activity-feed* também funcionam. O iframe incorporado do feed de atividades emite os mesmos campos canônicos de payload do TikTok para chat, seguidores, compartilhamentos, presentes, inscrições, entradas opcionais e baús do tesouro.
  • Nenhuma autenticação adicional de API é necessária.
  • Modo nativo do SSApp ainda adiciona eventos além dos caminhos de captura de página/widget: question_new, emote, viewer_update, e o agregado opcional likes_update.
Evento Quando é disparado Notas do payload
gift Linhas de banner de presente ou DivGiftMessage entradas. hasDonation converte para “N moedas” (com consulta de presente como alternativa); membership usa o texto do distintivo quando disponível.
joined Notificações de entrada quando a opção global Capturar eventos "joined" da transmissão está ativada. Ignora notificações de compartilhamento; chatname pode ficar vazio para algumas strings de sistema.
followed Mensagens de seguidores interpretadas a partir de cartões sociais. Garante chatname existe antes de emitir.
shared Linhas de compartilhamento do TikFinity. chatmessage é o texto renderizado do compartilhamento.
subscribe Linhas de inscrições do TikFinity. membership é definido como SUBSCRIBER.
envelope Linhas de baús do tesouro do TikFinity. meta.coins e meta.canOpen contêm os detalhes do baú.
liked Resumos de tempestades de curtidas acionados por cartões sociais do TikTok. chatname é incluído quando o TikTok o disponibiliza; cartões anônimos/de sistema de curtidas ainda podem ser emitidos. O TikTok envia isso pelo caminho normal de segundo plano. O serviço encaminha uma cópia à Sobreposição de reações e só continua no fluxo principal de chat/eventos quando capturelikeevent está ativado.
likes_update O SSApp recebe um total acumulado oficial do TikTok LIVE enquanto captureliketotals está ativado. meta é o total inteiro atual. O SSApp envia o primeiro valor imediatamente, agrupa rajadas em no máximo uma atualização a cada cinco segundos, repete o valor mais recente aproximadamente a cada 90 segundos e envia zero quando a transmissão termina. Isso é separado dos eventos específicos de espectadores liked eventos.
true (booleano) Transmissões sociais/de sistema genéricas quando o TikTok não fornece subtipo. Use chatmessage para decidir a apresentação; o booleano true indica “evento de sistema – tipo desconhecido”.

membership espelha as dicas dos distintivos (níveis de inscritos). O cache de avatares mantém chatimg válido entre eventos; se o DOM suprimir a cor para moderadores, o script limpa nameColor. Linhas de presentes do TikFinity também definem contentimg como ícone do presente quando disponível. Atualizações de sequência de presentes do DOM nativo e TikFinity incluem meta.tiktokGiftStreakId, meta.tiktokGiftCount, e meta.tiktokGiftQuietMs para que sobreposições possam consolidar atualizações repetidas; IDs legados de sequência são exclusivos da instância da página. Metadados de presentes também podem incluir tiktokGiftMessageId (ID original da mensagem do TikTok), tiktokGiftSenderId, groupId, giftId, giftName, streakable, e repeatEnd. IDs nativos identificam o mesmo presente entre janelas de captura; um ID de grupo diferente de zero, com IDs do remetente e presente, identifica atualizações cumulativas de sequência. A captura WebSocket do SSApp fornece os mesmos campos após consolidar uma sequência, com count preservado para compatibilidade. A opção de doações é verificada ao encaminhar cada presente: desativar doações do TikTok remove hasDonation e donoValue preservando o evento de presente e os metadados. A síntese de voz usa essas identidades para consolidar atualizações e suprimir duplicatas concluídas por até dez minutos (cache limitado) e lê presentes do TikTok como remetente, quantidade e nome do presente. Payloads antigos recorrem aos IDs de sequência e texto de mensagem existentes; nenhuma identidade é inferida apenas pelo texto do presente. A fala de presentes do TikTok usa o idioma selecionado de síntese de voz/voz, independentemente do idioma da interface. Os verbos de anúncio são localizados para inglês, espanhol, português, francês, alemão, italiano e holandês; outros idiomas usam remetente, quantidade e nome do presente sem verbo em inglês. A síntese de voz simplificada mantém esse formato neutro. Nomes de presentes permanecem como fornecidos pela plataforma; isso não traduz automaticamente catálogos de presentes ou mensagens de chat nem deduz o idioma de uma transmissão.

Nessas atualizações de sequência, a contagem e o rótulo de doação são cumulativos: 1, 2, 3 significa três presentes, não seis. Consumidores de totais devem somar apenas o aumento em relação ao maior valor já visto para esse ID de sequência. A captura Standard suporta classes antigas de presentes e linhas atuais de imagem/contagem; ambas preservam event: "gift" e hasDonation. Preços desconhecidos preservam contagens/nomes de presentes para exibição e usam uma estimativa em USD de uma moeda por presente. O valor fornecido pela fonte donoValue tem prioridade; metadados de presentes renderizados podem fornecer coinsPerGift ou diamondsPerGift antes que a tabela de presentes ou o padrão seja necessário. Estimativas de moedas do Standard/TikFinity e de diamantes do SSApp nativo usam suas conversões distintas existentes; nenhuma representa um pagamento em dinheiro garantido.

Whatnot

Implementação: sources/whatnot.js

  • Abra a página do programa ao vivo do Whatnot com o chat visível; a captura WebSocket existente fornece chat, notificações de leilão/venda, falhas de pagamento, raids, doações e atualizações rápidas de espectadores. Retratos de produtos/sorteios ainda dependem de seções DOM renderizadas na visualização do programa.
  • Capturar eventos da transmissão controla eventos de sistema do Whatnot e atualizações de metadados de leilão/catálogo; linhas de entrada também exigem Capturar eventos "joined" da transmissão; contagens de espectadores continuam seguindo as opções de espectadores/Hype.
Evento Quando é disparado Notas do payload
viewer_update Mudanças na contagem de espectadores pelas atualizações WebSocket da transmissão, com consulta DOM como alternativa. meta é uma contagem inteira de espectadores.
donation Eventos de gorjetas e contribuições de impulso comunitário do WebSocket do Whatnot. hasDonation contém o valor formatado; o contexto específico de WebSocket fica em meta.
raid Eventos de raid do WebSocket do Whatnot, incluindo respostas de atividades do histórico. meta.numRaiders é incluído quando fornecido pelo Whatnot.
joined Linhas de chat cujo corpo normalizado começa com joined, quando Capturar eventos "joined" da transmissão está ativado. Usa rótulos de evento em string para avisos de entrada (não o booleano true).
auction_update Quando o estado do leilão no rodapé ao vivo muda (texto de vencedor/vencendo, título, lances, preço, cronômetro, estado vendido), muitas vezes acelerado por pacotes WebSocket do ciclo de vida do leilão. Evento apenas de metadados. Sem chatname/chatmessage; os dados ficam em meta (por exemplo meta.title, meta.bids, meta.price, meta.timer, meta.status).
commerce_update Quando seções do catálogo mudam (produtos, surprise sets, sorteios futuros), muitas vezes acelerado por pacotes WebSocket do ciclo de vida de sorteios/produtos. Retrato de estado apenas com metadados com contagens de seções e arrays de itens em meta.products, meta.surpriseSets, e meta.upcomingGiveaways.
auction_started, new_bid, auction_ended, product_sold Chega a notificação WebSocket ao vivo correspondente. São eventos individuais, separados dos retratos de exibição existentes. platform/type: "whatnot", texto simples chatname, userid quando fornecido, nome do produto em subtitle, e um campo de texto simples chatmessage com textonly: true. Identificadores disponíveis e detalhes do leilão ficam em meta: productId, auctionId, orderId, transactionId, livestreamId, bidId, bids, auctionEndTime, e status. Opcional price está em unidades principais da moeda, com priceText e currency quando fornecido.
payment_failed Chega uma notificação WebSocket ao vivo de falha de pagamento. Os mesmos campos disponíveis de comprador, produto e identificador, com meta.paymentStatus: "failed". Quando apenas product.purchaserUserId identifica o comprador, preenche userid em eventos de venda/pagamento e o nome do comprador fica vazio. Nenhum comprador é deduzido de outro leilão ou de um leilão anterior.
payment_succeeded Chega uma notificação WebSocket ao vivo de pagamento bem-sucedido. meta.paymentStatus: "succeeded", com comprador, item, ID do pedido e outros campos permitidos fornecidos por essa notificação. Isso continua sendo um evento de pagamento distinto; não emite outro purchase ou doação. Campos ausentes ficam vazios ou omitidos, mesmo que uma venda anterior os tenha fornecido.

Atualizações de exibição de leilão/comércio continuam sendo retratos baseados no DOM. Para corresponder a um evento WebSocket individual no Event Flow, use Tipo de evento (avançado), selecione Evento personalizado, e insira seu nome exato. Rótulos podem usar **{username}**\n{subtitle} com peso do texto selecionado; condições podem comparar meta.paymentStatus com failed. Um exemplo importável de etiqueta do Whatnot está disponível. As configurações existentes de captura de eventos da transmissão continuam valendo.

Campos opcionais adicionais são meta.catalogProductId (o campo do pacote product.productId), meta.parentProductId (product.parentId), meta.transactionType (tipo de venda do Whatnot, sem alterações), e meta.placeOrderErrorReason (código de erro de pedido/pagamento fornecido pelo Whatnot). Essas referências de produto descrevem o catálogo ou anúncio principal; não substituem um ID de pedido. A quantidade em estoque não é tratada como quantidade comprada.

Para automação de pagamento bem-sucedido, defina um Tipo de evento (avançado) como Evento personalizado: payment_succeeded, e filtre a fonte para Whatnot. Condições e modelos existentes podem usar os campos desse evento userid, chatname, subtitle e meta.orderId diretamente. Nenhuma compra memorizada é necessária quando a notificação contém os detalhes exigidos.

O fim de um leilão ou um item marcado como vendido não confirma pagamento bem-sucedido: essas notificações não são emitidas como eventos pagos de purchase e não definem valores de doação. Um evento de sucesso só é emitido para um recebido payment_succeeded notificação; a captura não consulta a conclusão do pagamento nem a deduz de uma venda. Outros paymentStatus são encaminhados apenas quando explicitamente fornecidos em um pacote capturado. Identificadores ausentes são omitidos; um ID de produto sozinho pode abranger várias vendas, portanto use um ID de pedido/leilão fornecido para correlacionar notificações. A captura não memoriza compras nem associa atualizações de pagamento; qualquer fluxo assim precisa ser configurado explicitamente no Event Flow. Pacotes duplicados em curto intervalo das duas pontes de captura existentes são suprimidos. Objetos brutos de pedido/pagamento não são encaminhados.

eBay Live

A conexão de vendedor do eBay em Monetização exige um serviço eBay configurado no SSN e consentimento OAuth do vendedor; a captura eBay Live abaixo é independente. O modo sandbox usa URLs de anúncios sandbox, identifica o comprador como "eBay Sandbox buyer" e prefixa a mensagem com "Sandbox test purchase:". Compras sandbox mantêm o mesmo contrato de compra e podem disparar alertas/ações de chat ativados durante testes. O contrato de pagamento implementado emite event: "purchase", com type e platform definido como ebay. Exige um pedido pago correspondente a um produto selecionado. id é um identificador opaco estável da linha de pedido; chatname é "eBay buyer", chatmessage é texto simples (textonly: true), subtitle é o nome do produto e, opcionalmente, contentimg é sua imagem. meta.ebayPurchase contém itemId, itemName, quantity, e público url. Nenhuma identidade de comprador, dado de entrega, hasDonation ou donoValue é incluído. Isso difere de atualizações extraídas de leilão ou estoque, que não comprovam pagamento.

Implementação: sources/ebay.js

  • Abra /ebaylive/events/<id>/chat ou /ebaylive/events/<id>/stream. Ambos recebem o mesmo feed de leilão ao vivo.
  • O feed WebSocket público fornece leilões, lances, vencedores, extensões de tempo e mudanças de estoque; uma consulta GraphQL somente leitura fornece detalhes dos anúncios. A captura DOM permanece como alternativa quando os dados de rede estão indisponíveis.
  • Capturar eventos da transmissão controla retratos de metadados (auction_update, commerce_update); os contadores de espectadores ainda respeitam as opções de espectadores/Hype.
Evento Quando é disparado Notas do payload
viewer_update Quando a contagem de espectadores do evento ativo muda (contagem do cabeçalho ou indicador de evento ao vivo como alternativa). meta é uma contagem inteira de espectadores.
follower_update Quando a contagem de seguidores do vendedor é retornada pelo endpoint de estatísticas do vendedor. meta é uma contagem inteira de seguidores. A fonte consulta o endpoint do vendedor a cada 60 segundos; o endpoint ainda pode retornar um valor em cache por até 5 minutos.
auction_update Quando os metadados do leilão ativo mudam. Evento apenas de metadados. A captura de rede define meta.sourceMode como network e fornece título, preço, licitante, vencedor, lances, cronômetro e endingAt. meta.ebay contém eventId, listingId, o registro GraphQL do anúncio (listing), o anúncio atual do socket público (eventListing), e a atualização mais recente do leilão (update). Esses campos preservam categoria, imagens, moedas, quantidades, detalhes de breaks de caixas, resultados de leilão e campos de tempo sem eliminar detalhes da plataforma. O registro GraphQL é um retrato obtido por consulta; o anúncio e a atualização do socket contêm estado ao vivo mais recente. O histórico inicial/de reconexão é incorporado ao retrato atual, em vez de emitido como vitórias antigas. Remover todos os anúncios apresentados emite status: "idle" com cardCount: 0 para limpar o leilão. A alternativa DOM mantém campos de cartão do player ou prévia de evento.
commerce_update Quando seções de retratos de catálogo/eventos ao vivo mudam. Retrato de estado apenas com metadados em meta. O modo de rede inclui eventId, navigation.viewerCount e playerCards para os anúncios apresentados atualmente, cada um com os mesmos detalhes de ebay objeto como retrato do leilão. Uma lista vazia de cartões limpa anúncios removidos. A alternativa DOM também pode incluir liveEvents, livePreview, currentEvent e upcomingEvents.
reaction Quando o eBay Live renderiza uma animação de coração/reação. Enviado diretamente ao destino dedicado de reações. meta.reactionType é heart; o eBay não disponibiliza um nome por usuário para essas animações DOM.

Eventos de metadados do eBay omitem intencionalmente chatname/chatmessage; sobreposições consumidoras devem renderizar a partir de data.event + data.meta somente.

Kick – Captura DOM Standard

Implementação: sources/kick.js

  • Precisa de uma sessão autenticada para obter imagens de perfil e distintivos de inscritos.
  • Detecção limitada de eventos por correspondência de texto do chat e distintivos; contagens de espectadores continuam funcionando quando a opção está ativada.
Evento Quando é disparado Notas do payload
gift Presentes de KICKs detectados pela imagem de figurinha e pelo valor visível em moeda do Kick. hasDonation contém N KICKs (1 KICK para um) quando o valor visível está disponível; contentimg contém a imagem do presente. O texto existente da mensagem é preservado.
reward Resgates de recompensas ("resgatou …"). chatmessage contém o texto de resgate.
true (booleano) Avisos genéricos de sistema que não correspondem a padrões de presente ou recompensa. Use chatmessage para decidir a apresentação; o booleano true indica "evento de sistema – tipo desconhecido".
viewer_update Consulta a API de canais do Kick a cada 30 segundos (somente quando as estatísticas de espectadores estão ativadas). meta contagem inteira de espectadores; para inscrições, seguidores ou gorjetas, use a ponte Kick abaixo.

Kick – WebSocket/Ponte

Implementação: sources/websocket/kick.js com auxiliares compartilhados em providers/kick/core.js

  • OAuth pela ponte Kick do Social Stream. Os escopos atuais são user:read, channel:read, channel:write, channel:rewards:read, chat:write, events:subscribe, moderation:ban, moderation:chat_message:manage, e kicks:read. Os tokens são atualizados automaticamente.
  • A configuração de webhooks do Kick pode levar vários minutos; a interface lista as assinaturas ativas por canal.
Evento Quando é disparado Notas do payload
message Payload de chat da ponte. meta.plainText contém a mensagem em texto simples (que ainda pode incluir emoji); distintivos combinam plataforma + cache de perfil. Respostas de conversa preenchem initial, reply, e meta.reply quando detalhes da resposta ou uma mensagem anterior em cache estão disponíveis.
reward channel.reward.redemption.updated, além de payloads de chat/sistema da ponte que se parecem com resgates. meta inclui ID de recompensa/resgate, título, custo, status, entrada do usuário e quem resgatou.
new_subscriber channel.subscription.new. membership atribuído à função de inscrito; meta inclui { subscriber, plan }.
resub channel.subscription.renewal. meta.duration (meses) e meta.plan disponível; subtitle resume a sequência.
subscription_gift channel.subscription.gifts. meta.totalGifted, meta.gifter; os distintivos usam o ícone 💝 como alternativa.
donation Eventos de apoio/gorjeta detectados por heurísticas de tipo de evento; presentes de KICKs usam gift abaixo. hasDonation contém o valor formatado; meta contém { amount, currency, supporter, message, giftName }.
gift kicks.gifted (presentes de KICKs), em correspondência com o extrator DOM. hasDonation contém N KICKs (1 KICK para um); contentimg contém a imagem do presente quando disponível. Detalhes estruturados do presente permanecem em meta.
raid Tratamento de compatibilidade para payloads antigos de socket no formato host, como App\Events\StreamHostEvent. O catálogo oficial atual de eventos do Kick não tem assinatura de raid/host. Se chegar um payload legado compatível, ele é mapeado para o nome canônico raid; não dependa disso em um fluxo atual do Kick.
new_follower channel.followed. Ícones de seguidores vêm do cache de perfis; follower_update é disparado quando o Kick fornece totais acumulados.
follower_update A ponte fornece contagens de seguidores nos payloads de webhook. meta total inteiro; usado por painéis para metas de seguidores.
stream_online / stream_offline livestream.status.updated. meta contém o corpo bruto do status do Kick (is_live, title etc.).
viewer_update livestream.status.updated quando o Kick inclui totais de espectadores simultâneos. meta contagem inteira de espectadores; emite 0 no status offline para limpar contadores desatualizados.
user_banned moderation.banned da ponte/webhook ou eventos de banimento do socket de chat do Kick. Evento apenas de metadados para widgets de moderação. meta inclui nome de usuário/exibição, ID do usuário, URL de avatar/perfil, moderador, motivo, duração do banimento/suspensão temporária e permanência.

Consultas de perfil usam profileCache; mapBadges combina os recursos de distintivos do Kick com SVG em cache quando disponível. Quando o Kick informa doações em KICKs, a ponte as converte em hasDonation além de meta.amount com currency usa "KICKs" como alternativa. Payloads de chat incluem meta.messageId quando a ponte disponibiliza um ID nativo de mensagem do Kick para que a sincronização de exclusão atinja a mensagem correta. Payloads de resposta incluem meta.reply com o elemento pai messageId, author, e text quando conhecido. Detalhes fornecidos de resposta continuam disponíveis mesmo quando a mensagem original não está em cache; uma resposta somente com ID sem contexto em cache ainda pode não ter citação visível.

Kick WebSocket: referência rápida de eventos

data.event Cenário
new_followerUsuário seguiu o canal
new_subscriberNova inscrição
resubRenovação de inscrição
subscription_giftInscrições presenteadas
rewardResgate de recompensa do canal ou mensagem de chat/sistema no estilo recompensa
donationEvento de gorjeta/apoio
giftEvento de presente de KICKs
raidEntrada legada de host/raid somente para compatibilidade; não é uma assinatura oficial atual do Kick
follower_updateContagem total de seguidores
stream_onlineTransmissão entrou ao vivo
stream_offlineTransmissão encerrada
user_bannedUsuário foi banido ou suspenso temporariamente

VPZone - WebSocket

Implementação: sources/websocket/vpzone.js

  • Conecta a wss://chat.vpzone.tv/ws?channel=USERNAME; OAuth solicita profile:read, chat:read, chat:write, channel:read, channel:write, e chat:moderate. Um token bearer também pode ser fornecido manualmente.
  • Quadros planos do VPZone, como type: "msg" são normalizados em payloads padrão de chat.
  • No lado da plataforma delete_message / clear_chat removem as linhas correspondentes do dock; opções adicionais sincronizam exclusões e bloqueios do dock de volta ao VPZone (somente o dono do canal).
  • Donos de canais recebem um painel local Informações da transmissão para atualizar título e categoria da live (mesmo padrão da página de fonte do Twitch).
Evento Quando é disparado Notas do payload
message VPZone msg, message, new_message, ou chat_message quadro WebSocket. chatname vem de username; chatmessage vem de body; indicadores de inscrito/dono/mod/VIP são copiados para chatbadges, indicadores de função no nível superior e meta. IDs nativos preenchem data.id e meta.messageId.
viewer_update VPZone presence quadro com count ou campo equivalente de espectadores. meta é a contagem inteira de espectadores ao vivo; contribui para o agregado viewer_updates.
new_subscriber VPZone subscribe / subscription quadro. membership é definido como Subscriber quando há indicadores de inscrição.
subscription_gift VPZone gift / gift_subscription quadro. Usa o mesmo nome de evento de inscrição presenteada de Twitch, Kick, Rumble e Velora. subtitle contém a quantidade de presentes (x5) ou destinatário.
message + hasDonation VPZone system quadro com metadata.kind: "pixels_cheer" (gorjeta Pixels). Linha de chat com doação; hasDonation é o rótulo do valor (por exemplo 100 Pixels), meta.pixels o inteiro. event fica vazio; detecte esta gorjeta por hasDonation. Eventos de apoio da ponte do Kick usam, em vez disso, event: "donation".
message respostas VPZone msg quadro contendo metadata.reply_to (ID da mensagem, autor, trecho — desnormalizados no servidor). Renderizado como respostas do Kick: initial contém o rótulo "autor: trecho", reply o texto bruto da resposta, meta.reply o destino estruturado. Respeita a configuração excluem “respondendo a” configuração.
raid VPZone raid quadro com metadata.kind: "incoming". Quadros de raids de saída são ignorados; meta.viewers contém o tamanho da raid quando fornecido.
shoutout VPZone shoutout quadro (!so comando). meta.targetUser nomeia o canal divulgado.
reward VPZone system quadro com metadata.kind: "channel_points_redeem". Resgate de Pontos do Canal, usando o mesmo nome de evento das recompensas do Twitch.
stream_online / stream_offline VPZone system quadros com metadata.kind: "stream_started" / "stream_ended". Atribuído ao nome do canal (os quadros não contêm autor).
new_follower VPZone follow quadro. Mapeado para o formato padrão de evento de seguidor.
joined Eventos WebSocket de entrada/presença do VPZone, quando Capturar eventos "joined" da transmissão está ativado. Mapeado para um evento de sistema no estilo chat com metadados de autor do VPZone em meta.

Joystick

Implementações: sources/joystick.js, sources/inject/joystick-ws.js, e sources/websocket/joystick.js

  • A fonte normal do site Joystick 2.0 é executada na página conectada /u/<channel>/chat página. Lê o campo da página ChatChannel, WhisperChatChannel, EventLogChannel, e SystemEventChannel Quadros Action Cable, com alternativa de linha renderizada para Electron e casos de reconexão.
  • Mensagens de chat do site usam os mesmos campos principais de YouTube, Twitch e Kick: o nativo id, chatname, chatmessage, chatimg, chatbadges, nameColor, membership, mod, private, username/userid, e timestamp quando o Joystick os fornece. Quando o socket omite uma cor de nome de usuário, a linha renderizada fornece o mesmo nameColor usado por docks com cores ativadas.
  • Edições de mensagens no site substituem a linha correspondente no dock; exclusões, silenciamentos e bloqueios removem linhas correspondentes usando o ID nativo ou nome de usuário.
  • A fonte WebSocket separada usa credenciais de bot do Joystick (client_id + client_secret); a fonte do site usa a sessão da página conectada.
  • Autoriza em https://joystick.tv/api/oauth/authorize, depois troca/atualiza tokens em https://api.joystick.tv/api/oauth/token.
  • Conecta a wss://api.joystick.tv/cable e assina GatewayChannel.
  • Uma troca opcional de token OAuth é usada para endpoints auxiliares, como https://api.joystick.tv/api/users/stream-settings.
  • A fonte separada com credenciais de bot não emite viewer_update. A fonte do site conectado emite contagens de espectadores quando o socket da página as fornece, como descrito abaixo.
Evento Quando é disparado Notas do payload
message Joystick ChatMessage, BotMessage, new_message, bot_message, event_bot_message, pvp_message, e sussurros. Chat normal não tem event. O ID nativo é colocado no campo de nível superior id e meta.messageId; funções e estado privado usam os campos estabelecidos de nível superior/distintivos.
new_follower Joystick StreamEvent com tipo Followed. Usa o formato padrão de seguidor e elimina duplicatas em relação à linha correspondente do bot do Joystick. Opcionalmente meta.userId/meta.followedAt são incluídos somente quando o Joystick os fornece.
new_subscriber / subscription_gift Tipos de eventos do Joystick NewSubscription / GiftedSubscription. Usa as chaves de metadados de inscrição compatíveis com Kick: eventType, subscriber, gifter, totalGifted, duration, e plan.
donation Joystick StreamEvent tipos Tipped / TipMenu. hasDonation contém o valor e a unidade de tokens para conversão compartilhada em USD quando disponível, e a linha correspondente do bot do Joystick é deduplicada. meta usa as chaves estabelecidas de eventos de apoio do Kick: eventType, supporter, amount, currency, message, giftName, giftType, e tier.
stream_online / stream_offline Joystick StreamEvent tipos como Started, StreamResuming, Ended, StreamEnding. Usado para automações online/offline que consideram o transporte.
user_enter / user_leave Joystick UserPresence tipos enter_stream / leave_stream. Notificações de presença são emitidas como mensagens de evento e podem ser suprimidas pelas configurações de ocultar eventos. Ocultar eventos também suprime eventos de transmissão que não sejam doações.
viewer_update A fonte do site com login recebe ViewerCountUpdated por EventLogChannel. Usa um inteiro simples meta, em correspondência com YouTube, Twitch e Kick. Emitido somente quando a contagem de espectadores ou modo Hype está ativado. A fonte separada com credenciais de bot ainda não recebe contagens de espectadores.
follower_update / subscriber_update Eventos de atualização de contagem de seguidores/inscritos do Joystick. Usa um inteiro simples meta, em correspondência com o contrato de contagem do Twitch.
Notificações internas ignoradas ChatMessageReceived, estado do dispositivo e atualizações de widgets não mapeadas, como estado de meta de gorjetas/PvP/subathon. São notificações de transporte ou estado de página, não eventos do Social Stream. Não são convertidas em eventos inventados de snake_case nomes de eventos; o evento real ChatChannel/new_message continua sendo o único payload de chat.

XP Sync

Implementação: sources/xpsync.js

  • Linhas de chat usam os campos canônicos do payload com type: "xpsync", incluindo autor, mensagem, avatar, distintivos de imagem e SVG embutido, cor do nome, associação, indicadores de moderador/membro/bot e o UUID nativo da mensagem como id quando disponível.
  • Respostas seguem a convenção das fontes DOM de YouTube, Twitch e Kick: a menos que prefixos de resposta estejam desativados, initial contém o usuário a quem a resposta se dirige, reply preserva a mensagem sem prefixo, e chatmessage recebe o prefixo visível da resposta.
  • Linhas destacadas com Sparks são capturadas mesmo que o XPSync as renderize sem a classe normal de linha de chat ou ID de mensagem; o valor visível é disponibilizado por hasDonation como N Sparks.
  • Quando a captura de eventos está ativada, linhas contendo “acabou de seguir” ou “seguiu o canal” emitem event: "new_follower".
  • Quando contagens de espectadores estão ativadas, o dock permanente de chat emite event: "viewer_update" da contagem de vídeo ao vivo já carregada pela página do XPSync e a atualiza pelas atualizações da página ao vivo do XPSync. Nenhuma credencial separada do SSN é necessária.

Instagram – Captura REST ao vivo e caixa de notícias

Implementação: sources/instagram.js e sources/instagramlive.js (cópias idênticas)

  • Em páginas de live (/<user>/live/?broadcast_id=...), o chat ao vivo vem da própria API web do Instagram, consultada periodicamente na mesma origem com o cookie de sessão: GET /api/v1/live/{broadcast_id}/get_comment/?last_comment_ts={ts} aproximadamente a cada 2s, e POST /api/v1/live/{broadcast_id}/heartbeat_and_get_viewer_count/ aproximadamente a cada 5s quando contagens de espectadores estão ativadas. Após 3 falhas consecutivas (ou quando não há broadcast_id pode ser descoberto), a fonte recorre à interpretação do DOM renderizado do chat.
  • O feed de atividades da própria conta é consultado por POST /api/v1/news/inbox/ aproximadamente a cada 45s em qualquer página do Instagram. A primeira consulta apenas inicializa o conjunto de deduplicação para que o histórico nunca seja reproduzido; notícias são deduplicadas por tuuid.
  • Cabeçalhos necessários da API (todos estáticos/deriváveis): X-IG-App-ID: 936619743392459, X-CSRFToken (do cookie), X-ASBD-ID: 359341, X-Requested-With: XMLHttpRequest, Content-Type: application/x-www-form-urlencoded.
  • Todos os eventos do feed de atividades usam type: "instagram"; o chat ao vivo permanece type: "instagramlive". Eventos de curtida usam o caminho normal de segundo plano: o serviço envia uma cópia à sobreposição dedicada de Reações e os inclui no feed principal de chat/eventos somente quando capturelikeevent está ativado, em correspondência com TikTok e MeetMe. hideevents e o filtro de eventos personalizados os bloqueiam em todos os lugares. Como os eventos da caixa de entrada pertencem à conta conectada, são suprimidos ao assistir à live de outra pessoa (tanto /<user>/live/ páginas e lives no visualizador de stories; a propriedade é resolvida por perfil e tentada novamente após falhas de consulta) e emitidos na sua própria live e em todas as páginas fora de lives. Uma aba ativa do Instagram consulta a caixa de entrada da conta por vez, e a consulta só ocorre com login feito.
Evento Quando é disparado Notas do payload
message (ao vivo) Novas entradas em get_comment resposta (comments[]/system_comments[]), ou novas linhas de chat do DOM quando REST estiver indisponível. Payload padrão de chat, type: "instagramlive". REST fornece os valores exatos de user.username, user.profile_pic_url, e um identificador único pk usado para deduplicação.
viewer_update heartbeat_and_get_viewer_count informa uma alteração de viewer_count, quando a captura da contagem de espectadores ou o modo Hype estiver ativado. meta contagem inteira de espectadores. A consulta para quando broadcast_status não é mais "live".
stream_online / stream_offline stream_online é disparado uma vez quando uma sessão de transmissão REST começa; stream_offline é disparado quando o heartbeat informa um estado fora do ar de broadcast_status (exige captura da contagem de espectadores ou modo Hype). Eventos apenas de metadados que correspondem ao vocabulário compartilhado de status de transmissão usado por Twitch e Joystick.
new_follower Uma notícia da caixa de entrada com um tipo de seguidor notif_name (ou story_type 12) aparece. chatname é o novo seguidor, chatimg a imagem de perfil, chatmessage o texto da caixa de entrada (por exemplo, "x começou a seguir você.").
follow_request Um private_user_follow_request aparece uma notícia (contas privadas recebem solicitações em vez de seguidores diretos). Mesmo formato de new_follower, mantidos distintos para que automações possam aprovar solicitações ou cumprimentar de forma diferente.
liked Uma notícia da caixa de entrada com um tipo de curtida notif_name (incluindo comment_like) aparece. Vocabulário compartilhado de curtidas com TikTok/MeetMe. chatname é o autor, chatmessage o texto da caixa de entrada (por exemplo, "x curtiu sua foto.").
message (comentário na própria publicação) Uma notícia da caixa de entrada com um tipo de comentário notif_name aparece. Linha simples de chat (event: false), type: "instagram"; chatmessage contém o texto da caixa de entrada, incluindo o trecho do comentário.
notification Qualquer outro tipo de notícia da caixa de entrada (menções, marcações, compras e assim por diante). Categoria genérica abrangente; meta.notifName e meta.storyType preservam a classificação bruta da notícia.

Facebook Live

Implementação: sources/facebook.js (extração do DOM) e ponte opcional da Graph API em sources/websocket/facebook.html

  • A captura DOM lê comentários renderizados do Facebook; a ponte Graph API de Página gerenciada lê comentários de vídeos. Ambas usam type: "facebook", os campos padrão de chat e nenhum event para comentários comuns. A ponte de API também inclui o campo opcional platform: "facebook".
  • A ponte de API usa userid para o ID do autor quando disponível, timestamp para um horário válido de criação em milissegundos Unix, e contentimg para uma imagem de anexo HTTP(S) fornecida pela API. Comentários somente com imagem podem ter um campo vazio chatmessage. textonly aplica-se apenas ao corpo da mensagem: texto bruto quando true, HTML escapado quando false.
  • O contexto de comentários da API usa meta.messageId (ID nativo do comentário), meta.permalink, meta.videoId, e meta.pageId. Versões anteriores da API usavam meta.commentId, campos duplicados de autor/tempo em meta, e transmitia anexos brutos ali. Novas versões usam os campos padrão de autor/tempo/mídia; isso não adiciona suporte à sincronização de exclusão.
  • Contagens de espectadores só são atualizadas quando ativadas. A ponte de API lê visualizações simultâneas de live_views; não substitui por visualizações cumulativas do vídeo nem inventa zero para uma contagem indisponível. A captura por API não deduz Estrelas, membros, destaques nem respostas de texto comum de comentários.
  • Estrelas são capturadas do DOM renderizado do chat ao vivo quando o Facebook mostra o elemento visível N sent marcador; preenchem hasDonation e donoValue a 100 Estrelas = US$ 1 sem definir data.event.
  • Para testar, adicione ssnreplay=1 à URL do Facebook Live para processar linhas de chat já visíveis após atualizar.
Evento Quando é disparado Notas do payload
viewer_update O DOM consulta o indicador de espectadores ao vivo; a ponte de API consulta visualizações simultâneas ao vivo quando ativada. meta contagem inteira de espectadores, em correspondência com outras fontes. Contagens ausentes ou não interpretáveis são ignoradas; zero real é válido.
hasDonation Estrelas do Facebook renderizadas no DOM do chat ao vivo. Payload padrão de chat; hasDonation contém a quantidade visível de Estrelas, como 100 Stars, e donoValue contém o valor em USD. Estrelas não definem data.event.
highlightColor O Facebook renderiza um elemento visível HIGHLIGHTED rótulo. Usa os campos normais de chat e highlightColor; nenhum data.event é definido. Estrelas ainda usam hasDonation.

Online Church

Implementação: sources/onlinechurch.js

  • Depende de extração DOM do chat público e do cabeçalho de mídia.
  • Contagens de espectadores só são atualizadas quando Mostrar contagem de espectadores ou modo Hype está ativado.
Evento Quando é disparado Notas do payload
message Novas entradas aparecem sob #publicchat. Payload padrão de chat com nome do remetente, avatar, distintivos e rótulo opcional de membro quando presente no DOM.
viewer_update Consulta o indicador de público ao vivo no cabeçalho de mídia a cada 10s. meta contagem inteira de espectadores; envia 0 quando o indicador está ausente ou ilegível, para limpar contadores desatualizados.

SharePlay.tv

Implementação: sources/shareplay.js

  • Depende de extração DOM da gaveta de chat ao vivo nas páginas de canais do SharePlay.
  • Somente linhas e cartões de chat recém-inseridos são emitidos depois que o extrator se conecta; o histórico existente é ignorado intencionalmente.
Evento Quando é disparado Notas do payload
message Novas linhas de chat aparecem no feed principal. Payload padrão de chat com autor, avatar, imagens de distintivos e emotes preservados em HTML. Respostas em conversas também preenchem initial, reply, e meta.reply quando a linha anterior ainda está presente.
raid O SharePlay insere um cartão Blitz no feed de chat ao vivo. Mapeado para o evento canônico de raid. meta.cardType é "blitz", com opcional meta.fromLogin e meta.viewers quando o texto do cartão os disponibiliza.
shoutout O SharePlay insere um cartão de divulgação/seguidor no feed de chat. Emitido como data.event = "shoutout". A imagem do banner do cartão é encaminhada por contentimg, enquanto meta.cardType e meta.action preservam o rótulo do cartão/texto do botão.
viewer_update Consulta o indicador visível de espectadores no cabeçalho a cada 10s. meta contagem inteira de espectadores; emitida somente quando Mostrar contagem de espectadores ou modo Hype está ativado, e envia 0 se o indicador ficar ilegível, para limpar contadores desatualizados.

Streamplace

Implementação: sources/streamplace.js

  • Lê a página ao vivo do Streamplace renderizada pelo React e ignora o histórico visível do chat ao conectar.
  • Mensagens no estilo relay, como Name (Discord): message são normalizados para o nome do remetente repassado.
Evento Quando é disparado Notas do payload
message Novas linhas de chat do Streamplace aparecem após a conexão. Payload padrão de chat com nameColor, chatbadges, links preservados em HTML e campos de resposta initial, reply, e meta.reply quando visível.
viewer_update O indicador de espectadores do cabeçalho muda enquanto a captura de contagem de espectadores ou modo Hype está ativado. meta contagem inteira de espectadores.

WorldsWave

Implementação: sources/worldswave.js

  • Oferece suporte a páginas ao vivo do WorldsWave e URLs somente de chat, como https://worldswave.com/kn_livecmd.php?cmd=viewStream&streamId=STREAM_ID&chatonly=1.
  • Usa o identificador estável data-ww-*/ww-chat-* marcação quando disponível, mantendo os seletores kontackt legados para páginas somente de chat e layouts antigos.
  • O histórico existente do chat é ignorado quando a captura se conecta; teste com uma nova mensagem.
  • Contagens de espectadores exigem Mostrar contagem de espectadores ou modo Hype. Eventos dedicados de presente/gorjeta e envio de respostas não são implementados. Uma linha renderizada ainda pode fornecer um rótulo de doação por data-ww-donation.
Evento Quando é disparado Notas do payload
message Aparece uma nova linha de chat renderizada do WorldsWave. Payload padrão de chat com type: "worldswave", nome do remetente, avatar, ID opcional de usuário, cor do nome, distintivos, estado de moderador, associação, valor de doação, anexo e identidade do canal. IDs estáveis de mensagens do WorldsWave são disponibilizados como meta.messageId e deduplicados entre painéis simultâneos de prévia/chat completo. Imagens embutidas nas mensagens continuam higienizadas quando o modo somente texto está desativado.
viewer_update O total visível de espectadores ao vivo muda enquanto a captura de contagem de espectadores ou modo Hype está ativado. meta é a contagem inteira de espectadores. O identificador estável data-ww-viewer-count é preferido; valores legados compactos, como 1.2K são normalizados como alternativa.

FLEX TV

Implementação: sources/flextv.js

  • Lê o painel renderizado de chat em https://www.flextv.co.kr/channels/*/live páginas.
  • O painel de chat precisa estar visível. O histórico existente é ignorado quando a fonte se conecta; teste com uma nova linha de chat.
  • Ainda não há caminho documentado de contagem de espectadores, doações ou envio de respostas para esta fonte.
Evento Quando é disparado Notas do payload
message Novo elemento visível do FLEX TV .chat-item aparecem no feed de chat ao vivo. Payload padrão de chat com type: "flextv", chatname, chatmessage, nameColor, imagens de distintivos em chatbadges, e detalhes de membros FLEX em meta quando disponibilizado por data-member.

Seal Team Sloth

Implementação: sources/sealteamsloth.js

  • Lê o chat renderizado em janela separada em https://sealteamsloth.com/popout-chat/* páginas.
  • Contagens de espectadores exigem Mostrar contagem de espectadores ou modo Hype.
Evento Quando é disparado Notas do payload
message Aparece uma nova linha de chat renderizada do Seal Team Sloth. Payload padrão de chat com type: "sealteamsloth", nome do remetente, avatar e conteúdo da mensagem.
viewer_update O total visível de espectadores ao vivo muda enquanto a captura de contagem de espectadores ou modo Hype está ativado. meta é a contagem inteira de espectadores; valores compactos, como 1.2K são normalizados.

MeetMe - Captura DOM e WebSocket

Implementação: sources/meetme.js

  • Lê o DOM renderizado do chat ao vivo do MeetMe em app.meetme.com/live/view/... páginas e dentro de api.gateway.meetme-live.com/web-live/... iframe.
  • Quando o WebSocket do iframe está disponível, wss://video-live.meetme.com/ são interpretados antes da alternativa DOM para capturar eventos ao vivo mais completos.
  • hideevents suprime eventos que não sejam doações; presentes e doações de diamantes do MeetMe ainda preenchem campos de doação. capturejoinedevent ativa avisos de entrada/reentrada. Eventos com autor identificado de liked usam o encaminhamento compartilhado em segundo plano controlado por capturelikeevent; agregado reaction continuam direcionados explicitamente à Sobreposição de reações.
  • Contagens de espectadores preferem a contagem visível no cabeçalho do MeetMe, recorrendo a totais WebSocket apenas quando a contagem DOM está indisponível. São emitidas quando mudam e repetem a contagem mais recente aproximadamente a cada 30 segundos enquanto showviewercount/hypemode está ativado; totais de seguidores só são enviados quando mudam e são limitados a aproximadamente 60 segundos.
Evento Quando é disparado Notas do payload
message Novo SNSChatMessage chegam quadros WebSocket, ou novos ChatMessage_* Linhas DOM aparecem em ChatHistoryContainer_*. Payload padrão de chat com nome do remetente, avatar, HTML/texto da mensagem e imagens/texto de distintivos. Detalhes das linhas DOM são campos planos em meta chaves, incluindo messageId, roomId, level, levelColor, badgeLabels, badgeSrcs, badgeClasses, isBouncer, isTopStreamer, isBestOfTheWeek, rank, e rowClassName. Payloads WebSocket definem meta.source = "websocket".
joined / rejoined / left SNSChatParticipant chegam quadros WebSocket de criação, atualização ou exclusão, ou o MeetMe renderiza um elemento DOM join-cell linha. Avisos de entrada/reentrada exigem Capturar eventos "joined" da transmissão. Emite avisos de sistema no estilo chat com nome/avatar do autor quando o MeetMe os disponibiliza. meta.isNewViewer, meta.viewerLevelId, meta.isBouncer, e meta.isSubscriber preservam o estado dos participantes.
new_follower O MeetMe renderiza uma linha DOM de favorito/seguidor, como Favorited. Usa o vocabulário compartilhado de eventos de seguidores. chatname é o autor, chatimg é a foto de perfil detectada quando disponível, e campos planos meta.favoriteText/meta.targetName preservam os detalhes originais da linha.
gift SNSGiftMessage chegam quadros WebSocket, ou o MeetMe renderiza uma imagem de presente em uma linha de chat. hasDonation contém o rótulo visível do presente ou o valor em diamantes, contentimg contém a imagem do presente quando disponibilizada, e chaves planas como meta.giftName, meta.giftCount, meta.amount, e meta.currency preservam detalhes estruturados. O gift é reservado a quadros/linhas reais de presentes; a renderização de doações ainda deve usar hasDonation.
donation SNSDiamond quadros WebSocket disponibilizam atividade de diamantes. Quadros dedicados de diamantes são tratados como eventos de doação. hasDonation é formatado como diamantes para conversão compartilhada em USD, e meta.amount/meta.currency permanecem planos para automações.
liked / reaction SNSLike chegam quadros WebSocket. Curtidas com autor identificado usam o mesmo liked vocabulário e encaminhamento centralizado em segundo plano do TikTok. Totais agregados/anônimos de curtidas são enviados apenas ao destino de reações como reaction, com campos planos meta.reactionType, meta.totalLikes, e meta.subscriberLikes. A distinção é o significado do evento, não o anonimato: capturelikeevent controla apenas eventos individuais de liked/like eventos.
follower_update SNSVideo metadados WebSocket disponibilizam totais de seguidores. meta é a contagem inteira de seguidores, conforme a convenção compartilhada de eventos de contagem.
guest_update SNSVideoGuestBroadcast chegam quadros de criação/atualização. Evento apenas de metadados para estado de convidado/coapresentador ao vivo. Campos planos meta as chaves incluem status, position, totalGuests, isMuted, guestBroadcastId, videoViewerId, e broadcastId.
viewer_update O indicador visível de espectadores no cabeçalho muda, ou SNSVideo metadados WebSocket disponibilizam totais de espectadores quando o indicador está indisponível; totais inalterados são repetidos aproximadamente a cada 30 segundos enquanto ativados. meta contagem inteira de espectadores; emitida somente quando a captura de contagem de espectadores ou o modo Hype está ativado.

Velora

Implementação: sources/velora.js e sources/websocket/velora.js

  • O modo Standard lê o DOM visível do chat; o modo WebSocket usa a API de eventos do Velora com OAuth.
  • URLs compatíveis do modo Standard incluem https://velora.tv/*, https://velora.tv/dashboard/stream/popout?panels=chat%2Cactivity&channel=CHANNEL&layout=vertical, e https://velora.tv/dashboard/stream/popout/CHANNEL/obs-chat.
  • Cartões no estilo Volts e Pontos do Canal são emitidos como payloads de evento quando disponibilizados pelo DOM ou API de eventos.
Evento Quando é disparado Notas do payload
message Novas linhas de chat do Velora aparecem ou mensagens de chat da API de eventos chegam. Payload padrão de chat com distintivos, cor do autor, links e emotes preservados quando não estiver no modo somente texto.
volts Cartões Volts do Velora ou channel.volts Chegam payloads da API de eventos. hasDonation contém o valor exibido em Volts; capturas DOM incluem meta.source = "dom".
channel_points Cartões de Pontos do Canal/resgate do Velora ou channel.channel_points_redemption Chegam payloads da API de eventos. chatmessage contém a mensagem de resgate ou o título da recompensa; meta.rewardTitle identifica a recompensa quando disponível.
subscription Uma linha visível de atividade do Velora informa que um usuário se tornou membro/inscrito do canal. membership contém o rótulo visível de membro.
viewer_update A contagem visível de espectadores muda enquanto a captura de contagem de espectadores ou o modo Hype está ativado. meta contagem inteira de espectadores.

Parti - Captura de chat de perfil / janela separada

Implementação: sources/parti.js

  • Oferece suporte a URLs de perfil, como https://parti.com/USERNAME e URLs de janela separada, como https://parti.com/popout-chat?id=USER_ID.
  • Contagens de espectadores usam o endpoint heartbeat da transmissão do Parti quando a captura de espectadores ou o modo Hype está ativado.
Evento Quando é disparado Notas do payload
message Linhas visíveis de chat do Parti aparecem no fluxo de chat do perfil ou da janela separada. Payload padrão de chat; nameColor preserva a cor renderizada do autor do Parti e chatmessage preserva o conteúdo embutido, a menos que o modo somente texto esteja ativado.
donation Linhas visíveis de gorjetas do Parti informam que um usuário deu determinado valor. hasDonation contém o valor exibido, meta.amount/meta.currency são preenchidos quando interpretáveis, meta.amountText preserva o texto bruto do valor, e donoValue é definido para gorjetas em USD.
viewer_update O heartbeat do Parti retorna uma contagem de espectadores ao vivo. meta é a contagem inteira de espectadores; a página reutiliza um token de heartbeat por janela de fonte para evitar inflar as contagens.

CHZZK - Captura de chat em janela separada

Implementação: sources/chzzk.js

  • Oferece suporte a https://chzzk.naver.com/live/*/chat e https://chzzk.naver.com/iframe/live/*/chat.
  • Contagens de espectadores usam o endpoint de consulta de status ao vivo do CHZZK quando a captura de espectadores ou o modo Hype está ativado.
Evento Quando é disparado Notas do payload
message Linhas visíveis de chat do CHZZK aparecem no fluxo de chat em janela separada. Payload padrão de chat com type: "chzzk", nameColor, URLs de imagens de distintivos em chatbadges, e emotes renderizados em chatmessage a menos que o modo somente texto esteja ativado.
chat com hasDonation Linhas visíveis de doações de queijo do CHZZK aparecem no chat. hasDonation contém o valor exibido em queijo. Essas linhas não definem data.event.
viewer_update A consulta de status ao vivo retorna uma contagem de espectadores. meta é a contagem inteira de espectadores.

Rumble - Captura DOM Standard

Implementação: sources/rumble.js

  • Exige cookies de sessão autenticada para que o service.php a API de espectadores responde.
  • Linhas renderizadas de Rant fornecem hasDonation; cartões de raids recebidas fornecem event: "raid". Esta fonte DOM não emite o feed de eventos de inscritos/seguidores da ponte de API.
Evento Quando é disparado Notas do payload
message Linhas visíveis de chat do Rumble aparecem na página ou no popup de chat. Payload padrão de chat; chatmessage preserva o HTML de imagens de emotes do Rumble depois que a página renderiza, a menos que o modo somente texto esteja ativado.
viewer_update Chama o endpoint do Rumble video.watching-now serviço a cada 30s. meta contagem inteira de espectadores; usa credentials: 'include' para reutilizar cookies de sessão.
chat com hasDonationUma linha visível de Rant contém um preço.hasDonation preserva o preço renderizado; nenhum marcador de evento de doação é adicionado.
raidUm cartão de raid recebida aparece no chat.Usa a mensagem visível de raid e a imagem opcional do cartão em contentimg.

Rumble - WebSocket/URL da API

Implementação: sources/websocket/rumble.js

  • Exige a URL da Live Stream API controlada pelo criador, obtida em https://rumble.com/account/livestream-api. O Rumble documenta que esta URL inclui a chave de transmissão ao vivo, não exige autenticação separada e só deve ser compartilhada com terceiros confiáveis.
  • Transporte somente leitura. A documentação pública da Rumble Live Stream API não descreve um endpoint oficial de envio de chat, portanto esta fonte repassa mensagens/eventos ao Social Stream, mas não envia chat de volta ao Rumble.
  • livestreams[].chat só é preenchido enquanto a transmissão selecionada está ao vivo. Use ?streamId=... para fixar uma transmissão específica quando a API disponibiliza mais de uma; IDs inválidos agora falham em vez de recorrer silenciosamente a outra transmissão.
  • A página também resolve https://rumble.com/chat/popup/<livestreams[].id> para que você possa abrir diretamente o popup normal injetado de chat sem primeiro carregar a página do criador /live página.
Evento Quando é disparado Notas do payload
message Novas entradas chegam do fluxo de chat SSE do Rumble depois que a API oficial resolve livestreams[].id; recorre a livestreams[].chat.recent_messages. Payload padrão de chat. meta.source é rumble_sse quando o fluxo de chat SSE está disponível e inclui URLs de avatar de users[].image.1; caso contrário, recorre a live_stream_api sem avatares. Quando o catálogo de emotes do popup está disponível, chatmessage renderiza emotes de código curto do Rumble como HTML de imagem e meta.plainText preserva o texto original do código curto.
donation Novas entradas de rant aparecem em livestreams[].chat.recent_rants. hasDonation contém o valor formatado em USD; meta inclui amount_cents, amount_dollars, e expiresOn.
new_follower Novas entradas aparecem em followers.recent_followers. Evento de sistema com chatname definido para o nome de usuário do seguidor e horário em meta.followedOn.
new_subscriber Novas entradas aparecem em subscribers.recent_subscribers. membership é definido como SUBSCRIBER; subtitle espelha o valor documentado em USD quando fornecido pelo Rumble.
subscription_gift Novas entradas aparecem em gifted_subs.recent_gifted_subs. chatname é quem presenteou, hasDonation torna-se N Gifted, e meta inclui totalGifted, remainingGifts, giftType, e videoId.
follower_update Sempre que o contador de seguidores selecionado muda. meta contagem inteira de seguidores. O padrão é followers.num_followers; com ?followerMode=total, usa followers.num_followers_total quando fornecido pelo Rumble.
subscriber_update Sempre que subscribers.num_subscribers muda. meta contagem inteira de inscritos.
stream_online / stream_offline Quando a transmissão selecionada alterna entre estados ao vivo e offline. meta inclui um subconjunto higienizado dos campos da transmissão (id, title, createdOn, rótulos de categoria, curtidas/descurtidas e totais de espectadores). Valores confidenciais, como stream_key não são encaminhados intencionalmente.
viewer_update Sempre que livestreams[].watching_now muda para a transmissão selecionada. meta contagem inteira de espectadores simultâneos; emite 0 quando a transmissão selecionada fica offline, para limpar contadores desatualizados.

Este transporte destina-se a canais que você possui ou gerencia. Como a URL da API contém uma chave de transmissão ao vivo, não a exponha em sobreposições, registros, capturas de tela ou perfis compartilhados de navegador. Avatares do chat vêm do fluxo SSE do Rumble depois que a API oficial resolve o ID da transmissão; este transporte não extrai avatares de páginas do Rumble.

YouNow - Captura DOM

Implementação: sources/younow.js

  • Lê o DOM renderizado do chat ao vivo e emite payloads padrão de chat com type: "younow".
  • Linhas de atividade do público, como is watching, I became a fan!, e invited N fans to this broadcast. são marcados com event: true para que filtros de eventos possam encaminhá-los.
Evento Quando é disparado Notas do payload
message Novas linhas aparecem no chat ao vivo do público. Payload padrão de chat; linhas de atividades de fãs/público definem event: true.
viewer_update A contagem visível no painel do público muda enquanto showviewercount/hypemode está ativado. meta contagem inteira de espectadores; emite 0 quando o contador desaparece.

Favorited Studio - Captura DOM

Implementação: sources/favorited.js

  • Lê o DOM renderizado do chat ao vivo e emite payloads padrão de chat com type: "favorited".
Evento Quando é disparado Notas do payload
message Novas linhas de chat aparecem. Payload padrão de chat.
viewer_update A contagem da aba de espectadores ao vivo muda enquanto showviewercount/hypemode está ativado. meta contagem inteira de espectadores lida de content-live-viewers aba.

BEAM - Captura DOM

Implementação: sources/beamstream.js

  • Lê o DOM renderizado do chat ao vivo e emite payloads padrão de chat com type: "beamstream".
Evento Quando é disparado Notas do payload
message Novas linhas de chat aparecem. Payload padrão de chat com texto simples em chatname, URL do avatar em chatimg, e URLs de imagens ou objetos de distintivos SVG em chatbadges. Campos ocultos na página de captura do Beam permanecem vazios. Links nativos de perfis do Beam não são tratados como fontes externas de relay. contentimg pode conter anexos embutidos de vídeo/webm quando disponibilizados.
viewer_update Um elemento de contagem de espectadores muda enquanto showviewercount/hypemode está ativado. meta contagem inteira de espectadores; emitida somente quando a página de chat disponibiliza um contador.

Castyr - Captura DOM

Implementação: sources/castyr.js

  • Lê novas linhas renderizadas de chat de https://castyr.live/homebeta/popout-chat/* e emite payloads padrão de chat com type: "castyr".
  • O histórico existente do chat é ignorado quando a fonte se conecta.
Evento Quando é disparado Notas do payload
message Um novo .chat-message aparece uma linha. Payload padrão de chat com nome do remetente, conteúdo renderizado da mensagem e cor do nome quando disponibilizada.
viewer_update A contagem visível de participantes ativos do chat muda enquanto showviewercount/hypemode está ativado. meta é a contagem inteira lida do elemento de chat ativo com título do Castyr.

SOOP - Captura DOM do player

Implementação: sources/sooplive.js. Oferece suporte ao formato unificado play.sooplive.com player e o legado play.sooplive.co.kr URLs. O antigo layout global de chat continua sendo reconhecido quando servido.

O chat público emite type/platform: "sooplive", texto simples chatname/userid, nameColor, e higienizado chatmessage. Linhas existentes, IDs duplicados de mensagens, cópias traduzidas e sussurros privados são excluídos. Emotes se tornam imagens seguras ou texto alternativo no modo somente texto.

Com showviewercount ou hypemode ativado, viewer_update contém um inteiro meta do campo do player #nAllViewer. Janelas separadas somente de chat podem não disponibilizar essa contagem. O SSApp usa o player completo ao abrir uma janela destacada, pois os popups atuais do SOOP dependem da janela que os abriu.

Gosh - Captura de chat do canal

Implementação: sources/gosh.js. Abra https://gosh.com/USERNAME com o chat visível, ou cole essa URL em Adicionar outra fonte no SSApp. Não é necessária uma janela separada de chat.

Novas linhas de chat emitem type/platform: "gosh", texto simples chatname, nameColor, e higienizado chatmessage. Imagens e GIFs embutidos mantêm URLs HTTP(S) seguras. Com textonlymode, imagens se tornam texto alternativo ou [image] quando nenhum texto alternativo está disponível. Avatares, distintivos, doações e membros permanecem vazios quando ausentes da linha capturada.

Mantenha o chat virtualizado rolado até as mensagens mais recentes. Histórico existente, linhas renderizadas novamente e avisos de sistema sem autor são excluídos. Índices de renderização ficam internos e não são emitidos como IDs nativos de mensagens. Nenhum evento de seguidor, doação, contagem de espectadores ou moderação é inferido.

Livacha - Captura de sala de chat

Implementação: sources/livacha.js. Abra https://livacha.com/chat/ROOM com o chat visível, ou cole a URL da sala em Adicionar outra fonte no SSApp.

Novas linhas de chat emitem type/platform: "livacha", texto simples chatname, chatimg, nameColor, e higienizado chatmessage. URLs relativas de avatares e imagens embutidas se tornam URLs HTTP(S) absolutas. Parágrafos, quebras de linha e listas são condensados em uma mensagem de chat. Com textonlymode, imagens se tornam texto alternativo ou [image].

IDs de mensagens são usados internamente para evitar recapturar edições e linhas remontadas. Histórico inicial e mensagens antigas adicionadas no início são ignorados; horários e menus de reações ficam fora do corpo capturado. Nenhum evento de doação, membro, moderação ou contagem de espectadores é inferido.

Stream.space - Captura DOM experimental

Implementação: sources/streamspace.js. Corresponde somente a https://beta.stream.space/chat-popup.php?channel=USERNAME e o equivalente https://stream.space popup.

Novas linhas renderizadas de chat emitem type: "streamspace", platform: "streamspace", texto simples chatname/userid, chatmessage, avatar chatimg, nível baseado em imagem chatbadges, e nameColor. Emotes embutidos são reconstruídos como imagens seguras ou seu texto alternativo quando textonlymode está ativado. Histórico existente, avisos de boas-vindas, prévias de respostas e duplicatas fixadas são excluídos.

viewer_update contém um inteiro meta lido de #popupViewersNum quando showviewercount ou hypemode está ativado. Nenhum evento de doação, membro ou moderação é inferido.

Experimental: o popup beta permaneceu em Carregando durante a inspeção. O SSApp carregou o popup e capturou atualizações de espectadores, mas a entrega de chat ao vivo e o popup de produção continuam sem verificação. O SSN não consegue capturar mensagens que o site não renderiza.

w.tv e Prime - Captura DOM

Implementações: sources/wtv.js em https://w.tv/USERNAME/chat e sources/prime.js em https://prime.gs/USERNAME?chat_popout=1.

Novas linhas de chat usam type/platform de wtv ou prime, texto simples chatname, nameColor, e higienizado chatmessage. Emotes embutidos se tornam imagens seguras ou texto alternativo no modo somente texto. Prime também inclui o campo da linha userid e aceita tanto links de perfil com login quanto rótulos de nome de usuário sem login. Avatares e distintivos ficam vazios quando indisponíveis na estrutura verificada da linha.

Histórico inicial, cartões fixados e prévias de respostas são excluídos. O w.tv virtualiza o chat: mantenha-o rolado até as mensagens mais recentes para capturar. Seus IDs de teste do DOM são índices de renderização, não IDs nativos de mensagens. Prime ignora históricos antigos carregados acima das mensagens iniciais e marcadores de usuários ignorados.

Nenhum dos popups disponibiliza uma contagem verificada de espectadores, portanto esses adaptadores não emitem atualizações de espectadores nem inferem eventos de doação, inscrição ou moderação.

Alinhamento de eventos entre plataformas

Use esta tabela para entender como conceitos semelhantes são mapeados entre plataformas. Sempre que possível, novas fontes devem se alinhar aos nomes comuns de eventos da primeira coluna.

Conceito YouTube WS Twitch WS Kick WS
Novo membro/inscrito sponsorship new_subscriber new_subscriber
Renovação/reinscrição resub resub resub
Inscrições presenteadas giftpurchase subscription_gift subscription_gift
Presente recebido giftredemption - -
Marco membermilestone - -
Doação/gorjeta superchat, supersticker, jeweldonation com hasDonation cheer (bits) donation
Novo seguidor new_follower (consulta periódica)* new_follower new_follower
Contagem de espectadores viewer_update viewer_update viewer_update
Contagem de seguidores - follower_update follower_update
Contagem de inscritos subscriber_update subscriber_update -
Status da transmissão live_chat_ended stream_online/stream_offline stream_online/stream_offline
Raid - raid -
Resgate de recompensa - reward reward

Notas de alinhamento

  • O YouTube usa sponsorship para novos membros, enquanto Twitch e Kick usam new_subscriber. Considere verificar ambos ao criar gatilhos multiplataforma.
  • resub é consistente nas três plataformas para renovações.
  • Os eventos de presentes diferem: O YouTube usa giftpurchase/giftredemption, enquanto Twitch e Kick usam subscription_gift.
  • As doações variam conforme a plataforma: O YouTube usa nomes específicos de eventos pagos, como superchat, supersticker, e jeweldonation com hasDonation; o Twitch tem bits (cheer ); o Kick tem gorjetas (donation).
  • new_follower agora é consistente nas três plataformas, mas o YouTube consulta inscritos recentes e pode retornar resultados atrasados ou incompletos.
  • Curtidas e reações têm contratos separados: individual liked/like chegam à Sobreposição de reações, a menos que sejam filtrados globalmente, e entram no fluxo principal somente quando capturelikeevent está ativado. Eventos visuais ou nativos da plataforma reaction mantêm o encaminhamento definido pelo produtor. Eventos agregados de likes_update contadores são controlados separadamente por captureliketotals.

Limites de cobertura e compatibilidade

Esta referência descreve payloads implementados, não uma garantia de que toda plataforma entregue todos os eventos. Valores vazios de hasDonation em uma fonte não demonstram suporte a doações. Visibilidade do DOM, permissões da conta, opções de captura e disponibilidade da API ainda determinam o que é recebido. O encaminhamento de exclusões é específico de cada fonte; não presuma sincronização universal de moderação.

Divergências e ausências acompanhadas

Par/área Divergência / ausência observada Impacto
Twitch: Standard versus WebSocket Compartilhado: reward, subscription_gift, viewer_update, hype_train, e opcional watch_streak. Somente Standard: giftpurchase, knock, community_highlight. Somente WebSocket: new_subscriber, resub, cheer, powerup, raid, new_follower, follower_update, subscriber_update. channel_points agora é um alias legado obsoleto para resgates de recompensas do Twitch; novas integrações devem usar reward.
Kick: Standard versus WebSocket Standard emite marcadores simples (gift, reward, booleano true, viewer_update). WebSocket adiciona eventos oficiais de seguidores, inscrições, presentes, resgate de recompensas, KICKs, moderação e status ao vivo. Mantém o tratamento de compatibilidade para um evento legado raid payload, mas o Kick atualmente não oferece uma assinatura oficial de raid/host. O modo WebSocket é mais completo; automações baseadas em nomes de eventos exclusivos do Standard devem ser revisadas ao mudar. Não exija um evento de raid do Kick.
YouTube: Standard versus WebSocket Compartilhado: superchat, supersticker, jeweldonation, sponsorship, resub, giftpurchase, giftredemption, viewer_update. Somente Standard: thankyou, redirect. Somente WebSocket: membermilestone, new_follower, subscriber_update, view_update, likes_update (ativação opcional). Os nomes principais de eventos/membros são alinhados em ambos; Super Chat, Super Sticker e Joias usam hasDonation, enquanto compras/resgates de presentes de membros não.
Todas as interfaces Muitas fontes preenchem hasDonation sem definir data.event. Isso está correto; a renderização de doações deve usar hasDonation, com data.event reservado à semântica de sistema/evento.

Aliases e nomes legados específicos de fontes

Esses mapeamentos são específicos da fonte/contexto listado, não substituições globais. O suporte a aliases pelos consumidores varia por página. As fontes atuais TikTok DOM e TikFinity ainda emitem followed; Velora usa subscription e channel_points, e o Streamlabs usa subscription. Aceite o contrato atual da fonte e seus aliases legados relevantes em vez de renomear todos os eventos correspondentes.

Alias / nome legado Substituição canônica Contexto
subscriptionnew_subscriberNova inscrição do Twitch/Kick
subgiftsubscription_giftInscrição presenteada do Twitch
membershipsponsorshipNovo membro do YouTube (genérico)
new_membersponsorshipNovo membro do YouTube
new_membershipsponsorshipNovo membro do YouTube
newmembersponsorshipNovo membro do YouTube
new-membershipsponsorshipExtrator DOM do YouTube (variante com hífen)
upgraded_membershipresubUpgrade de nível do YouTube
upgraded-membershipresubExtrator DOM do YouTube (variante com hífen)
membership_upgraderesubUpgrade de nível do YouTube
membership_milestonemembermilestoneMensagem de marco do YouTube
member_milestonemembermilestoneMensagem de marco do YouTube (variante com sublinhado)
gift_membershipgiftpurchasePacote de presentes do YouTube
membership_giftgiftpurchasePacote de presentes do YouTube
giftmembershipsgiftpurchasePacote de presentes do YouTube (variante plural)
gifted_membershipgiftredemptionPresente recebido no YouTube
gifted_membershipsgiftpurchasePacote de presentes do YouTube (variante plural)
community_giftgiftpurchasePacote comunitário de presentes
channel_pointsrewardResgate de recompensa do Twitch WebSocket (alias legado)
followednew_followerSaída atual do TikTok DOM/TikFinity; aceite ambos os nomes ao combinar modos de captura do TikTok.

Usar esta referência

  • Ao adicionar um evento, reutilize o vocabulário existente (subscription_gift, viewer_update, etc.) sempre que possível. Se um desvio for inevitável, documente-o aqui junto com a justificativa.
  • Mantenha data.meta previsível: prefira chaves planas, nunca sobrecarregue strings com dados mistos e sempre inclua unidades (currency, bits, duration).
  • Atualize esta página junto com mudanças nos payloads; atualize as instruções dos agentes somente quando regras compartilhadas de desenvolvimento mudarem.
  • Valide mudanças nos payloads tanto na fonte emissora quanto na sobreposição ou gatilho do Event Flow consumidor.
  • A captura depende do suporte da fonte e das configurações. Para ocultar linhas marcadas como evento no dock ou nas sobreposições de destaque, adicione &hideevents ou &hideallevents. Para ocultar eventos selecionados, use &filterevents=subscription_gift,new_follower,gifted.
  • Para YouTube, Twitch e Kick, ative Modo WebSocket para o suporte mais amplo a eventos específicos da plataforma. A captura de presentes/doações do YouTube (incluindo presentes e Super Chats) está disponível nos modos Standard e WebSocket; WebSocket adiciona outros tipos de evento. O suporte exato ainda varia conforme plataforma, função da conta e escopos concedidos.

Voltar ao topo

Sobreposições de monetização

Gorjetas do NinjaBacker usam platform: "ninjabacker", type: "ninjabacker", chatname, texto simples chatmessage, textonly: true, um campo com prefixo da fonte id, formatado hasDonation, e numérico donoValue. São linhas comuns no estilo doação sem um event substituição. meta.ninjabacker contém o horário ISO currency e em unidade principal amount. Gorjetas anônimas usam o nome de exibição Anonymous. A fonte usa SSE ao vivo (sem reprodução de histórico) ou o receptor opcional de webhook assinado na API do SSN (até sete dias de entrega enfileirada). Entregas confiáveis usam um identificador estável ninjabacker:delivery:DELIVERY_ID ID. Nenhum modo recebe estornos de reembolso/contestação. Credenciais de receptor e segredos de assinatura nunca entram nos payloads de eventos. Valores callbackId controlados pelo chamador não são identidade de pagamento e não são encaminhados. Gorjetas de teste do painel são excluídas das linhas de doação. Elas emitem event: "monetization_test" com meta.ninjabackerTest contendo id e at (milissegundos Unix), apenas para o alerta dedicado de prévia.

event: "monetization_update" é um retrato apenas de metadados de type/platform: "socialstream". meta.monetization.wishlist contém enabled, qr, position, rank, total, url pública e o item atual (name, amount, currency, image, url pública) ou null. meta.monetization.ninja contém enabled, qr, position, username e a url pública de gorjetas. Tip IDs privados nunca são incluídos. meta.monetization.ebay contém enabled, qr, position, display (cycle/cheapest/first), seconds, configurações opcionais de anúncios e itens públicos. Cada item tem id, name, amount, currency, image, url, auction, startingBid, endsAt, available, bought e updatedAt. Os horários são milissegundos Unix. Nenhuma credencial de vendedor nem identidade de comprador é incluída.

Uma compra de lista de desejos confirmada pelo anfitrião também inclui meta.wishlistPurchase com id, name, supporter opcional e at (milissegundos Unix). Isso é uma confirmação do anfitrião, não uma notificação de pagamento da Amazon, e não conta como doação monetária. Sobreposições devem deduplicar seu id e ignorar avisos antigos de compra.

Pedidos pagos do Shopify

O receptor opcional assinado do Shopify emite platform/type: "shopify" e event: "purchase" somente para orders/paid com financial_status: "paid", um total positivo, test: false, sem cancelamento e com um horário atual de atualização do corpo assinado. Notificações de teste, não pagas, antigas, canceladas e de reembolso não emitem ações de compra. Nenhuma intenção de presente é inferida.

chatname é Anonymous; campos de clientes, notas privadas e URLs de pedidos são excluídos. chatmessage é texto simples com textonly: true; subtitle contém até três títulos públicos de produtos. meta.commerce contém orderTotal e currency na moeda da loja, além de quantity quando uma contagem completa válida é conhecida. Destinatário e finalidade física/digital permanecem indefinidos. Sem hasDonation ou donoValue é definido. id é um hash opaco estável restrito à loja/pedido com prefixo Shopify; não é um identificador bruto de pedido.

Compras usam os caminhos existentes de atividade, categoria Compra do Multi Alerts e Event Flow. A promoção de produtos usa o recurso existente meta.monetization.commerce catálogo. Importar um produto ou definir seu rótulo promocional como Presente não gera evento de compra nem de presente. Configuração do Shopify e limites de entrega.

Presentes e comércio

Use event: "gift" para um presente, giftcontribution para apoio pago destinado a um presente, giftfunded para conclusão de financiamento, e purchase para uma venda de produto. Esses nomes independem do provedor e de o item ser físico ou digital. Reserve o legado giftpurchase para membros presenteados; o Throne usava esse nome incorretamente e agora emite gift. Os produtores existentes de eventos de membros permanecem inalterados. Filtros personalizados de nomes de eventos do Throne devem mudar para gift; filtros de doações não precisam mudar.

hasDonation continua sendo o sinal de compatibilidade para apoio pago, com donoValue com seu valor em USD fornecido ou estimado. Presentes e contribuições mantêm esses campos. A conclusão do financiamento omite ambos para evitar contar contribuições duas vezes. Vendas comuns de produtos os omitem por padrão, preservando o contrato do eBay. Não deduza intenção de presente a partir de uma loja, URL de lista de desejos ou item físico: uma compra para o comprador ou outro destinatário continua sendo venda, a menos que a fonte identifique explicitamente um presente para o criador.

Campo compartilhado opcional meta.commerce os campos são recipient (criador, comprador, outro), itemType (físico, digital, serviço), quantity (quantidade positiva de itens), currency (moeda ISO), goalAmount (alvo de financiamento em unidade principal, nunca nova receita), e orderTotal (total conhecido do pedido pago em unidade principal; comércio, não receita de doação). Omita detalhes desconhecidos. Mantenha os nomes de itens em subtitle, imagens em contentimg, e texto do apoiador em chatmessage. Os metadados existentes do provedor continuam disponíveis. O Throne fornece destinatário e moeda, além de goalAmount na conclusão; o eBay fornece quantidade. Nenhum tenta adivinhar o tipo de item nem expõe informações privadas do destinatário.

O feed de atividades exibe esses eventos mesmo sem texto do apoiador. O Multi Alerts usa a apresentação de doação para presentes e contribuições, incluindo uma notificação distinta de Presente totalmente financiado sem valor monetário. Compras têm uma categoria Compra separada, ativada por padrão, com purchasestyle, purchasesound, purchaseaccent, e disablepurchases de URL. Alertas de compra não mudam os totais de doações.

O Event Flow oferece esses nomes de evento nos gatilhos Tipo de evento e Outro evento. Gatilhos de doação ainda inspecionam hasDonation; gatilhos de inscrição presenteada mantêm a semântica de membros. Comparar propriedade aceita caminhos aninhados, como meta.commerce.recipient. Modelos de ações aceitam {meta.commerce.quantity} e {meta.commerce.currency}, junto com os campos existentes {donation}, {subtitle}, e {meta}. Caminhos aninhados diferenciam maiúsculas/minúsculas, valores ausentes são renderizados vazios e a travessia de protótipos é proibida.

Webhooks de comércio de criadores e sobreposições promocionais

Pagamentos públicos de doação do Ko-fi preservam hasDonation e recebem USD donoValue. Pagamentos de assinaturas usam new_subscriber ou resub, com o nível em membership. Pedidos de loja e encomendas usam purchase sem valores de doação. Eventos privados do Ko-fi continuam excluídos. JSON codificado em formulário é decodificado uma vez; nomes e mensagens são texto simples.

Buy Me a Coffee donation.created mantém apoio monetário; extra_purchase.created e commission_order.created tornam-se purchase. wishlist_payment.created torna-se giftcontribution usando apenas o valor desse pagamento; meta.commerce.completed registra o indicador de conclusão do provedor sem emitir outra linha monetária. membership.started torna-se new_subscriber com o nível em membership, deixando de usar incorretamente hasDonation para um nome de nível. Um valor de início de assinatura não é tratado independentemente como cobrança paga. Eventos de teste, reembolso, falha e atualizações/ciclo de vida não suportados não produzem alertas pagos. Notas ocultas de apoiadores são omitidas.

Fourthwall suporta ORDER_PLACED (purchase), GIFT_PURCHASE (gift, destinatário outro), DONATION (linha normal de doação) e SUBSCRIPTION_PURCHASED (new_subscriber). Os totais de pedidos existentes mantêm hasDonation para compatibilidade com versões anteriores, marcado meta.commerce.legacyDonationValue: true; esta é uma exceção explícita aos novos padrões de vendas de produtos. Pedidos com cartões-presente aplicados emitem alerta de compra sem valor de doação: não é possível deduzir com confiança a nova cobrança pelo total do pedido, e a compra do presente já foi contada. Nomes de faturamento e endereços de e-mail não são usados como identidade pública. Eventos de teste do painel e atualizações de pedidos não geram alertas pagos.

Esses adaptadores mantêm o relay, as ações de bot, o Event Flow e o encaminhamento de destinos existentes, com meta.webhookId deduplicação. Disponibilizam nomes públicos, mensagens em texto simples, nomes conhecidos de itens em subtitle, e ISO meta.commerce.currency junto com valores numéricos de doação quando aplicável. Não adicionam contabilidade de reembolsos nem nova autenticação do receptor; use a rota de webhook já configurada do provedor.

meta.monetization.commerce em monetization_update contém enabled, qr, position, display (first/cycle), seconds e um array público items. Cada item tem name, url, image, amount opcional (null quando desconhecido), currency e purpose (shop/gift/support/membership). São detalhes promocionais inseridos pelo anfitrião, não comprovantes de pagamento. Adicionar ou editar itens não emite eventos de doação nem de compra. A sobreposição genérica usa mode=commerce; view=both|showcase|card|alerts separa promoção de atividade. Parâmetros opcionais de URL style, scale, cardevery, cardfor e onlytype controlam a apresentação. Modos existentes de provedores também aceitam view e controles de programação. Veja o guia de configuração.

Eventos de presentes do Throne

A integração opcional de Monetização encaminha eventos assinados do Throne com platform e type definido como throne. Os três usam um identificador estável de entrega id, texto simples chatname, chatmessage com textonly: true, nome do item em subtitle, e miniatura HTTPS opcional em contentimg.

eventoSignificadoValor da doação / nível
giftUm presente compradohasDonation e USD donoValue; +1 nível de presente
giftcontributionUma contribuição para um presenteSomente valor da contribuição; sem aumento de nível
giftfundedUm presente de financiamento coletivo concluídoNão hasDonation ou donoValue, evitando contar novamente contribuições anteriores; +1 nível de presente

meta.throne contém itemName, creator (nome de usuário público), completed, currency e em unidade principal amount. Para giftfunded, o valor descreve a meta, não nova receita. Presenteadores anônimos permanecem Anonymous; presentes comunitários concluídos usam Community. Campos privados de pagamento e entrega nunca são encaminhados.

monetization_update também contêm meta.monetization.throne: enabled, username, url, qr, position, rank, e gifts. Esses retratos de estado não contêm URL de webhook nem credenciais de escuta.

Comandos de voz do anfitrião (prévia para desktop)

O Event Flow Quando eu disser... recebe comandos confiáveis de microfone local do SSApp. Seu contexto interno de ação usa chatname: "Host", type: "hostvoice", a frase reconhecida em chatmessage, e textonly: true. Isso não é um evento recebido da plataforma nem um novo transporte de chat. Enviar esses campos pelo chat não ativa um gatilho de voz.

Exige uma versão atualizada do aplicativo para desktop, início explícito do microfone e ativação de ações após o modo Teste. Veja o configuração de prévia e status de validação.

Controles de exibição de produtos

Existente monetization_update podem incluir meta.monetization.commerce.live: null para a programação salva, ou {mode: "show" | "hide", url?: "https://...", until: 0 | epochMilliseconds}. Mostrar corresponde à URL exata do produto salvo; um produto ausente não mostra cartão. Um until positivo expira e volta à programação salva; zero dura até ser alterado ou o SSN reiniciar. Ocultar suprime promoções, não alertas de atividades pagas.

commerce.viewerURL é a URL publicada da loja somente leitura ou uma string vazia. Quando presente, QR codes promocionais apontam para ela. Nunca contém a sessão do SSN nem a chave de publicação. Os produtos permanecem em commerce.items. Nenhum evento de doação/compra é emitido por controles de exibição, importações ou publicação. Veja Controles de produtos para uso do Event Flow e da API remota.

O Event Flow commerceControl aguarda a resposta direta/do Chrome (até oito segundos). Em payloads comuns de evento, preserva o evento e adiciona meta.commerceControlResult: {success: true, commerce: controlState} ou {success: false, error: "..."}. Para um valor existente numérico, array ou outro que não seja objeto em meta, os metadados permanecem inalterados e o diagnóstico é retornado como commerceControlResult no resultado da ação, em vez disso. Controles que falham interrompem as ações posteriores nessa cadeia sem suprimir o evento original de pagamento. Um tempo esgotado não comprova que o controle não foi aplicado; inspecione o estado antes de repetir um comando relativo, como Próximo. O sucesso confirma o estado local selecionado/oculto/programado, nunca a visibilidade no OBS nem a sincronização da página pública.

Fluxos nomeados do Stream Deck / API

O gatilho de fluxo nomeado cria uma mensagem interna do Event Flow com type: "api", event: "workflow_trigger", chatname: "Stream Deck / API", vazio chatmessage, e textonly: true. Seu meta.workflow contém o nome do gatilho e um JSON fornecido pelo chamador data objeto. Leia os valores por modelos, como {meta.workflow.data.minutes}. Somente fluxos salvos e ativados que correspondam explicitamente a esse gatilho são avaliados. Isso não é um evento recebido de espectador/chat e não é transmitido como chat; copiar esses campos para o chat não ativa o gatilho nomeado.

Piloto de público do NinjaChatter

O conector experimental pareado da extensão envia linhas somente para exibição com type: socialstreamchat, platform: ninjachatter, e textonly: true. meta.ninjachatter contém origin: audience, o campo descritivo provider, e público room ID. Essas linhas ignoram respostas às plataformas, bots, gatilhos do Event Flow e pontos. Um provedor exibido não representa autorização. Capturas legadas da fonte NinjaChatter incluem meta.ninjachatter.room para supressão de duplicatas por sala.

Cheer usa um caminho separado e autenticado de solicitação e resultado, nunca um comando especial de chat. A predefinição fixa emite o evento existente da sobreposição Actions show_text por três segundos. Seu recebimento significa aceitação pelo transporte, não exibição verificada no OBS. Nenhum payload do público pode selecionar ações arbitrárias. O piloto fica desativado por padrão no NinjaChatter; o Electron mantém seu relay existente até que o novo limite de pareamento privado seja validado.

Painéis de posições comerciais e vendas recentes

O recurso existente monetization_update evento (type/platform: socialstream) também inclui meta.monetization.boards. Seu board contém title, style (posições/times), columns (1–20), visible, e até 120 spots. Cada posição tem uma string id, texto simples label, status (disponível/reservada/revelada) e result (texto simples, vazio até a revelação). Reservas e revelações são estados de exibição inseridos pelo anfitrião, não comprovantes de compra nem atribuições aleatórias.

boards.sales contém até 100 registros recentes: id, title, opcional amount (null quando desconhecido), currency, quantity, source, e at (milissegundos Unix no momento do registro). automatic ativa a coleta, salesVisible controla a exibição e revision aumenta quando há mudanças. A coleta automática aceita apenas purchase de Shopify, vendedor do eBay, Fourthwall, Ko-fi e Buy Me a Coffee; eventos privados/de teste são excluídos. Não trata metadados de leilão, gorjetas, presentes ou reservas de posições como compras. Registros automáticos não substituem o preço de um item por totais de pedidos, preços de anúncios ou valores de doação. Registros manuais usam source: "Host confirmed".

O estado persiste no armazenamento privado de monetização desta instalação; retratos públicos excluem IDs de deduplicação de entrega, identidade de compradores e segredos. Vendas explicitamente exibidas mantêm seus IDs de evento para remoção. Reembolsos exigem remoção pelo anfitrião. IDs de compras duplicadas são lembrados separadamente (até 2.000), inclusive após limpar o histórico visível. O recurso existente getCommerceState a resposta inclui commerce.boards; commerceControl aceita os comandos de painel/vendas documentados no guia de painéis. Edições manuais transmitem o estado atualizado, mas nunca criam eventos de compra, totais de doação nem recompensas pagas. As sobreposições se ocultam quando o retrato de estado do anfitrião fica ausente por 35 segundos.

Adições ao fluxo do vendedor: commerce.boards.board.id identifica uma geração de painel. Um registro manual de saleAdd pode fornecer boardId e spotId para registrar a venda e reservar a posição atomicamente; vendas vinculadas duplicadas ainda presentes no histórico recente são rejeitadas. saleRemove com reopenSpot: true libera essa posição somente se a geração do painel ainda corresponder. Entradas públicas de venda omitem esses campos de vínculo do operador. Um campo opcional platform em uma venda manual preserva sua fonte para filtragem, enquanto source: "Host confirmed" identifica o método de confirmação. amount é o total da entrada, incluindo sua quantity. O campo do adaptador de pedidos pagos do eBay meta.ebayPurchase.quantity é preservado.

salesSettings.auctionSource ativa o assistente de itens do Whatnot ou eBay Live. O campo da resposta de controle commerce.auction contém apenas source, title, priceText, status e at do último evento capturado auction_update, ou null. Expira após cinco minutos e é limpo ao mudar de fonte, receber um retrato inativo ou reiniciar. O assistente é exclusivo do operador: não é persistido nem incluído nas transmissões ao público; a identidade de licitante/vencedor é descartada. Scripts de fontes e payloads de eventos de leilão permanecem inalterados. Copiar um rascunho não confirma pagamento nem cria venda.