Référence des événements en direct

Cette page documente les données d'événements canoniques émises par Social Stream Ninja pour les principales plateformes. Utilisez-la comme référence commune pour intégrer de nouvelles sources, résoudre des problèmes d'intégration ou harmoniser les libellés de l'interface. Pour un tableau plus court destiné aux consommateurs, consultez Compatibilité des événements et alertes.

Important : La disponibilité des événements dépend de la source, des autorisations et des paramètres de capture. Pour masquer les lignes marquées comme événements dans le Dock ou les incrustations de mise en avant, ajoutez &hideevents ou &hideallevents. Pour masquer certains événements, utilisez &filterevents=subscription_gift,new_follower,gifted. Ces filtres peuvent également masquer les lignes payantes contenant un champ event; les lignes ordinaires de dons sans marqueur d'événement ne correspondent pas aux filtres d'événements. Les autres filtres de messages restent appliqués.
Choisissez la méthode de capture : Pour YouTube, Twitch et Kick, Mode WebSocket offre généralement une couverture d'événements plus large. La capture DOM standard lit les lignes et cartes effectivement affichées sur la page. Les Super Chats, Super Stickers et cadeaux Jewel de YouTube disposent de circuits de capture dans les deux modes ; les autres événements de cadeaux, pourboires et abonnements varient selon la source. Consultez les tableaux des plateformes pour les circuits pris en charge et les paramètres requis.
Vous créez des automatisations ? Consultez le Guide Event Flow pour apprendre à utiliser ces données d'événement dans des déclencheurs, alertes et flux de travail personnalisés. Le guide inclut un Référence des variables de modèle pour le formatage du texte.
Structure des données : Les lignes de chat de type don doivent utiliser hasDonation et facultatif donoValue. Ne définissez pas event: "donation" simplement parce qu'une ligne ordinaire de chat/pourboire a une valeur ; utilisez des noms d'événements précis uniquement pour de véritables actions de plateforme ou types d'articles payants, tels que superchat, supersticker, gift, ou jeweldonation. Utilisez meta uniquement pour les données structurées supplémentaires dont les consommateurs ont réellement besoin et qui ne sont pas déjà couvertes par les champs existants.

Disponibilité rapide des fonctionnalités

Utilisez ce tableau pour voir quels types d'alertes chaque méthode de capture fournit actuellement. Des notes détaillées sur les données suivent ci-dessous.

La boîte d'alertes multistream dédiée regroupe les événements en direct en six catégories principales d'alertes : Follow, Subscription/Member, Donation, Bits/Cheers, Raid/Host, et Purchase, plus deux catégories sur activation (Auction et Hype Train) activées par paramètres d’URL. Ces catégories sont déduites des champs existants event, membership, subtitle, hasDonation, et meta champs documentés ici ; aucun format de données distinct n'est nécessaire.

Source Nouveaux abonnés / membres Nouveaux followers Dons Compteurs et extras
YouTube (passerelle Data API) Nouveaux abonnements, renouvellements, cadeaux Alertes individuelles de nouveaux abonnés* + totaux Super Chats et Super Stickers Totaux de spectateurs, d'abonnés et de vues (interrogation périodique)
Twitch – Capture DOM Lignes de lots de cadeaux et avis de destinataires - Bits signalés via hasDonation Nombre de spectateurs, cartes de récompenses et cartes de mise en avant communautaire
Twitch – EventSub/WebSocket Abonnements, réabonnements et cadeaux instantanés Nouveaux followers instantanés + total de followers Cheers, Power-ups et utilisations de points de chaîne Totaux de spectateurs/abonnés/followers, état du direct, avis publicitaires
TikTok Live - Cartes de nouveaux followers (lorsque TikTok les affiche) Cadeaux convertis en totaux de pièces Nombre de spectateurs, alertes d'arrivée et rafales de J'aime
YouNow - Activité des fans et du public - Nombre de spectateurs du panneau du public en direct
Favorited Studio - - - Nombre de spectateurs de l'onglet des spectateurs en direct
Whatnot - - - Nombre de spectateurs, alertes d'arrivée, métadonnées d'enchères en direct, produits et instantanés de tirages au sort
eBay Live - - - Nombre de spectateurs, nombre de followers, instantanés des cartes d'événements en direct, métadonnées du pied d'enchère (lorsqu'elles sont exposées), cœurs de réaction et métadonnées des événements à venir
Boîte d'alertes Streamlabs Abonnements, cadeaux, sponsors, nouveaux followers Cheers/bits, dons (avec devise) Cheers/bits, dons (hasDonation) Lorsqu'une boîte d'alertes est ouverte ; également disponible via sources/websocket/streamlabs.html jeton socket
OBS Flow Actions - - - Événements OBS de sortie, de scène, de tampon de relecture et de fin de média pour Event Flow lorsque actions.html est connecté à OBS WebSocket
Kick – DOM - - - Nombre de spectateurs et avis système simples de récompenses/cadeaux ; utilisez la passerelle Kick pour des alertes plus complètes
Kick – WebSocket/passerelle Nouveaux abonnements, renouvellements et cadeaux Alertes de nouveaux followers + total de followers Événements de soutien/pourboire (montant + devise) État du direct, utilisations de récompenses et métadonnées de profils
Facebook Live - - Stars lorsqu'elles sont visibles dans le DOM Lignes de chat, Stars et interrogation du nombre de spectateurs
Rumble – Capture DOM - - Prix Rant visibles Chat, raids entrants et interrogation du nombre de spectateurs
Rumble – WebSocket/URL API Nouveaux abonnements et abonnements offerts Alertes de nouveaux followers + total de followers Rants/pourboires (montant + devise) Totaux de spectateurs, totaux d'abonnés, état du direct et flux de chat
Streamplace - - - Nombre de spectateurs ainsi que noms, couleurs, badges, réponses et liens du chat
WorldsWave - - Libellés de dons lorsqu'ils sont présents Chat en direct affiché et mises à jour facultatives du nombre de spectateurs
CHZZK - - Lignes visibles de dons de fromage Lignes de chat, images de badges, émoticônes et interrogation du nombre de spectateurs
BEAM - - - Lignes de chat et interrogation du nombre de spectateurs lorsque la page de chat seule expose un compteur de spectateurs
Seal Team Sloth - - - Lignes de chat détaché affichées et viewer_update interroge lorsque les nombres de spectateurs sont activés
Castyr - - - Lignes de chat détaché affichées et mises à jour facultatives du nombre de spectateurs
RPLAY - - - Connecté /live/chat/box/ fenêtre détachée : type: "rplay" chat, avatars, images de badges de niveau et émoticônes. Les pourboires en pièces conservent leur montant et leur unité dans hasDonation pour la conversion commune en USD, sans événement de don. L'option à activer viewer_update les interrogations utilisent un entier meta depuis le point de terminaison public de direct RPLAY. Les lignes Twitch relayées sont exclues.
FLEX TV - - - Lignes de chat affichées avec les noms, les couleurs des auteurs, les images de badges et les métadonnées des membres

*Les alertes d’abonnés YouTube sont interrogées périodiquement et peuvent être retardées ou incomplètes. La référence API ne garantit pas une fenêtre fixe de quatre heures. Consultez le limites de l'API officielle d'abonnement.

Présentation des champs

data désigne ici l'objet message, pas une enveloppe supplémentaire à ajouter. Les lignes de chat et les événements composés uniquement de métadonnées ont des structures différentes : les compteurs et instantanés d'état peuvent omettre chatname/chatmessage. Dans les tableaux des plateformes, message décrit une ligne de chat ordinaire, pas un texte littéral event: "message".

Champ Structure Utilisation
data.type chaîne Identifiant de source utilisé par les incrustations, les filtres et Event Flow. Instagram conserve le chat en direct sous instagramlive et les commentaires hors direct sous instagram. Consultez le Guide des types de sources pour les variantes, les sources génériques et le routage sortant.
data.chatname chaîne Nom d'affichage fourni par la source, utilisé par le traitement des messages et les sorties autres que les incrustations. Un alias de nom d'affichage configuré peut remplacer cette valeur uniquement dans les copies de données transportées vers le Dock et les incrustations.
data.username chaîne Nom d'utilisateur de la source lorsqu'il est disponible. Les données du Dock ou de l'incrustation utilisant un alias peuvent ajouter ce champ pour préserver la valeur d'origine de chatname pour les actions utilisateur ; le message canonique reste inchangé.
data.userid chaîne Identifiant utilisateur propre à la plateforme. Les actions utilisateur privilégient cette valeur par rapport à username et chatname.
data.platformchaîne (facultatif)Certaines intégrations l'incluent avec type. De nombreux adaptateurs de source l'omettent ; utilisez type pour le routage des sources.
data.idchaîne | nombre (facultatif)Identifiant du message ou de l'événement. Sa signification dépend de la source et du transport ; ne supposez pas qu'il s'agit toujours d'un identifiant de modération natif de la plateforme. Utilisez meta.messageId lorsque l'adaptateur l'expose pour synchroniser les suppressions.
data.donoValuenombre (facultatif)Équivalent numérique en USD fourni par la source, y compris les estimations. Une valeur valide (y compris zéro) remplace la conversion currency.js. En son absence, les consommateurs estiment les USD à partir de hasDonation et du contexte de la source. Les montants et unités d'origine restent dans hasDonation et dans les métadonnées existantes du fournisseur.
data.chatbadgestableau | chaîne (facultatif)URL d'images de badges ou objets de badge (type: "img" avec src, type: "svg" avec html, ou type: "text" avec text). Le relais garde le libellé littéral d’un badge texte dans le champ facultatif rawText et produit des valeurs échappées de text pour les anciennes incrustations. Lors des passages de relais suivants, régénérez text depuis rawText; n'échappez pas text de nouveau. Les moteurs d'affichage actuels affichent rawText littéralement lorsqu'il est présent et conservent sinon l'ancien traitement du texte encodé. Il s'agit d'un champ de représentation, pas d'une autorisation d'afficher du HTML. Les anciennes sources peuvent envoyer une seule chaîne HTML au lieu d'un tableau. Les incrustations affichant des badges acceptent les deux formats et assainissent localement le HTML et les URL des badges, même lorsque l'expéditeur est une ancienne extension. Les badges non valides ne doivent pas empêcher l'affichage du message de chat ou d'abonnement.
data.event chaîne | booléen Identifiant d'activité système (par exemple viewer_update, subscription_gift, giftpurchase). Le chat ordinaire doit laisser ce champ vide/false pour distinguer les avis système de la conversation.
data.chatmessage chaîne Corps du message. Il peut contenir du HTML assaini et affichable uniquement lorsque data.textonly est false.
data.textonly booléen S'applique uniquement à data.chatmessage. true signifie afficher chatmessage comme texte brut, en préservant les balises littérales et le texte ressemblant à des entités ; ne décodez pas ce corps, ne l'assainissez pas comme du HTML et n'ajoutez pas de balises de formatage. Appliquez le style de l'événement à l'élément affiché. false signifie chatmessage peut contenir du HTML assaini et affichable ; les anciens messages sans indicateur conservent ce comportement HTML. Les autres champs ordinaires sont en texte brut, à l'exception des champs multimédias tels que chatimg et contentimg. Affichez les champs de texte brut avec textContent, ou échappez-les une seule fois en construisant un modèle HTML ; ne supprimez ni ne décodez leur contenu à répétition.
data.contentimg chaîne (facultatif) Image de contenu ou URL de média prise en charge. Dans l'extension et l'application de bureau, l'option à activer allowExternalGifs le paramètre remplit un champ vide à partir du premier lien GIF HTTP(S) direct dans le texte du message ou d'un lien HTML. Le chemin de l'URL doit se terminer par .gif (insensible à la casse) ; paramètres de requête et fragments sont conservés. Aucune clé API requise, conserve chatmessage et les pièces jointes existantes, et respecte removeContentImage. Le champ facultatif hideExternalGifUrl le paramètre ajoute meta.hideExternalGifUrl: true; le Dock et l'incrustation de mise en avant masquent ensuite le lien GIF correspondant uniquement après le chargement de son image, en conservant le texte environnant et les données d'origine. Les images en échec ou expirées replient leur conteneur de pièce jointe et laissent le lien visible. L'incrustation réservée aux GIF tente d'afficher directement l'image si la récupération de ses octets échoue, en utilisant la durée d'affichage configurée lorsque la durée de l'animation est indisponible ; les chargements en échec ou bloqués font avancer sa file d'attente. Elle n'ajoute pas de event ou modifiez la source type. Les images externes ne font pas l'objet d'un filtrage du contenu et peuvent ne pas se charger si l'hébergeur bloque leur intégration.
data.membership chaîne État d'abonnement lisible tel que MEMBERSHIP, new_sponsor, gift_recipient. Les interfaces l'utilisent pour les badges, les filtres et les annonces.
data.subtitle chaîne Description complémentaire (ancienneté d'abonnement, passage à un niveau supérieur, offert par…). Gardez-la courte et en texte seul pour que les incrustations puissent l'insérer sous le nom d'affichage.
data.hasDonation chaîne Montant monétaire ou de cadeau virtuel ($5.00, 500 bits, 300 coins). Renseignez même lorsque data.event est vide pour que les incrustations de dons puissent le détecter.
data.meta nombre | objet | chaîne (ancien format) Utilisez des entiers simples pour les compteurs uniques (spectateurs, followers, abonnés) et des objets pour les contextes plus riches. Certains anciens événements, tels que Twitch DOM community_highlight, portent une chaîne. Vérifiez la structure de l’événement avant de lire des propriétés ; les nouveaux détails structurés appartiennent à un objet.
data.firsttime booléen Définir sur true lorsque la détection des nouveaux participants et la base de données locale sont activées, et qu'il s'agit du premier message de chat enregistré pour cet utilisateur/cette source. Le Dock l'utilise pour la mise en évidence et les filtres de bip des nouveaux participants ; le paramètre facultatif de badge de nouveau participant ajoute un badge en forme de feuille devant chatbadges.
data.lastactivity nombre Horodatage Unix en secondes de la dernière activité de chat enregistrée de cet utilisateur, lorsque la détection des nouveaux participants et la base de données locale sont activées. Omis pour les nouveaux utilisateurs.

Le transport des commandes d'incrustation est distinct du chat et des événements capturés. Les récepteurs mis à jour utilisent un ssnControl enveloppe contenant un identifiant de livraison id, fonction target, canal de réponse facultatif et ID client de l’instantané. Les corps existants restent intacts. Les contrôles publics de fonctions utilisent le canal 7 ; Actions garde le canal 6. Les états Sondage et Carte incluent un champ de l’hôte epoch, revision et reset marqueur ; Timer, Ticker et Spotify utilisent ssnState avec une époque et une révision. Ces marqueurs décrivent l'état de l'hôte, pas un historique restauré des votes ou du chat. Les sources ne doivent pas ajouter de champs d'enveloppe de commande aux messages capturés. Un accusé de réception ne prouve ni l'achèvement de l'action ni la visibilité dans OBS. Consultez le état de la migration pour les fonctionnalités prises en charge, la négociation des réponses et les limites de reconnexion.

Phrase Guess utilise le champ natif {response: text} demande pour les réponses de chat server2 et {action: "phraseGuessResponse", value: {type: "bot", chatname: name, chatmessage: text}} pour les annonces réservées au Dock. L'hôte doit activer les messages entrants server3 ; la désactivation du contrôle par l'hôte bloque toujours ces demandes. Les annonces du Dock sont transmises comme des lignes ordinaires de chat de bot avec textonly: true, sans les envoyer aux saisies de chat des sources. L’ancien mode API conserve son format de commandes.

Conventions de métadonnées

Pour garder les tableaux de bord et les automatisations cohérents, suivez ces conventions lorsque vous étendez data.meta:

  • viewer_update, follower_update, subscriber_update, et likes_update utilisent un entier simple meta valeur. likes_update est un total de plateforme faisant autorité : les consommateurs doivent définir la valeur affichée plutôt que l'additionner. Le script d'arrière-plan agrège les nombres de spectateurs dans viewer_updates avec un objet dont les clés sont data.type.
  • giveaway_state est un instantané composé uniquement de métadonnées, généré par l'hôte pour les affichages gérés. meta.giveaway la version 2 inclut giveawayId, persistant roundId/epoch, augmentant generation entre les nouvelles manches, revision au sein d'une manche, status, open, draw, keyword, count, ticketCount, figé config, jusqu’à 120 éléments d’aperçu entrants, et les 20 derniers winners. Les entrées exposent id, name, platform et tickets; les gagnants ajoutent drawnAt et attribué points. Coin Flip Pot ajoute outcome; Number Hunt ajoute number avec le champ public low, high et récents guesses, jamais le secret. Les consommateurs filtrent par ID de tirage et rejettent les anciennes générations/révisions. Ce sont des échantillons d’affichage, pas un registre complet de billets ni une instruction de paiement. Clés de portefeuille, soldes et réservations restent absents des instantanés publics. L’hôte publie vers le giveaway Libellé P2P et flux WebSocket d'incrustations activés ; cela n'implique pas une visibilité dans OBS. Guide.
  • meta.giveawayControlResult contient le résultat d'une action de tirage au sort Event Flow (ok, facultatif error, giveaway ou simulated). meta.giveawayHandled répertorie les identifiants de tirages déjà traités par une action de flux d'inscription/d'achat afin que la commande de chat automatique ne puisse pas les facturer à nouveau. L'éditeur ajoute meta.economyTest pour les actions de tirage au sort simulées ; il ne s'agit ni d'un événement de plateforme source ni d'un identifiant d'autorisation.
  • video_stats utilise un objet structuré meta objet décrivant l'état de l'encodeur/du serveur externe, notamment provider, label, online, bitrateKbps, rttMs, bufferMs, compteurs de paquets perdus/rejetés et détails facultatifs du codec.
  • Les événements de type don peuvent inclure un objet descriptif : par exemple { amount, currency, supporter } pour Kick, { bits } pour les Cheers Twitch. Les événements d'abonnement possèdent leurs propres métadonnées selon la source ; ils ne sont pas automatiquement des dons monétaires.
  • Les messages de webhook normalisés de Stripe, Ko-fi, Buy Me a Coffee et Fourthwall incluent des champs propres au fournisseur meta.webhookId, copié depuis l’identifiant stable du fournisseur, afin de supprimer les doublons de nouvelles tentatives ou de transports mixtes.
  • Les raids Twitch transmettent { fromId, fromLogin, viewers }. Les autres sources diffèrent : Whatnot utilise meta.numRaiders, tandis que SharePlay utilise le champ facultatif meta.fromLogin/meta.viewers. Consultez la ligne propre à la source avant de lire les métadonnées du raid.
  • Les utilisations de récompenses Twitch EventSub exposent meta.rewardId, cost, rewardTitle, redemptionId, et un ancien alias avec le message préparé. Les cartes de récompenses DOM et les autres sources peuvent fournir moins de champs ou des champs différents.
  • user_banned est composé uniquement de métadonnées pour les widgets de modération. Il omet volontairement chatname et chatmessage; utilisez meta.username, meta.displayName, meta.avatarUrl, et meta.profileUrl.
  • Les transports de chat prenant en charge la synchronisation des suppressions avec la source doivent exposer l'identifiant natif du chat de la plateforme dans meta.messageId au lieu de dépendre du champ interne du Dock data-mid valeur.
  • Les suppressions de source utilisent {delete: {type, id}} pour un identifiant de message connu du Dock, ou {delete: {type, meta: {messageId}}} pour un identifiant de message natif de la plateforme. Un identifiant connu supprime uniquement les messages correspondants. Lorsque seul l'utilisateur cible est connu, envoyez {delete: {type, userid}} ou {delete: {type, chatname}} pour supprimer les messages de cet utilisateur sur cette plateforme. Ne remplacez jamais l'identité de l'utilisateur cible par celle du modérateur. Les suppressions entrantes n'exigent pas le paramètre facultatif de synchronisation de la modération du Dock vers la plateforme.
  • Les métadonnées d'identité de source de SSApp peuvent ajouter meta.ssnAccountRole, meta.ssnSourceId, et meta.ssnSession lorsqu'un rôle de compte autre que normal est attribué à une source.
  • Event Flow peut demander une mise en évidence en définissant meta.featured = true sur les données du chat, ce qui met automatiquement le message en avant dans le Dock et les incrustations de mise en avant.
  • AI Event Overlay : l’action showAiEventOverlay envoie une copie du message qui l’a déclenchée à la cible portant le label aievent-CONFIGURATION_ID, en ajoutant meta.aiEventOverlay: {profile: "CONFIGURATION_ID"}. Les champs existants du message et les métadonnées sous forme d’objet sont préservés ; les métadonnées scalaires sont conservées dans meta.value. Il s’agit d’un envoi ciblé, pas d’un nouvel événement de plateforme. Le message d’origine n’est pas modifié. Consultez le guide de configuration.
  • Facultatif meta.aiEventOverlay.variation sélectionne une expression exacte approuvée dans les paramètres enregistrés de l’overlay. Le texte du spectateur et les métadonnées remplissent les champs du modèle après sa génération.
  • Les requêtes d’affichage d’AI Event Overlay nécessitent un profil et son jeton d’affichage privé. Les paramètres et les clés API se gèrent uniquement dans la fenêtre locale de SSN. Les réponses utilisent {aiEventResponse: {target, value}} ou {aiEventResponse: {target, error}}. Les résultats générés contiennent template, duration, warnings, ainsi que des URL de données multimédias facultatives dans image/audio.
  • Les récompenses de superposition IA payées en points utilisent aiEventPresentation (id, profile, expiresAt, result, message) et confirment la réception avec aiEventDelivered (identifiant de livraison). Les justificatifs de débit et les montants à rembourser restent sur l’hôte.
  • Event Flow peut demander l'épinglage dans le Dock en définissant meta.pinned = true; facultatif meta.pinnedTarget limite cet épinglage à un Dock avec la valeur correspondante de label.
  • L'impression thermique d'Event Flow enregistre son résultat sous meta.thermalPrintResult (success et facultatif code/error), en conservant l’événement de chat et les autres métadonnées. Pour des métadonnées numériques ou non objet, le diagnostic reste dans le résultat de l’action et l’événement ne change pas.
  • Récompenses de stickers SSN à activer : event: "sticker" est envoyé uniquement à stickers libellé d'incrustation après un débit de points de fidélité. Il définit platform et type au champ du message d'origine type, et conserve chatname, avec un champ vide chatmessage, textonly: true, et contentimg contenant un chemin relatif d'image empaquetée ou une URL de média HTTPS approuvée par l'hôte. meta.sticker contient id, pack, name, cost, duration (secondes), motion, redemptionId, et expiresAt (millisecondes Unix). C’est une récompense SSN, pas un don de plateforme ni un événement natif de points de chaîne. Consultez le galerie et guide de configuration.
  • Le lecteur de stickers renvoie un paquet de commande {action: "stickerReceipt", meta: {sticker: {redemptionId, success}}} à son expéditeur lorsque l'image se charge ou échoue. Seuls les accusés de réception provenant d'un pair connecté stickers pair résolvent une utilisation de récompense en attente. Une livraison échouée ou non confirmée déclenche un remboursement ; ce paquet de commande n'est pas un événement de chat. Un seul affichage de stickers actif par session est recommandé.
  • Les commandes de l'incrustation de scène IA utilisent { action: "aiOverlay", target, meta } ou la lecture du coprésentateur contrôlée par le Dock utilise { action: "cohostOverlay", target, meta }; conservez tous les détails de la commande, tels que command, text, emotion, avatar, et tts à l'intérieur de meta.
  • Si une plateforme expose plusieurs compteurs ensemble, préférez un objet structuré avec des clés explicites (meta.viewer_count, meta.follower_count) au lieu de surcharger des chaînes.
  • Les incrustations commerciales doivent utiliser les objets d'instantané sous meta (par exemple auction_update et commerce_update) et évitez les champs improvisés au premier niveau.

Couverture des plateformes

YouTube – Capture DOM standard

Implémentation : sources/youtube.js

  • Gardez l'onglet du chat en direct ouvert. La capture lit les cartes d'abonnement et de cadeaux affichées dans cette session ; elle n'exige pas que le spectateur soit propriétaire ou modérateur de la chaîne. L'accès au compte et la vue de chat sélectionnée peuvent influer sur les lignes visibles.
  • L’ouverture de l’overlay du nombre de spectateurs et de l’activité du chat avec les spectateurs affichés demande automatiquement leur nombre. Les options Afficher le nombre de spectateurs et Suivre les participants actifs du chat activent également la collecte des données.
  • Pour les alertes de nouveaux followers et les événements supplémentaires, activez WebSocket dans les paramètres de l’extension.
Événement Déclenchement Notes sur les données
sponsorship En-tête de bienvenue aux membres sans texte de chat explicite (nouveaux membres, réception de lots offerts), notamment les cartes de bienvenue structurées ou le texte localisé « Bienvenue à … ». membership renseigné avec la traduction de « MEMBERSHIP » ; subtitle contient la série/le niveau lorsqu'ils sont détectés ; nameColor utilise le vert des abonnements lorsque cela est autorisé.
giftpurchase Bannière d'achat d'un lot de cadeaux (ytd-sponsorships-live-chat-gift-purchase). membership devient gift_giver; subtitle contient le nombre de cadeaux lorsqu'il est connu ; aucun hasDonation ou donoValue.
giftredemption Annonce d'activation d'un cadeau pour les destinataires. membership devient « MEMBERSHIP » ; subtitle inclut « Offert par … ».
resub Bannières de passage à un niveau supérieur incluant « upgraded to … ». subtitle contient le nouveau libellé de niveau ; membership reste « MEMBERSHIP ».
superchat, supersticker, jeweldonation Super Chats, Super Stickers, cartes d'annonce de dons et cadeaux YouTube utilisant les Jewels (yt-gift-message-view-model). hasDonation contient la valeur ; event identifie le type d'article payant YouTube. Les cadeaux YouTube utilisent N Jewels lorsqu'il est présent, ou 1 YouTube Gift lorsque YouTube masque le nombre. Les images de cadeaux utilisent contentimg, les libellés de cadeaux utilisent subtitle, et les détails minimaux du cadeau sont recopiés sous meta.youtubeGift.
jeweldonation effet de cadeau YouTube affiche un cadeau Jewel animé au-dessus du chat en direct (ytls-gift-overlay-item-view-model). Envoyé directement à la destination dédiée aux GIF et médias pour permettre la lecture de l'animation sans dupliquer la ligne de cadeau normale. contentimg contient la ressource animée et meta.youtubeGift.animationUrl/animationDescription conservent les détails de l'effet.
reaction Une réaction de spectateur apparaît dans la fontaine d'émojis du direct YouTube. Envoyé directement à la destination dédiée aux réactions. L'émoji anonyme et l'URL de l'image sont conservés dans chatmessage/contentimg et sous meta.reactionType/reactionImage. Les variantes observées en direct comprennent ❤, 😄, 🎉, 😳 et 💯.
thankyou Message de repli lorsqu'un montant de don existe mais qu'aucun texte de chat n'a été fourni. Conserve hasDonation et injecte automatiquement « Merci pour votre don ! » pour les incrustations.
redirect Une bannière de redirection YouTube apparaît dans le chat en direct (l'équivalent le plus proche d'un avis de raid). Capture DOM uniquement depuis yt-live-chat-banner-redirect-renderer. Définit event à redirect et utilise membership comme libellé pour que les incrustations l'affichent comme les autres avis système.
viewer_update Interrogation toutes les 30 s du point de terminaison de spectateurs de Social Stream (repli sur l'extraction de la page en cas d'erreur de quota). meta est le nombre entier de spectateurs en direct ; contribue au total agrégé viewer_updates dans le script d'arrière-plan.

Les blocs d'abonnement définissent également membership pour le chat des modérateurs/membres, tandis que subtitle contient soit un nombre de mois, soit un nom de niveau. sourceName/sourceImg sont renseignés une fois que getChannelInfo réussit. Le chat DOM standard inclut maintenant meta.messageId lorsque YouTube expose un identifiant natif de message de chat en direct, que le Dock utilise pour synchroniser les suppressions.

YouTube – Capture WebSocket/Data API

Implémentation : sources/websocket/youtube.html, utilitaires partagés sous shared/

  • Utilise par défaut les autorisations OAuth youtube.readonly et youtube.channel-memberships.creator. L'accès facultatif en écriture ajoute youtube.force-ssl pour l'envoi de messages de chat, la modération, les bannissements et les modifications des détails du direct ; Google peut présenter cela comme une autorisation générale de gestion de YouTube, car YouTube ne propose aucune autorisation d'écriture limitée au chat.
  • Les statistiques de chaîne respectent les options de chaque paramètre (showsubscount, showviewercount).
  • L'API ne peut pas fournir les images de badges personnalisés ; les badges de repli utilisent les émojis indiqués ci-dessous.
  • Lorsque l'API signale explicitement authorDetails.isChatModerator: true, les données de chat, Super Chat, Super Sticker, cadeau YouTube et adhésion offerte incluent mod: true. Le statut de modérateur n'est ni déduit ni mis en cache entre les événements.
  • Les alertes de nouveaux abonnés utilisent le myRecentSubscribers API (interrogée toutes les 5 minutes). Remarque : les résultats peuvent être retardés ou incomplets ; seuls les abonnements visibles publiquement peuvent être identifiés.
  • Les bannières de redirection YouTube ne sont pas exposées par la Data API, donc redirect reste disponible uniquement avec la capture DOM standard.
Événement Déclenchement Notes sur les données
superchat Entrées Super Chat provenant de l'historique Data API ou de l'interrogation du direct. hasDonation conserve le montant du site (devise + valeur) ; event est superchat. Les anciennes versions WebSocket utilisaient event: "donation" pour cette ligne ; les consommateurs peuvent donc continuer à l'accepter comme ancien alias.
supersticker Super Stickers (texte du message en repli uniquement, aucune image fournie par l'API). hasDonation contient le montant ; chatmessage contient le texte de description décodé.
jeweldonation YouTube giftEvent messages lorsque les spectateurs échangent des Jewels contre des cadeaux. hasDonation contient N Jewels, ou 1 YouTube Gift lorsque YouTube masque le nombre ; contentimg utilise l'URL de la ressource du cadeau lorsqu'elle est exposée ; subtitle contient le libellé du cadeau ; meta.youtubeGift contient des détails supplémentaires sur le cadeau.
sponsorship Un nouveau membre rejoint via newSponsorEvent. membership devient new_sponsor ou new_member; meta inclut originalEventType, durées et informations de niveau.
resub Renouvellements d'abonnement ou passage à un niveau supérieur. membership devient renewed_member (renouvellements) ou upgraded_member (montées de niveau) ; subtitle affiche le niveau.
giftpurchase Lots de cadeaux achetés via l'API. membership défini sur gift_giver; subtitle indique le nombre/le niveau ; aucun hasDonation ou donoValue.
giftredemption Notifications d'activation de cadeaux. membership gift_recipient; les badges utilisent 🎁 par défaut ; subtitle indique le niveau offert.
membermilestone Messages d'étape marquante (memberMonth ou displayMessage présent). membership member_milestone; subtitle résume les mois et le niveau ; meta contient la correspondance brute de l'étape marquante.
viewer_update Statistiques du direct (spectateurs simultanés) lorsque le signalement des spectateurs est activé. meta est un nombre entier ; reproduit le fonctionnement du script DOM pour que les consommateurs en aval puissent fusionner les deux flux. Un Dock utilisant &showviewercount demande la collecte du nombre de spectateurs pendant 70 minutes et renouvelle cette demande toutes les heures sans modifier durablement le paramètre global.
likes_update Interrogation des statistiques officielles de la vidéo lorsque Envoyer les totaux de J'aime de la plateforme est activé. meta est le nombre entier actuel de J'aime de la vidéo. Il est émis lors des changements et périodiquement lorsqu'il ne change pas pour que les consommateurs restent à jour. L'option globale captureliketotals le paramètre l'active ; l'ancien captureyoutubelikes reste un alias de compatibilité. L'activation de l'option par Dock dans la fenêtre &showlikecount l'option active aussi durablement ces paramètres globaux de capture, tandis que l'ajout manuel du paramètre URL contrôle uniquement l'affichage. Désactiver l'option d'affichage ne désactive pas la collecte globale.
subscriber_update Interrogation des statistiques de chaîne (abonnés) lorsque showsubscount pas explicitement désactivé. meta est le nombre total d'abonnés ; l'interface met à jour les compteurs du tableau de bord.
view_update Interrogation des statistiques de chaîne (vues cumulées) lorsque showviewercount ou le mode Hype est actif. meta est le nombre entier de vues.
live_chat_ended Le chat en direct devient indisponible pour la diffusion associée. meta.streamTitle renseigné lorsque les métadonnées du direct ont été mises en cache.
user_banned userBannedEvent depuis l'API de chat en direct ou le flux gRPC. Événement composé uniquement de métadonnées pour les widgets de modération. meta inclut le nom d'utilisateur/d'affichage, l'identifiant de chaîne, l'URL d'avatar/de profil, le modérateur, la durée du bannissement/de l'exclusion temporaire et le caractère permanent.
new_follower Nouvel abonné détecté via myRecentSubscribers API (interrogée toutes les 5 minutes). chatname est le nom de chaîne de l'abonné ; chatmessage est vide sauf si les messages d'alerte de nouveaux abonnés sont activés sur la page source YouTube. meta inclut channelId, title, subscribedAt, et les rafales groupées ajoutent grouped, count, others, et subscribers. Remarque : les résultats peuvent être retardés ou incomplets ; seuls les abonnements visibles publiquement peuvent être identifiés.

Les relais de chat de l'API utilisent meta.plainText pour le message en texte brut avec les données enrichies chatmessage contenu. Il s'agit de texte, pas de HTML, qui peut encore contenir des émojis Unicode. Les badges d'abonnement utilisent des émojis en repli (⭐, 💝, 🏅, etc.) pour rester cohérent avec la capture DOM. Le chat ordinaire inclut aussi meta.messageId pour que les actions de suppression du Dock puissent revenir à l'API de modération YouTube.

Alertes de nouveaux abonnés YouTube (new_follower)

Social Stream peut désormais détecter les nouveaux abonnés YouTube à l'aide de myRecentSubscribers Point de terminaison API. Cela fonctionne de façon similaire aux alertes d'abonnés Streamlabs.

Fonctionnement :

  • Interroge l'API YouTube toutes les 5 minutes pour obtenir les abonnés récents
  • Mémorise les abonnés observés dans localStorage pour détecter les nouveaux
  • Renvoie new_follower événements avec le nom, l'avatar et l'identifiant de chaîne de l'abonné
  • Laisse les messages d'alerte de nouveaux abonnés désactivés par défaut ; leur activation utilise la chaîne de traduction actuelle de alert-just-subscribed
  • Regroupe par défaut les arrivées de plus de trois nouveaux abonnés pour éviter que les reconnexions ne saturent les incrustations ou Event Flow
  • Nécessite l'activation du mode WebSocket dans les paramètres de l'extension

Limites (il s'agit de restrictions de l'API YouTube, et non de Social Stream) :

  • Aucun délai de livraison garanti – SSN interroge toutes les cinq minutes, mais l'API peut renvoyer des résultats retardés ou incomplets. Ne vous fiez pas à une fenêtre fixe de quatre heures.
  • Abonnements publics uniquement – Les abonnés ayant rendu leur liste d'abonnements privée ne déclenchent pas d'alertes. Les abonnements sont privés par défaut sur YouTube.
  • Propriétaire de la chaîne uniquement – Vous ne pouvez recevoir des alertes d'abonnés que pour les chaînes que vous possédez et auxquelles vous êtes authentifié.
  • Utilisation du quota API – Chaque interrogation coûte 1 unité API. À des intervalles de 5 minutes, cela représente environ 288 unités par jour (sur le quota quotidien par défaut de 10 000).

Déclencheur de l'éditeur Event Flow : Utilisez data.event === "new_follower" et data.type === "youtube"

YouTube WebSocket : référence rapide des événements et abonnements

data.event data.membership Scénario
sponsorshipnew_sponsorNouveau membre via newSponsorEvent
sponsorshipnew_memberNouveau membre via processMembership
resubrenewed_memberRenouvellement d'abonnement
resubupgraded_memberPassage à un niveau supérieur
giftpurchasegift_giverAbonnements offerts à la chaîne
giftredemptiongift_recipientAbonnement offert reçu
membermilestonemember_milestoneMessage d'anniversaire d'abonnement
superchat-Super Chat
supersticker-Super Sticker
user_banned-Événement de bannissement/exclusion temporaire composé uniquement de métadonnées
new_follower-Nouvel abonné (interrogation périodique ; délai possible)

Twitch – Capture DOM standard

Implémentation : sources/twitch.js

  • Gardez le chat Twitch ouvert. Les abonnements et avis utilisateur sont capturés lorsque Twitch les affiche ; ils ne sont pas réservés aux comptes de diffuseurs ou de modérateurs. Une authentification peut être nécessaire pour les fonctionnalités propres au compte.
  • Les requêtes de nombre de spectateurs ciblent https://api.socialstream.ninja/twitch/viewers toutes les 30 secondes.
  • Pour les alertes de nouveaux followers, les raids et la prise en charge complète des événements, activez WebSocket dans les paramètres de l’extension.
  • Les avis Watch Streak partagés par les spectateurs sont désactivés par défaut et nécessitent l'option Afficher les séries de visionnage Twitch paramètre.
  • L'option à activer PluralMind le paramètre peut remplacer chatname, nameColor, et la portion encapsulée par le proxy de chatmessage, et peut ajouter un badge texte de pronoms. username reste l'identifiant de connexion Twitch ; les suppressions associées contiennent delete.meta.pluralmind pour que le Dock utilise cet identifiant de connexion stable.
Événement Déclenchement Notes sur les données
reward Cartes d'utilisation de points de chaîne (y compris le conteneur de récompenses 7TV). chatmessage contient le texte d'utilisation de récompense ; membership inchangé.
giftpurchase Lignes système telles que « User gifting X Subs in the channel ». chatmessage est la ligne système, permettant aux incrustations de mettre en avant les campagnes de cadeaux.
subscription_gift Avis d'abonnements offerts (« User gifted a Sub to … »). Marque l'événement pour les filtres de mise en évidence ; membership reste le libellé de badge du destinataire.
viewer_update Récupération toutes les 30 s auprès du proxy de spectateurs de Social Stream (valeur de repli de 0 en cas d'erreur). meta nombre entier de spectateurs.
hype_train La mise en avant communautaire épinglée de Twitch montre un Hype Train actif dans le chat détaché. Repli DOM composé uniquement de métadonnées avec meta.sourceMode défini sur dom. Utilise le niveau, le minuteur et le champ visibles meta.progressPercent lorsque Twitch n'expose pas les totaux de points EventSub.
community_highlight Éléments du widget « Community Highlight » de Twitch. meta est le texte extrait de la mise en évidence pour les points d'intégration des automatisations.
knock Invitations de collaboration Stream Together affichées au-dessus du chat. chatmessage contient le texte de l'invitation ; chatname est dérivé de l'utilisateur de l'alerte lorsqu'il est disponible.
watch_streak Avis Watch Streak partagé volontairement par un spectateur et affiché dans le chat Twitch. meta.streakCount contient le nombre visible lorsqu'il est détecté ; meta.milestoneId utilise l'identifiant de l'avis DOM lorsqu'il est disponible.

Les bits et Cheers renseignent hasDonation (par exemple « 500 bits »), même si data.event reste vide ; utilisez ce champ pour afficher les widgets de dons. Les informations de série d'abonnement apparaissent dans subtitle lorsque les badges exposent les mois.

Twitch – EventSub/WebSocket

Implémentation : sources/websocket/twitch.js avec le noyau partagé providers/twitch/chatClient.js

  • Autorisations 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. Les tokens du diffuseur débloquent les totaux d’abonnés/suivis.
  • Événements fournis par EventSub, plus interrogation Helix des totaux de spectateurs, de followers et d'abonnés.
  • Le mode WebSocket fournit en temps réel alertes de nouveaux followers, événements d'abonnement, raids, Cheers, Power-ups, utilisations de points de chaîne et métadonnées de Hype Train.
  • Les lignes Shared Chat utilisent les champs IRC Twitch source-room-id pour renseigner sourceName/sourceImg avec la chaîne d'origine lorsqu'elle diffère de la chaîne connectée.
  • Les avis Watch Streak partagés par les spectateurs sont désactivés par défaut et nécessitent l'option Afficher les séries de visionnage Twitch paramètre.
  • L'option à activer PluralMind le paramètre peut remplacer chatname, nameColor, et la portion encapsulée par le proxy de chatmessage, et peut ajouter un badge texte de pronoms. username et userid conservent l'identité Twitch ; les suppressions associées contiennent delete.meta.pluralmind pour que le Dock utilise ces champs stables.
Événement Déclenchement Notes sur les données
cheer Notifications de Cheers d'EventSub channel.bits.use. hasDonation « N bits » ; meta.bits numérique ; chatmessage conserve le message brut ; les auteurs de Cheers identifiés incluent chatimg.
powerup Notifications de Power-ups intégrés ou personnalisés provenant d'EventSub channel.bits.use. Données réservées aux événements avec un champ vide chatmessage et aucun hasDonation, donc cela ne crée pas une ligne ordinaire de chat. meta.bits est numérique et meta.powerUp conserve le sous-type Twitch, le titre/l'identifiant de la récompense, les détails de l'effet et le texte du message fourni lorsqu'il est disponible.
new_subscriber channel.subscribe ou USERNOTICE avec msg-id=sub. meta inclut { userId, tier, isGift }; le total d'abonnés en cache est incrémenté lorsqu'il est disponible ; les totaux de spectateurs sont interrogés séparément.
resub channel.subscription.message ou USERNOTICE msg-id=resub. meta contient la série et les mois cumulés ; chatmessage inclut le texte de réabonnement.
subscription_gift channel.subscription.gift ou USERNOTICE msg-id=subgift. meta expose le total offert et le niveau ; chatmessage résume l'action.
reward channel.channel_points_custom_reward_redemption.add. meta inclut l'identifiant, le titre, le coût et l'invite de la récompense, la saisie utilisateur, l'identifiant/l'état de l'utilisation et l'ancien alias. Aucun champ de premier niveau reward objet est émis par ce gestionnaire EventSub. Les anciens consommateurs peuvent encore exposer channel_points comme alias obsolète.
raid EventSub channel.raid ou USERNOTICE msg-id=raid. meta = { fromId, fromLogin, viewers }.
watch_streak USERNOTICE IRC Twitch à activer avec msg-id=viewermilestone et msg-param-category=watch-streak. Inclut le spectateur dans chatname, texte d’avis Twitch dans chatmessage, et meta.streakCount/meta.milestoneId. Les autres types génériques de USERNOTICE restent ignorés.
new_follower channel.follow Notifications EventSub. Incrémente automatiquement follower_update; meta enregistre { userId, followedAt }.
viewer_update Helix streams interrogation toutes les 30 secondes. meta nombre entier de spectateurs ; supprimé sauf si les statistiques de spectateurs sont activées dans les paramètres.
follower_update Total de followers Helix, récupéré après les événements de suivi ou lors d'une interrogation périodique. meta nombre entier de followers.
subscriber_update Total d'abonnés Helix (nécessite un jeton de diffuseur avec l'autorisation d'abonnement). meta nombre entier d'abonnés.
stream_online / stream_offline EventSub stream.online/stream.offline. meta.startedAt présent pour les événements en ligne ; hors ligne utilise un objet vide.
ad_break / ad_request / ad_schedule Réponses de l'API du gestionnaire de publicités (channel.ad_break.begin, manuel POST channels/ads, GET channels/ads). meta détaille la durée, le demandeur et les données de programmation pour les tableaux de bord.
hype_train EventSub channel.hype_train.begin, channel.hype_train.progress, et channel.hype_train.end notifications v2. Événement composé uniquement de métadonnées : aucun chatname ou chatmessage. meta.phase est begin, progress, ou end; meta inclut l'identifiant du train, le niveau, la progression, l'objectif, le total, les contributeurs, les champs temporels, l'indicateur de train partagé et trainType. Les trains au trésor sont exposés via meta.trainType lorsque Twitch les identifie comme tels.
user_banned EventSub channel.ban, ou IRC CLEARCHAT repli lorsque les événements de bannissement EventSub sont indisponibles. Événement composé uniquement de métadonnées pour les widgets de modération. meta inclut le nom d'utilisateur/d'affichage, l'identifiant utilisateur, l'URL d'avatar/de profil, le modérateur, le motif, la durée du bannissement/de l'exclusion temporaire et le caractère permanent.

Les données de chat réutilisent le fournisseur partagé, donc data.event est renseigné pour `/me` (action) et l’ancien bits balises même en dehors des flux EventSub. Les messages GIF Twitch placent la ressource Giphy dans contentimg, laissez chatmessage vide, et conservent le libellé de repli de Twitch dans meta.gifLabel. La déduplication et la suppression utilisent les identifiants des messages ; les messages envoyés via SSN utilisent le champ natif message_id depuis l'écho IRC de Twitch dans data.id.

Métadonnées du Hype Train Twitch

hype_train est composé uniquement de métadonnées et n'inclut pas chatname ou chatmessage. Les tableaux de bord doivent mettre à jour un affichage de train existant à l'aide de meta.id au lieu d'ajouter chaque mise à jour de progression comme un message de chat. La barre de métadonnées (meta.html) affiche ces événements comme barre de progression supérieure.

Champ Tapez Remarques
typechaîneToujours twitch.
eventchaîneToujours hype_train.
meta.phasechaînebegin, progress, ou end.
meta.idchaîneIdentifiant stable du train. Utilisez-le pour insérer ou mettre à jour un seul widget de train visible.
meta.broadcasterUserIdchaîneIdentifiant utilisateur du diffuseur Twitch.
meta.broadcasterUserLoginchaîneIdentifiant de connexion du diffuseur Twitch.
meta.broadcasterUserNamechaîneNom d'affichage du diffuseur Twitch.
meta.totalnombre | nullValeur totale du soutien signalée par Twitch pour le train.
meta.progressnombre | nullProgression actuelle vers l'objectif du niveau.
meta.goalnombre | nullObjectif du niveau actuel.
meta.progressPercentnombre | nullPourcentage de repli du DOM lorsque Twitch n'expose que la barre de progression visible du chat détaché.
meta.levelnombre | nullNiveau actuel ou final du train.
meta.topContributionstableauPrincipaux contributeurs. Chaque entrée inclut userId, userLogin, userName, type, et le champ numérique total.
meta.lastContributionobjet | nullContribution la plus récente, utilisant la même structure de contribution que topContributions.
meta.sharedTrainParticipantstableauDonnées brutes des participants au train partagé fournies par Twitch, lorsqu'elles sont disponibles.
meta.startedAtchaîneHorodatage ISO de début du train.
meta.expiresAtchaîneHorodatage ISO d'expiration du train actuel.
meta.endedAtchaîneHorodatage ISO de fin du train, ou vide avant la fin.
meta.cooldownEndsAtchaîneHorodatage ISO de fin du délai de récupération, ou vide avant la fin.
meta.isSharedTrainbooléenVrai lorsque Twitch marque le train comme partagé.
meta.trainTypechaîneGénéralement regular; les trains au trésor sont exposés ici lorsque Twitch les identifie comme tels.
meta.allTimeHighLevelnombre | nullNiveau record du train lorsque Twitch le fournit.
meta.allTimeHighTotalnombre | nullTotal record du train lorsque Twitch le fournit.
meta.sourceModechaîneMarqueur de source facultatif tel que dom.
meta.eventSubTypechaîneType EventSub d'origine : channel.hype_train.begin, channel.hype_train.progress, channel.hype_train.end, ou dom.community_highlight.

Twitch EventSub : référence rapide des événements

data.event Scénario
new_followerUn utilisateur a suivi la chaîne
new_subscriberNouvel abonnement
resubRéabonnement avec message
subscription_giftAbonnements offerts à la chaîne
cheerBits offerts
powerupUtilisation d'un Power-up intégré ou personnalisé
rewardUtilisation de points de chaîne
raidRaid entrant
viewer_updateNombre de spectateurs simultanés
follower_updateNombre total de followers
subscriber_updateNombre total d'abonnés
stream_onlineDébut du direct
stream_offlineFin du direct
ad_breakDébut d'une coupure publicitaire
hype_trainMétadonnées d'état du Hype Train/du train au trésor
user_bannedUn utilisateur a été banni ou exclu temporairement

OBS Flow Actions

Implémentation : actions.html via les événements OBS WebSocket v5, avec dock.html Événements de source navigateur OBS en repli

  • Gardez l'incrustation Flow Actions ouverte avec la même session Social Stream que l'éditeur Event Flow/le processus d'arrière-plan, ou gardez le Dock chargé dans OBS.
  • Configurez OBS WebSocket v5 dans OBS 28+ ; l'URL par défaut est ws://127.0.0.1:4455.
  • Il s'agit d'événements système Event Flow. Ils n'incluent pas chatname ou chatmessage, et les détails OBS supplémentaires restent dans meta.
Événement Déclenchement Notes sur les données
stream_started OBS signale que la sortie de diffusion a atteint l'état démarré. type est obs; event est stream_started; meta.source est obs-websocket ou obs-browser-source; meta.outputState peut contenir l'état brut de sortie OBS.
stream_stopped OBS signale que la sortie de diffusion a atteint l'état arrêté. type est obs; event est stream_stopped; meta.outputActive peut être false.
recording_started OBS signale le démarrage de l'enregistrement. type est obs; meta.obsEvent identifie la source d'événement OBS.
recording_stopped OBS signale l'arrêt de l'enregistrement. type est obs; meta.outputState peut contenir l'état brut WebSocket.
scene_changed OBS change la scène active du programme. type est obs; meta.sceneName contient le nom de la scène lorsqu'OBS le fournit.
media_ended Une entrée multimédia OBS termine sa lecture. type est obs; meta.inputName et meta.inputUuid identifient l'entrée multimédia.
replay_buffer_saved OBS enregistre le tampon de relecture. type est obs; meta.savedReplayPath peut contenir le chemin de la relecture enregistrée.

Boîte d'alertes Streamlabs

Implémentation : sources/streamlabs.js (DOM du cadre d’alertes) ; pont socket facultatif à sources/websocket/streamlabs.html

  • Gardez votre boîte d'alertes Streamlabs ouverte dans un onglet ou une source navigateur pour que les alertes s'affichent ; le script de contenu lit le DOM de l'alerte pour extraire le message, l'image et les jetons.
  • Les alertes de type don définissent hasDonation (par exemple « $10 USD » ou « 100 bits ») et, facultativement, donoValue en USD.
  • Types d'événements déduits : follow, subscription, gift, cheer, donation, superchat, raid, redeem, merch, sponsor.
  • Pour la passerelle socket, collez votre jeton Socket API Streamlabs et connectez-vous ; les alertes sont relayées sans la page de boîte d'alertes.
Événement Déclenchement Notes sur les données
donation Pourboires, dons caritatifs, JustGiving ou alertes génériques « donated ». hasDonation conserve le texte de la devise (par ex. « $36 » ou « $10 CAD ») ; donoValue n'est fourni que lorsqu'une valeur en USD est disponible ; les autres montants libellés utilisent la conversion monétaire commune.
cheer Alertes de bits/Cheers Twitch. hasDonation devient « 100 bits » et donoValue contient la valeur en USD.
subscription Alertes d'abonnement. Champs standard définis ; chatmessage est la ligne d'alerte ; meta.tokens contient les valeurs des jetons (name, amount, levelName, etc.).
gift Adhésions/abonnements offerts. meta.tokens.amount peut afficher le nombre de cadeaux ; meta.tokens.levelName peut contenir le niveau.
follow Alertes de nouveaux followers. Aucun champ de don ; chatname reflète le jeton de nom de l'alerte.
raid Alertes de raid. meta.tokens.count contient le nombre de participants au raid lorsqu'il est présent.
redeem Alertes d'utilisation de récompenses Cloudbot. meta.tokens.product contient l'article de la récompense utilisée.
merch Alertes d'achat de produits dérivés. meta.tokens.product contient le nom de l'article acheté.
superchat Alertes de type Super Chat provenant de YouTube ou d'intégrations d'alertes prises en charge. hasDonation contient le montant ; les consommateurs peuvent continuer à accepter l'ancien donation alias.
sponsor Alertes de type sponsor/membre exposées par Streamlabs. Champs standard ; aucun don sauf si le texte inclut un montant.

TikTok Live – Capture DOM et flux TikFinity

Implémentation : sources/tiktok.js pour les pages TikTok natives et sources/tikfinity.js pour le widget/l'iframe de flux d'activité TikFinity. SSApp dispose toujours d'une intégration TikTok native offrant la couverture d'événements la plus large (voir la documentation SSApp).

  • Fonctionne sur la page en direct du diffuseur. Les bannières de cadeaux/J'aime/suivi ne sont renseignées que lorsque la session est authentifiée.
  • TikTok fournit de nombreux événements par détection DOM sans nécessiter le mode WebSocket – les cadeaux, nouveaux followers, J'aime et arrivées activées sont capturés depuis les lignes affichées.
  • Pages de widgets TikFinity à l'adresse tikfinity.zerody.one/widget/activity-feed* fonctionnent également. L'iframe intégrée du flux d'activité émet les mêmes champs canoniques TikTok pour le chat, les nouveaux followers, les partages, les cadeaux, les abonnements, les arrivées activées et les coffres au trésor.
  • Aucune authentification API supplémentaire requise.
  • Mode natif SSApp ajoute encore des événements au-delà des circuits de capture de page/widget : question_new, emote, viewer_update, et l’agrégat sur activation likes_update.
Événement Déclenchement Notes sur les données
gift Lignes de bannière de cadeaux ou DivGiftMessage entrées. hasDonation convertit en « N coins » (avec recherche du cadeau en repli) ; membership utilise le texte du badge lorsqu'il est disponible.
joined Notifications d'arrivée lorsque l'option globale Capturer les événements de participation au direct « joined » le paramètre est activé. Ignore les notifications de partage ; chatname peut être vide pour certaines chaînes système.
followed Messages de suivi analysés à partir des cartes sociales. Garantit chatname existe avant l'émission.
shared Lignes de partage TikFinity. chatmessage est le texte de partage affiché.
subscribe Lignes d'abonnement TikFinity. membership est défini sur SUBSCRIBER.
envelope Lignes de coffres au trésor TikFinity. meta.coins et meta.canOpen contiennent les détails du coffre.
liked Résumés de rafales de J'aime déclenchés par les cartes sociales TikTok. chatname est inclus lorsque TikTok l'expose ; les cartes anonymes/système de J'aime peuvent tout de même être émises. TikTok les envoie par le circuit normal en arrière-plan. Le processus d'arrière-plan en dirige une copie vers l'incrustation de réactions, puis poursuit vers le circuit principal de chat et d'événements uniquement lorsque capturelikeevent est activé.
likes_update SSApp reçoit un total cumulatif TikTok LIVE faisant autorité pendant que captureliketotals est activé. meta est le total entier actuel. SSApp envoie immédiatement la première valeur, regroupe les rafales pour ne produire au maximum qu'une mise à jour toutes les cinq secondes, répète la dernière valeur environ toutes les 90 secondes et envoie zéro à la fin du direct. Cela est distinct des événements propres à un spectateur liked événements.
true (booléen) Diffusions sociales ou système génériques lorsque TikTok ne fournit aucun sous-type. Utilisez chatmessage contenu pour décider de la présentation ; le booléen true indique « événement système – type inconnu ».

membership reproduit les infobulles des badges (niveaux d'abonnement). La mise en cache des avatars conserve chatimg valide entre les événements ; si le DOM supprime la couleur pour les modérateurs, le script efface nameColor. Les lignes de cadeaux TikFinity définissent également contentimg sur l'icône du cadeau lorsqu'elle est disponible. Les mises à jour de séries de cadeaux DOM natives et TikFinity incluent meta.tiktokGiftStreakId, meta.tiktokGiftCount, et meta.tiktokGiftQuietMs pour que les incrustations puissent regrouper les mises à jour répétées ; les anciens identifiants de série sont propres à l'instance de page. Les métadonnées de cadeau peuvent également inclure tiktokGiftMessageId (ID original du message TikTok), tiktokGiftSenderId, groupId, giftId, giftName, streakable, et repeatEnd. Les identifiants natifs identifient le même cadeau dans plusieurs fenêtres de capture ; un identifiant de groupe non nul, accompagné des identifiants de l'expéditeur et du cadeau, identifie les mises à jour cumulatives d'une série. La capture WebSocket de SSApp fournit les mêmes champs après stabilisation d'une série, avec count conservé pour la compatibilité. Son option de dons est vérifiée lors de la transmission de chaque cadeau : désactiver les dons TikTok supprime hasDonation et donoValue tout en conservant l'événement de cadeau et ses métadonnées. La synthèse vocale utilise ces identités pour regrouper les mises à jour et supprimer les doublons terminés pendant jusqu'à dix minutes (cache limité), et lit les cadeaux TikTok sous la forme expéditeur, quantité et nom du cadeau. Les anciennes données utilisent en repli leurs identifiants de série et textes de messages existants ; aucune identité n'est déduite du seul texte du cadeau. La lecture vocale des cadeaux TikTok utilise la langue de synthèse vocale/de voix sélectionnée, indépendamment de la langue de l'interface. Les verbes d'annonce sont localisés en anglais, espagnol, portugais, français, allemand, italien et néerlandais ; les autres langues utilisent l'expéditeur, la quantité et le nom du cadeau sans verbe anglais. La synthèse vocale simplifiée conserve ce format neutre. Les noms des cadeaux restent tels que fournis par la plateforme ; cela ne traduit pas automatiquement les catalogues de cadeaux ni les messages du chat et ne déduit pas la langue d'un direct.

Pour ces mises à jour de série, le nombre et le libellé du don sont cumulatifs : 1, 2, 3 signifie trois cadeaux, et non six. Les consommateurs de totaux ne doivent ajouter que l'augmentation par rapport au montant le plus élevé déjà observé pour cet identifiant de série. La capture standard prend en charge les anciennes classes de cadeaux et les lignes actuelles d'image et de nombre ; les deux conservent event: "gift" et hasDonation. Les cadeaux dont le prix est inconnu conservent leur nombre et leur nom pour l'affichage et utilisent une estimation en USD d'une pièce par cadeau. La valeur fournie par la source donoValue a la priorité ; les métadonnées du cadeau affiché peuvent fournir coinsPerGift ou diamondsPerGift avant de devoir utiliser la table des cadeaux ou la valeur par défaut. Les estimations en pièces standard/TikFinity et les estimations en diamants natifs SSApp utilisent leurs conversions distinctes existantes ; aucune ne représente un versement en espèces garanti.

Whatnot

Implémentation : sources/whatnot.js

  • Ouvrez la page de l'émission Whatnot en direct avec le chat visible ; la capture WebSocket existante fournit le chat, les notifications d'enchères et de ventes, les échecs de paiement, les raids, les dons et les mises à jour rapides des spectateurs. Les instantanés de produits et de tirages au sort dépendent toujours des sections DOM affichées dans la vue de l'émission.
  • Capturer les événements du direct contrôle les événements système Whatnot ainsi que les mises à jour des métadonnées d'enchères et de catalogue ; les lignes d'arrivée nécessitent également Capturer les événements de participation au direct « joined »; les nombres de spectateurs suivent toujours les options de spectateurs et de hype.
Événement Déclenchement Notes sur les données
viewer_update Changements du nombre de spectateurs issus des mises à jour WebSocket du direct, avec interrogation DOM en repli. meta est un nombre entier de spectateurs.
donation Événements WebSocket de pourboires et de contributions au boost communautaire Whatnot. hasDonation contient le montant formaté ; le contexte propre au WebSocket reste sous meta.
raid Événements de raid WebSocket Whatnot, y compris les réponses d'activité de l'historique. meta.numRaiders est inclus lorsque Whatnot le fournit.
joined Lignes de chat dont le corps normalisé commence par joined, lorsque Capturer les événements de participation au direct « joined » est activé. Utilise des libellés d'événement textuels pour les avis d'arrivée (et non le booléen true).
auction_update Lorsque l'état de l'enchère dans le pied de page du direct change (texte du gagnant/de l'enchérisseur en tête, titre, offres, prix, minuteur, état vendu), souvent plus rapidement grâce aux paquets WebSocket du cycle de vie des enchères. Événement composé uniquement de métadonnées. Aucun chatname/chatmessage; les données se trouvent dans meta (par exemple meta.title, meta.bids, meta.price, meta.timer, meta.status).
commerce_update Lorsque les sections du catalogue changent (produits, ensembles surprises, tirages à venir), souvent plus rapidement grâce aux paquets WebSocket du cycle de vie des tirages et produits. Instantané composé uniquement de métadonnées avec les compteurs de sections et les tableaux d'articles sous meta.products, meta.surpriseSets, et meta.upcomingGiveaways.
auction_started, new_bid, auction_ended, product_sold La notification WebSocket en direct correspondante arrive. Il s'agit d'événements individuels, distincts des instantanés d'affichage existants. platform/type: "whatnot", texte brut chatname, userid lorsqu'il est fourni, le nom du produit dans subtitle, et un champ de texte brut chatmessage avec textonly: true. Les identifiants disponibles et détails d’enchère sont sous meta: productId, auctionId, orderId, transactionId, livestreamId, bidId, bids, auctionEndTime, et status. Facultatif price est exprimé en unités monétaires principales, avec priceText et currency lorsqu'il est fourni.
payment_failed Une notification WebSocket d'échec de paiement arrive en direct. Les mêmes champs disponibles d'acheteur, de produit et d'identifiant, avec meta.paymentStatus: "failed". Lorsque seul product.purchaserUserId identifie l'acheteur, il renseigne userid sur les événements de vente/paiement et le nom de l'acheteur reste vide. Aucun acheteur n'est déduit d'une enchère différente ou précédente.
payment_succeeded Une notification WebSocket de réussite de paiement arrive en direct. meta.paymentStatus: "succeeded", avec l’acheteur, l’article, l’ID de commande et les autres champs autorisés de cet avis. Cela reste un événement de paiement distinct ; aucun second purchase ou de don. Les champs manquants restent vides ou omis, même si une vente précédente les fournissait.

Les mises à jour d'affichage des enchères et du commerce restent des instantanés issus du DOM. Pour faire correspondre un événement WebSocket individuel dans Event Flow, utilisez Type d'événement (avancé), sélectionnez Événement personnalisé, puis entrez son nom exact. Les étiquettes peuvent utiliser **{username}**\n{subtitle} avec la graisse de texte sélectionnée ; les conditions peuvent comparer meta.paymentStatus avec failed. Un exemple importable de libellé Whatnot est disponible. Les paramètres existants de capture des événements de direct s'appliquent toujours.

Les autres champs facultatifs sont meta.catalogProductId (le champ du paquet product.productId), meta.parentProductId (product.parentId), meta.transactionType (type de vente Whatnot inchangé), et meta.placeOrderErrorReason (code d’erreur de commande/paiement fourni par Whatnot). Ces références décrivent le catalogue ou l’annonce parente ; elles ne remplacent pas un ID de commande. La quantité en stock n’est pas traitée comme quantité achetée.

Pour une automatisation à la réussite du paiement, définissez un Type d'événement (avancé) déclencheur sur Événement personnalisé: payment_succeeded, et filtrez sur Whatnot. Les conditions et modèles existants peuvent utiliser le champ de cet événement userid, chatname, subtitle et meta.orderId directement. Aucun achat mémorisé n'est nécessaire lorsque la notification contient les détails requis.

La fin d'une enchère ou le marquage d'un article comme vendu ne confirme pas la réussite du paiement : ces notifications ne sont pas émises comme des événements payants purchase événements et ne définissent pas de montants de don. Un événement de réussite n'est émis qu'à la réception d'un payment_succeeded notification ; la capture n'interroge pas l'état du paiement pour vérifier son achèvement et ne le déduit pas d'une vente. Les autres paymentStatus les valeurs sont transmises uniquement lorsqu'elles sont explicitement fournies dans un paquet capturé. Les identifiants manquants sont omis ; un identifiant de produit seul peut couvrir plusieurs ventes, utilisez donc un identifiant de commande/d'enchère fourni pour relier les notifications. La capture ne mémorise pas les achats et ne rapproche pas les mises à jour de paiement ; tout flux de ce type doit être configuré explicitement dans Event Flow. Les doublons brefs de paquets provenant des deux passerelles de capture existantes sont supprimés. Les objets bruts de commande/paiement ne sont pas transmis.

eBay Live

La connexion vendeur eBay de Monétisation nécessite un service SSN eBay configuré et le consentement OAuth du vendeur ; la capture eBay Live décrite ci-dessous est indépendante. Le mode bac à sable utilise des URL d'annonces du bac à sable, nomme l'acheteur « eBay Sandbox buyer » et préfixe le message par « Sandbox test purchase: ». Les achats du bac à sable conservent le même contrat d'achat et peuvent déclencher les alertes et actions de chat activées pendant les tests. Son contrat de paiement implémenté émet event: "purchase", avec type et platform défini sur ebay. Cela nécessite une commande payée correspondant à un produit sélectionné. id est un identifiant opaque stable de ligne de commande ; chatname est « eBay buyer », chatmessage est du texte brut (textonly: true), subtitle est le nom du produit et le champ facultatif contentimg est son image. meta.ebayPurchase contient itemId, itemName, quantity, et le public url. Aucune identité d'acheteur, donnée de livraison, hasDonation ou donoValue est inclus. Cela diffère des mises à jour extraites d'enchères ou de stock, qui ne prouvent pas le paiement.

Implémentation : sources/ebay.js

  • Ouvrez l'un des deux /ebaylive/events/<id>/chat ou /ebaylive/events/<id>/stream. Les deux reçoivent le même flux d’enchères en direct.
  • Le flux WebSocket public fournit les enchères, les offres, les gagnants, les prolongations et les changements de stock ; une requête GraphQL en lecture seule fournit les détails des annonces. La capture DOM reste une solution de repli lorsque les données réseau sont indisponibles.
  • Capturer les événements du direct contrôle les instantanés de métadonnées (auction_update, commerce_update) ; les compteurs de spectateurs respectent toujours les options spectateurs/Hype.
Événement Déclenchement Notes sur les données
viewer_update Lorsque le nombre de spectateurs de l'événement actif change (compteur d'en-tête ou pastille d'événement en direct en repli). meta est un nombre entier de spectateurs.
follower_update Lorsque le nombre de followers du vendeur est renvoyé par le point de terminaison de statistiques du vendeur. meta est un nombre entier de followers. La source interroge le point de terminaison du vendeur toutes les 60 secondes ; ce dernier peut encore renvoyer une valeur en cache pendant jusqu'à 5 minutes.
auction_update Lorsque les métadonnées de l'enchère active changent. Événement composé uniquement de métadonnées. La capture réseau définit meta.sourceMode à network et fournit le titre, le prix, l'enchérisseur, le gagnant, les offres, le minuteur et endingAt. meta.ebay contient eventId, listingId, l'enregistrement GraphQL de l'annonce (listing), annonce publique actuelle du socket (eventListing), et dernière mise à jour d’enchère (update). Ils conservent catégorie, images, devises, quantités, détails de breaks, résultats d’enchères et temps, sans aplatir les détails de plateforme. Le registre GraphQL est un instantané récupéré ; l’annonce du socket et sa mise à jour portent l’état live plus récent. L’historique initial/de reconnexion est incorporé à l’instantané plutôt qu’émis comme anciennes victoires. Retirer toutes les annonces présentées émet status: "idle" avec cardCount: 0 pour effacer l'enchère. Le repli DOM conserve les champs de carte du lecteur ou d'aperçu d'événement.
commerce_update Lorsque les sections des instantanés du catalogue ou des événements en direct changent. Instantané composé uniquement de métadonnées sous meta. Le mode réseau inclut eventId, navigation.viewerCount et playerCards pour les annonces actuellement présentées, chacune avec les mêmes détails ebay objet comme instantané d'enchère. Une liste de cartes vide efface les annonces supprimées. Le repli DOM peut également inclure liveEvents, livePreview, currentEvent et upcomingEvents.
reaction Lorsqu'eBay Live affiche une animation de cœur/réaction. Envoyé directement à la destination dédiée aux réactions. meta.reactionType est heart; eBay n'expose pas de nom individuel pour ces animations DOM.

Les événements de métadonnées eBay omettent volontairement chatname/chatmessage; les incrustations en aval doivent afficher à partir de data.event + data.meta uniquement.

Kick – Capture DOM standard

Implémentation : sources/kick.js

  • Nécessite une session authentifiée pour récupérer les images de profil et les badges d'abonnés.
  • Détection limitée des événements par correspondance du texte du chat et des badges ; les nombres de spectateurs fonctionnent toujours lorsque l'option est activée.
Événement Déclenchement Notes sur les données
gift Cadeaux KICKs détectés via l'image de sticker et le montant visible en devise Kick. hasDonation contient N KICKs (1 KICK pour un) lorsque le montant visible est disponible ; contentimg contient l'image du cadeau. Le texte du message existant est conservé.
reward Utilisations de récompenses (« has redeemed … »). chatmessage contient le texte d'utilisation de récompense.
true (booléen) Avis système génériques ne correspondant pas aux modèles de cadeaux ou de récompenses. Utilisez chatmessage contenu pour décider de la présentation ; le booléen true indique « événement système – type inconnu ».
viewer_update Interroge l'API de chaîne Kick toutes les 30 secondes (uniquement lorsque les statistiques de spectateurs sont activées). meta nombre entier de spectateurs ; pour les abonnements, nouveaux followers ou pourboires, utilisez la passerelle Kick ci-dessous.

Kick – WebSocket/passerelle

Implémentation : sources/websocket/kick.js avec les fonctions auxiliaires partagées sous providers/kick/core.js

  • OAuth via la passerelle Kick de Social Stream. Les autorisations actuelles sont user:read, channel:read, channel:write, channel:rewards:read, chat:write, events:subscribe, moderation:ban, moderation:chat_message:manage, et kicks:read. Les jetons sont renouvelés automatiquement.
  • La mise en place des webhooks Kick peut prendre plusieurs minutes ; l'interface répertorie les abonnements actifs par chaîne.
Événement Déclenchement Notes sur les données
message Données de chat de la passerelle. meta.plainText contient le message en texte brut (qui peut encore inclure des émojis) ; les badges combinent la plateforme et le cache de profils. Les réponses aux fils renseignent initial, reply, et meta.reply lorsque les détails de réponse ou un message parent en cache sont disponibles.
reward channel.reward.redemption.updated, plus les données chat/système du pont ressemblant à des récompenses. meta inclut l'identifiant de récompense/d'utilisation, le titre, le coût, l'état, la saisie utilisateur et l'utilisateur ayant utilisé la récompense.
new_subscriber channel.subscription.new. membership affecté au rôle d'abonné ; meta inclut { subscriber, plan }.
resub channel.subscription.renewal. meta.duration (mois) et meta.plan disponible ; subtitle résume la série.
subscription_gift channel.subscription.gifts. meta.totalGifted, meta.gifter; les badges utilisent l'icône 💝 en repli.
donation Événements de soutien/pourboire détectés par heuristiques sur le type d'événement ; les cadeaux KICKs utilisent gift ci-dessous. hasDonation contient le montant formaté ; meta contient { amount, currency, supporter, message, giftName }.
gift kicks.gifted (cadeaux KICKs), comme le capteur du DOM. hasDonation contient N KICKs (1 KICK pour un) ; contentimg contient l'image du cadeau lorsqu'elle est disponible. Les détails structurés du cadeau restent sous meta.
raid Prise en charge de compatibilité des anciennes données de socket de type host, telles que App\Events\StreamHostEvent. Le catalogue officiel actuel d'événements Kick ne propose aucun abonnement raid/host. Si des données anciennes compatibles arrivent, elles sont associées à l'événement canonique raid; n'en dépendez pas pour un flux de travail Kick actuel.
new_follower channel.followed. Les icônes des followers proviennent du cache de profils ; follower_update se déclenche lorsque Kick fournit les totaux cumulés.
follower_update La passerelle fournit le nombre de followers dans les données du webhook. meta total entier ; utilisé par les tableaux de bord pour les objectifs de followers.
stream_online / stream_offline livestream.status.updated. meta contient le corps brut de l'état provenant de Kick (is_live, title, etc.).
viewer_update livestream.status.updated lorsque Kick inclut les totaux de spectateurs simultanés. meta nombre entier de spectateurs ; émet 0 lors du passage hors ligne pour effacer les compteurs périmés.
user_banned moderation.banned depuis la passerelle/le webhook, ou les événements de bannissement du socket de chat Kick. Événement composé uniquement de métadonnées pour les widgets de modération. meta inclut le nom d'utilisateur/d'affichage, l'identifiant utilisateur, l'URL d'avatar/de profil, le modérateur, le motif, la durée du bannissement/de l'exclusion temporaire et le caractère permanent.

Les recherches de profils utilisent profileCache; mapBadges fusionne les images de badges Kick avec les SVG en cache lorsqu'ils sont disponibles. Lorsque Kick signale des dons en KICKs, la passerelle les convertit en hasDonation plus meta.amount avec currency utilise « KICKs » en repli. Les données de chat incluent meta.messageId lorsque la passerelle expose un identifiant natif de message Kick pour que la synchronisation des suppressions cible le bon message. Les données de réponse incluent meta.reply avec le parent messageId, author, et text lorsqu'ils sont connus. Les détails de réponse fournis restent disponibles même si le message d'origine n'est pas en cache ; une réponse ne contenant qu'un identifiant sans contexte en cache peut toujours ne pas afficher de citation.

Kick WebSocket : référence rapide des événements

data.event Scénario
new_followerUn utilisateur a suivi la chaîne
new_subscriberNouvel abonnement
resubRenouvellement d'abonnement
subscription_giftAbonnements offerts
rewardUtilisation d'une récompense de chaîne ou message de chat/système de type récompense
donationÉvénement de pourboire/soutien
giftÉvénement de cadeau KICKs
raidAncienne entrée host/raid réservée à la compatibilité ; ce n'est pas un abonnement officiel Kick actuel
follower_updateNombre total de followers
stream_onlineDébut du direct
stream_offlineFin du direct
user_bannedUn utilisateur a été banni ou exclu temporairement

VPZone - WebSocket

Implémentation : sources/websocket/vpzone.js

  • Se connecte à wss://chat.vpzone.tv/ws?channel=USERNAME; OAuth demande profile:read, chat:read, chat:write, channel:read, channel:write, et chat:moderate. Un token Bearer peut aussi être fourni manuellement.
  • Trames VPZone simples telles que type: "msg" sont normalisés en données de chat standard.
  • Côté plateforme delete_message / clear_chat les trames suppriment les lignes correspondantes du Dock ; des options facultatives synchronisent les suppressions et blocages du Dock vers VPZone (propriétaire de chaîne uniquement).
  • Les propriétaires de chaîne disposent d'un panneau Stream Info local à la page pour modifier le titre et la catégorie du direct (selon le même principe que la page source Twitch).
Événement Déclenchement Notes sur les données
message VPZone msg, message, new_message, ou chat_message trame WebSocket. chatname provient de username; chatmessage provient de body; les indicateurs d'abonné, de propriétaire, de modérateur et de VIP sont copiés dans chatbadges, indicateurs de rôle au premier niveau et meta. Les identifiants natifs renseignent data.id et meta.messageId.
viewer_update VPZone presence trame avec count ou un champ équivalent de spectateurs. meta est le nombre entier de spectateurs en direct ; contribue au total agrégé viewer_updates.
new_subscriber VPZone subscribe / subscription trame. membership est défini sur Subscriber lorsque des indicateurs d'abonnement sont présents.
subscription_gift VPZone gift / gift_subscription trame. Utilise le même nom d'événement d'abonnement offert que Twitch, Kick, Rumble et Velora. subtitle contient le nombre de cadeaux (x5) ou destinataire.
message + hasDonation VPZone system trame avec metadata.kind: "pixels_cheer" (pourboire en Pixels). Ligne de chat comportant un don ; hasDonation est le libellé du montant (par exemple 100 Pixels), meta.pixels l'entier. event reste vide ; détectez ce pourboire à partir de hasDonation. Les événements de soutien de la passerelle Kick utilisent quant à eux event: "donation".
message réponses VPZone msg trame contenant metadata.reply_to (ID du message, auteur, extrait — dénormalisés côté serveur). Affichées comme les réponses Kick : initial contient le libellé « auteur : extrait », reply le texte brut de la réponse, meta.reply la cible structurée. Respecte le exclure « replying to » paramètre.
raid VPZone raid trame avec metadata.kind: "incoming". Les trames de raids sortants sont ignorées ; meta.viewers contient la taille du raid lorsqu'elle est fournie.
shoutout VPZone shoutout trame (!so commande). meta.targetUser nomme la chaîne mise en avant.
reward VPZone system trame avec metadata.kind: "channel_points_redeem". Utilisation de points de chaîne, avec le même nom d'événement que les récompenses Twitch.
stream_online / stream_offline VPZone system trames avec metadata.kind: "stream_started" / "stream_ended". Attribué au nom de la chaîne (les trames ne contiennent aucun acteur).
new_follower VPZone follow trame. Associé à la structure standard d'événement de nouveau follower.
joined Événements WebSocket de type arrivée/présence VPZone, lorsque Capturer les événements de participation au direct « joined » est activé. Associé à un événement système de type chat avec les métadonnées de l'acteur VPZone sous meta.

Joystick

Implémentations : sources/joystick.js, sources/inject/joystick-ws.js, et sources/websocket/joystick.js

  • La source normale du site Joystick 2.0 s'exécute sur la page connectée /u/<channel>/chat page. Elle lit le champ de la page ChatChannel, WhisperChatChannel, EventLogChannel, et SystemEventChannel Trames Action Cable, avec repli sur les lignes affichées pour Electron et les cas de reconnexion.
  • Les messages de chat du site utilisent les mêmes champs principaux que YouTube, Twitch et Kick : le champ natif id, chatname, chatmessage, chatimg, chatbadges, nameColor, membership, mod, private, username/userid, et timestamp lorsque Joystick les fournit. Lorsque le socket omet une couleur de nom d'utilisateur, la ligne affichée fournit la même valeur de nameColor champ utilisé par les Docks avec couleurs activées.
  • Les modifications de messages côté site remplacent la ligne correspondante du Dock ; les suppressions, mises en sourdine et blocages retirent les lignes correspondantes à l'aide de l'identifiant natif ou du nom d'utilisateur.
  • La source WebSocket distincte utilise les identifiants de bot Joystick (client_id + client_secret) ; la source du site utilise la session connectée de la page.
  • Autorise sur https://joystick.tv/api/oauth/authorize, puis échange/renouvelle les tokens à https://api.joystick.tv/api/oauth/token.
  • Se connecte à wss://api.joystick.tv/cable et s'abonne à GatewayChannel.
  • Un échange facultatif de jetons OAuth est utilisé pour les points de terminaison auxiliaires tels que https://api.joystick.tv/api/users/stream-settings.
  • La source distincte utilisant les identifiants de bot n'émet pas viewer_update. La source du site connecté émet bien des nombres de spectateurs lorsque le socket de sa page les fournit, comme décrit ci-dessous.
Événement Déclenchement Notes sur les données
message Joystick ChatMessage, BotMessage, new_message, bot_message, event_bot_message, pvp_message, et les chuchotements. Le chat ordinaire n'a pas de event. L'identifiant natif est placé dans le champ de premier niveau id et meta.messageId; les rôles et l'état privé utilisent les champs établis de premier niveau et de badges.
new_follower Joystick StreamEvent avec le type Followed. Utilise la structure standard de nouveau follower et est dédupliqué avec la ligne de bot correspondante de Joystick. Champ facultatif meta.userId/meta.followedAt ne sont inclus que lorsque Joystick les fournit.
new_subscriber / subscription_gift Types d'événements Joystick NewSubscription / GiftedSubscription. Utilise les clés de métadonnées d'abonnement compatibles avec Kick : eventType, subscriber, gifter, totalGifted, duration, et plan.
donation Joystick StreamEvent types Tipped / TipMenu. hasDonation contient le montant et l'unité des jetons pour la conversion commune en USD lorsqu'ils sont disponibles, et la ligne de bot Joystick correspondante est dédupliquée. meta utilise les clés établies des événements de soutien Kick : eventType, supporter, amount, currency, message, giftName, giftType, et tier.
stream_online / stream_offline Joystick StreamEvent types tels que Started, StreamResuming, Ended, StreamEnding. Utilisé pour les automatisations en ligne/hors ligne tenant compte du transport.
user_enter / user_leave Joystick UserPresence types enter_stream / leave_stream. Les notifications de présence sont émises comme messages d'événement et peuvent être supprimées par les paramètres de masquage des événements. Ceux-ci masquent également les événements de diffusion autres que les dons.
viewer_update La source du site connecté reçoit ViewerCountUpdated via EventLogChannel. Utilise un entier simple meta, comme YouTube, Twitch et Kick. Émis seulement si le comptage des spectateurs ou Hype est actif. La source séparée à identifiants de bot ne reçoit toujours pas les compteurs.
follower_update / subscriber_update Événements de mise à jour du nombre de followers et d'abonnés Joystick. Utilise un entier simple meta, conformément au contrat des compteurs Twitch.
Notifications internes ignorées ChatMessageReceived, état de l’appareil et actualisations de widgets non associées, comme les objectifs de pourboires/PvP/subathon. Il s'agit de notifications de transport ou d'état de page, pas d'événements Social Stream. Elles ne sont pas converties en événements inventés snake_case noms d'événements ; le véritable ChatChannel/new_message la ligne reste l'unique donnée de chat.

XP Sync

Implémentation : sources/xpsync.js

  • Les lignes de chat utilisent les champs de données canoniques avec type: "xpsync", dont auteur, message, avatar, badges images et SVG intégrés, couleur du nom, adhésion, indicateurs modérateur/membre/bot et UUID natif du message dans id lorsqu'il est disponible.
  • Les réponses suivent la convention des sources DOM YouTube, Twitch et Kick : sauf si les préfixes de réponse sont désactivés, initial contient l'utilisateur auquel la réponse s'adresse, reply conserve le message sans préfixe, et chatmessage reçoit le préfixe de réponse visible.
  • Les lignes mises en évidence par Sparks sont capturées même si XPSync les affiche sans la classe de ligne de chat ni l'identifiant de message habituels ; le montant visible est exposé via hasDonation comme N Sparks.
  • Lorsque la capture d'événements est activée, les lignes contenant « just followed » ou « followed the channel » émettent event: "new_follower".
  • Lorsque les nombres de spectateurs sont activés, le Dock de chat permanent émet event: "viewer_update" à partir du nombre de spectateurs de la vidéo en direct déjà chargé par la page XPSync et l'actualise à partir des mises à jour de la page en direct XPSync. Aucun identifiant SSN distinct n'est requis.

Instagram – Capture REST en direct et boîte de réception des actualités

Implémentation : sources/instagram.js et sources/instagramlive.js (copies identiques)

  • Sur les pages de direct (/<user>/live/?broadcast_id=...), le chat en direct vient de l’API web d’Instagram, interrogée depuis la même origine avec le cookie de session : GET /api/v1/live/{broadcast_id}/get_comment/?last_comment_ts={ts} environ toutes les 2 s, et POST /api/v1/live/{broadcast_id}/heartbeat_and_get_viewer_count/ environ toutes les 5 s lorsque les nombres de spectateurs sont activés. Après 3 échecs consécutifs (ou en l'absence de broadcast_id peut être découvert), la source se replie sur l'analyse du DOM du chat affiché.
  • Le flux d'activité du compte lui-même est interrogé via POST /api/v1/news/inbox/ environ toutes les 45 s sur toute page Instagram. La première interrogation initialise uniquement l'ensemble de déduplication pour que l'historique ne soit jamais rejoué ; les actualités sont dédupliquées par tuuid.
  • En-têtes API requis (tous statiques ou déductibles) : X-IG-App-ID: 936619743392459, X-CSRFToken (depuis le cookie), X-ASBD-ID: 359341, X-Requested-With: XMLHttpRequest, Content-Type: application/x-www-form-urlencoded.
  • Tous les événements du flux d'activité utilisent type: "instagram"; le chat en direct reste type: "instagramlive". Les événements J'aime suivent le circuit normal en arrière-plan : le processus d'arrière-plan envoie une copie à l'incrustation de réactions dédiée, puis les inclut dans le flux principal de chat et d'événements uniquement lorsque capturelikeevent est activé, comme sur TikTok et MeetMe. hideevents et le filtre d'événements personnalisé les bloque partout. Comme les événements de la boîte de réception appartiennent au compte connecté, ils sont supprimés pendant le visionnage du direct d'une autre personne (à la fois /<user>/live/ pages et directs dans la visionneuse de stories ; la propriété est déterminée par profil et la recherche est retentée après un échec), et émis sur votre propre direct ainsi que sur toutes les pages hors direct. Un seul onglet Instagram actif interroge la boîte de réception du compte à la fois, et l'interrogation ne fonctionne que lorsque vous êtes connecté.
Événement Déclenchement Notes sur les données
message (en direct) De nouvelles entrées dans le get_comment réponse (comments[]/system_comments[]), ou nouvelles lignes DOM si REST est indisponible. Données de chat standard, type: "instagramlive". REST fournit des valeurs exactes de user.username, user.profile_pic_url, et une valeur unique pk utilisé pour la déduplication.
viewer_update heartbeat_and_get_viewer_count signale une modification de viewer_count, quand la capture du nombre de spectateurs ou Hype est activé. meta nombre entier de spectateurs. L'interrogation s'arrête lorsque broadcast_status n'est plus "live".
stream_online / stream_offline stream_online se déclenche une fois au démarrage d'une session de diffusion REST ; stream_offline se déclenche lorsque le signal de présence indique un état hors direct broadcast_status (nécessite la capture du nombre de spectateurs ou le mode Hype). Événements composés uniquement de métadonnées correspondant au vocabulaire commun d'état de diffusion utilisé par Twitch et Joystick.
new_follower Une actualité de la boîte de réception avec un type de suivi notif_name (ou story_type 12) apparaît. chatname est le nouveau follower, chatimg leur image de profil, chatmessage le texte de la boîte de réception (par exemple « x a commencé à vous suivre. »).
follow_request Un private_user_follow_request une actualité apparaît (les comptes privés reçoivent des demandes au lieu de suivis directs). Même structure que new_follower, gardés distincts pour permettre des approbations ou salutations différentes.
liked Une actualité de la boîte de réception avec un type J'aime notif_name (y compris comment_like) apparaît. Vocabulaire de J'aime commun avec TikTok/MeetMe. chatname est l'acteur, chatmessage le texte de la boîte de réception (par exemple « x a aimé votre photo. »).
message (commentaire sur sa propre publication) Une actualité de la boîte de réception avec un type de commentaire notif_name apparaît. Ligne de chat simple (event: false), type: "instagram"; chatmessage contient le texte de la boîte de réception, y compris l'extrait du commentaire.
notification Tout autre type d'actualité de la boîte de réception (mentions, identifications, achats, etc.). Catégorie générique ; meta.notifName et meta.storyType conservent la classification brute de l'actualité.

Facebook Live

Implémentation : sources/facebook.js (capture du DOM) et pont Graph API facultatif à sources/websocket/facebook.html

  • La capture DOM lit les commentaires Facebook affichés ; la passerelle Graph API des Pages gérées lit les commentaires vidéo. Les deux utilisent type: "facebook", les champs standard de chat et aucun event pour les commentaires ordinaires. La passerelle API inclut également le champ facultatif platform: "facebook".
  • La passerelle API utilise userid pour l'identifiant de l'auteur lorsqu'il est disponible, timestamp pour une date de création valide en millisecondes Unix, et contentimg pour une image jointe HTTP(S) fournie par l'API. Les commentaires composés uniquement d'une image peuvent avoir un champ vide chatmessage. textonly s'applique uniquement au corps du message : texte brut si true, HTML échappé si false.
  • Le contexte des commentaires API utilise meta.messageId (ID natif du commentaire), meta.permalink, meta.videoId, et meta.pageId. Les anciennes versions de l'API utilisaient meta.commentId, champs auteur/temps dupliqués sous meta, et y transmettait les pièces jointes brutes. Les nouvelles versions utilisent les champs standard auteur/temps/média ; cela n’ajoute pas la synchronisation des suppressions.
  • Les nombres de spectateurs ne sont actualisés que lorsqu'ils sont activés. La passerelle API lit les valeurs simultanées live_views; cela ne remplace pas ce nombre par les vues cumulées de la vidéo et n'invente pas un zéro lorsqu'il est indisponible. La capture API ne déduit pas les Stars, les abonnements, les mises en avant ou les réponses à partir du texte ordinaire des commentaires.
  • Les Stars sont capturées depuis le DOM du chat en direct affiché lorsque Facebook montre l'élément visible N sent marqueur ; ils renseignent hasDonation et donoValue au taux de 100 Stars = 1 $ USD sans définir data.event.
  • Pour tester, ajoutez ssnreplay=1 à l'URL Facebook Live pour traiter les lignes de chat déjà visibles après l'actualisation.
Événement Déclenchement Notes sur les données
viewer_update Le DOM interroge le badge des spectateurs en direct ; la passerelle API interroge les vues simultanées en direct lorsqu'elle est activée. meta nombre entier de spectateurs, comme pour les autres sources. Les nombres absents ou impossibles à analyser sont ignorés ; un vrai zéro est valide.
hasDonation Stars Facebook affichées dans le DOM du chat en direct. Données de chat standard ; hasDonation contient le montant visible de Stars, par exemple 100 Stars, et donoValue contient la valeur en USD. Les Stars ne définissent pas data.event.
highlightColor Facebook affiche un élément visible HIGHLIGHTED libellé. Utilise les champs de chat habituels et highlightColor; aucun data.event est défini. Les Stars utilisent toujours hasDonation.

Online Church

Implémentation : sources/onlinechurch.js

  • Repose sur l'extraction DOM du chat public et de l'en-tête média.
  • Les nombres de spectateurs ne sont actualisés que lorsque Afficher le nombre de spectateurs ou le mode Hype est activé.
Événement Déclenchement Notes sur les données
message De nouvelles entrées apparaissent sous #publicchat. Données de chat standard avec nom de l'expéditeur, avatar, badges et libellé d'abonnement facultatif lorsqu'il figure dans le DOM.
viewer_update Interroge le badge de présence en direct dans l'en-tête média toutes les 10 s. meta nombre entier de spectateurs ; envoie 0 lorsque le badge est absent ou illisible, pour effacer les compteurs périmés.

SharePlay.tv

Implémentation : sources/shareplay.js

  • Repose sur l'extraction DOM du volet de chat en direct sur les pages de chaîne SharePlay.
  • Seules les nouvelles lignes de chat et cartes insérées sont émises après la connexion de l'extracteur ; l'historique existant est délibérément ignoré.
Événement Déclenchement Notes sur les données
message De nouvelles lignes de chat apparaissent dans le flux principal du chat. Données de chat standard avec auteur, avatar, images de badges et émoticônes conservées en HTML. Les réponses aux fils renseignent également initial, reply, et meta.reply lorsque la ligne parente est encore présente.
raid SharePlay insère une carte Blitz dans le flux de chat en direct. Associé à l'événement de raid canonique. meta.cardType est "blitz", avec le facultatif meta.fromLogin et meta.viewers lorsque le texte de la carte les expose.
shoutout SharePlay insère une carte de mise en avant/suivi dans le flux de chat. Émis sous la forme data.event = "shoutout". L'image de bannière de la carte est transmise via contentimg, tandis que meta.cardType et meta.action conservent le libellé de la carte/le texte du bouton.
viewer_update Interroge le badge visible des spectateurs dans l'en-tête toutes les 10 s. meta nombre entier de spectateurs ; émis uniquement lorsque Afficher le nombre de spectateurs ou le mode Hype est activé, et envoie 0 si le badge devient illisible, afin d'effacer les compteurs périmés.

Streamplace

Implémentation : sources/streamplace.js

  • Lit la page de direct de Streamplace affichée par React et ignore l'historique visible du chat lors de la connexion.
  • Messages de type relais tels que Name (Discord): message sont normalisés vers le nom de l'expéditeur relayé.
Événement Déclenchement Notes sur les données
message De nouvelles lignes de chat Streamplace apparaissent après la connexion. Données de chat standard avec nameColor, chatbadges, liens conservés en HTML et champs de réponse initial, reply, et meta.reply lorsqu'il est visible.
viewer_update Le badge des spectateurs dans l'en-tête change lorsque la capture du nombre de spectateurs ou le mode Hype est activé. meta nombre entier de spectateurs.

WorldsWave

Implémentation : sources/worldswave.js

  • Prend en charge les pages de direct WorldsWave et les URL de chat seul telles que https://worldswave.com/kn_livecmd.php?cmd=viewStream&streamId=STREAM_ID&chatonly=1.
  • Utilise l'identifiant stable data-ww-*/ww-chat-* balisage lorsqu'il est disponible, tout en conservant les anciens sélecteurs kontackt pour les pages de chat seul et les anciennes dispositions.
  • L'historique de chat existant est ignoré au démarrage de la capture ; testez avec un nouveau message.
  • Les nombres de spectateurs nécessitent Afficher le nombre de spectateurs ou le mode Hype. Les événements dédiés de cadeaux/pourboires et l'envoi de réponses ne sont pas implémentés. Une ligne affichée peut tout de même fournir un libellé de don via data-ww-donation.
Événement Déclenchement Notes sur les données
message Une nouvelle ligne de chat WorldsWave s'affiche. Données de chat standard avec type: "worldswave", nom de l’expéditeur, avatar, ID utilisateur facultatif, couleur, badges, statut de modérateur, adhésion, valeur du don, pièce jointe et identité du canal. Les ID stables WorldsWave sont exposés dans meta.messageId et dédupliqués entre les panneaux d'aperçu et de chat complet simultanés. Les images intégrées aux messages restent assainies lorsque le mode texte seul est désactivé.
viewer_update Le total visible de spectateurs en direct change lorsque la capture du nombre de spectateurs ou le mode Hype est activé. meta est le nombre entier de spectateurs. L'identifiant stable data-ww-viewer-count la valeur est privilégiée ; les anciennes valeurs compactes telles que 1.2K sont normalisés en repli.

FLEX TV

Implémentation : sources/flextv.js

  • Lit le panneau de chat affiché sur https://www.flextv.co.kr/channels/*/live pages.
  • Le panneau de chat doit être visible. L'historique existant du chat est ignoré lors de la connexion de la source ; testez donc avec une nouvelle ligne de chat.
  • Aucun nombre de spectateurs, don ou circuit de réponse n'est encore documenté pour cette source.
Événement Déclenchement Notes sur les données
message Nouvelles entrées FLEX TV visibles .chat-item des lignes apparaissent dans le flux de chat en direct. Données de chat standard avec type: "flextv", chatname, chatmessage, nameColor, images de badges dans chatbadges, et les détails des membres FLEX sous meta lorsqu'il est exposé par data-member.

Seal Team Sloth

Implémentation : sources/sealteamsloth.js

  • Lit le chat détaché affiché sur https://sealteamsloth.com/popout-chat/* pages.
  • Les nombres de spectateurs nécessitent Afficher le nombre de spectateurs ou le mode Hype.
Événement Déclenchement Notes sur les données
message Une nouvelle ligne de chat Seal Team Sloth s'affiche. Données de chat standard avec type: "sealteamsloth", nom de l’expéditeur, avatar et contenu du message.
viewer_update Le total visible de spectateurs en direct change lorsque la capture du nombre de spectateurs ou le mode Hype est activé. meta est le nombre entier de spectateurs ; les valeurs compactes telles que 1.2K sont normalisés.

MeetMe - Capture DOM et WebSocket

Implémentation : sources/meetme.js

  • Lit le DOM du chat en direct affiché de MeetMe sur app.meetme.com/live/view/... pages et dans le api.gateway.meetme-live.com/web-live/... iframe.
  • Lorsque le WebSocket de l'iframe est disponible, wss://video-live.meetme.com/ les trames sont analysées avant le repli DOM pour capturer des événements en direct plus riches.
  • hideevents supprime les événements autres que les dons ; les cadeaux MeetMe et les dons de diamants renseignent toujours les champs de don. capturejoinedevent active les avis d'arrivée et de retour. Les événements propres à un acteur liked les événements utilisent le routage commun en arrière-plan contrôlé par capturelikeevent; agrégat reaction les effets restent explicitement destinés à l'incrustation de réactions.
  • Les nombres de spectateurs privilégient le compteur visible de l'en-tête MeetMe et utilisent les totaux WebSocket en repli uniquement lorsque le compteur DOM est indisponible. Les nombres sont émis à chaque changement et le dernier nombre est répété environ toutes les 30 secondes pendant que showviewercount/hypemode est activé ; les totaux de followers sont émis uniquement lors des changements et limités à environ une fois toutes les 60 secondes.
Événement Déclenchement Notes sur les données
message Nouveau SNSChatMessage des trames WebSocket arrivent, ou de nouveaux ChatMessage_* Les lignes DOM apparaissent sous ChatHistoryContainer_*. Données de chat standard avec nom de l'expéditeur, avatar, HTML/texte du message et images/texte des badges. Les détails de ligne DOM sont des champs simples meta clés, notamment messageId, roomId, level, levelColor, badgeLabels, badgeSrcs, badgeClasses, isBouncer, isTopStreamer, isBestOfTheWeek, rank, et rowClassName. Les données WebSocket définissent meta.source = "websocket".
joined / rejoined / left SNSChatParticipant des trames WebSocket de création, mise à jour ou suppression arrivent, ou MeetMe affiche dans le DOM un join-cell ligne. Les avis d'arrivée/retour nécessitent Capturer les événements de participation au direct « joined ». Émet des avis système de type chat avec le nom et l'avatar de l'acteur lorsque MeetMe les expose. meta.isNewViewer, meta.viewerLevelId, meta.isBouncer, et meta.isSubscriber conservent l'état des participants.
new_follower MeetMe affiche dans le DOM une ligne de favori/suivi telle que Favorited. Utilise le vocabulaire commun des événements de nouveaux followers. chatname est l'acteur, chatimg est la photo de profil détectée lorsqu'elle est disponible, et les champs simples meta.favoriteText/meta.targetName conservent les détails de la ligne d'origine.
gift SNSGiftMessage des trames WebSocket arrivent, ou MeetMe affiche une image de cadeau dans une ligne de chat. hasDonation contient le libellé visible du cadeau ou sa valeur en diamants, contentimg contient l'image du cadeau lorsqu'elle est exposée, et des clés simples telles que meta.giftName, meta.giftCount, meta.amount, et meta.currency conservent les détails structurés. Le gift l'événement est réservé aux véritables trames/lignes de cadeaux ; l'affichage des dons doit toujours se baser sur hasDonation.
donation SNSDiamond les trames WebSocket exposent l'activité de diamants. Les trames dédiées aux diamants sont traitées comme des événements de don. hasDonation est formaté en diamants pour la conversion commune en USD, et meta.amount/meta.currency restent simples pour les automatisations.
liked / reaction SNSLike des trames WebSocket arrivent. Les J'aime propres à un acteur utilisent le même liked vocabulaire et routage centralisé en arrière-plan de TikTok. Les totaux agrégés/anonymes de J'aime sont envoyés uniquement à la destination de réactions sous reaction, avec des champs plats meta.reactionType, meta.totalLikes, et meta.subscriberLikes. La distinction porte sur le sens de l'événement, pas sur l'anonymat : capturelikeevent contrôle uniquement les événements individuels liked/like événements.
follower_update SNSVideo les métadonnées WebSocket exposent les totaux de followers. meta est le nombre entier de followers, conformément à la convention commune des événements de compteur.
guest_update SNSVideoGuestBroadcast des trames de création/mise à jour arrivent. Événement composé uniquement de métadonnées pour l'état d'un invité ou coprésentateur en direct. Les données simples meta les clés comprennent status, position, totalGuests, isMuted, guestBroadcastId, videoViewerId, et broadcastId.
viewer_update Le badge visible des spectateurs dans l'en-tête change, ou SNSVideo les métadonnées WebSocket exposent les totaux de spectateurs lorsque le badge est indisponible ; les totaux inchangés sont répétés environ toutes les 30 secondes lorsque l'option est activée. meta nombre entier de spectateurs ; émis uniquement lorsque la capture du nombre de spectateurs ou le mode Hype est activé.

Velora

Implémentation : sources/velora.js et sources/websocket/velora.js

  • Le mode standard lit le DOM du chat visible ; le mode WebSocket utilise l'API Events de Velora avec OAuth.
  • Les URL prises en charge en mode standard comprennent https://velora.tv/*, https://velora.tv/dashboard/stream/popout?panels=chat%2Cactivity&channel=CHANNEL&layout=vertical, et https://velora.tv/dashboard/stream/popout/CHANNEL/obs-chat.
  • Les cartes de type Volts et points de chaîne sont émises sous forme de données d'événement lorsqu'elles sont exposées par le DOM ou l'API Events.
Événement Déclenchement Notes sur les données
message De nouvelles lignes de chat Velora apparaissent ou des messages de chat de l'API Events arrivent. Données de chat standard avec badges, couleur de l'auteur, liens et émoticônes conservés hors du mode texte seul.
volts Cartes Volts Velora ou channel.volts Les données de l'API Events arrivent. hasDonation contient le montant de Volts affiché ; les captures DOM incluent meta.source = "dom".
channel_points Cartes de points de chaîne/utilisation de récompenses Velora ou channel.channel_points_redemption Les données de l'API Events arrivent. chatmessage contient le message d'utilisation ou le titre de la récompense ; meta.rewardTitle identifie la récompense lorsqu'elle est disponible.
subscription Une ligne d'activité Velora visible indique qu'un utilisateur est devenu membre/abonné de la chaîne. membership contient le libellé d'abonnement visible.
viewer_update Le nombre visible de spectateurs change lorsque la capture du nombre de spectateurs ou le mode Hype est activé. meta nombre entier de spectateurs.

Parti - Capture de chat de profil / détaché

Implémentation : sources/parti.js

  • Prend en charge les URL de profil telles que https://parti.com/USERNAME et les URL de chat détaché telles que https://parti.com/popout-chat?id=USER_ID.
  • Les nombres de spectateurs utilisent le point de terminaison de présence du direct Parti lorsque la capture du nombre de spectateurs ou le mode Hype est activé.
Événement Déclenchement Notes sur les données
message Des lignes de chat Parti visibles apparaissent dans le flux du chat de profil ou détaché. Données de chat standard ; nameColor conserve la couleur affichée de l'auteur sur Parti et chatmessage conserve le contenu intégré sauf si le mode texte seul est activé.
donation Les lignes de pourboire Parti visibles indiquent qu'un utilisateur a donné un montant. hasDonation contient le montant affiché, meta.amount/meta.currency sont renseignés lorsqu'ils peuvent être analysés, meta.amountText conserve le texte brut du montant, et donoValue est défini pour les pourboires en USD.
viewer_update Le signal de présence de Parti renvoie le nombre de spectateurs en direct. meta est le nombre entier de spectateurs ; la page réutilise un jeton de présence par fenêtre source pour éviter de gonfler les nombres.

CHZZK - Capture du chat détaché

Implémentation : sources/chzzk.js

  • Prend en charge https://chzzk.naver.com/live/*/chat et https://chzzk.naver.com/iframe/live/*/chat.
  • Les nombres de spectateurs utilisent le point de terminaison d'interrogation de l'état du direct CHZZK lorsque la capture du nombre de spectateurs ou le mode Hype est activé.
Événement Déclenchement Notes sur les données
message Des lignes de chat CHZZK visibles apparaissent dans le flux du chat détaché. Données de chat standard avec type: "chzzk", nameColor, URL d’images de badges dans chatbadges, et les emotes affichées dans chatmessage sauf si le mode texte seul est activé.
chat avec hasDonation Des lignes de dons de fromage CHZZK visibles apparaissent dans le chat. hasDonation contient le montant de fromage affiché. Ces lignes ne définissent pas data.event.
viewer_update L'interrogation de l'état du direct renvoie un nombre de spectateurs. meta est le nombre entier de spectateurs.

Rumble - Capture DOM standard

Implémentation : sources/rumble.js

  • Nécessite les cookies d'une session authentifiée pour que le service.php l'API des spectateurs répond.
  • Les lignes Rant affichées fournissent hasDonation; les cartes de raids entrants fournissent event: "raid". Cette source DOM n'émet pas le flux d'événements d'abonnés et de followers de la passerelle API.
Événement Déclenchement Notes sur les données
message Des lignes de chat Rumble visibles apparaissent dans le chat de la page ou de la fenêtre détachée. Données de chat standard ; chatmessage conserve le HTML des images d'émoticônes Rumble après leur affichage par la page, sauf si le mode texte seul est activé.
viewer_update Appelle le point de terminaison de Rumble video.watching-now service toutes les 30 s. meta nombre entier de spectateurs ; utilise credentials: 'include' pour réutiliser les cookies de session.
chat avec hasDonationUne ligne Rant visible contient un prix.hasDonation conserve le prix affiché ; aucun marqueur d'événement de don n'est ajouté.
raidUne carte de raid entrant apparaît dans le chat.Utilise le message de raid visible et l'image facultative de la carte dans contentimg.

Rumble - WebSocket/URL API

Implémentation : sources/websocket/rumble.js

  • Nécessite l'URL Live Stream API appartenant au créateur, disponible dans https://rumble.com/account/livestream-api. Rumble indique que cette URL inclut la clé de diffusion en direct, ne nécessite aucune authentification distincte et ne doit être partagée qu'avec des tiers de confiance.
  • Transport en lecture seule. La documentation publique de l'API Rumble Live Stream ne décrit aucun point de terminaison officiel pour envoyer des messages de chat ; cette source relaie donc les messages et événements vers Social Stream, mais n'envoie pas de messages à Rumble.
  • livestreams[].chat n'est renseigné que lorsque le direct sélectionné est en cours. Utilisez ?streamId=... pour fixer un direct précis lorsque l'API en expose plusieurs ; les identifiants non valides provoquent désormais un échec au lieu de basculer silencieusement vers un autre direct.
  • La page résout également https://rumble.com/chat/popup/<livestreams[].id> pour que vous puissiez ouvrir directement le chat détaché injecté habituel sans charger d'abord la page du diffuseur /live page.
Événement Déclenchement Notes sur les données
message De nouvelles entrées arrivent du flux de chat SSE de Rumble une fois que l'API officielle a résolu livestreams[].id; utilise en repli livestreams[].chat.recent_messages. Données de chat standard. meta.source est rumble_sse lorsque le flux de chat SSE est disponible et inclut les URL d'avatars provenant de users[].image.1; sinon, utilise en repli live_stream_api sans avatars. Lorsque le catalogue d'émoticônes de la fenêtre est disponible, chatmessage affiche les émoticônes shortcode de Rumble comme images HTML et meta.plainText conserve le texte du shortcode d'origine.
donation De nouvelles entrées Rant apparaissent dans livestreams[].chat.recent_rants. hasDonation contient le montant formaté en USD ; meta inclut amount_cents, amount_dollars, et expiresOn.
new_follower De nouvelles entrées apparaissent dans followers.recent_followers. Événement système avec chatname défini sur le nom d'utilisateur du follower et l'horodatage sous meta.followedOn.
new_subscriber De nouvelles entrées apparaissent dans subscribers.recent_subscribers. membership est défini sur SUBSCRIBER; subtitle reproduit le montant en USD documenté lorsque Rumble le fournit.
subscription_gift De nouvelles entrées apparaissent dans gifted_subs.recent_gifted_subs. chatname est l'auteur du cadeau, hasDonation devient N Gifted, et meta inclut totalGifted, remainingGifts, giftType, et videoId.
follower_update Chaque fois que le compteur de followers sélectionné change. meta nombre entier de followers. Valeur par défaut : followers.num_followers; avec ?followerMode=total, utilise followers.num_followers_total lorsque Rumble le fournit.
subscriber_update Chaque fois que subscribers.num_subscribers change. meta nombre entier d'abonnés.
stream_online / stream_offline Lorsque le direct sélectionné passe de l'état en direct à hors ligne, ou inversement. meta inclut un sous-ensemble assaini des champs du direct (id, title, createdOn, libellés de catégorie, mentions J’aime/Je n’aime pas et totaux de spectateurs). Les valeurs sensibles comme stream_key ne sont volontairement pas transmis.
viewer_update Chaque fois que livestreams[].watching_now change pour le direct sélectionné. meta nombre entier de spectateurs simultanés ; émet 0 lorsque le direct sélectionné passe hors ligne, pour effacer les compteurs périmés.

Ce transport est destiné aux chaînes que vous possédez ou gérez. Comme l'URL API contient une clé de diffusion en direct, ne l'exposez pas dans les incrustations, journaux, captures d'écran ou profils de navigateur partagés. Les avatars du chat proviennent du flux de chat SSE de Rumble une fois que l'API officielle a résolu l'identifiant du direct ; ce transport n'extrait pas les avatars des pages Rumble.

YouNow - Capture DOM

Implémentation : sources/younow.js

  • Lit le DOM du chat en direct affiché et émet des données de chat standard avec type: "younow".
  • Des lignes d'activité du public telles que is watching, I became a fan!, et invited N fans to this broadcast. sont signalés par event: true pour que les filtres d'événements puissent les router.
Événement Déclenchement Notes sur les données
message De nouvelles lignes de chat apparaissent dans le chat du public en direct. Données de chat standard ; les lignes d'activité des fans et du public définissent event: true.
viewer_update Le nombre visible dans le panneau du public change lorsque showviewercount/hypemode est activé. meta nombre entier de spectateurs ; émet 0 lorsque le compteur disparaît.

Favorited Studio - Capture DOM

Implémentation : sources/favorited.js

  • Lit le DOM du chat en direct affiché et émet des données de chat standard avec type: "favorited".
Événement Déclenchement Notes sur les données
message De nouvelles lignes de chat apparaissent. Données de chat standard.
viewer_update Le compteur de l'onglet des spectateurs en direct change lorsque showviewercount/hypemode est activé. meta nombre entier de spectateurs lu depuis le content-live-viewers onglet.

BEAM - Capture DOM

Implémentation : sources/beamstream.js

  • Lit le DOM du chat en direct affiché et émet des données de chat standard avec type: "beamstream".
Événement Déclenchement Notes sur les données
message De nouvelles lignes de chat apparaissent. Données de chat standard avec texte brut dans chatname, URL d’avatar dans chatimg, et les URL d’images ou objets de badges SVG dans chatbadges. Les champs masqués sur la page de capture de Beam restent vides. Les liens de profils natifs de Beam ne sont pas traités comme des sources de relais externes. contentimg peut contenir des pièces jointes vidéo/webm intégrées lorsqu'elles sont exposées.
viewer_update Un élément de compteur de spectateurs change pendant que showviewercount/hypemode est activé. meta nombre entier de spectateurs ; émis uniquement lorsque la page de chat expose un compteur de spectateurs.

Castyr - Capture DOM

Implémentation : sources/castyr.js

  • Lit les nouvelles lignes de chat affichées depuis https://castyr.live/homebeta/popout-chat/* et émet des données de chat standard avec type: "castyr".
  • L'historique de chat existant est ignoré lors de la connexion de la source.
Événement Déclenchement Notes sur les données
message Un nouveau .chat-message ligne apparaît. Données de chat standard avec nom de l'expéditeur, contenu affiché du message et couleur du nom lorsqu'elle est exposée.
viewer_update Le nombre visible d'utilisateurs actifs du chat change lorsque showviewercount/hypemode est activé. meta est le nombre entier lu dans l'élément de chat actif avec titre de Castyr.

SOOP - Capture DOM du lecteur

Implémentation : sources/sooplive.js. Prend en charge le format unifié play.sooplive.com lecteur et ancien play.sooplive.co.kr URL. L'ancienne disposition du chat global reste reconnue lorsqu'elle est servie.

Le chat public émet type/platform: "sooplive", texte brut chatname/userid, nameColor, et le contenu assaini chatmessage. Les lignes existantes, les identifiants de messages en double, les copies traduites et les messages privés sont exclus. Les émoticônes deviennent des images sûres ou du texte alternatif en mode texte seul.

Avec showviewercount ou hypemode activé, viewer_update contient un entier meta depuis le champ du lecteur #nAllViewer. Les fenêtres de chat seules n'exposent pas forcément ce nombre. SSApp utilise le lecteur complet pour ouvrir une fenêtre détachée, car les fenêtres SOOP actuelles dépendent de leur fenêtre d'origine.

Gosh - Capture du chat de chaîne

Implémentation : sources/gosh.js. Ouvrez https://gosh.com/USERNAME avec le chat visible, ou collez cette URL dans Add other source de SSApp. Une fenêtre de chat détachée n'est pas nécessaire.

Les nouvelles lignes de chat émettent type/platform: "gosh", texte brut chatname, nameColor, et le contenu assaini chatmessage. Les images intégrées et les GIF conservent des URL HTTP(S) sûres. Avec textonlymode, les images deviennent du texte alternatif ou [image] lorsqu'aucun texte alternatif n'est disponible. Les avatars, badges, dons et abonnements restent vides lorsqu'ils sont absents de la ligne capturée.

Gardez le chat virtualisé défilé jusqu'aux messages les plus récents. L'historique existant, les lignes réaffichées et les avis système sans auteur sont exclus. Les indices d'affichage restent internes et ne sont pas émis comme identifiants natifs de messages. Aucun événement de suivi, de don, de nombre de spectateurs ou de modération n'est déduit.

Livacha - Capture de salon de chat

Implémentation : sources/livacha.js. Ouvrez https://livacha.com/chat/ROOM avec le chat visible, ou collez l'URL du salon dans Add other source de SSApp.

Les nouvelles lignes de chat émettent type/platform: "livacha", texte brut chatname, chatimg, nameColor, et le contenu assaini chatmessage. Les URL relatives des avatars et des images intégrées deviennent des URL HTTP(S) absolues. Les paragraphes, sauts de ligne et listes sont regroupés dans un seul message de chat. Avec textonlymode, les images deviennent du texte alternatif ou [image].

Les identifiants de messages servent en interne à éviter de recapturer les modifications et les lignes remontées. L'historique initial et les anciens messages ajoutés au début sont ignorés ; les horodatages et menus de réactions sont exclus du corps capturé. Aucun événement de don, d'abonnement, de modération ou de nombre de spectateurs n'est déduit.

Stream.space - Capture DOM expérimentale

Implémentation : sources/streamspace.js. Correspond uniquement à https://beta.stream.space/chat-popup.php?channel=USERNAME et l'équivalent https://stream.space fenêtre détachée.

Les nouvelles lignes de chat affichées émettent type: "streamspace", platform: "streamspace", texte brut chatname/userid, chatmessage, avatar chatimg, niveau sous forme d’image chatbadges, et nameColor. Les émoticônes intégrées sont reconstruites sous forme d'images sûres, ou de texte alternatif lorsque textonlymode est activé. L'historique existant, les avis de bienvenue, les aperçus de réponses et les doublons épinglés sont exclus.

viewer_update contient un entier meta lu depuis #popupViewersNum lorsque showviewercount ou hypemode est activé. Aucun événement de don, d'abonnement ou de modération n'est déduit.

Expérimental : la fenêtre bêta est restée sur Loading lors de l'inspection. SSApp a chargé la fenêtre et capturé les mises à jour de spectateurs, mais la réception du chat en direct et la fenêtre de production restent non vérifiées. SSN ne peut pas capturer les messages que le site n'affiche pas.

w.tv et Prime - Capture DOM

Implémentations : sources/wtv.js sur https://w.tv/USERNAME/chat et sources/prime.js sur https://prime.gs/USERNAME?chat_popout=1.

Les nouvelles lignes de chat utilisent type/platform de wtv ou prime, texte brut chatname, nameColor, et le contenu assaini chatmessage. Les émoticônes intégrées deviennent des images sûres ou du texte alternatif en mode texte seul. Prime inclut aussi le champ de la ligne userid et prend en charge à la fois les liens de profils connectés et les libellés de noms d'utilisateurs déconnectés. Les avatars et badges restent vides lorsqu'ils ne sont pas disponibles dans la structure de ligne vérifiée.

L'historique initial, les cartes épinglées et les aperçus de réponses sont exclus. w.tv virtualise son chat : gardez-le défilé jusqu'aux messages les plus récents pour la capture. Ses identifiants de test DOM sont des indices d'affichage, et non des identifiants natifs de messages. Prime ignore l'ancien historique chargé au-dessus des messages initiaux et les espaces réservés aux utilisateurs ignorés.

Aucune des deux fenêtres ne fournit de nombre vérifié de spectateurs du direct ; ces adaptateurs n'émettent donc pas de mises à jour de spectateurs et ne déduisent pas d'événements de don, d'abonnement ou de modération.

Harmonisation des événements entre plateformes

Utilisez ce tableau pour comprendre comment les concepts similaires correspondent d'une plateforme à l'autre. Lorsque c'est possible, les nouvelles sources doivent reprendre les noms d'événements communs de la première colonne.

Concept YouTube WS Twitch WS Kick WS
Nouveau membre/abonné sponsorship new_subscriber new_subscriber
Renouvellement/réabonnement resub resub resub
Abonnements offerts giftpurchase subscription_gift subscription_gift
Cadeau reçu giftredemption - -
Étape marquante membermilestone - -
Don/pourboire superchat, supersticker, jeweldonation avec hasDonation cheer (bits) donation
Nouveau follower new_follower (interrogé périodiquement)* new_follower new_follower
Nombre de spectateurs viewer_update viewer_update viewer_update
Nombre de followers - follower_update follower_update
Nombre d'abonnés subscriber_update subscriber_update -
État du direct live_chat_ended stream_online/stream_offline stream_online/stream_offline
Raid - raid -
Utilisation de récompense - reward reward

Notes de cohérence

  • YouTube utilise sponsorship pour les nouveaux membres, tandis que Twitch et Kick utilisent new_subscriber. Envisagez de vérifier les deux lors de la création de déclencheurs multiplateformes.
  • resub est cohérent sur les trois plateformes pour les renouvellements.
  • Les événements de cadeaux diffèrent : YouTube utilise giftpurchase/giftredemption, tandis que Twitch et Kick utilisent subscription_gift.
  • Les dons varient selon la plateforme : YouTube utilise des noms d'événements payants précis tels que superchat, supersticker, et jeweldonation avec hasDonation; Twitch propose les bits (cheer) ; Kick propose les pourboires (donation).
  • new_follower est maintenant cohérent sur les trois plateformes, mais YouTube interroge les abonnés récents et peut renvoyer des résultats retardés ou incomplets.
  • Les J'aime et les réactions suivent des contrats distincts : individuel liked/like les événements atteignent l'incrustation de réactions sauf s'ils sont filtrés globalement, et n'entrent dans le circuit principal que lorsque capturelikeevent est activé. Les éléments visuels ou natifs de la plateforme reaction les événements conservent le routage défini par le producteur. Les événements agrégés likes_update les compteurs sont contrôlés séparément par captureliketotals.

Couverture et limites de compatibilité

Cette référence décrit les données implémentées, sans garantir que chaque plateforme fournit chaque événement. Des valeurs vides de hasDonation affectations dans une source ne prouvent pas la prise en charge des dons. La visibilité dans le DOM, les autorisations du compte, les options de capture et la disponibilité de l'API déterminent toujours ce qui est reçu. La transmission des suppressions est propre à chaque source ; ne supposez pas une synchronisation universelle de la modération.

Incohérences et lacunes suivies

Paire/zone Incohérence / absence observée Impact
Twitch : standard et WebSocket Commun : reward, subscription_gift, viewer_update, hype_train, et le champ sur activation watch_streak. Standard uniquement : giftpurchase, knock, community_highlight. WebSocket uniquement : new_subscriber, resub, cheer, powerup, raid, new_follower, follower_update, subscriber_update. channel_points est désormais un ancien alias obsolète pour les utilisations de récompenses Twitch ; les nouvelles intégrations doivent se baser sur reward.
Kick : standard et WebSocket Le mode standard émet des marqueurs légers (gift, reward, booléen true, viewer_update). WebSocket ajoute les événements officiels de suivi, abonnement, cadeau, récompense, KICKs, modération et état live. Il conserve la compatibilité avec un ancien raid données, mais Kick ne propose actuellement aucun abonnement officiel raid/host. Le mode WebSocket est plus complet ; les automatisations fondées sur des noms d'événements propres au mode standard doivent être revues lors du changement. N'exigez pas d'événement de raid Kick.
YouTube : standard et WebSocket Commun : superchat, supersticker, jeweldonation, sponsorship, resub, giftpurchase, giftredemption, viewer_update. Standard uniquement : thankyou, redirect. WebSocket uniquement : membermilestone, new_follower, subscriber_update, view_update, likes_update (sur activation). Les noms principaux des membres et événements sont harmonisés entre les deux ; Super Chat, Super Sticker et Jewels utilisent hasDonation, contrairement aux achats/réceptions d’adhésions offertes.
Toutes les interfaces De nombreuses sources renseignent hasDonation sans définir data.event. C'est correct ; l'affichage des dons doit se baser sur hasDonation, avec data.event réservé à la sémantique système/événement.

Alias propres aux sources et anciens noms

Ces correspondances sont propres à la source et au contexte indiqués ; ce ne sont pas des remplacements globaux. La prise en charge des alias par les consommateurs varie selon la page. Les sources actuelles TikTok DOM et TikFinity émettent toujours followed; Velora utilise subscription et channel_points, et Streamlabs utilise subscription. Acceptez le contrat actuel de la source et ses alias anciens pertinents plutôt que renommer chaque événement correspondant.

Alias / ancien nom Remplacement canonique Contexte
subscriptionnew_subscriberNouvel abonnement Twitch/Kick
subgiftsubscription_giftAbonnement Twitch offert
membershipsponsorshipNouveau membre YouTube (générique)
new_membersponsorshipNouveau membre YouTube
new_membershipsponsorshipNouveau membre YouTube
newmembersponsorshipNouveau membre YouTube
new-membershipsponsorshipExtracteur DOM YouTube (variante avec trait d'union)
upgraded_membershipresubPassage à un niveau supérieur YouTube
upgraded-membershipresubExtracteur DOM YouTube (variante avec trait d'union)
membership_upgraderesubPassage à un niveau supérieur YouTube
membership_milestonemembermilestoneMessage d'étape marquante YouTube
member_milestonemembermilestoneMessage d'étape marquante YouTube (variante avec trait de soulignement)
gift_membershipgiftpurchaseLot de cadeaux YouTube
membership_giftgiftpurchaseLot de cadeaux YouTube
giftmembershipsgiftpurchaseLot de cadeaux YouTube (variante au pluriel)
gifted_membershipgiftredemptionCadeau YouTube reçu
gifted_membershipsgiftpurchaseLot de cadeaux YouTube (variante au pluriel)
community_giftgiftpurchaseLot de cadeaux communautaires
channel_pointsrewardUtilisation de récompense Twitch WebSocket (ancien alias)
followednew_followerSortie actuelle de TikTok DOM/TikFinity ; acceptez les deux noms lorsque vous combinez les modes de capture TikTok.

Utiliser cette référence

  • Lors de l'ajout d'un nouvel événement, réutilisez le vocabulaire existant (subscription_gift, viewer_update, etc.) si possible. Si un écart est inévitable, documentez-le ici avec sa raison.
  • Gardez data.meta prévisible : privilégiez les clés simples, ne surchargez jamais les chaînes avec des données mixtes et incluez toujours les unités (currency, bits, duration).
  • Mettez cette page à jour lors des modifications des données ; ne modifiez les instructions des agents que lorsque les règles communes de développement changent.
  • Validez les modifications des données à la fois avec la source émettrice et avec l'incrustation ou le déclencheur Event Flow qui les consomme.
  • La capture dépend de la prise en charge par la source et des paramètres. Pour masquer les lignes marquées comme événements dans le Dock ou les incrustations de mise en avant, ajoutez &hideevents ou &hideallevents. Pour masquer certains événements, utilisez &filterevents=subscription_gift,new_follower,gifted.
  • Pour YouTube, Twitch et Kick, activez Mode WebSocket pour la prise en charge la plus large des événements propres à chaque plateforme. La capture des cadeaux et dons YouTube (y compris les cadeaux et Super Chats) est disponible dans les modes standard et WebSocket ; WebSocket ajoute d'autres types d'événements. La prise en charge exacte varie toujours selon la plateforme, le rôle du compte et les autorisations accordées.

Retour en haut

Incrustations de monétisation

Les pourboires NinjaBacker utilisent platform: "ninjabacker", type: "ninjabacker", chatname, texte brut chatmessage, textonly: true, un champ préfixé par la source id, formaté hasDonation, et le champ numérique donoValue. Ce sont des lignes ordinaires de type don sans champ event valeur de remplacement. meta.ninjabacker contient l'horodatage ISO currency et le montant en unités principales amount. Les pourboires anonymes utilisent le nom visible Anonymous. La source utilise SSE en direct (sans rejeu) ou le récepteur facultatif de webhooks signés sur l’API SSN (jusqu’à sept jours de livraison en file). Les livraisons fiables utilisent un identifiant stable ninjabacker:delivery:DELIVERY_ID identifiant. Aucun des deux modes ne reçoit les annulations liées aux remboursements ou litiges. Les identifiants du récepteur et les secrets de signature n'entrent jamais dans les données d'événement. Les valeurs callbackId contrôlées par l'appelant ne sont pas des identifiants de paiement et ne sont pas transmises. Les pourboires de test du tableau de bord sont exclus des lignes de dons. Ils émettent event: "monetization_test" avec meta.ninjabackerTest contenant id et at (millisecondes Unix), uniquement pour l'alerte d'aperçu dédiée.

event: "monetization_update" est un instantané composé uniquement de métadonnées provenant de type/platform: "socialstream". meta.monetization.wishlist contient enabled, qr, position, rank, total, l'url publique et l'article actuel (name, amount, currency, image, url publique) ou null. meta.monetization.ninja contient enabled, qr, position, username et l'url publique de pourboire. Les Tip IDs privés ne sont jamais inclus. meta.monetization.ebay contient enabled, qr, position, display (cycle/cheapest/first), seconds, les paramètres d'annonce à activer et les articles publics. Chaque article possède id, name, amount, currency, image, url, auction, startingBid, endsAt, available, bought et updatedAt. Les heures sont en millisecondes Unix. Aucun identifiant vendeur ni aucune identité d'acheteur n'est inclus.

Un achat de liste de souhaits confirmé par l'hôte inclut également meta.wishlistPurchase avec id, name, supporter facultatif et at (millisecondes Unix). Il s'agit d'une confirmation de l'hôte, pas d'une notification de paiement Amazon, et elle ne compte pas comme un don monétaire. Les incrustations doivent dédupliquer son id et ignorer les anciens avis d'achat.

Commandes Shopify payées

Le récepteur Shopify signé facultatif émet platform/type: "shopify" et event: "purchase" uniquement pour orders/paid avec financial_status: "paid", un total positif, test: false, aucune annulation et un horodatage actuel de mise à jour du corps signé. Les avis de test, impayés, périmés, annulés et remboursés ne déclenchent pas d’achat. Aucune intention de cadeau n’est déduite.

chatname est Anonymous ; les champs client, les notes privées et les URL de commandes sont exclus. chatmessage est du texte brut avec textonly: true; subtitle contient jusqu'à trois titres de produits publics. meta.commerce contient orderTotal et currency dans la devise de la boutique, plus quantity lorsqu'un nombre complet valide est connu. Le destinataire et la finalité physique/numérique restent non définis. Aucun hasDonation ou donoValue est défini. id est un hachage opaque stable propre à la boutique/commande avec un préfixe Shopify ; ce n'est pas un identifiant brut de commande.

Les achats utilisent les circuits existants d'activité, de catégorie Purchase de multi-alerts et d'Event Flow. La promotion des produits utilise le mécanisme existant meta.monetization.commerce catalogue. Importer un produit ou définir son libellé promotionnel sur Gift ne génère aucun événement d'achat ou de cadeau. Configuration Shopify et limites de livraison.

Cadeaux et commerce

Utilisez event: "gift" pour un cadeau, giftcontribution pour un soutien payant destiné à un cadeau, giftfunded pour la fin du financement, et purchase pour une vente de produit. Ces noms sont indépendants du fournisseur et du caractère physique ou numérique de l'article. Réservez l'ancien giftpurchase événement pour les abonnements offerts ; Throne utilisait auparavant ce nom à tort et émet maintenant gift. Les producteurs d'abonnements existants restent inchangés. Les filtres personnalisés de noms d'événements Throne doivent passer à gift; les filtres de dons ne nécessitent aucune modification.

hasDonation reste le signal de compatibilité pour le soutien payant, avec donoValue contenant sa valeur en USD fournie ou estimée. Les cadeaux et contributions conservent ces champs. La fin du financement omet les deux pour éviter de compter les contributions deux fois. Les ventes ordinaires de produits les omettent par défaut, préservant le contrat eBay. Ne déduisez pas une intention de cadeau à partir d'une boutique, d'une URL de liste de souhaits ou d'un article physique : un achat pour l'acheteur ou un autre destinataire reste une vente sauf si la source identifie explicitement un cadeau au créateur.

Champ partagé facultatif meta.commerce les champs sont recipient (créateur, acheteur, autre), itemType (physique, numérique, service), quantity (nombre positif d’articles), currency (devise ISO), goalAmount (objectif de financement en unités principales, jamais un nouveau revenu), et orderTotal (total connu de commande payée en unités monétaires principales ; commerce, pas revenu de don). Omettez les détails inconnus. Gardez les noms d’articles dans subtitle, images dans contentimg, et le texte du soutien dans chatmessage. Les métadonnées existantes des fournisseurs restent disponibles. Throne fournit le destinataire et la devise, ainsi que goalAmount à l'achèvement ; eBay fournit la quantité. Aucun des deux ne déduit le type d'article ni n'expose d'informations privées sur le destinataire.

Le flux d'activité affiche ces événements même sans texte de soutien. Multi-alerts utilise la présentation des dons pour les cadeaux et contributions, avec une notification distincte Gift Fully Funded sans valeur monétaire. Les achats ont une catégorie Purchase distincte, activée par défaut, avec purchasestyle, purchasesound, purchaseaccent, et disablepurchases Commandes URL. Les alertes d'achat ne modifient pas les totaux de dons.

Event Flow propose ces noms d'événements dans les déclencheurs Event Type et Other Event. Les déclencheurs de dons examinent toujours hasDonation; les déclencheurs Gift Sub conservent la sémantique des abonnements. Compare Property accepte des chemins imbriqués tels que meta.commerce.recipient. Les modèles d’actions acceptent {meta.commerce.quantity} et {meta.commerce.currency}, avec les champs existants {donation}, {subtitle}, et {meta}. Les chemins imbriqués respectent la casse, les valeurs manquantes s'affichent comme du texte vide et la traversée des prototypes est interdite.

Webhooks de commerce pour créateurs et incrustations promotionnelles

Les paiements Donation publics de Ko-fi conservent hasDonation et obtiennent la valeur en USD donoValue. Les paiements d'abonnement utilisent new_subscriber ou resub, avec le niveau dans membership. Les commandes de boutique et les commissions utilisent purchase sans valeurs de don. Les événements Ko-fi privés restent exclus. Le JSON encodé comme formulaire est décodé une seule fois ; les noms et messages sont en texte brut.

Buy Me a Coffee donation.created conserve le soutien monétaire ; extra_purchase.created et commission_order.created deviennent purchase. wishlist_payment.created devient giftcontribution en utilisant uniquement ce montant de paiement ; meta.commerce.completed enregistre l'indicateur d'achèvement du fournisseur sans émettre une autre ligne monétaire. membership.started devient new_subscriber avec le niveau dans membership, sans utiliser incorrectement hasDonation pour un nom de niveau. Un montant de début d'abonnement n'est pas traité séparément comme un paiement effectué. Les événements de test, remboursés, échoués et les événements de mise à jour/cycle de vie non pris en charge ne produisent pas d'alertes payantes. Les notes masquées des contributeurs sont omises.

Fourthwall prend en charge ORDER_PLACED (purchase), GIFT_PURCHASE (gift, destinataire autre), DONATION (ligne de don ordinaire) et SUBSCRIPTION_PURCHASED (new_subscriber). Les totaux de commandes existants conservent hasDonation pour la rétrocompatibilité, marqué meta.commerce.legacyDonationValue: true; il s'agit d'une exception explicite aux valeurs par défaut des nouvelles ventes de produits. Les commandes utilisant des cartes-cadeaux émettent une alerte d'achat sans valeur de don : le nouveau montant facturé ne peut pas être déduit de manière fiable du total de la commande, et l'achat du cadeau a déjà été comptabilisé. Les noms de facturation et les adresses e-mail ne servent pas d'identité publique. Les événements de test du tableau de bord et les mises à jour de commandes ne génèrent pas d'alertes payantes.

Ces adaptateurs conservent le relais, les actions des bots, Event Flow et le routage des destinations existants, avec meta.webhookId déduplication. Ils exposent les noms publics, les messages en texte brut, les noms d'articles connus dans subtitle, et la devise ISO meta.commerce.currency avec les valeurs numériques de don, le cas échéant. Ils n'ajoutent ni comptabilisation des remboursements ni nouvelle authentification du récepteur ; utilisez le circuit de webhook déjà configuré du fournisseur.

meta.monetization.commerce dans monetization_update contient enabled, qr, position, display (first/cycle), seconds et un tableau public items. Chaque article possède name, url, image, amount facultatif (null si inconnu), currency et purpose (shop/gift/support/membership). Ce sont des détails promotionnels saisis par l'hôte, pas une preuve de paiement. Ajouter ou modifier des articles n'émet aucun événement de don ou d'achat. L'incrustation générique utilise mode=commerce; view=both|showcase|card|alerts sépare la promotion de l'activité. Les paramètres URL facultatifs style, scale, cardevery, cardfor et onlytype contrôlent la présentation. Les modes de fournisseurs existants acceptent également les commandes view et de programmation. Consultez le guide de configuration.

Événements de cadeaux Throne

L'intégration Monétisation, à activer, transmet les événements Throne signés avec platform et type défini sur throne. Les trois utilisent un identifiant stable de livraison id, texte brut chatname, chatmessage avec textonly: true, nom de l’article dans subtitle, et une miniature HTTPS facultative dans contentimg.

événementSignificationMontant du don / classement
giftUn cadeau achetéhasDonation et la valeur en USD donoValue; +1 au classement des cadeaux
giftcontributionUne contribution à un cadeauMontant de contribution uniquement ; aucune augmentation du classement
giftfundedUn cadeau financé collectivement terminéNon hasDonation ou donoValue, pour éviter de recompter les contributions précédentes ; +1 au rang de cadeaux

meta.throne contient itemName, creator (nom d’utilisateur public), completed, currency et le montant en unités principales amount. Pour giftfunded, amount décrit l’objectif, pas un nouveau revenu. Les donateurs anonymes restent Anonymous; les cadeaux communautaires terminés utilisent Community. Les champs privés de paiement et de livraison ne sont jamais transmis.

monetization_update les instantanés contiennent également meta.monetization.throne: enabled, username, url, qr, position, rank, et gifts. Ces instantanés ne contiennent aucune URL de webhook ni aucun identifiant d'écoute.

Commandes vocales de l'hôte (aperçu sur ordinateur)

Le flux Event Flow Quand je dis… le déclencheur reçoit les commandes fiables du microphone local de SSApp. Son contexte d'action interne utilise chatname: "Host", type: "hostvoice", la phrase reconnue dans chatmessage, et textonly: true. Il ne s'agit pas d'un événement entrant de plateforme ni d'un nouveau transport de chat. Envoyer ces champs dans le chat ne peut pas activer un déclencheur vocal.

Nécessite une version de bureau mise à jour, le démarrage explicite du microphone et l'activation des actions après le mode Test. Consultez le configuration de l'aperçu et état de validation.

Commandes d'affichage des produits

Existant monetization_update les instantanés peuvent inclure meta.monetization.commerce.live: null pour la programmation enregistrée, ou {mode: "show" | "hide", url?: "https://...", until: 0 | epochMilliseconds}. Show correspond à l'URL exacte du produit enregistré ; un produit absent n'affiche aucune carte. Une valeur until positive expire et rétablit la programmation enregistrée ; zéro reste actif jusqu'à sa modification ou au redémarrage de SSN. Hide masque les promotions, mais pas les alertes d'activités payantes.

commerce.viewerURL est l'URL publiée de la boutique en lecture seule, ou une chaîne vide. Lorsqu'elle est présente, les codes QR promotionnels y renvoient. Elle ne contient jamais la session SSN ni la clé de publication. Les produits restent dans commerce.items. Aucun événement de don ou d'achat n'est émis par les commandes d'affichage, les importations ou la publication. Voir Commandes de produits pour l'utilisation d'Event Flow et de l'API distante.

Le flux Event Flow commerceControl l'action attend la réponse directe/Chrome (jusqu'à huit secondes). Sur les données d'événement ordinaires, elle conserve l'événement et ajoute meta.commerceControlResult: {success: true, commerce: controlState} ou {success: false, error: "..."}. Pour une valeur existante numérique, de type tableau ou autre qu'un objet dans meta, les métadonnées restent inchangées et le diagnostic est retourné dans commerceControlResult sur le résultat de l'action à la place. Les commandes en échec arrêtent les actions suivantes de cette chaîne sans supprimer l'événement de paiement d'origine. Un délai d'attente dépassé ne prouve pas que la commande n'a pas été appliquée ; inspectez l'état avant de réessayer une commande relative telle que Next. La réussite confirme l'état local de sélection, masquage ou programmation, jamais la visibilité dans OBS ni la synchronisation de la page publique.

Flux de travail nommés Stream Deck / API

Le déclencheur de flux de travail nommé crée un message Event Flow interne avec type: "api", event: "workflow_trigger", chatname: "Stream Deck / API", vide chatmessage, et textonly: true. Son champ meta.workflow l'objet contient le nom du déclencheur et une valeur JSON fournie par l'appelant data objet. Lisez les valeurs à l'aide de modèles tels que {meta.workflow.data.minutes}. Seuls les flux enregistrés et activés correspondant explicitement à ce déclencheur sont évalués. Il ne s'agit pas d'un événement entrant de spectateur ou de chat, et il n'est pas diffusé comme un message de chat ; copier ces champs dans le chat n'active pas le déclencheur nommé.

Pilote du public NinjaChatter

Le connecteur expérimental d'extension appairée envoie des lignes destinées uniquement à l'affichage avec type: socialstreamchat, platform: ninjachatter, et textonly: true. meta.ninjachatter contient origin: audience, le champ descriptif provider, et le public room ID. Ces lignes contournent les réponses de plateforme, les bots, les déclencheurs Event Flow et les points. L'affichage d'un fournisseur ne vaut pas autorisation. Les anciennes captures de source NinjaChatter incluent meta.ninjachatter.room pour la suppression des doublons propre au salon.

Cheer utilise un circuit distinct de demande et de résultat authentifiés, jamais une commande de chat spéciale. Le préréglage fixe émet la commande existante de l'incrustation Actions show_text message pendant trois secondes. Sa réception signifie l'acceptation par le transport, pas un affichage vérifié dans OBS. Aucune donnée du public ne peut sélectionner des actions arbitraires. Le pilote est désactivé par défaut sur NinjaChatter ; Electron conserve son relais existant jusqu'à validation de la nouvelle séparation d'appairage privé.

Tableaux d'emplacements commerciaux et ventes récentes

Le mécanisme existant monetization_update événement (type/platform: socialstream) inclut aussi meta.monetization.boards. Son champ board contient title, style (places/équipes), columns (1–20), visible, et jusqu’à 120 spots. Chaque emplacement possède une chaîne id, texte brut label, status (disponible/réservé/révélé) et result (texte brut, vide jusqu’à révélation). Réservations et révélations sont des états d’affichage saisis par l’hôte, pas des preuves d’achat ni des attributions aléatoires.

boards.sales contient jusqu'à 100 enregistrements récents : id, title, facultatif amount (null si inconnu), currency, quantity, source, et at (millisecondes Unix lors de l’enregistrement). automatic active la collecte, salesVisible contrôle l'affichage et revision s'incrémente lors des changements. La collecte automatique accepte uniquement purchase événements provenant de Shopify, du vendeur eBay, de Fourthwall, de Ko-fi et de Buy Me a Coffee ; les événements privés et de test sont exclus. Les métadonnées d'enchères, les pourboires, les cadeaux et les réservations d'emplacements ne sont pas traités comme des achats. Les enregistrements automatiques ne remplacent pas le prix d'un article par le total de la commande, le prix d'une annonce ou le montant d'un don. Les enregistrements manuels utilisent source: "Host confirmed".

L'état persiste dans le stockage privé de monétisation de cette installation ; les instantanés publics excluent les identifiants de déduplication des livraisons, l'identité de l'acheteur et les secrets. Les ventes explicitement affichées conservent leurs identifiants d'événement pour permettre leur suppression. Les remboursements nécessitent une suppression par l'hôte. Les identifiants d'achats en double sont mémorisés séparément (jusqu'à 2 000), même après l'effacement de l'historique visible. Le mécanisme existant getCommerceState la réponse inclut commerce.boards; commerceControl accepte les commandes de tableau et de ventes documentées dans le guide des tableaux. Les modifications manuelles diffusent l'état mis à jour mais ne créent jamais d'événements d'achat, de totaux de dons ni de récompenses payantes. Les incrustations se masquent lorsque l'instantané de l'hôte est absent depuis 35 secondes.

Ajouts au flux de travail du vendeur : commerce.boards.board.id identifie une génération de tableau. Une commande manuelle saleAdd peut fournir boardId et spotId pour enregistrer la vente et réserver cet emplacement de manière atomique ; les ventes liées en double encore présentes dans l'historique récent sont refusées. saleRemove avec reopenSpot: true libère cet emplacement uniquement si la génération du tableau correspond toujours. Les entrées publiques de ventes omettent ces champs de liaison destinés à l'opérateur. Un champ facultatif platform sur une vente manuelle conserve sa source pour le filtrage tandis que source: "Host confirmed" identifie la méthode de confirmation. amount est le total de l'entrée, y compris son quantity. Le champ de l'adaptateur de commandes payées eBay meta.ebayPurchase.quantity est conservé.

salesSettings.auctionSource active l'assistant d'articles Whatnot ou eBay Live. Le champ de la réponse de commande commerce.auction contient uniquement source, title, priceText, status et at provenant du dernier événement capturé auction_update, ou null. Expire après cinq minutes et s’efface au changement de source, à un instantané inactif ou au redémarrage. L’assistant est réservé à l’opérateur : ni enregistré ni diffusé au public ; l’identité des enchérisseurs/gagnants est supprimée. Scripts sources et événements d’enchères ne changent pas. Copier un brouillon ne confirme aucun paiement et ne crée pas de vente.