Довідник живих подій

Ця сторінка документує канонічні дані подій, які Social Stream Ninja надсилає для основних платформ. Використовуйте її як спільне джерело істини при підключенні нових джерел, усуненні несправностей інтеграцій або узгодженні підписів інтерфейсу. Коротшу таблицю для споживачів дивіться в Сумісність подій і сповіщень.

Важливо: Доступність подій залежить від джерела, дозволів і налаштувань захоплення. Щоб приховати рядки з позначкою події в доку або оверлеї вибраних повідомлень, додайте &hideevents або &hideallevents. Щоб приховати вибрані події, використовуйте &filterevents=subscription_gift,new_follower,gifted. Ці фільтри також можуть приховати платні рядки, що мають event; звичайні рядки донатів без позначки події не зіставляються фільтрами подій. Інші фільтри повідомлень усе одно застосовуються.
Виберіть спосіб захоплення: Для YouTube, Twitch і Kick Режим WebSocket зазвичай надає ширше охоплення подій. Стандартне захоплення DOM читає рядки й картки, фактично відображені на сторінці. YouTube Super Chats, Super Stickers і подарунки Jewel мають шляхи захоплення в обох режимах; інші подарунки, чайові й події членства залежать від джерела. Підтримувані шляхи й потрібні налаштування наведено в таблицях платформ.
Створюєте автоматизації? Перегляньте Посібник із потоків подій щоб дізнатися, як використовувати ці дані подій у власних тригерах, сповіщеннях і процесах. Посібник містить Довідник змінних шаблонів для форматування тексту.
Структура даних: Рядки чату у стилі донатів мають використовувати hasDonation і необов’язкове donoValue. Не задавайте event: "donation" лише тому, що звичайний рядок чату/чайових має значення; використовуйте конкретні назви подій лише для справжніх дій платформи або типів платних елементів, наприклад superchat, supersticker, gift, або jeweldonation. Використовуйте meta лише для додаткових структурованих даних, які справді потрібні споживачам і ще не охоплені наявними полями.

Коротко про доступність функцій

Ця таблиця показує, які типи сповіщень наразі доставляє кожен метод захоплення. Докладні примітки щодо даних наведено нижче.

Окреме вікно Multi-Stream Alert Box групує живі події в шість основних категорій сповіщень: Follow, Subscription/Member, Donation, Bits/Cheers, Raid/Host, і Purchase, а також дві окремо вмикані категорії (Auction і Hype Train), увімкнені через параметри URL. Ці категорії визначаються з наявних event, membership, subtitle, hasDonation, і meta поля, задокументовані тут; окремий формат даних не потрібен.

Джерело Нові підписки / учасники Нові підписники Донати Лічильники та додаткові дані
YouTube (міст Data API) Приєднання до членства, поновлення, подарунки Окремі сповіщення про підписників* + загальні кількості Super Chats і Super Stickers Кількості глядачів, підписників і переглядів (через опитування)
Twitch — захоплення DOM Рядки пакетів подарунків і сповіщення про одержувача - Біти позначаються через hasDonation Кількість глядачів, картки винагород і картки виділення спільноти
Twitch — EventSub/WebSocket Миттєві платні підписки, поновлення й подарунки Миттєві підписки + загальна кількість підписників Cheers, Power-ups і використання балів каналу Загальні кількості глядачів/платних підписників/підписників, стан трансляції, рекламні сповіщення
TikTok Live - Картки підписок (коли TikTok їх показує) Подарунки, перераховані в загальну кількість монет Кількість глядачів, сповіщення приєднання та шквали вподобань
YouNow - Активність шанувальників і аудиторії - Кількість глядачів із панелі живої аудиторії
Favorited Studio - - - Кількість глядачів із вкладки живих глядачів
Whatnot - - - Кількість глядачів, сповіщення приєднання, метадані живого аукціону, товари й знімки розіграшів
eBay Live - - - Кількість глядачів, кількість підписників, знімки карток живих подій, метадані нижньої панелі аукціону (якщо надані), сердечка реакцій і метадані майбутніх подій
Вікно сповіщень Streamlabs Підписки, подарунки, спонсори, нові підписники Cheer/біти, донати (з валютою) Cheer/біти, донати (hasDonation) Поки вікно сповіщень відкрите; також доступно через sources/websocket/streamlabs.html сокетний токен
Дії OBS у Flow Actions - - - Події виводу OBS, сцен, буфера повтору й завершення медіа для Event Flow, коли actions.html підключено до OBS WebSocket
Kick — DOM - - - Кількість глядачів і базові системні повідомлення винагород/подарунків; для докладніших сповіщень використовуйте міст Kick
Kick — WebSocket/міст Нові підписки, поновлення й подарунки Сповіщення про підписки + загальна кількість підписників Події підтримки/чайових (сума + валюта) Стан трансляції, використання винагород і метадані профілю
Facebook Live - - Stars, коли видимі в DOM Рядки чату, Stars і опитування кількості глядачів
Rumble — захоплення DOM - - Видимі ціни Rant Чат, вхідні рейди й опитування кількості глядачів
Rumble — WebSocket/URL API Нові й подаровані підписки Сповіщення про підписки + загальна кількість підписників Rants/чайові (сума + валюта) Загальні кількості глядачів і підписників, стан ефіру та потік чату
Streamplace - - - Кількість глядачів, а також імена, кольори, значки, відповіді й посилання чату
WorldsWave - - Підписи донатів, якщо є Відображений живий чат і окремо вмикані оновлення кількості глядачів
CHZZK - - Видимі рядки донатів cheese Рядки чату, зображення значків, емоти й опитування кількості глядачів
BEAM - - - Рядки чату й опитування кількості глядачів, коли сторінка лише чату надає лічильник глядачів
Seal Team Sloth - - - Відображені рядки чату окремого вікна та viewer_update опитує, коли кількість глядачів увімкнено
Castyr - - - Відображені рядки чату окремого вікна й окремо вмикані оновлення кількості глядачів
RPLAY - - - З авторизацією /live/chat/box/ окреме вікно: type: "rplay" чат, аватари, зображення значків рівнів і емоти. Чайові монетами зберігають суму/одиницю в hasDonation для спільного перерахунку в USD, без події донату. Окремо вмикана viewer_update опитування використовують ціле meta з публічної кінцевої точки трансляції RPLAY. Переслані рядки Twitch виключаються.
FLEX TV - - - Відображені рядки чату з іменами, кольорами авторів, зображеннями значків і метаданими учасників

*Сповіщення про підписників YouTube отримуються опитуванням і можуть затримуватися або бути неповними. Довідник API не обіцяє фіксованого чотиригодинного вікна доставки. Дивіться офіційні обмеження API підписок.

Огляд полів

data тут означає об’єкт повідомлення, а не додаткову обгортку. Рядки чату й події лише з метаданими мають різні структури: лічильники та знімки стану можуть пропускати chatname/chatmessage. У таблицях платформ повідомлення описує звичайний рядок чату, а не буквальний event: "message".

Поле Структура Використання
data.type рядок Ідентифікатор джерела, який використовують оверлеї, фільтри й Event Flow. Instagram зберігає живий чат як instagramlive а коментарі поза ефіром — як instagram. Дивіться Посібник із типів джерел для варіантів, загальних джерел і вихідної маршрутизації.
data.chatname рядок Надане джерелом відображуване ім’я, яке використовують обробка повідомлень і виводи поза оверлеями. Налаштований псевдонім відображуваного імені може замінювати це значення лише в скопійованих транспортних даних дока й оверлеїв.
data.username рядок Ім’я користувача джерела, якщо доступне. Дані дока або оверлею з псевдонімом можуть додавати це поле, щоб зберегти оригінальне chatname для дій користувача; канонічне повідомлення залишається незмінним.
data.userid рядок Ідентифікатор користувача на конкретній платформі. Дії користувачів надають цьому значенню перевагу перед username і chatname.
data.platformрядок (необов’язково)Деякі інтеграції включають це поряд із type. Багато адаптерів джерел пропускають його; використовуйте type для маршрутизації джерела.
data.idрядок | число (необов’язково)Ідентифікатор повідомлення або події. Його значення залежить від джерела й транспорту; не вважайте, що це завжди власний ID модерації платформи. Використовуйте meta.messageId коли адаптер надає його для синхронізації видалення.
data.donoValueчисло (необов’язково)Наданий джерелом числовий еквівалент у USD, зокрема оцінки. Коректне значення (включно з нулем) має перевагу над конвертацією currency.js. За його відсутності споживачі оцінюють USD за hasDonation і контекстом джерела. Оригінальні суми й одиниці залишаються в hasDonation і наявних метаданих постачальника.
data.chatbadgesмасив | рядок (необов’язково)URL зображень значків або об’єкти значків (type: "img" з src, type: "svg" з html, або type: "text" з text). Пересилання зберігає буквальний підпис текстового значка в необов’язковому rawText і створює екрановане text для старіших оверлеїв. На наступних проходах пересилання генеруйте заново text з rawText; не екрануйте text знову. Поточні засоби відображення показують rawText буквально, якщо є, а інакше зберігайте застарілу обробку закодованого тексту. Це поле подання, а не дозвіл відображати HTML. Старіші джерела можуть надсилати один HTML-рядок замість масиву. Оверлеї значків приймають обидва формати й локально очищують HTML і URL значків, зокрема коли відправник — старіше розширення. Некоректні значки не мають заважати відображенню повідомлення чату або членства.
data.event рядок | логічне значення Ідентифікатор системної активності (наприклад viewer_update, subscription_gift, giftpurchase). Для звичайного чату залишайте це порожнім/false, щоб оверлеї відрізняли системні повідомлення від розмовного тексту.
data.chatmessage рядок Текст повідомлення. Може містити очищений/придатний до відображення HTML лише коли data.textonly має значення false.
data.textonly логічне значення Застосовується лише до data.chatmessage. true означає відображати chatmessage як звичайний текст, зберігаючи буквальні теги й текст, схожий на сутності; не декодуйте, не очищуйте як HTML і не додавайте теги форматування до цього тексту. Застосовуйте оформлення події до відображуваного елемента. false означає chatmessage може містити очищений/придатний до відображення HTML; старіші повідомлення без прапорця зберігають цю поведінку HTML. Інші звичайні поля є простим текстом, окрім медіаполів, як-от chatimg і contentimg. Відображайте текстові поля через textContent, або екрануйте їх один раз під час створення HTML-шаблону; не видаляйте й не декодуйте їхній вміст повторно.
data.contentimg рядок (необов’язково) Зображення вмісту або URL підтримуваного медіа. У розширенні й настільному застосунку окремо вмикана функція allowExternalGifs налаштування заповнює порожнє поле з першого прямого посилання HTTP(S) на GIF у тексті повідомлення або HTML-посиланні. Шлях URL має закінчуватися на .gif (без урахування регістру); параметри запиту й фрагменти зберігаються. Ключ API не потрібен, зберігає chatmessage і наявні вкладення, а також враховує removeContentImage. Необов’язкове hideExternalGifUrl налаштування додає meta.hideExternalGifUrl: true; док і оверлей вибраних повідомлень приховують відповідне посилання GIF лише після завантаження зображення, зберігаючи навколишній текст та оригінальні дані. Зображення, що не завантажилися або перевищили час очікування, згортають контейнер вкладення й залишають посилання видимим. Оверлей лише GIF пробує прямий показ зображення, якщо отримання байтів не вдалося, використовуючи налаштований час показу, коли час анімації недоступний; невдалі або завислі завантаження просувають його чергу. Він не додає event або змініть джерело type. Вміст зовнішніх зображень не фільтрується, і вони можуть не завантажуватися, якщо хостинг блокує вбудовування.
data.membership рядок Читабельний стан членства, наприклад MEMBERSHIP, new_sponsor, gift_recipient. Інтерфейси використовують його для значків, фільтрів і оголошень.
data.subtitle рядок Додатковий опис (тривалість членства, підвищення рівня, хто подарував...). Залишайте його коротким і лише текстовим, щоб оверлеї могли розміщувати його під відображуваним іменем.
data.hasDonation рядок Сума грошового або віртуального подарунка ($5.00, 500 bits, 300 coins). Заповнюйте, навіть коли data.event порожнє, щоб оверлеї донатів могли його визначити.
data.meta число | об’єкт | рядок (застаріле) Використовуйте звичайні цілі числа для окремих лічильників (глядачів, підписників, платних підписників) і об’єкти для багатшого контексту. Деякі старіші події, наприклад Twitch DOM community_highlight, містять рядок. Перевіряйте структуру конкретної події перед читанням властивостей об’єкта; нові структуровані подробиці належать до об’єкта.
data.firsttime логічне значення Задається як true коли ввімкнено визначення нових учасників чату, локальна база даних і це перше збережене повідомлення для цього користувача/джерела. Док використовує це для виділення нових учасників і фільтрів звукового сигналу першого повідомлення; необов’язкове налаштування значка нового учасника додає значок листка на початок chatbadges.
data.lastactivity число Часова позначка Unix у секундах попередньої збереженої активності чату цього користувача, коли ввімкнено визначення нових учасників чату й локальну базу даних. Пропускається для зовсім нових користувачів.

Транспорт керування оверлеєм відокремлений від захопленого чату/подій. Оновлені приймачі використовують ssnControl обгортку, що містить ідентифікатор доставки id, вибрати target, необов’язковий канал відповіді та ID клієнта знімка. Наявні тіла вибраних повідомлень залишаються незмінними. Публічне керування вибором використовує канал 7; Actions зберігає канал 6. Стан Poll і Map містить поле ведучого epoch, revision і reset позначка; Timer, Ticker і Spotify використовують ssnState з епохою та ревізією. Ці позначки описують стан ведучого, а не відновлену історію голосів/чату. Джерела не мають додавати поля керувальної обгортки до захоплених повідомлень. Підтвердження отримання не доводить завершення дії або видимості в OBS. Дивіться стан міграції щодо підтримуваних функцій, узгодження відповідей і обмежень повторного підключення.

Phrase Guess використовує власний {response: text} запит для відповідей чату server2 та {action: "phraseGuessResponse", value: {type: "bot", chatname: name, chatmessage: text}} для оголошень лише в доку. Ведучий має ввімкнути вхідні повідомлення server3; вимкнення керування ведучого все ще блокує ці запити. Оголошення дока пересилаються як звичайні рядки чату бота з textonly: true, без надсилання в поля чату джерел захоплення. Застарілий режим API зберігає наявний формат команд.

Правила Meta

Щоб панелі й автоматизації залишалися узгодженими, дотримуйтеся цих правил під час розширення data.meta:

  • viewer_update, follower_update, subscriber_update, і likes_update використовують звичайне ціле число meta значення. likes_update є авторитетним підсумком платформи: споживачі мають установлювати показане значення, а не додавати його. Фоновий скрипт об’єднує кількість глядачів у viewer_updates з об’єктом, ключі якого — data.type.
  • giveaway_state є згенерованим ведучим знімком лише метаданих для керованого відображення. meta.giveaway версія 2 включає giveawayId, постійне roundId/epoch, зі збільшенням generation між новими раундами, revision у межах раунду, status, open, draw, keyword, count, ticketCount, зафіксоване config, до 120 попередніх entrants, і останні 20 winners. Записи надають id, name, platform і tickets; переможці додають drawnAt і надане points. Coin Flip Pot додає outcome; Number Hunt додає number із публічним low, high і останні guesses, ніколи не секрет. Споживачі фільтрують за ID розіграшу й відкидають старі покоління/ревізії. Це зразки відображення, а не повна книга квитків чи інструкція виплат. Ключі гаманців, баланси й резервування не потрапляють у глядацькі знімки. Ведучий публікує в giveaway мітку P2P і ввімкнені потоки WebSocket оверлею; це не означає видимості в OBS. Посібник.
  • meta.giveawayControlResult містить результат дії розіграшу Event Flow (ok, необов’язкове error, giveaway або simulated). meta.giveawayHandled перелічує ID розіграшів, уже оброблених дією входу/покупки потоку, щоб автоматична команда чату не списала кошти повторно. Редактор додає meta.economyTest для імітованих дій розіграшу; це не подія вихідної платформи й не облікові дані авторизації.
  • video_stats використовує структурований meta об’єкт стану зовнішнього кодувальника/сервера, зокрема provider, label, online, bitrateKbps, rttMs, bufferMs, лічильники втрат/відкидання пакетів і необов’язкові подробиці кодека.
  • Події у стилі донатів можуть включати описовий об’єкт, наприклад { amount, currency, supporter } для Kick, { bits } для cheers Twitch. Події членства мають власні метадані, залежні від джерела; вони не є автоматично грошовими донатами.
  • Нормалізовані повідомлення вебхуків Stripe, Ko-fi, Buy Me a Coffee і Fourthwall містять обмежене постачальником meta.webhookId, скопійований зі стабільного ідентифікатора події постачальника, щоб наступні сторінки могли прибирати дублікати повторних спроб і змішаних транспортів.
  • Рейди Twitch передають { fromId, fromLogin, viewers }. Інші джерела відрізняються: Whatnot використовує meta.numRaiders, тоді як SharePlay використовує необов’язкове meta.fromLogin/meta.viewers. Перевірте рядок конкретного джерела перед читанням метаданих рейду.
  • Використання винагород Twitch EventSub надає meta.rewardId, cost, rewardTitle, redemptionId, і застаріле alias поряд із підготовленим повідомленням. Картки винагород DOM та інші джерела можуть надавати менше полів або інші поля.
  • user_banned містить лише метадані для віджетів модерації. Навмисно пропускає chatname і chatmessage; використовуйте meta.username, meta.displayName, meta.avatarUrl, і meta.profileUrl.
  • Транспорти чату, які підтримують синхронізацію видалення через керування джерелом, мають надавати власний ідентифікатор чату платформи як meta.messageId замість покладання на внутрішнє поле дока data-mid значення.
  • Видалення джерел використовують {delete: {type, id}} для відомого ID повідомлення дока або {delete: {type, meta: {messageId}}} для власного ID повідомлення платформи. Відомий ID видаляє лише відповідні повідомлення. Коли відомий лише цільовий користувач, надішліть {delete: {type, userid}} або {delete: {type, chatname}} щоб прибрати повідомлення цього користувача з цієї платформи. Ніколи не підставляйте ідентичність модератора замість цільового користувача. Вхідні видалення не потребують необов’язкового налаштування синхронізації модерації з дока на платформу.
  • Метадані ідентичності джерела SSApp можуть додавати meta.ssnAccountRole, meta.ssnSourceId, і meta.ssnSession коли джерелу призначено роль облікового запису, відмінну від normal.
  • Event Flow може запросити виділення, задавши meta.featured = true у даних чату, що автоматично вибирає повідомлення в доку/оверлеї вибраних повідомлень.
  • AI Event Overlay: дія showAiEventOverlay надсилає копію повідомлення, що її викликало, одержувачу з міткою aievent-CONFIGURATION_ID, додаючи meta.aiEventOverlay: {profile: "CONFIGURATION_ID"}. Наявні поля повідомлення та метадані у вигляді об’єкта зберігаються; скалярні метадані зберігаються в meta.value. Це адресне доставлення, а не нова подія платформи. Початкове повідомлення не змінюється. Див. посібник із налаштування.
  • Необов’язково meta.aiEventOverlay.variation вибирає точну фразу, схвалену в збережених налаштуваннях оверлею. Текст глядача й метадані заповнюють поля шаблону після його генерації.
  • Запити на показ AI Event Overlay потребують профіль і його приватний токен показу. Налаштуваннями та ключами API можна керувати лише через локальне спливне вікно SSN. Відповіді використовують {aiEventResponse: {target, value}} або {aiEventResponse: {target, error}}. Результати генерації містять template, duration, warnings, а також необов’язкові URL медіаданих у image/audio.
  • Винагороди у вигляді ШІ-оверлеїв, оплачені балами, використовують aiEventPresentation (id, profile, expiresAt, result, message) і підтверджують отримання через aiEventDelivered (ідентифікатор доставки). Записи про списання та суми повернень залишаються на хості.
  • Event Flow може запросити закріплення в доку, задавши meta.pinned = true; необов’язкове meta.pinnedTarget обмежує це закріплення доком із відповідним label.
  • Термодрук Event Flow записує свій результат у meta.thermalPrintResult (success і необов’язкове code/error), зі збереженням події чату та інших метаданих. Для подій із числовими або іншими необ’єктними метаданими діагностика залишається в результаті дії, а подія не змінюється.
  • Винагороди-стікери SSN за окремим увімкненням: event: "sticker" надсилається лише до stickers мітку оверлею після списання балів лояльності. Задає platform і type до поля початкового повідомлення type, і зберігає chatname, із порожнім chatmessage, textonly: true, і contentimg що містить відносний шлях до упакованого зображення або схвалений ведучим URL медіа HTTPS. meta.sticker містить id, pack, name, cost, duration (секунди), motion, redemptionId, і expiresAt (мілісекунди Unix). Це винагорода SSN, а не донат платформи чи власна подія балів каналу. Дивіться галереї та посібнику з налаштування.
  • Програвач стікерів повертає керувальний пакет {action: "stickerReceipt", meta: {sticker: {redemptionId, success}}} своєму відправнику після завантаження або збою зображення. Лише підтвердження від підключеного stickers вузлу вирішити очікуване використання винагороди. Невдала або непідтверджена доставка запускає повернення; цей керувальний пакет не є подією чату. Рекомендовано один активний екран стікерів на сесію.
  • Команди сценічного оверлею ШІ використовують { action: "aiOverlay", target, meta } або кероване доком відтворення співведучого використовує { action: "cohostOverlay", target, meta }; зберігайте всі подробиці команд, наприклад command, text, emotion, avatar, і tts всередині meta.
  • Якщо платформа надає кілька лічильників разом, надавайте перевагу структурованому об’єкту з явними ключами (meta.viewer_count, meta.follower_count) замість перевантаження рядків.
  • Торгові оверлеї мають використовувати об’єкти знімків у meta (наприклад auction_update і commerce_update) та уникайте довільних полів верхнього рівня.

Охоплення платформ

YouTube — стандартне захоплення DOM

Реалізація: sources/youtube.js

  • Тримайте вкладку живого чату відкритою. Захоплення читає картки членства й подарунків, відображені в цій сесії; глядач не обов’язково має бути власником каналу або модератором. Доступ облікового запису та вибраний вигляд чату можуть впливати на видимі рядки.
  • Якщо відкрити оверлей кількості глядачів і активності чату з відображенням глядачів, їхня кількість запитується автоматично. Налаштування Показувати кількість глядачів і Відстежувати активних учасників чату також вмикають збирання даних.
  • Для сповіщень про підписників і додаткових подій, увімкніть режим WebSocket у налаштуваннях розширення.
Подія Коли спрацьовує Примітки щодо даних
sponsorship Вітальний заголовок членства без явного тексту чату (нові учасники, надходження подарованих пакетів), включно зі структурованими вітальними картками або локалізованим текстом «Welcome to …». membership заповнюється перекладеним «MEMBERSHIP»; subtitle містить серію/рівень, якщо визначено; nameColor використовує зелений колір членства, коли дозволено.
giftpurchase Банер покупки пакета подарунків (ytd-sponsorships-live-chat-gift-purchase). membership стає gift_giver; subtitle містить кількість подарунків, якщо відома; без hasDonation або donoValue.
giftredemption Оголошення отримання подарунка для одержувачів. membership стає «MEMBERSHIP»; subtitle включає «Gifted by …».
resub Банери підвищення рівня, що містять «upgraded to …». subtitle захоплює підпис нового рівня; membership залишається «MEMBERSHIP».
superchat, supersticker, jeweldonation Super Chats, Super Stickers, картки оголошення донатів і YouTube Gifts на базі Jewels (yt-gift-message-view-model). hasDonation містить значення; event визначає тип платного елемента YouTube. YouTube Gifts використовують N Jewels коли присутнє, або 1 YouTube Gift коли YouTube приховує кількість. Зображення подарунків використовують contentimg, підписи подарунків використовують subtitle, а мінімальні подробиці подарунка дублюються в meta.youtubeGift.
jeweldonation ефект подарунка YouTube показує анімований подарунок Jewel над живим чатом (ytls-gift-overlay-item-view-model). Надсилається безпосередньо до окремої цілі GIF/медіа, щоб анімація могла відтворюватися без дублювання звичайного рядка подарунка. contentimg містить анімований ресурс і meta.youtubeGift.animationUrl/animationDescription зберігають подробиці ефекту.
reaction Реакція глядача з’являється у фонтані емодзі живого чату YouTube. Надсилається безпосередньо до окремої цілі реакцій. Анонімний емодзі та URL зображення зберігаються в chatmessage/contentimg і в meta.reactionType/reactionImage. Відомі поточні варіанти включають ❤, 😄, 🎉, 😳 і 💯.
thankyou Запасне повідомлення, коли сума донату є, а текст чату не надано. Зберігає hasDonation і автоматично вставляє «Thank you for your donation!» для оверлеїв.
redirect У живому чаті з’являється банер перенаправлення YouTube (найближчий відповідник сповіщення про рейд). Захоплення лише DOM із yt-live-chat-banner-redirect-renderer. Задає event до redirect і використовує membership як підпис, щоб оверлеї відображали його як інші системні повідомлення.
viewer_update Опитування кінцевої точки глядачів Social Stream кожні 30 с (у разі помилок квоти — зчитування сторінки). meta є цілою кількістю поточних глядачів; входить до сукупного viewer_updates у фоновому скрипті.

Блоки членства також задають membership для чату модераторів/учасників, тоді як subtitle містить кількість місяців або назви рівнів. sourceName/sourceImg заповнюються, щойно getChannelInfo вдається. Стандартний чат DOM тепер включає meta.messageId коли YouTube надає власний ID повідомлення живого чату, який док використовує для синхронізації видалення.

YouTube — захоплення WebSocket/Data API

Реалізація: sources/websocket/youtube.html, спільні допоміжні засоби в shared/

  • Типово використовує області OAuth youtube.readonly і youtube.channel-memberships.creator. Необов’язковий доступ на запис додає youtube.force-ssl для надсилання чату, модерації, блокувань і редагування подробиць трансляції; Google може показувати це як широкий дозвіл керування YouTube, оскільки YouTube не надає області запису лише для чату.
  • Статистика каналу враховує окремі перемикачі налаштувань (showsubscount, showviewercount).
  • API не може надавати власні зображення значків; запасні значки використовують зазначені нижче емодзі.
  • Коли API явно повідомляє authorDetails.isChatModerator: true, дані чату, Super Chat, Super Sticker, YouTube Gift і подарованого членства включають mod: true. Статус модератора не виводиться й не кешується між подіями.
  • Сповіщення про нових підписників використовують myRecentSubscribers API (опитування кожні 5 хвилин). Примітка: результати можуть затримуватися або бути неповними; можна визначити лише публічно видимі підписки.
  • Банери перенаправлення YouTube не надаються через Data API, тому redirect залишається доступним лише зі стандартного захоплення DOM.
Подія Коли спрацьовує Примітки щодо даних
superchat Записи Super Chat з історії Data API або опитування трансляції. hasDonation зберігає суму сайту (валюта + значення); event є superchat. Старіші збірки WebSocket використовували event: "donation" для цього рядка, тому споживачі можуть і далі приймати це як застарілий псевдонім.
supersticker Super Stickers (лише запасний текст повідомлення, без зображення з API). hasDonation містить суму; chatmessage містить декодований текст опису.
jeweldonation YouTube giftEvent повідомлення, коли глядачі обмінюють Jewels на Gifts. hasDonation містить N Jewels, або 1 YouTube Gift коли YouTube приховує кількість; contentimg використовує URL ресурсу подарунка, якщо наданий; subtitle містить підпис подарунка; meta.youtubeGift містить додаткові подробиці подарунка.
sponsorship Новий учасник приєднується через newSponsorEvent. membership стає new_sponsor або new_member; meta включає originalEventType, тривалості та відомості про рівень.
resub Поновлення членства або підвищення рівня. membership стає renewed_member (поновлення) або upgraded_member (підвищення рівня); subtitle показує рівень.
giftpurchase Пакети подарунків, придбані через API. membership задається як gift_giver; subtitle перелічує кількість/рівень; без hasDonation або donoValue.
giftredemption Сповіщення отримання подарунків. membership gift_recipient; типові значки — 🎁; subtitle вказує подарований рівень.
membermilestone Повідомлення віх (memberMonth або displayMessage присутній). membership member_milestone; subtitle підсумовує місяці + рівень; meta захоплює необроблене зіставлення віхи.
viewer_update Статистика трансляції (одночасні глядачі), коли звітування глядачів увімкнено. meta є цілою кількістю; повторює логіку DOM, щоб наступні споживачі могли об’єднати обидва потоки. Док, що використовує &showviewercount запитує збирання кількості глядачів на 70 хвилин і поновлює запит щогодини без постійної зміни загального налаштування.
likes_update Опитування офіційної статистики відео, коли Надсилати загальну кількість вподобань платформи увімкнено. meta є поточною цілою кількістю вподобань відео. Надсилається при зміні та періодично без змін, щоб дані споживачів залишалися актуальними. Загальний captureliketotals налаштування вмикає це; застаріле captureyoutubelikes залишається псевдонімом сумісності. Увімкнення в спливному вікні параметра для окремого дока &showlikecount параметр також постійно вмикає ці загальні налаштування захоплення, тоді як ручне додавання параметра URL керує лише відображенням. Вимкнення параметра показу не вимикає загального збирання.
subscriber_update Опитування статистики каналу (підписники), коли showsubscount не вимкнено явно. meta є загальною кількістю платних підписників; інтерфейс оновлює лічильники панелі.
view_update Опитування статистики каналу (перегляди за весь час), коли showviewercount або режим ажіотажу активний. meta є цілою кількістю переглядів.
live_chat_ended Живий чат стає недоступним для прив’язаної трансляції. meta.streamTitle заповнюється, коли метадані трансляції кешовані.
user_banned userBannedEvent з API живого чату або потоку gRPC. Подія лише з метаданими для віджетів модерації. meta включає ім’я користувача/відображуване ім’я, ID каналу, URL аватара/профілю, модератора, тривалість блокування/тайм-ауту та постійність.
new_follower Новий підписник, визначений через myRecentSubscribers API (опитування кожні 5 хвилин). chatname є назвою каналу підписника; chatmessage порожнє, якщо на сторінці джерела YouTube не ввімкнено сповіщення про підписників. meta включає channelId, title, subscribedAt, а згруповані серії додають grouped, count, others, і subscribers. Примітка: результати можуть затримуватися або бути неповними; можна визначити лише публічно видимі підписки.

Пересилання чату з API використовують meta.plainText для звичайного тексту повідомлення поряд із форматованим chatmessage вміст. Це текст, а не HTML, і він усе ще може містити емодзі Unicode. Запасні значки членства використовують емодзі (⭐, 💝, 🏅тощо), щоб зберегти узгодженість із захопленням DOM. Дані звичайного чату також містять meta.messageId щоб дії видалення в доку могли повертатися до API модерації YouTube.

Сповіщення про підписників YouTube (new_follower)

Social Stream тепер може визначати нових підписників YouTube за допомогою myRecentSubscribers кінцева точка API. Працює подібно до сповіщень про підписників Streamlabs.

Як це працює:

  • Опитує YouTube API кожні 5 хвилин щодо нових підписників
  • Відстежує побачених підписників у localStorage для визначення нових
  • Надсилає new_follower події з іменем, аватаром та ID каналу підписника
  • Типово залишає сповіщення про підписників вимкненими; після ввімкнення використовується поточний рядок перекладу для alert-just-subscribed
  • Типово групує серії з понад трьох нових підписників, щоб повторні підключення не переповнювали оверлеї або Event Flow
  • Потребує ввімкненого режиму WebSocket у налаштуваннях розширення

Обмеження (це обмеження YouTube API, а не Social Stream):

  • Без гарантованої затримки доставки — SSN опитує кожні п’ять хвилин, але API може повертати затримані або неповні результати. Не покладайтеся на фіксоване чотиригодинне вікно.
  • Лише публічні підписки — Підписники, які зробили список підписок приватним, не запускатимуть сповіщень. На YouTube підписки приватні за замовчуванням.
  • Лише власник каналу — Ви можете отримувати сповіщення про підписників лише для каналів, якими володієте й під обліковим записом яких авторизовані.
  • Використання квоти API — Кожне опитування коштує 1 одиницю API. З інтервалом 5 хвилин це приблизно 288 одиниць на день (із типової добової квоти 10 000).

Тригер редактора Event Flow: Використовуйте data.event === "new_follower" і data.type === "youtube"

YouTube WebSocket: короткий довідник подій і членства

data.event data.membership Сценарій
sponsorshipnew_sponsorНовий учасник через newSponsorEvent
sponsorshipnew_memberНовий учасник через processMembership
resubrenewed_memberПоновлення членства
resubupgraded_memberПідвищення рівня
giftpurchasegift_giverПодаровані членства на каналі
giftredemptiongift_recipientОтримано подароване членство
membermilestonemember_milestoneПовідомлення річниці членства
superchat-Super Chat
supersticker-Super Sticker
user_banned-Подія блокування/тимчасового блокування лише з метаданими
new_follower-Новий підписник (через опитування; можлива затримка)

Twitch — стандартне захоплення DOM

Реалізація: sources/twitch.js

  • Тримайте чат Twitch відкритим. Повідомлення членства й користувачів захоплюються, коли Twitch їх відображає; вони не обмежені обліковими записами транслятора або модератора. Для функцій конкретного облікового запису може знадобитися автентифікація.
  • Запити кількості глядачів надходять до https://api.socialstream.ninja/twitch/viewers кожні 30 секунд.
  • Для сповіщень про підписників, рейдів і повної підтримки подій, увімкніть режим WebSocket у налаштуваннях розширення.
  • Сповіщення Watch Streak, якими діляться глядачі, типово вимкнені й потребують Показувати серії переглядів Twitch налаштування.
  • Окремо вмикана функція PluralMind налаштування може замінити chatname, nameColor, і частину, обгорнуту проксі, у chatmessage, і може додати текстовий значок займенників. username залишається логіном Twitch; пов’язані видалення містять delete.meta.pluralmind щоб док використовував цей стабільний логін.
Подія Коли спрацьовує Примітки щодо даних
reward Картки використання балів каналу (включно з контейнером винагород 7TV). chatmessage містить текст використання винагороди; membership без змін.
giftpurchase Системні рядки, наприклад «User gifting X Subs in the channel». chatmessage є системним рядком, що дозволяє оверлеям виділяти кампанії дарувальників.
subscription_gift Сповіщення про подаровані підписки («User gifted a Sub to …»). Позначає подію для фільтрів виділення; membership залишається підписом значка одержувача.
viewer_update Запит кожні 30 с до проксі глядачів Social Stream (у разі помилки — 0). meta ціла кількість глядачів.
hype_train Закріплене виділення спільноти Twitch показує активний Hype Train у чаті окремого вікна. Запасний варіант DOM лише з метаданими та meta.sourceMode задається як dom. Використовує видимий рівень, таймер і meta.progressPercent коли Twitch не надає підсумки балів EventSub.
community_highlight Елементи всередині віджета Twitch «Community Highlight». meta є витягнутим текстом виділення для автоматизацій.
knock Запрошення до спільної роботи Stream Together, показані над чатом. chatmessage містить текст запрошення; chatname визначається за користувачем сповіщення, якщо доступний.
watch_streak Сповіщення Watch Streak, яким глядач за бажанням поділився в чаті Twitch. meta.streakCount містить видиму кількість, якщо визначено; meta.milestoneId використовує ідентифікатор повідомлення DOM, якщо доступний.

Bits/Cheers заповнюють hasDonation (наприклад, «500 bits»), хоча data.event залишається порожнім; покладайтеся на це поле при відображенні віджетів донатів. Відомості про серію підписника з’являються в subtitle коли значки надають місяці.

Twitch — EventSub/WebSocket

Реалізація: sources/websocket/twitch.js зі спільним ядром providers/twitch/chatClient.js

  • Області дозволів 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. Токени транслятора відкривають кількість підписників/платних підписників.
  • Події через EventSub, а також опитування Helix для загальної кількості глядачів/підписників/платних підписників.
  • Режим WebSocket надає в реальному часі сповіщення про підписників, події підписок, рейди, cheers, Power-ups, використання балів каналу й метадані потяга ажіотажу.
  • Рядки Shared Chat використовують Twitch IRC source-room-id щоб заповнити sourceName/sourceImg з початковим каналом, коли він відрізняється від підключеного.
  • Сповіщення Watch Streak, якими діляться глядачі, типово вимкнені й потребують Показувати серії переглядів Twitch налаштування.
  • Окремо вмикана функція PluralMind налаштування може замінити chatname, nameColor, і частину, обгорнуту проксі, у chatmessage, і може додати текстовий значок займенників. username і userid зберігають ідентичність Twitch; пов’язані видалення містять delete.meta.pluralmind щоб док використовував ці стабільні поля.
Подія Коли спрацьовує Примітки щодо даних
cheer Сповіщення Cheer від EventSub channel.bits.use. hasDonation «N bits»; meta.bits числове; chatmessage зберігає необроблене повідомлення; визначені відправники cheer включають chatimg.
powerup Вбудовані або власні сповіщення Power-up від EventSub channel.bits.use. Дані лише події з порожнім chatmessage і без hasDonation, тому не створює звичайного рядка чату. meta.bits є числовим, а meta.powerUp зберігає підтип Twitch, назву/ID винагороди, подробиці ефекту й наданий текст повідомлення, якщо доступний.
new_subscriber channel.subscribe або USERNOTICE із msg-id=sub. meta включає { userId, tier, isGift }; кешована загальна кількість підписників збільшується, якщо доступна; кількість глядачів опитується окремо.
resub channel.subscription.message або USERNOTICE msg-id=resub. meta містить серію та сукупні місяці; chatmessage включає текст повторної підписки.
subscription_gift channel.subscription.gift або USERNOTICE msg-id=subgift. meta надає загальну кількість подарованих підписок і рівень; chatmessage підсумовує дію.
reward channel.channel_points_custom_reward_redemption.add. meta включає ID винагороди, назву, вартість, запит, введення користувача, ID/стан використання та застарілий псевдонім. Без поля верхнього рівня reward об’єкт надсилається цим обробником EventSub. Старіші споживачі все ще можуть показувати channel_points як застарілий псевдонім.
raid EventSub channel.raid або USERNOTICE msg-id=raid. meta = { fromId, fromLogin, viewers }.
watch_streak Окремо вмиканий Twitch IRC USERNOTICE із msg-id=viewermilestone і msg-param-category=watch-streak. Включає глядача в chatname, текст повідомлення Twitch у chatmessage, і meta.streakCount/meta.milestoneId. Інші загальні типи USERNOTICE залишаються проігнорованими.
new_follower channel.follow Сповіщення EventSub. Автоматично збільшує follower_update; meta записує { userId, followedAt }.
viewer_update Helix streams опитування кожні 30 секунд. meta ціла кількість глядачів; пригнічується, якщо статистику глядачів не ввімкнено в налаштуваннях.
follower_update Загальна кількість підписників Helix, що запитується після подій підписки або періодичним опитуванням. meta ціла кількість підписників.
subscriber_update Загальна кількість платних підписників Helix (потребує токена транслятора з дозволом на підписки). meta ціла кількість платних підписників.
stream_online / stream_offline EventSub stream.online/stream.offline. meta.startedAt присутній для подій online; offline використовує порожній об’єкт.
ad_break / ad_request / ad_schedule Відповіді API менеджера реклами (channel.ad_break.begin, ручне POST channels/ads, GET channels/ads). meta деталізує тривалість, запитувача й дані розкладу для панелей.
hype_train EventSub channel.hype_train.begin, channel.hype_train.progress, і channel.hype_train.end сповіщення v2. Подія лише з метаданими: без chatname або chatmessage. meta.phase є begin, progress, або end; meta включає ID потяга, рівень, прогрес, ціль, підсумок, учасників підтримки, часові поля, прапорець спільного потяга та trainType. Потяги скарбів відображаються через meta.trainType коли Twitch їх позначає.
user_banned EventSub channel.ban, або IRC CLEARCHAT як запасний варіант, коли події блокування EventSub недоступні. Подія лише з метаданими для віджетів модерації. meta включає ім’я користувача/відображуване ім’я, ID користувача, URL аватара/профілю, модератора, причину, тривалість блокування/тайм-ауту та постійність.

Дані чату повторно використовують спільного постачальника, тому data.event заповнюється для `/me` (action) і застарілий bits теги навіть поза потоками EventSub. Повідомлення GIF Twitch поміщають ресурс Giphy в contentimg, залиште chatmessage порожнім і збережіть запасний підпис Twitch у meta.gifLabel. Логіка усунення дублікатів і видалення використовує ID повідомлень; повідомлення, надіслані через SSN, використовують власне поле message_id з IRC-відлуння Twitch у data.id.

Метадані Twitch Hype Train

hype_train містить лише метадані й не включає chatname або chatmessage. Панелі мають оновлювати наявне відображення потяга за meta.id замість додавання кожного оновлення прогресу як чату. Meta Data Bar (meta.html) відображає ці події як верхню смугу прогресу.

Поле Введіть Примітки
typeрядокЗавжди twitch.
eventрядокЗавжди hype_train.
meta.phaseрядокbegin, progress, або end.
meta.idрядокСтабільний ID потяга. Використовуйте його для додавання/оновлення одного видимого віджета потяга.
meta.broadcasterUserIdрядокID користувача транслятора Twitch.
meta.broadcasterUserLoginрядокЛогін транслятора Twitch.
meta.broadcasterUserNameрядокВідображуване ім’я транслятора Twitch.
meta.totalчисло | nullЗагальне значення підтримки потяга, повідомлене Twitch.
meta.progressчисло | nullПоточний прогрес до цілі рівня.
meta.goalчисло | nullПоточна ціль рівня.
meta.progressPercentчисло | nullЗапасний відсоток із DOM, коли Twitch надає лише видиму смугу прогресу в окремому вікні.
meta.levelчисло | nullПоточний або кінцевий рівень потяга.
meta.topContributionsмасивНайбільші учасники підтримки. Кожен запис включає userId, userLogin, userName, type, і числове total.
meta.lastContributionоб’єкт | nullОстанній внесок із тією самою структурою внеску, що й topContributions.
meta.sharedTrainParticipantsмасивНеоброблені дані учасників спільного потяга від Twitch, якщо надані.
meta.startedAtрядокЧасова позначка ISO початку потяга.
meta.expiresAtрядокЧасова позначка ISO поточного завершення строку потяга.
meta.endedAtрядокЧасова позначка ISO завершення потяга або порожній рядок до завершення.
meta.cooldownEndsAtрядокЧасова позначка ISO завершення затримки або порожній рядок до завершення.
meta.isSharedTrainлогічне значенняTrue, коли Twitch позначає потяг як спільний.
meta.trainTypeрядокЗазвичай regular; потяги скарбів відображаються тут, коли Twitch їх позначає.
meta.allTimeHighLevelчисло | nullНайвищий за весь час рівень потяга, якщо Twitch його надає.
meta.allTimeHighTotalчисло | nullНайвища за весь час загальна сума потяга, якщо Twitch її надає.
meta.sourceModeрядокНеобов’язкова позначка джерела, наприклад dom.
meta.eventSubTypeрядокОригінальний тип EventSub: channel.hype_train.begin, channel.hype_train.progress, channel.hype_train.end, або dom.community_highlight.

Twitch EventSub: короткий довідник подій

data.event Сценарій
new_followerКористувач підписався на канал
new_subscriberНова підписка
resubПовторна підписка з повідомленням
subscription_giftПодаровані підписки на канал
cheerНадіслано біти
powerupВикористано вбудований або власний Power-up
rewardВикористання балів каналу
raidВхідний рейд
viewer_updateКількість одночасних глядачів
follower_updateЗагальна кількість підписників
subscriber_updateЗагальна кількість платних підписників
stream_onlineТрансляція почалася
stream_offlineТрансляція завершилася
ad_breakПочалася рекламна перерва
hype_trainМетадані стану Hype Train/Treasure Train
user_bannedКористувача заблоковано або тимчасово заблоковано

Дії OBS у Flow Actions

Реалізація: actions.html через події OBS WebSocket v5, з dock.html Події джерела браузера OBS як запасний варіант

  • Тримайте оверлей Flow Actions відкритим із тією самою сесією Social Stream, що й редактор/фоновий процес Event Flow, або залишайте док завантаженим усередині OBS.
  • Налаштуйте OBS WebSocket v5 в OBS 28+; типовий URL — ws://127.0.0.1:4455.
  • Це системні події Event Flow. Вони не містять chatname або chatmessage, а додаткові подробиці OBS залишаються всередині meta.
Подія Коли спрацьовує Примітки щодо даних
stream_started OBS повідомляє, що вивід трансляції перейшов у стан started. type є obs; event є stream_started; meta.source є obs-websocket або obs-browser-source; meta.outputState може містити необроблений стан виводу OBS.
stream_stopped OBS повідомляє, що вивід трансляції перейшов у стан stopped. type є obs; event є stream_stopped; meta.outputActive може бути false.
recording_started OBS повідомляє про початок запису. type є obs; meta.obsEvent визначає джерело події OBS.
recording_stopped OBS повідомляє про зупинку запису. type є obs; meta.outputState може містити необроблений стан WebSocket.
scene_changed OBS змінює активну програмну сцену. type є obs; meta.sceneName містить назву сцени, коли OBS її надає.
media_ended Медіаджерело OBS завершує відтворення. type є obs; meta.inputName і meta.inputUuid визначають медіаджерело.
replay_buffer_saved OBS зберігає буфер повтору. type є obs; meta.savedReplayPath може містити шлях збереженого повтору.

Вікно сповіщень Streamlabs

Реалізація: sources/streamlabs.js (DOM вікна сповіщень); необов’язковий сокетний міст на sources/websocket/streamlabs.html

  • Тримайте вікно сповіщень Streamlabs відкритим у вкладці або джерелі браузера, щоб сповіщення відображалися; скрипт вмісту читає DOM сповіщень для повідомлення/зображення/токенів.
  • Сповіщення у стилі донатів задають hasDonation (наприклад, «$10 USD» або «100 bits») і необов’язкове donoValue у USD.
  • Визначені типи подій: follow, subscription, gift, cheer, donation, superchat, raid, redeem, merch, sponsor.
  • Для сокетного мосту вставте токен Streamlabs Socket API й підключіться; сповіщення пересилаються без сторінки вікна сповіщень.
Подія Коли спрацьовує Примітки щодо даних
donation Чайові, благодійність, JustGiving або загальні сповіщення «donated». hasDonation зберігає текст валюти (наприклад, «$36» або «$10 CAD»); donoValue надається лише коли значення в USD доступне; інші суми з позначеною валютою використовують спільну конвертацію.
cheer Сповіщення Twitch про біти/cheer. hasDonation стає «100 bits», а donoValue захоплює значення в USD.
subscription Сповіщення про підписки. Стандартні поля задано; chatmessage є рядком сповіщення; meta.tokens містить значення токенів (name, amount, levelName тощо).
gift Подаровані членства/підписки. meta.tokens.amount може показувати кількість подарунків; meta.tokens.levelName може містити рівень.
follow Сповіщення про підписників. Без полів донатів; chatname відповідає токену імені сповіщення.
raid Сповіщення про рейди. meta.tokens.count містить кількість учасників рейду, якщо є.
redeem Сповіщення про використання винагород Cloudbot. meta.tokens.product захоплює предмет винагороди.
merch Сповіщення про купівлю мерчу. meta.tokens.product містить назву придбаного товару.
superchat Сповіщення у стилі Super Chat від YouTube або підтримуваних інтеграцій сповіщень. hasDonation містить суму; споживачі можуть і далі приймати застарілий donation псевдоніми.
sponsor Сповіщення у стилі спонсорів/учасників, які надає Streamlabs. Стандартні поля; без донату, якщо текст не містить суми.

TikTok Live — захоплення DOM і потік TikFinity

Реалізація: sources/tiktok.js для власних сторінок TikTok і sources/tikfinity.js для віджета/iframe стрічки активності TikFinity. SSApp усе ще має власну інтеграцію TikTok із найширшим охопленням подій (дивіться документацію SSApp).

  • Працює на живій сторінці транслятора. Банери подарунків/вподобань/підписок заповнюються лише в автентифікованій сесії.
  • TikTok надає багато подій через визначення DOM без потреби в режимі WebSocket — подарунки, підписки, вподобання й окремо ввімкнені приєднання захоплюються з відображених рядків.
  • Сторінки віджетів TikFinity на tikfinity.zerody.one/widget/activity-feed* також працюють. Вбудований iframe стрічки активності надсилає ті самі канонічні поля TikTok для чату, підписок, поширень, подарунків, платних підписок, окремо ввімкнених приєднань і скринь скарбів.
  • Додаткова автентифікація API не потрібна.
  • Власний режим SSApp досі додає події понад шляхи захоплення сторінок/віджетів: question_new, emote, viewer_update, і окремо вмикане сукупне likes_update.
Подія Коли спрацьовує Примітки щодо даних
gift Рядки банера подарунка або DivGiftMessage записи. hasDonation перетворює на «N coins» (із запасним пошуком подарунка); membership використовує текст значка, якщо доступний.
joined Сповіщення про приєднання, коли загальний Захоплювати події трансляції «joined» налаштування ввімкнено. Пропускає сповіщення про поширення; chatname може бути порожнім для деяких системних рядків.
followed Повідомлення про підписки, розібрані із соціальних карток. Забезпечує chatname існує перед надсиланням.
shared Рядки поширення TikFinity. chatmessage є відображеним текстом поширення.
subscribe Рядки підписок TikFinity. membership задається як SUBSCRIBER.
envelope Рядки скринь скарбів TikFinity. meta.coins і meta.canOpen містять подробиці скрині.
liked Підсумки шквалу вподобань, запущені соціальними картками TikTok. chatname включається, коли TikTok його надає; анонімні/системні картки вподобань усе ще можуть надсилатися. TikTok передає це звичайним фоновим шляхом. Фоновий процес спрямовує одну копію до Reactions Overlay, а потім продовжує основний ланцюжок обробки чату/подій лише коли capturelikeevent увімкнено.
likes_update SSApp отримує авторитетний сукупний підсумок TikTok LIVE, коли captureliketotals увімкнено. meta є поточним загальним цілим числом. SSApp надсилає перше значення одразу, об’єднує серії до максимум одного оновлення кожні п’ять секунд, повторює останнє значення приблизно кожні 90 секунд і надсилає нуль після завершення трансляції. Це відокремлено від пов’язаних з окремими глядачами liked події.
true (логічне значення) Загальні соціальні/системні повідомлення, для яких TikTok не надає підтипу. Використовуйте chatmessage вміст для визначення подання; логічне true означає «системна подія — тип невідомий».

membership повторює підказки значків (рівні підписників). Кешування аватарів зберігає chatimg коректним між подіями; якщо DOM приховує колір для модераторів, скрипт очищує nameColor. Рядки подарунків TikFinity також задають contentimg як піктограму подарунка, якщо доступна. Оновлення серій подарунків власного DOM і TikFinity включають meta.tiktokGiftStreakId, meta.tiktokGiftCount, і meta.tiktokGiftQuietMs щоб оверлеї могли об’єднувати повторні оновлення; застарілі ID серій унікальні для екземпляра сторінки. Метадані подарунка також можуть включати tiktokGiftMessageId (оригінальний ID повідомлення TikTok), tiktokGiftSenderId, groupId, giftId, giftName, streakable, і repeatEnd. Власні ID визначають той самий подарунок у різних вікнах захоплення; ненульовий ID групи разом з ID відправника й подарунка визначає сукупні оновлення серії. Захоплення WebSocket SSApp надає ті самі поля після завершення серії, з count зберігається для сумісності. Перемикач донатів перевіряється при пересиланні кожного подарунка: вимкнення донатів TikTok прибирає hasDonation і donoValue зі збереженням події подарунка та метаданих. Озвучення використовує ці ідентичності для об’єднання оновлень і пригнічення завершених дублікатів протягом максимум десяти хвилин (обмежений кеш) та читає подарунки TikTok як відправника, кількість і назву подарунка. Старіші дані повертаються до наявних ID серій і тексту повідомлення; ідентичність не виводиться лише з тексту подарунка. Озвучення подарунків TikTok використовує вибрану мову озвучення/голосу незалежно від мови інтерфейсу. Дієслова оголошень локалізовані англійською, іспанською, португальською, французькою, німецькою, італійською й нідерландською; інші мови використовують відправника, кількість і назву подарунка без англійського дієслова. Спрощене озвучення зберігає цей нейтральний формат. Назви подарунків залишаються такими, як їх надає платформа; це не перекладає автоматично каталоги подарунків або повідомлення чату й не визначає мову трансляції.

Для цих оновлень серій кількість і підпис донату є сукупними: 1, 2, 3 означає три подарунки, а не шість. Споживачі підсумків мають додавати лише приріст понад найбільшу вже отриману суму для ID цієї серії. Стандартне захоплення підтримує застарілі класи подарунків і поточні рядки зображення/кількості; обидва зберігають event: "gift" і hasDonation. Для невідомих цін зберігаються кількість/назви подарунків для показу та використовується оцінка в USD з розрахунку одна монета за подарунок. Надане джерелом donoValue має пріоритет; метадані відображеного подарунка можуть надавати coinsPerGift або diamondsPerGift перш ніж знадобиться таблиця подарунків або типове значення. Оцінки монет Standard/TikFinity і власні оцінки діамантів SSApp використовують наявні окремі перерахунки; жодна не є гарантованою грошовою виплатою.

Whatnot

Реалізація: sources/whatnot.js

  • Відкрийте сторінку живого шоу Whatnot із видимим чатом; наявне захоплення WebSocket надає чат, сповіщення аукціону/продажу, невдалі платежі, рейди, донати та швидкі оновлення глядачів. Знімки товарів/розіграшів досі залежать від розділів DOM, відображених у вигляді шоу.
  • Захоплювати події трансляції керує системними подіями Whatnot і оновленнями метаданих аукціону/каталогу; рядки приєднання також потребують Захоплювати події трансляції «joined»; кількість глядачів і далі підпорядковується перемикачам глядачів/ажіотажу.
Подія Коли спрацьовує Примітки щодо даних
viewer_update Зміни кількості глядачів з оновлень трансляції WebSocket, з опитуванням DOM як запасним варіантом. meta є цілою кількістю глядачів.
donation Події чайових і внесків у підсилення спільноти Whatnot WebSocket. hasDonation містить відформатовану суму; специфічний контекст WebSocket залишається в meta.
raid Події рейдів Whatnot WebSocket, включно з відповідями історії активності. meta.numRaiders включається, коли Whatnot його надає.
joined Рядки чату, нормалізований текст яких починається з joined, коли Захоплювати події трансляції «joined» увімкнено. Використовує рядкові позначки подій для сповіщень про приєднання (не логічне true).
auction_update Коли змінюється стан аукціону на живій нижній панелі (текст переможця/лідера, назва, ставки, ціна, таймер, стан продажу), часто прискорено пакетами життєвого циклу аукціону WebSocket. Подія лише з метаданими. Без chatname/chatmessage; дані містяться в meta (наприклад meta.title, meta.bids, meta.price, meta.timer, meta.status).
commerce_update Коли змінюються розділи каталогу (товари, surprise sets, майбутні розіграші), часто прискорено пакетами життєвого циклу розіграшів/товарів WebSocket. Знімок лише метаданих із кількостями розділів і масивами елементів у meta.products, meta.surpriseSets, і meta.upcomingGiveaways.
auction_started, new_bid, auction_ended, product_sold Надходить відповідне живе сповіщення WebSocket. Це окремі події, відокремлені від наявних знімків відображення. platform/type: "whatnot", звичайний текст chatname, userid коли надано, назва товару в subtitle, і звичайний текст у chatmessage з textonly: true. Доступні ідентифікатори й подробиці аукціону містяться в meta: productId, auctionId, orderId, transactionId, livestreamId, bidId, bids, auctionEndTime, і status. Необов’язкове price подається в основних одиницях валюти, з priceText і currency коли надано.
payment_failed Надходить живе сповіщення WebSocket про невдалий платіж. Ті самі доступні поля покупця, товару та ідентифікатора, з meta.paymentStatus: "failed". Коли лише product.purchaserUserId визначає покупця, заповнює userid у подіях продажу/оплати, а ім’я покупця залишається порожнім. Покупець не виводиться з іншого або попереднього аукціону.
payment_succeeded Надходить живе сповіщення WebSocket про успішний платіж. meta.paymentStatus: "succeeded", із покупцем, товаром, ID замовлення й іншими дозволеними полями з цього сповіщення. Це залишається окремою платіжною подією; воно не створює ще одну purchase або донат. Відсутні поля залишаються порожніми або пропущеними, навіть якщо попередній продаж їх надавав.

Оновлення відображення аукціону/торгівлі залишаються знімками на основі DOM. Щоб зіставити окрему подію WebSocket в Event Flow, використовуйте Тип події (розширений), виберіть Власна подія, і введіть його точну назву. Підписи можуть використовувати **{username}**\n{subtitle} із вибраною товщиною тексту; умови можуть порівнювати meta.paymentStatus з failed. Об’єкт приклад мітки Whatnot для імпорту доступне. Наявні налаштування захоплення подій трансляції все ще застосовуються.

Додаткові необов’язкові поля: meta.catalogProductId (поле пакета product.productId), meta.parentProductId (product.parentId), meta.transactionType (тип продажу Whatnot, без змін) і meta.placeOrderErrorReason (код помилки замовлення/оплати, наданий Whatnot). Ці посилання на товари описують каталог або батьківське оголошення; вони не замінюють ID замовлення. Кількість у запасі не вважається купленою кількістю.

Для автоматизації успішної оплати задайте Тип події (розширений) тригер на Власна подія: payment_succeeded, і відфільтруйте джерело до Whatnot. Наявні умови й шаблони можуть використовувати поле цієї події userid, chatname, subtitle і meta.orderId безпосередньо. Збережена покупка не потрібна, якщо сповіщення містить необхідні подробиці.

Завершення аукціону або позначення товару проданим не підтверджує успішну оплату: ці сповіщення не надсилаються як оплачені purchase події й не задають суми донатів. Подія успіху надсилається лише для отриманого payment_succeeded сповіщення; захоплення не опитує завершення оплати й не виводить його з продажу. Інші paymentStatus значення пересилаються лише коли явно надані в захопленому пакеті. Відсутні ідентифікатори пропускаються; один ID товару може охоплювати кілька продажів, тому для зіставлення сповіщень використовуйте наданий ID замовлення/аукціону. Захоплення не пам’ятає покупки й не зіставляє оновлення платежів; будь-який такий процес потрібно явно налаштувати в Event Flow. Короткочасні дублікати пакетів від двох наявних мостів захоплення пригнічуються. Необроблені об’єкти замовлень/платежів не пересилаються.

eBay Live

Підключення продавця eBay у Monetization потребує налаштованого сервісу SSN eBay і згоди продавця через OAuth; захоплення eBay Live нижче незалежне. Режим пісочниці використовує URL тестових оголошень, позначає покупця як «eBay Sandbox buyer» і додає префікс повідомлення «Sandbox test purchase:». Покупки пісочниці зберігають той самий контракт покупки й можуть запускати ввімкнені сповіщення/дії чату під час перевірки. Його реалізований платіжний контракт надсилає event: "purchase", з type і platform задається як ebay. Потребує оплаченого замовлення, що відповідає вибраному товару. id є стабільним непрозорим ідентифікатором позиції замовлення; chatname має значення «eBay buyer», chatmessage є звичайним текстом (textonly: true), subtitle є назвою товару й необов’язковим contentimg є його зображенням. meta.ebayPurchase містить itemId, itemName, quantity, і публічне url. Без ідентичності покупця, даних доставки, hasDonation або donoValue включається. Це відрізняється від зчитаних оновлень аукціону або запасів, які не доводять оплату.

Реалізація: sources/ebay.js

  • Відкрийте будь-яке з /ebaylive/events/<id>/chat або /ebaylive/events/<id>/stream. Обидва отримують той самий живий потік аукціону.
  • Публічний потік WebSocket надає аукціони, ставки, переможців, продовження часу та зміни запасів; запит GraphQL лише для читання надає подробиці оголошення. Захоплення DOM залишається запасним варіантом, коли мережеві дані недоступні.
  • Захоплювати події трансляції керує знімками метаданих (auction_update, commerce_update); лічильники глядачів і далі враховують перемикачі глядачів/ажіотажу.
Подія Коли спрацьовує Примітки щодо даних
viewer_update Коли змінюється кількість глядачів активної події (лічильник заголовка або запасний індикатор живої події). meta є цілою кількістю глядачів.
follower_update Коли кінцева точка статистики продавця повертає кількість його підписників. meta є цілою кількістю підписників. Джерело опитує кінцеву точку продавця кожні 60 секунд; вона все ще може повертати кешоване значення до 5 хвилин.
auction_update Коли змінюються метадані активного аукціону. Подія лише з метаданими. Мережеве захоплення задає meta.sourceMode до network і надає title, price, bidder, winner, bids, timer та endingAt. meta.ebay містить eventId, listingId, запис оголошення GraphQL (listing), поточне публічне сокетне оголошення (eventListing) та останнє оновлення аукціону (update). Вони зберігають категорію, зображення, валюти, кількості, подробиці брейку коробок, результати аукціону й часові поля, не втрачаючи подробиць платформи. Запис GraphQL є отриманим знімком; сокетне оголошення й оновлення містять новіший поточний стан. Початкова історія/історія повторного підключення включається до поточного знімка замість надсилання старих перемог. Видалення всіх показаних оголошень створює status: "idle" з cardCount: 0 щоб очистити аукціон. Запасний варіант DOM зберігає поля картки програвача або попереднього перегляду події.
commerce_update Коли змінюються розділи знімка каталогу/живих подій. Знімок лише метаданих у meta. Мережевий режим включає eventId, navigation.viewerCount і playerCards для поточних представлених оголошень, кожне з тією самою докладною ebay об’єкт як знімок аукціону. Порожній список карток очищує видалені оголошення. Запасний варіант DOM також може включати liveEvents, livePreview, currentEvent і upcomingEvents.
reaction Коли eBay Live відображає анімацію сердечка/реакції. Надсилається безпосередньо до окремої цілі реакцій. meta.reactionType є heart; eBay не надає окремого імені користувача для цих DOM-анімацій.

Події метаданих eBay навмисно пропускають chatname/chatmessage; наступні оверлеї мають відображати з data.event + data.meta лише.

Kick — стандартне захоплення DOM

Реалізація: sources/kick.js

  • Потребує автентифікованої сесії для отримання зображень профілів і значків підписників.
  • Обмежене визначення подій зіставленням тексту чату й значків; кількість глядачів усе одно працює, коли перемикач увімкнений.
Подія Коли спрацьовує Примітки щодо даних
gift Подарунки KICKs, визначені за зображенням стікера та видимою сумою валюти Kick. hasDonation містить N KICKs (1 KICK для одного), коли видима сума доступна; contentimg містить зображення подарунка. Наявний текст повідомлення зберігається.
reward Використання винагород («has redeemed …»). chatmessage містить текст використання винагороди.
true (логічне значення) Загальні системні повідомлення, які не відповідають шаблонам подарунків або винагород. Використовуйте chatmessage вміст для визначення подання; логічне true означає «системна подія — тип невідомий».
viewer_update Опитує API каналу Kick кожні 30 секунд (лише коли статистику глядачів увімкнено). meta ціла кількість глядачів; для платних підписок, підписок або чайових використовуйте міст Kick нижче.

Kick — WebSocket/міст

Реалізація: sources/websocket/kick.js зі спільними допоміжними засобами в providers/kick/core.js

  • OAuth через міст Social Stream Kick. Поточні області дозволів: user:read, channel:read, channel:write, channel:rewards:read, chat:write, events:subscribe, moderation:ban, moderation:chat_message:manage, і kicks:read. Токени оновлюються автоматично.
  • Налаштування вебхуків Kick може тривати кілька хвилин; інтерфейс показує активні підписки для кожного каналу.
Подія Коли спрацьовує Примітки щодо даних
message Дані чату мосту. meta.plainText містить звичайний текст повідомлення (який усе ще може містити емодзі); значки поєднують платформу й кеш профілів. Відповіді в гілках заповнюють initial, reply, і meta.reply коли доступні подробиці відповіді або кешоване батьківське повідомлення.
reward channel.reward.redemption.updated, а також дані чату/системи мосту, схожі на використання винагород. meta включає ID винагороди/використання, назву, вартість, стан, введення користувача й отримувача винагороди.
new_subscriber channel.subscription.new. membership призначено ролі підписника; meta включає { subscriber, plan }.
resub channel.subscription.renewal. meta.duration (місяці) і meta.plan доступне; subtitle підсумовує серію.
subscription_gift channel.subscription.gifts. meta.totalGifted, meta.gifter; запасний значок — 💝.
donation Події підтримки/чайових, визначені евристиками типу події; подарунки KICKs використовують gift нижче. hasDonation містить відформатовану суму; meta містить { amount, currency, supporter, message, giftName }.
gift kicks.gifted (подарунки KICKs), відповідно до зчитувача DOM. hasDonation містить N KICKs (1 KICK для одного); contentimg містить зображення подарунка, якщо доступне. Структуровані подробиці подарунка залишаються в meta.
raid Обробка сумісності для застарілих сокетних даних у формі host, наприклад App\Events\StreamHostEvent. Поточний офіційний каталог подій Kick не має підписки raid/host. Якщо надходять сумісні застарілі дані, вони зіставляються з канонічною подією raid; не покладайтеся на це для поточного сценарію Kick.
new_follower channel.followed. Піктограми підписників беруться з кешу профілів; follower_update спрацьовує, коли Kick надає поточні підсумки.
follower_update Міст надає кількість підписників у даних вебхуків. meta цілий підсумок; використовується панелями для цілей підписників.
stream_online / stream_offline livestream.status.updated. meta містить необроблений об’єкт стану Kick (is_live, title тощо).
viewer_update livestream.status.updated коли Kick включає загальну кількість одночасних глядачів. meta ціла кількість глядачів; надсилає 0 при стані офлайн, щоб очистити застарілі лічильники.
user_banned moderation.banned з мосту/вебхука або подій блокування сокета чату Kick. Подія лише з метаданими для віджетів модерації. meta включає ім’я користувача/відображуване ім’я, ID користувача, URL аватара/профілю, модератора, причину, тривалість блокування/тайм-ауту та постійність.

Пошук профілів використовує profileCache; mapBadges поєднує ресурси значків Kick із кешованим SVG, якщо доступний. Коли Kick повідомляє донати в KICKs, міст перетворює їх на hasDonation а також meta.amount з currency запасний варіант — «KICKs». Дані чату включають meta.messageId коли міст надає власний ID повідомлення Kick, щоб синхронізація видалення могла націлитися на правильне повідомлення. Дані відповідей включають meta.reply з батьківським messageId, author, і text коли відомо. Надані подробиці відповіді залишаються доступними, навіть якщо початкове повідомлення не кешоване; відповідь лише з ID без кешованого контексту все ще може не мати видимої цитати.

Kick WebSocket: короткий довідник подій

data.event Сценарій
new_followerКористувач підписався на канал
new_subscriberНова підписка
resubПоновлення підписки
subscription_giftПодаровані підписки
rewardВикористання винагороди каналу або повідомлення чату/системи у стилі винагороди
donationПодія чайових/підтримки
giftПодія подарунка KICKs
raidЗастарілий вхід host/raid лише для сумісності; не поточна офіційна підписка Kick
follower_updateЗагальна кількість підписників
stream_onlineТрансляція почалася
stream_offlineТрансляція завершилася
user_bannedКористувача заблоковано або тимчасово заблоковано

VPZone — WebSocket

Реалізація: sources/websocket/vpzone.js

  • Підключається до wss://chat.vpzone.tv/ws?channel=USERNAME; OAuth запитує profile:read, chat:read, chat:write, channel:read, channel:write, і chat:moderate. Токен bearer також можна надати вручну.
  • Плоскі кадри VPZone, як-от type: "msg" нормалізуються в стандартні дані чату.
  • На боці платформи delete_message / clear_chat кадри прибирають відповідні рядки з дока; необов’язкові перемикачі синхронізують видалення й блокування дока назад у VPZone (лише власник каналу).
  • Власники каналів отримують локальну для сторінки панель Stream Info для оновлення назви й категорії прямої трансляції (за тим самим зразком, що й сторінка джерела Twitch).
Подія Коли спрацьовує Примітки щодо даних
message VPZone msg, message, new_message, або chat_message кадр WebSocket. chatname надходить із username; chatmessage надходить із body; прапорці підписника/власника/модератора/VIP копіюються в chatbadges, прапорці ролей верхнього рівня та meta. Власні ID заповнюють data.id і meta.messageId.
viewer_update VPZone presence кадр із count або відповідне поле глядачів. meta є цілою кількістю поточних глядачів; входить до сукупного viewer_updates.
new_subscriber VPZone subscribe / subscription кадр. membership задається як Subscriber, коли присутні прапорці підписки.
subscription_gift VPZone gift / gift_subscription кадр. Використовує ту саму назву події подарованої підписки, що й Twitch, Kick, Rumble та Velora. subtitle містить кількість подарунків (x5) або одержувача.
message + hasDonation VPZone system кадр із metadata.kind: "pixels_cheer" (чайові Pixels). Рядок чату з донатом; hasDonation є підписом суми (наприклад 100 Pixels), meta.pixels ціле число. event залишається порожнім; визначайте ці чайові за hasDonation. Події підтримки мосту Kick натомість використовують event: "donation".
message відповіді VPZone msg кадр, що містить metadata.reply_to (ID повідомлення, автор, уривок — денормалізовані на сервері). Відображаються як відповіді Kick: initial містить підпис «author: excerpt», reply необроблений текст відповіді, meta.reply структуровану ціль. Враховує виключити «replying to» налаштування.
raid VPZone raid кадр із metadata.kind: "incoming". Кадри вихідних рейдів пропускаються; meta.viewers містить розмір рейду, якщо наданий.
shoutout VPZone shoutout кадр (!so команда). meta.targetUser називає канал, який привітали.
reward VPZone system кадр із metadata.kind: "channel_points_redeem". Використання балів каналу з тією самою назвою події, що й винагороди Twitch.
stream_online / stream_offline VPZone system кадри з metadata.kind: "stream_started" / "stream_ended". Приписується назві каналу (кадри не містять виконавця).
new_follower VPZone follow кадр. Зіставляється зі стандартною структурою події підписника.
joined Події WebSocket VPZone у стилі приєднання/присутності, коли Захоплювати події трансляції «joined» увімкнено. Зіставляється із системною подією у стилі чату з метаданими виконавця VPZone у meta.

Joystick

Реалізації: sources/joystick.js, sources/inject/joystick-ws.js, і sources/websocket/joystick.js

  • Звичайне джерело вебсайту Joystick 2.0 працює на авторизованій /u/<channel>/chat сторінка. Читає поле сторінки ChatChannel, WhisperChatChannel, EventLogChannel, і SystemEventChannel Кадри Action Cable із запасним зчитуванням відображених рядків для Electron і випадків повторного підключення.
  • Повідомлення чату вебсайту використовують ті самі основні поля, що й YouTube, Twitch і Kick: власний id, chatname, chatmessage, chatimg, chatbadges, nameColor, membership, mod, private, username/userid, і timestamp коли Joystick їх надає. Коли сокет не передає колір імені, відображений рядок надає те саме nameColor поле, яке використовують доки з увімкненими кольорами.
  • Редагування повідомлень на сайті замінюють відповідний рядок дока; видалення, приглушення й блокування прибирають відповідні рядки за власним ID або іменем користувача.
  • Окреме джерело WebSocket використовує облікові дані бота Joystick (client_id + client_secret); джерело вебсайту використовує авторизовану сесію сторінки.
  • Авторизується на https://joystick.tv/api/oauth/authorize, потім обмінює/оновлює токени на https://api.joystick.tv/api/oauth/token.
  • Підключається до wss://api.joystick.tv/cable і підписується на GatewayChannel.
  • Необов’язковий обмін токенами OAuth використовується для допоміжних кінцевих точок, як-от https://api.joystick.tv/api/users/stream-settings.
  • Окреме джерело з обліковими даними бота не надсилає viewer_update. Авторизоване джерело вебсайту надсилає кількість глядачів, коли сокет сторінки її надає, як описано нижче.
Подія Коли спрацьовує Примітки щодо даних
message Joystick ChatMessage, BotMessage, new_message, bot_message, event_bot_message, pvp_message, і приватні повідомлення. Звичайний чат не має event. Власний ID розміщується в полі верхнього рівня id і meta.messageId; ролі й приватний стан використовують усталені поля верхнього рівня/значків.
new_follower Joystick StreamEvent із типом Followed. Використовує стандартну структуру підписника й усуває дублікати з відповідним рядком бота Joystick. Необов’язкове meta.userId/meta.followedAt включаються лише коли Joystick їх надає.
new_subscriber / subscription_gift Типи подій Joystick NewSubscription / GiftedSubscription. Використовує сумісні з Kick ключі метаданих підписки: eventType, subscriber, gifter, totalGifted, duration, і plan.
donation Joystick StreamEvent типи Tipped / TipMenu. hasDonation містить кількість токенів і одиницю для спільного перерахунку в USD, якщо доступні, а відповідний рядок бота Joystick усувається як дублікат. meta використовує усталені ключі подій підтримки Kick: eventType, supporter, amount, currency, message, giftName, giftType, і tier.
stream_online / stream_offline Joystick StreamEvent типи, як-от Started, StreamResuming, Ended, StreamEnding. Використовується для автоматизацій online/offline, що враховують транспорт.
user_enter / user_leave Joystick UserPresence типи enter_stream / leave_stream. Сповіщення присутності надсилаються як повідомлення подій і можуть приховуватися налаштуваннями приховування подій. Ці налаштування також приховують події трансляції без донатів.
viewer_update Авторизоване джерело вебсайту отримує ViewerCountUpdated через EventLogChannel. Використовує звичайне ціле число meta, відповідно до YouTube, Twitch і Kick. Надсилається лише за ввімкненого режиму кількості глядачів або ажіотажу. Окреме джерело з обліковими даними бота досі не отримує кількість глядачів.
follower_update / subscriber_update Події оновлення кількості підписників/платних підписників Joystick. Використовує звичайне ціле число meta, відповідно до контракту лічильника Twitch.
Ігноровані внутрішні сповіщення ChatMessageReceived, стан пристрою та незіставлені оновлення віджетів, наприклад стан цілі чайових/PvP/subathon. Це сповіщення транспорту або стану сторінки, а не події Social Stream. Вони не перетворюються на вигадані snake_case назви подій; справжній ChatChannel/new_message рядок залишається єдиними даними чату.

XP Sync

Реалізація: sources/xpsync.js

  • Рядки чату використовують канонічні поля даних із type: "xpsync", зокрема автора, повідомлення, аватар, зображення та вбудовані SVG-значки, колір імені, членство, прапорці модератора/учасника/бота та власний UUID повідомлення як id якщо доступне.
  • Відповіді дотримуються правил DOM-джерел YouTube, Twitch і Kick: якщо префікси відповідей не вимкнено, initial містить користувача, якому відповідають, reply зберігає повідомлення без префікса, а chatmessage отримує видимий префікс відповіді.
  • Рядки, виділені Sparks, захоплюються, хоча XPSync відображає їх без звичайного класу рядка чату або ID повідомлення; видима сума надається через hasDonation як N Sparks.
  • Коли захоплення подій увімкнено, рядки з «just followed» або «followed the channel» надсилають event: "new_follower".
  • Коли кількість глядачів увімкнена, постійний док чату надсилає event: "viewer_update" з кількості живого відео, уже завантаженої сторінкою XPSync, і оновлює її з оновлень живої сторінки XPSync. Окремі облікові дані SSN не потрібні.

Instagram — захоплення Live REST і вхідних новин

Реалізація: sources/instagram.js і sources/instagramlive.js (ідентичні копії)

  • На сторінках живих трансляцій (/<user>/live/?broadcast_id=...), живий чат надходить із власного веб-API Instagram, яке опитується з того самого джерела з cookie сесії: GET /api/v1/live/{broadcast_id}/get_comment/?last_comment_ts={ts} приблизно кожні 2 с, і POST /api/v1/live/{broadcast_id}/heartbeat_and_get_viewer_count/ приблизно кожні 5 с, коли кількість глядачів увімкнено. Після 3 послідовних збоїв (або коли немає broadcast_id можна виявити), джерело переходить до розбору відображеного DOM чату.
  • Власна стрічка активності облікового запису опитується через POST /api/v1/news/inbox/ приблизно кожні 45 с на будь-якій сторінці Instagram. Перше опитування лише заповнює набір усунення дублікатів, тому історія ніколи не відтворюється; новини усувають дублікати за tuuid.
  • Обов’язкові заголовки API (усі статичні/обчислювані): X-IG-App-ID: 936619743392459, X-CSRFToken (із cookie), X-ASBD-ID: 359341, X-Requested-With: XMLHttpRequest, Content-Type: application/x-www-form-urlencoded.
  • Усі події стрічки активності використовують type: "instagram"; живий чат залишається type: "instagramlive". Події вподобань використовують звичайний фоновий шлях: фоновий процес надсилає одну копію до окремого Reactions Overlay, а потім включає їх до основного потоку чату/подій лише коли capturelikeevent увімкнено, відповідно до TikTok і MeetMe. hideevents і власний фільтр подій блокують їх усюди. Оскільки події вхідних належать авторизованому обліковому запису, вони пригнічуються під час перегляду чужого ефіру (і /<user>/live/ сторінках і ефірах у переглядачі історій; власність визначається для кожного профілю та перевіряється повторно після невдалого пошуку) і надсилаються у власному ефірі та на всіх сторінках поза ефіром. Лише одна активна вкладка Instagram одночасно опитує вхідні облікового запису, і опитування працює лише після входу.
Подія Коли спрацьовує Примітки щодо даних
message (наживо) Нові записи в get_comment відповідь (comments[]/system_comments[]) або нові рядки чату DOM, коли REST недоступний. Стандартні дані чату, type: "instagramlive". REST надає точне user.username, user.profile_pic_url, і унікальне pk використовується для усунення дублікатів.
viewer_update heartbeat_and_get_viewer_count повідомляє змінене viewer_count, коли ввімкнено захоплення кількості глядачів або режим ажіотажу. meta ціла кількість глядачів. Опитування зупиняється, коли broadcast_status більше не є "live".
stream_online / stream_offline stream_online спрацьовує один раз на початку сесії трансляції REST; stream_offline спрацьовує, коли сигнал підтримання з’єднання повідомляє неактивний broadcast_status (потребує захоплення кількості глядачів або режиму ажіотажу). Події лише з метаданими, що відповідають спільному словнику стану трансляції Twitch і Joystick.
new_follower Новина у вхідних із типом підписки notif_name (або story_type 12) з’являється. chatname є новим підписником, chatimg їхнє зображення профілю, chatmessage текст вхідних (наприклад, «x started following you.»).
follow_request Подія private_user_follow_request новина з’являється (приватні облікові записи отримують запити замість прямих підписок). Та сама структура, що й new_follower, збережені окремо, щоб автоматизації могли схвалювати запити або вітати по-різному.
liked Новина у вхідних із типом вподобання notif_name (зокрема comment_like) з’являється. Спільний словник вподобань із TikTok/MeetMe. chatname є виконавцем, chatmessage текст вхідних (наприклад, «x liked your photo.»).
message (коментар до власного допису) Новина у вхідних із типом коментаря notif_name з’являється. Звичайний рядок чату (event: false), type: "instagram"; chatmessage містить текст вхідних, включно з уривком коментаря.
notification Будь-який інший тип новини у вхідних (згадки, позначки, покупки тощо). Загальна універсальна категорія; meta.notifName і meta.storyType зберігають необроблену класифікацію новини.

Facebook Live

Реалізація: sources/facebook.js (зчитування DOM) і необов’язковий міст Graph API на sources/websocket/facebook.html

  • Захоплення DOM читає відображені коментарі Facebook; міст Graph API для керованої сторінки читає коментарі відео. Обидва використовують type: "facebook", стандартні поля чату й відсутнє event для звичайних коментарів. Міст API також включає необов’язковий platform: "facebook".
  • Міст API використовує userid для ID автора, якщо доступний, timestamp для коректного часу створення в мілісекундах Unix і contentimg для зображення-вкладення HTTP(S), наданого API. Коментарі лише із зображенням можуть мати порожнє chatmessage. textonly застосовується лише до тексту повідомлення: необроблений текст при true, екранований HTML при false.
  • Контекст коментарів API використовує meta.messageId (власний ID коментаря), meta.permalink, meta.videoId, і meta.pageId. Раніші збірки API використовували meta.commentId, дубльовані поля автора/часу в meta, і передавало там необроблені вкладення. Нові збірки натомість використовують стандартні поля автора/часу/медіа; це не додає синхронізацію видалення.
  • Кількість глядачів оновлюється лише після ввімкнення. Міст API читає одночасні live_views; він не підставляє сумарні перегляди відео й не вигадує нуль, коли кількість недоступна. Захоплення API не виводить Stars, членство, виділення або відповіді зі звичайного тексту коментарів.
  • Stars захоплюються з відображеного DOM живого чату, коли Facebook показує видимий N sent позначка; вони заповнюють hasDonation і donoValue за курсом 100 Stars = $1 USD без задавання data.event.
  • Для перевірки додайте ssnreplay=1 до URL Facebook Live, щоб обробити рядки чату, уже видимі після оновлення.
Подія Коли спрацьовує Примітки щодо даних
viewer_update DOM опитує значок поточних глядачів; міст API опитує одночасні перегляди наживо, коли ввімкнений. meta ціла кількість глядачів, відповідно до інших джерел. Відсутні або нерозбірні значення пропускаються; справжній нуль є коректним.
hasDonation Facebook Stars, відображені в DOM живого чату. Стандартні дані чату; hasDonation містить видиму суму Stars, наприклад 100 Stars, і donoValue містить значення в USD. Stars не задають data.event.
highlightColor Facebook відображає видимий HIGHLIGHTED підпис. Використовує звичайні поля чату та highlightColor; без data.event задано. Stars усе ще використовують hasDonation.

Online Church

Реалізація: sources/onlinechurch.js

  • Спирається на зчитування DOM публічного чату й заголовка медіа.
  • Кількість глядачів оновлюється лише коли Показувати кількість глядачів або режим ажіотажу ввімкнений.
Подія Коли спрацьовує Примітки щодо даних
message Нові записи з’являються під #publicchat. Стандартні дані чату з іменем відправника, аватаром, значками й необов’язковим підписом членства, якщо він є в DOM.
viewer_update Опитує значок поточної присутності в заголовку медіа кожні 10 с. meta ціла кількість глядачів; надсилає 0 коли значок відсутній або нечитабельний, щоб очистити застарілі лічильники.

SharePlay.tv

Реалізація: sources/shareplay.js

  • Спирається на зчитування DOM висувної панелі живого чату на сторінках каналів SharePlay.
  • Після підключення зчитувача надсилаються лише нові вставлені рядки чату й картки; наявна історія навмисно ігнорується.
Подія Коли спрацьовує Примітки щодо даних
message Нові рядки чату з’являються в основному потоці чату. Стандартні дані чату з автором, аватаром, зображеннями значків і емотами зі збереженим HTML. Відповіді в гілках також заповнюють initial, reply, і meta.reply коли батьківський рядок ще присутній.
raid SharePlay вставляє картку Blitz у потік живого чату. Зіставляється з канонічною подією рейду. meta.cardType є "blitz", із необов’язковим meta.fromLogin і meta.viewers коли текст картки їх надає.
shoutout SharePlay вставляє картку привітання/підписки в потік чату. Надсилається як data.event = "shoutout". Зображення банера картки передається через contentimg, тоді як meta.cardType і meta.action зберігають підпис картки/текст кнопки.
viewer_update Опитує видимий значок глядачів у заголовку кожні 10 с. meta ціла кількість глядачів; надсилається лише коли Показувати кількість глядачів або режим ажіотажу ввімкнений і надсилає 0 якщо значок стає нечитабельним, щоб очистити застарілі лічильники.

Streamplace

Реалізація: sources/streamplace.js

  • Читає живу сторінку Streamplace, відображену React, і пропускає видиму історію чату під час підключення.
  • Повідомлення у стилі пересилання, наприклад Name (Discord): message нормалізуються до імені пересланого відправника.
Подія Коли спрацьовує Примітки щодо даних
message Нові рядки чату Streamplace з’являються після підключення. Стандартні дані чату з nameColor, chatbadges, посилання зі збереженим HTML і поля відповіді initial, reply, і meta.reply коли видиме.
viewer_update Значок глядачів у заголовку змінюється, коли ввімкнено захоплення кількості глядачів або режим ажіотажу. meta ціла кількість глядачів.

WorldsWave

Реалізація: sources/worldswave.js

  • Підтримує живі сторінки WorldsWave і URL лише чату, наприклад https://worldswave.com/kn_livecmd.php?cmd=viewStream&streamId=STREAM_ID&chatonly=1.
  • Використовує стабільний data-ww-*/ww-chat-* розмітку, якщо доступна, зберігаючи застарілі селектори kontackt для сторінок лише чату й старіших макетів.
  • Наявна історія чату пропускається під час підключення захоплення; перевіряйте новим повідомленням.
  • Для кількості глядачів потрібно Показувати кількість глядачів або режим ажіотажу. Окремі події подарунків/чайових і надсилання відповідей не реалізовані. Відображений рядок усе ще може надавати підпис донату через data-ww-donation.
Подія Коли спрацьовує Примітки щодо даних
message З’являється новий відображений рядок чату WorldsWave. Стандартні дані чату з type: "worldswave", ім’я відправника, аватар, необов’язковий ID користувача, колір імені, значки, стан модератора, членство, значення донату, вкладення та ідентичність каналу. Стабільні ID повідомлень WorldsWave надаються як meta.messageId і з усуненням дублікатів між одночасними панелями попереднього перегляду/повного чату. Вбудовані зображення повідомлень залишаються очищеними, коли текстовий режим вимкнений.
viewer_update Видима поточна загальна кількість глядачів змінюється, коли ввімкнено захоплення кількості глядачів або режим ажіотажу. meta є цілою кількістю глядачів. Стабільний data-ww-viewer-count значення має пріоритет; компактні застарілі значення, наприклад 1.2K нормалізуються як запасний варіант.

FLEX TV

Реалізація: sources/flextv.js

  • Читає відображену панель чату на https://www.flextv.co.kr/channels/*/live сторінки.
  • Панель чату має бути видимою. Наявна історія чату пропускається під час підключення джерела, тому перевіряйте новим рядком чату.
  • Для цього джерела ще не задокументовано кількості глядачів, донатів або шляху надсилання відповідей.
Подія Коли спрацьовує Примітки щодо даних
message Новий видимий FLEX TV .chat-item рядки з’являються в потоці живого чату. Стандартні дані чату з type: "flextv", chatname, chatmessage, nameColor, зображення значків у chatbadges, а подробиці учасника FLEX — у meta коли надається через data-member.

Seal Team Sloth

Реалізація: sources/sealteamsloth.js

  • Читає відображений чат в окремому вікні на https://sealteamsloth.com/popout-chat/* сторінки.
  • Для кількості глядачів потрібно Показувати кількість глядачів або режим ажіотажу.
Подія Коли спрацьовує Примітки щодо даних
message З’являється новий відображений рядок чату Seal Team Sloth. Стандартні дані чату з type: "sealteamsloth", ім’я відправника, аватар і вміст повідомлення.
viewer_update Видима поточна загальна кількість глядачів змінюється, коли ввімкнено захоплення кількості глядачів або режим ажіотажу. meta є цілою кількістю глядачів; компактні значення, наприклад 1.2K нормалізуються.

MeetMe — захоплення DOM і WebSocket

Реалізація: sources/meetme.js

  • Читає DOM відображеного живого чату MeetMe на app.meetme.com/live/view/... сторінках і всередині api.gateway.meetme-live.com/web-live/... iframe.
  • Коли WebSocket iframe доступний, wss://video-live.meetme.com/ кадри розбираються перед запасним DOM, щоб захоплювати докладніші живі події.
  • hideevents приховує події без донатів; подарунки MeetMe й донати діамантами все ще заповнюють поля донатів. capturejoinedevent вмикає сповіщення приєднання/повторного приєднання. Пов’язані з конкретним виконавцем liked події використовують спільну фонову маршрутизацію під керуванням capturelikeevent; сукупне reaction ефекти залишаються явно спрямованими на Reactions Overlay.
  • Кількість глядачів бере передусім видимий лічильник у заголовку MeetMe, використовуючи суми WebSocket лише за відсутності лічильника DOM. Кількість надсилається після зміни та повторюється приблизно кожні 30 секунд, поки showviewercount/hypemode увімкнено; загальна кількість підписників надсилається лише при зміні й обмежена частотою приблизно раз на 60 секунд.
Подія Коли спрацьовує Примітки щодо даних
message Новий SNSChatMessage надходять кадри WebSocket або нові ChatMessage_* Рядки DOM з’являються в ChatHistoryContainer_*. Стандартні дані чату з іменем відправника, аватаром, HTML/текстом повідомлення й зображеннями/текстом значків. Подробиці рядка DOM є плоскими meta ключі, зокрема messageId, roomId, level, levelColor, badgeLabels, badgeSrcs, badgeClasses, isBouncer, isTopStreamer, isBestOfTheWeek, rank, і rowClassName. Дані WebSocket задають meta.source = "websocket".
joined / rejoined / left SNSChatParticipant надходять кадри створення, оновлення або видалення WebSocket, або MeetMe відображає DOM-елемент join-cell рядок. Сповіщення приєднання/повторного приєднання потребують Захоплювати події трансляції «joined». Надсилає системні повідомлення у стилі чату з іменем/аватаром виконавця, коли MeetMe їх надає. meta.isNewViewer, meta.viewerLevelId, meta.isBouncer, і meta.isSubscriber зберігають стан учасників.
new_follower MeetMe відображає DOM-рядок додавання в обране/підписки, наприклад Favorited. Використовує спільний словник подій підписників. chatname є виконавцем, chatimg є виявленим фото профілю, якщо доступне, а плоскі meta.favoriteText/meta.targetName зберігають початкові подробиці рядка.
gift SNSGiftMessage надходять кадри WebSocket або MeetMe відображає зображення подарунка в рядку чату. hasDonation містить видимий підпис подарунка або значення діамантів, contentimg містить зображення подарунка, якщо надане, а плоскі ключі, наприклад meta.giftName, meta.giftCount, meta.amount, і meta.currency зберігають структуровані подробиці. gift подія зарезервована для справжніх кадрів/рядків подарунків; відображення донату все ще має визначатися за hasDonation.
donation SNSDiamond кадри WebSocket надають активність діамантів. Окремі кадри діамантів вважаються подіями донатів. hasDonation форматується як діаманти для спільного перерахунку в USD, а meta.amount/meta.currency залишаються плоскими для автоматизацій.
liked / reaction SNSLike надходять кадри WebSocket. Вподобання конкретних користувачів використовують те саме liked словник і централізовану фонову маршрутизацію, як у TikTok. Сукупні/анонімні підсумки вподобань надсилаються лише до цілі реакцій як reaction, із плоским meta.reactionType, meta.totalLikes, і meta.subscriberLikes. Відмінність полягає в значенні події, а не в анонімності: capturelikeevent керує лише окремими liked/like події.
follower_update SNSVideo метадані WebSocket надають загальну кількість підписників. meta є цілою кількістю підписників, відповідно до спільного правила подій лічильників.
guest_update SNSVideoGuestBroadcast надходять кадри створення/оновлення. Подія лише з метаданими стану гостя/живого співведучого. Плоскі meta ключі включають status, position, totalGuests, isMuted, guestBroadcastId, videoViewerId, і broadcastId.
viewer_update Видимий значок глядачів у заголовку змінюється або SNSVideo метадані WebSocket надають загальну кількість глядачів, коли значок недоступний; незмінні підсумки повторюються приблизно кожні 30 секунд, поки ввімкнено. meta ціла кількість глядачів; надсилається лише за ввімкненого захоплення кількості глядачів або режиму ажіотажу.

Velora

Реалізація: sources/velora.js і sources/websocket/velora.js

  • Стандартний режим читає видимий DOM чату; режим WebSocket використовує Velora Events API з OAuth.
  • Підтримувані URL стандартного режиму включають https://velora.tv/*, https://velora.tv/dashboard/stream/popout?panels=chat%2Cactivity&channel=CHANNEL&layout=vertical, і https://velora.tv/dashboard/stream/popout/CHANNEL/obs-chat.
  • Картки Volts і балів каналу надсилаються як дані подій, коли DOM або Events API їх надає.
Подія Коли спрацьовує Примітки щодо даних
message З’являються нові рядки чату Velora або надходять повідомлення чату Events API. Стандартні дані чату зі значками, кольором автора, посиланнями й емотами, збереженими поза текстовим режимом.
volts Картки Velora Volts або channel.volts Надходять дані Events API. hasDonation містить показану суму Volts; захоплення DOM включають meta.source = "dom".
channel_points Картки балів каналу/використання винагород Velora або channel.channel_points_redemption Надходять дані Events API. chatmessage містить повідомлення використання або назву винагороди; meta.rewardTitle визначає винагороду, якщо доступна.
subscription Видимий рядок активності Velora вказує, що користувач став учасником/підписником каналу. membership містить видимий підпис членства.
viewer_update Видима кількість глядачів змінюється, коли ввімкнено захоплення глядачів або режим ажіотажу. meta ціла кількість глядачів.

Parti — захоплення чату профілю / окремого вікна

Реалізація: sources/parti.js

  • Підтримує URL профілів, як-от https://parti.com/USERNAME і URL окремих вікон, наприклад https://parti.com/popout-chat?id=USER_ID.
  • Кількість глядачів використовує кінцеву точку підтримання трансляції Parti, коли ввімкнено захоплення глядачів або режим ажіотажу.
Подія Коли спрацьовує Примітки щодо даних
message Видимі рядки чату Parti з’являються в потоці чату профілю або окремого вікна. Стандартні дані чату; nameColor зберігає відображений колір автора Parti та chatmessage зберігає вбудований вміст, якщо текстовий режим не ввімкнено.
donation Видимі рядки чайових Parti вказують, що користувач надіслав певну суму чайових. hasDonation містить показану суму, meta.amount/meta.currency заповнюються, якщо їх можна розібрати, meta.amountText зберігає необроблений текст суми, а donoValue задається для чайових у USD.
viewer_update Сигнал підтримання з’єднання Parti повертає поточну кількість глядачів. meta є цілою кількістю глядачів; сторінка повторно використовує один токен підтримання з’єднання на вікно джерела, щоб не завищувати кількість.

CHZZK — захоплення чату в окремому вікні

Реалізація: sources/chzzk.js

  • Підтримує https://chzzk.naver.com/live/*/chat і https://chzzk.naver.com/iframe/live/*/chat.
  • Кількість глядачів використовує кінцеву точку опитування стану ефіру CHZZK, коли ввімкнено захоплення глядачів або режим ажіотажу.
Подія Коли спрацьовує Примітки щодо даних
message Видимі рядки чату CHZZK з’являються в потоці чату окремого вікна. Стандартні дані чату з type: "chzzk", nameColor, URL зображень значків у chatbadges, і відображені емоти в chatmessage якщо текстовий режим не ввімкнено.
чат із hasDonation Видимі рядки донатів cheese CHZZK з’являються в чаті. hasDonation містить показану суму cheese. Ці рядки не задають data.event.
viewer_update Опитування стану ефіру повертає кількість глядачів. meta є цілою кількістю глядачів.

Rumble — стандартне захоплення DOM

Реалізація: sources/rumble.js

  • Потребує cookie автентифікованої сесії, щоб service.php API глядачів відповідає.
  • Відображені рядки Rant надають hasDonation; картки вхідних рейдів надають event: "raid". Це джерело DOM не надсилає потік подій підписників/платних підписників мосту API.
Подія Коли спрацьовує Примітки щодо даних
message Видимі рядки чату Rumble з’являються на сторінці або у вікні чату. Стандартні дані чату; chatmessage зберігає HTML зображень емотів Rumble після їх відображення сторінкою, якщо текстовий режим не ввімкнено.
viewer_update Викликає API Rumble video.watching-now сервіс кожні 30 с. meta ціла кількість глядачів; використовує credentials: 'include' щоб повторно використовувати cookie сесії.
чат із hasDonationВидимий рядок Rant містить ціну.hasDonation зберігає відображену ціну; позначка події донату не додається.
raidУ чаті з’являється картка вхідного рейду.Використовує видиме повідомлення рейду й необов’язкове зображення картки в contentimg.

Rumble — WebSocket/URL API

Реалізація: sources/websocket/rumble.js

  • Потребує URL Live Stream API, що належить автору, з https://rumble.com/account/livestream-api. Документація Rumble вказує, що цей URL містить ключ прямої трансляції, не потребує окремої автентифікації та має передаватися лише довіреним третім сторонам.
  • Транспорт лише для читання. Публічна документація Rumble Live Stream API не описує офіційної кінцевої точки надсилання чату, тому це джерело пересилає повідомлення/події в Social Stream, але не надсилає чат назад у Rumble.
  • livestreams[].chat заповнюється лише поки вибрана трансляція наживо. Використовуйте ?streamId=... щоб закріпити конкретну трансляцію, коли API надає більше однієї; некоректні ID тепер спричиняють помилку замість непомітного переходу до іншої трансляції.
  • Сторінка також визначає https://rumble.com/chat/popup/<livestreams[].id> щоб можна було відкрити звичайний вставлений чат окремого вікна без попереднього завантаження сторінки транслятора /live сторінка.
Подія Коли спрацьовує Примітки щодо даних
message Нові записи надходять із потоку чату SSE Rumble після того, як офіційний API визначає livestreams[].id; запасний варіант — livestreams[].chat.recent_messages. Стандартні дані чату. meta.source є rumble_sse коли потік чату SSE доступний і містить URL аватарів із users[].image.1; інакше використовується запасний варіант live_stream_api без аватарів. Коли каталог емотів спливного вікна доступний, chatmessage відображає емоти коротких кодів Rumble як HTML зображень і meta.plainText зберігає початковий текст короткого коду.
donation Нові записи rant з’являються в livestreams[].chat.recent_rants. hasDonation містить суму у форматі USD; meta включає amount_cents, amount_dollars, і expiresOn.
new_follower Нові записи з’являються в followers.recent_followers. Системна подія з chatname задається як ім’я підписника й часова позначка в meta.followedOn.
new_subscriber Нові записи з’являються в subscribers.recent_subscribers. membership задається як SUBSCRIBER; subtitle повторює задокументовану суму в USD, коли Rumble її надає.
subscription_gift Нові записи з’являються в gifted_subs.recent_gifted_subs. chatname є дарувальником, hasDonation стає N Gifted, і meta включає totalGifted, remainingGifts, giftType, і videoId.
follower_update Щоразу, коли змінюється вибраний лічильник підписників. meta ціла кількість підписників. Типове значення — followers.num_followers; з ?followerMode=total, використовує followers.num_followers_total коли Rumble його надає.
subscriber_update Щоразу, коли subscribers.num_subscribers змінюється. meta ціла кількість платних підписників.
stream_online / stream_offline Коли вибрана трансляція перемикається між станами наживо й офлайн. meta включає очищену підмножину полів трансляції (id, title, createdOn, підписи категорій, вподобання/невподобання та загальна кількість глядачів). Конфіденційні значення, як-от stream_key навмисно не пересилаються.
viewer_update Щоразу, коли livestreams[].watching_now змінюється для вибраної трансляції. meta ціла кількість одночасних глядачів; надсилає 0 коли вибрана трансляція переходить офлайн, щоб очистити застарілі лічильники.

Цей транспорт призначений для каналів, якими ви володієте або керуєте. Оскільки URL API містить ключ живої трансляції, не розкривайте його в оверлеях, журналах, знімках екрана або спільних профілях браузера. Аватари чату надходять із потоку SSE Rumble після визначення ID трансляції офіційним API; цей транспорт не зчитує сторінки Rumble для отримання аватарів.

YouNow — захоплення DOM

Реалізація: sources/younow.js

  • Читає DOM відображеного живого чату й надсилає стандартні дані чату з type: "younow".
  • Рядки активності аудиторії, як-от is watching, I became a fan!, і invited N fans to this broadcast. позначаються через event: true щоб фільтри подій могли їх маршрутизувати.
Подія Коли спрацьовує Примітки щодо даних
message Нові рядки з’являються в живому чаті аудиторії. Стандартні дані чату; рядки активності шанувальників/аудиторії задають event: true.
viewer_update Видима кількість на панелі аудиторії змінюється, коли showviewercount/hypemode увімкнено. meta ціла кількість глядачів; надсилає 0 коли лічильник зникає.

Favorited Studio — захоплення DOM

Реалізація: sources/favorited.js

  • Читає DOM відображеного живого чату й надсилає стандартні дані чату з type: "favorited".
Подія Коли спрацьовує Примітки щодо даних
message З’являються нові рядки чату. Стандартні дані чату.
viewer_update Кількість на вкладці живих глядачів змінюється, коли showviewercount/hypemode увімкнено. meta ціла кількість глядачів, прочитана з content-live-viewers вкладці.

BEAM — захоплення DOM

Реалізація: sources/beamstream.js

  • Читає DOM відображеного живого чату й надсилає стандартні дані чату з type: "beamstream".
Подія Коли спрацьовує Примітки щодо даних
message З’являються нові рядки чату. Стандартні дані чату зі звичайним текстом у chatname, URL аватара в chatimg, а URL зображень або об’єкти значків SVG — у chatbadges. Поля, приховані на сторінці захоплення Beam, залишаються порожніми. Власні посилання профілів Beam не вважаються зовнішніми джерелами пересилання. contentimg може містити вбудовані вкладення video/webm, якщо надані.
viewer_update Елемент лічильника глядачів змінюється, коли showviewercount/hypemode увімкнено. meta ціла кількість глядачів; надсилається лише коли сторінка чату надає лічильник глядачів.

Castyr — захоплення DOM

Реалізація: sources/castyr.js

  • Читає нові відображені рядки чату з https://castyr.live/homebeta/popout-chat/* і надсилає стандартні дані чату з type: "castyr".
  • Наявна історія чату пропускається під час підключення джерела.
Подія Коли спрацьовує Примітки щодо даних
message Нове .chat-message рядок з’являється. Стандартні дані чату з іменем відправника, відображеним вмістом повідомлення й кольором імені, якщо наданий.
viewer_update Видима кількість активного чату змінюється, коли showviewercount/hypemode увімкнено. meta є цілою кількістю, прочитаною з елемента активного чату Castyr з атрибутом title.

SOOP — захоплення DOM програвача

Реалізація: sources/sooplive.js. Підтримує єдину play.sooplive.com програвач і застарілий play.sooplive.co.kr URL. Колишній глобальний макет чату все ще розпізнається, якщо надається.

Публічний чат надсилає type/platform: "sooplive", звичайний текст chatname/userid, nameColor, і очищене chatmessage. Наявні рядки, повторні ID повідомлень, копії перекладу й приватні повідомлення виключаються. Емоти стають безпечними зображеннями або альтернативним текстом у текстовому режимі.

З showviewercount або hypemode увімкнено, viewer_update містить ціле число meta з поля програвача #nAllViewer. Вікна лише чату можуть не надавати цього лічильника. SSApp використовує повний програвач, відкриваючи відокремлене вікно, оскільки поточні вікна SOOP залежать від сторінки, яка їх відкрила.

Gosh — захоплення чату каналу

Реалізація: sources/gosh.js. Відкрийте https://gosh.com/USERNAME із видимим чатом або вставте цей URL у Add other source в SSApp. Окреме вікно чату не потрібне.

Нові рядки чату надсилають type/platform: "gosh", звичайний текст chatname, nameColor, і очищене chatmessage. Вбудовані зображення й GIF зберігають безпечні URL HTTP(S). З textonlymode, зображення перетворюються на альтернативний текст або [image] коли альтернативний текст недоступний. Аватари, значки, донати й членства залишаються порожніми, коли відсутні в захопленому рядку.

Тримайте віртуалізований чат прокрученим до найновіших повідомлень. Наявна історія, повторно відображені рядки й системні повідомлення без автора виключаються. Індекси відображення залишаються внутрішніми й не надсилаються як власні ID повідомлень. Події підписок, донатів, кількості глядачів або модерації не виводяться.

Livacha — захоплення кімнати чату

Реалізація: sources/livacha.js. Відкрийте https://livacha.com/chat/ROOM із видимим чатом або вставте URL кімнати в Add other source в SSApp.

Нові рядки чату надсилають type/platform: "livacha", звичайний текст chatname, chatimg, nameColor, і очищене chatmessage. Відносні URL аватарів і вбудованих зображень стають абсолютними URL HTTP(S). Абзаци, переноси рядків і списки зводяться в одне повідомлення чату. З textonlymode, зображення перетворюються на альтернативний текст або [image].

ID повідомлень використовуються внутрішньо, щоб не захоплювати повторно зміни й повторно змонтовані рядки. Початкова історія та старіші повідомлення, додані зверху, пропускаються; часові позначки й меню реакцій не входять до захопленого тексту. Події донатів, членства, модерації або кількості глядачів не виводяться.

Stream.space — експериментальне захоплення DOM

Реалізація: sources/streamspace.js. Зіставляє лише https://beta.stream.space/chat-popup.php?channel=USERNAME і відповідний https://stream.space спливне вікно.

Нові відображені рядки чату надсилають type: "streamspace", platform: "streamspace", звичайний текст chatname/userid, chatmessage, аватар chatimg, рівень у вигляді зображення chatbadges, і nameColor. Вбудовані емоти відтворюються як безпечні зображення або їхній альтернативний текст, коли textonlymode увімкнено. Наявна історія, вітальні повідомлення, попередні перегляди відповідей і закріплені дублікати виключаються.

viewer_update містить ціле число meta прочитане з #popupViewersNum коли showviewercount або hypemode увімкнено. Події донатів, членства або модерації не виводяться.

Експериментально: під час перевірки бета-вікно залишалося в стані Loading. SSApp завантажив вікно й захопив оновлення глядачів, але доставка живого чату та виробниче вікно залишаються неперевіреними. SSN не може захоплювати повідомлення, які сайт не відображає.

w.tv і Prime — захоплення DOM

Реалізації: sources/wtv.js на https://w.tv/USERNAME/chat і sources/prime.js на https://prime.gs/USERNAME?chat_popout=1.

Нові рядки чату використовують type/platform із wtv або prime, звичайний текст chatname, nameColor, і очищене chatmessage. Вбудовані емоти стають безпечними зображеннями або альтернативним текстом у текстовому режимі. Prime також включає поле рядка userid і підтримує як посилання профілів з авторизацією, так і підписи імен без авторизації. Аватари й значки залишаються порожніми, якщо вони недоступні у перевіреній структурі рядка.

Початкова історія, закріплені картки й попередні перегляди відповідей виключаються. w.tv віртуалізує чат: для захоплення тримайте прокрутку біля найновіших повідомлень. Його тестові ID DOM є індексами відображення, а не власними ID повідомлень. Prime пропускає старішу історію, завантажену вище початкових повідомлень, і заглушки ігнорованих користувачів.

Жодне вікно не надає перевіреної кількості глядачів трансляції, тому ці адаптери не надсилають оновлень глядачів і не виводять події донатів, підписок або модерації.

Узгодження подій між платформами

Ця таблиця пояснює, як подібні поняття зіставляються між платформами. За можливості нові джерела мають узгоджуватися зі спільними назвами подій у першому стовпці.

Поняття YouTube WS Twitch WS Kick WS
Новий учасник/підписник sponsorship new_subscriber new_subscriber
Поновлення/повторна підписка resub resub resub
Подаровані підписки giftpurchase subscription_gift subscription_gift
Отриманий подарунок giftredemption - -
Віха membermilestone - -
Донат/чайові superchat, supersticker, jeweldonation з hasDonation cheer (біти) donation
Новий підписник new_follower (через опитування)* new_follower new_follower
Кількість глядачів viewer_update viewer_update viewer_update
Кількість підписників - follower_update follower_update
Кількість підписок subscriber_update subscriber_update -
Стан трансляції live_chat_ended stream_online/stream_offline stream_online/stream_offline
Рейд - raid -
Використання винагороди - reward reward

Примітки щодо узгодження

  • YouTube використовує sponsorship для нових учасників, тоді як Twitch і Kick використовують new_subscriber. Для міжплатформних тригерів варто перевіряти обидва.
  • resub є узгодженим на всіх трьох платформах для поновлень.
  • Події подарунків відрізняються: YouTube використовує giftpurchase/giftredemption, тоді як Twitch і Kick використовують subscription_gift.
  • Донати відрізняються залежно від платформи: YouTube використовує конкретні назви платних подій, наприклад superchat, supersticker, і jeweldonation з hasDonation; у Twitch є біти (cheer); у Kick є чайові (donation).
  • new_follower тепер узгоджено на всіх трьох платформах, але YouTube опитує нових підписників і може повертати затримані або неповні результати.
  • Вподобання й реакції мають окремі контракти: окремі liked/like події надходять до Reactions Overlay, якщо не відфільтровані глобально, і входять до основного ланцюжка обробки лише коли capturelikeevent увімкнено. Візуальний або власний для платформи reaction події зберігають маршрутизацію, визначену джерелом. Сукупні likes_update лічильники окремо керуються через captureliketotals.

Межі охоплення й сумісності

Цей довідник описує реалізовані дані, а не гарантує, що кожна платформа доставляє кожну подію. Порожні hasDonation присвоєння в джерелі не доводять підтримки донатів. Видимість DOM, дозволи облікового запису, перемикачі захоплення й доступність API все ще визначають отримані дані. Пересилання видалень залежить від джерела; не припускайте універсальної синхронізації модерації.

Відстежувані невідповідності та прогалини

Пара/область Виявлена невідповідність / прогалина Вплив
Twitch: Standard і WebSocket Спільне: reward, subscription_gift, viewer_update, hype_train, і окремо вмикане watch_streak. Лише Standard: giftpurchase, knock, community_highlight. Лише WebSocket: new_subscriber, resub, cheer, powerup, raid, new_follower, follower_update, subscriber_update. channel_points тепер є застарілим псевдонімом використання винагород Twitch; нові інтеграції мають орієнтуватися на reward.
Kick: Standard і WebSocket Standard надсилає легкі позначки (gift, reward, логічне true, viewer_update). WebSocket додає офіційні події підписок, платних підписок, подарунків, використання винагород, KICKs, модерації та стану ефіру. Він зберігає обробку сумісності для застарілого raid дані, але Kick наразі не пропонує офіційної підписки raid/host. Режим WebSocket має ширші можливості; при переході слід переглянути автоматизацію, побудовану навколо назв подій лише Standard. Не вимагайте події рейду Kick.
YouTube: Standard і WebSocket Спільне: superchat, supersticker, jeweldonation, sponsorship, resub, giftpurchase, giftredemption, viewer_update. Лише Standard: thankyou, redirect. Лише WebSocket: membermilestone, new_follower, subscriber_update, view_update, likes_update (за окремим увімкненням). Основні назви членства/подій узгоджені між обома; Super Chat, Super Sticker і Jewels використовують hasDonation, тоді як покупки/отримання подарованого членства — ні.
Усі інтерфейси Багато джерел заповнюють hasDonation без задавання data.event. Це правильно; відображення донату має визначатися за hasDonation, з data.event зарезервовано для системної/подієвої семантики.

Псевдоніми та застарілі назви окремих джерел

Ці зіставлення стосуються зазначеного джерела/контексту, а не глобальних замін. Підтримка псевдонімів споживачами різниться залежно від сторінки. Поточні джерела TikTok DOM і TikFinity досі надсилають followed; Velora використовує subscription і channel_points, а Streamlabs використовує subscription. Приймайте поточний контракт джерела та відповідні застарілі псевдоніми замість перейменування всіх відповідних подій.

Псевдонім / застаріла назва Канонічна заміна Контекст
subscriptionnew_subscriberНова підписка Twitch/Kick
subgiftsubscription_giftПодарована підписка Twitch
membershipsponsorshipНовий учасник YouTube (загальний)
new_membersponsorshipНовий учасник YouTube
new_membershipsponsorshipНовий учасник YouTube
newmembersponsorshipНовий учасник YouTube
new-membershipsponsorshipЗчитувач YouTube DOM (варіант із дефісом)
upgraded_membershipresubПідвищення рівня YouTube
upgraded-membershipresubЗчитувач YouTube DOM (варіант із дефісом)
membership_upgraderesubПідвищення рівня YouTube
membership_milestonemembermilestoneПовідомлення віхи YouTube
member_milestonemembermilestoneПовідомлення віхи YouTube (варіант із підкресленням)
gift_membershipgiftpurchaseПакет подарунків YouTube
membership_giftgiftpurchaseПакет подарунків YouTube
giftmembershipsgiftpurchaseПакет подарунків YouTube (варіант у множині)
gifted_membershipgiftredemptionОтриманий подарунок YouTube
gifted_membershipsgiftpurchaseПакет подарунків YouTube (варіант у множині)
community_giftgiftpurchaseПакет подарунків спільноті
channel_pointsrewardВикористання винагороди Twitch WebSocket (застарілий псевдонім)
followednew_followerПоточний вивід TikTok DOM/TikFinity; приймайте обидві назви під час поєднання режимів захоплення TikTok.

Використання цього довідника

  • Додаючи нову подію, використовуйте наявний словник (subscription_gift, viewer_updateтощо) за можливості. Якщо відхилення неминуче, задокументуйте його тут разом з обґрунтуванням.
  • Залиште data.meta передбачуваним: надавайте перевагу плоским ключам, ніколи не перевантажуйте рядки змішаними даними й завжди включайте одиниці (currency, bits, duration).
  • Оновлюйте цю сторінку разом зі змінами даних; інструкції агентів оновлюйте лише при зміні спільних правил розробки.
  • Перевіряйте зміни даних і з боку джерела, яке їх надсилає, і з боку оверлею або тригера Event Flow, що їх споживає.
  • Захоплення залежить від підтримки джерела й налаштувань. Щоб приховати рядки з позначкою події в доку або оверлеї вибраних повідомлень, додайте &hideevents або &hideallevents. Щоб приховати вибрані події, використовуйте &filterevents=subscription_gift,new_follower,gifted.
  • Для YouTube, Twitch і Kick увімкніть Режим WebSocket для найширшої підтримки подій конкретної платформи. Захоплення подарунків/донатів YouTube (включно з подарунками й Super Chats) доступне в режимах Standard і WebSocket; WebSocket додає інші типи подій. Точна підтримка все ще залежить від платформи, ролі облікового запису й наданих дозволів.

Нагору

Оверлеї монетизації

Чайові NinjaBacker використовують platform: "ninjabacker", type: "ninjabacker", chatname, звичайний текст chatmessage, textonly: true, поле з префіксом джерела id, відформатоване hasDonation, і числове donoValue. Це звичайні рядки донатів без event перевизначення. meta.ninjabacker містить ISO currency і в основних одиницях amount. Анонімні чайові використовують ім’я Anonymous. Джерело використовує або живий SSE (без повторного відтворення), або окремо вмиканий приймач підписаних вебхуків на SSN API (до семи днів доставки з черги). Надійні доставки використовують стабільний ninjabacker:delivery:DELIVERY_ID id. Жоден режим не отримує скасувань через повернення/спори. Облікові дані приймача й секрети підпису ніколи не потрапляють у дані подій. Значення callbackId, контрольовані викликачем, не є ідентичністю платежу й не пересилаються. Тестові чайові панелі виключаються з рядків донатів. Вони надсилають event: "monetization_test" з meta.ninjabackerTest що містить id і at (мілісекунди Unix), лише для окремого сповіщення попереднього перегляду.

event: "monetization_update" є знімком лише метаданих із type/platform: "socialstream". meta.monetization.wishlist містить enabled, qr, position, rank, total, публічний url і поточний item (name, amount, currency, image, публічний url) або null. meta.monetization.ninja містить enabled, qr, position, username і публічний url для чайових. Приватні Tip IDs ніколи не включаються. meta.monetization.ebay містить enabled, qr, position, display (cycle/cheapest/first), seconds, окремо вмикані налаштування оголошень і публічні items. Кожен елемент має id, name, amount, currency, image, url, auction, startingBid, endsAt, available, bought і updatedAt. Час указано в мілісекундах Unix. Облікові дані продавця й ідентичність покупця не включаються.

Підтверджена ведучим покупка зі списку бажань також включає meta.wishlistPurchase з id, name, необов’язковим supporter і at (мілісекунди Unix). Це підтвердження ведучого, а не сповіщення оплати Amazon, і воно не рахується грошовим донатом. Оверлеї мають усувати дублікати за id та ігнорувати старі сповіщення покупок.

Оплачені замовлення Shopify

Необов’язковий приймач підписаних повідомлень Shopify надсилає platform/type: "shopify" і event: "purchase" лише для orders/paid з financial_status: "paid", додатну загальну суму, test: false, відсутність скасування та поточна часова позначка оновлення підписаного тіла. Тестові, неоплачені, застарілі, скасовані повідомлення й повідомлення повернень не створюють дій покупки. Намір подарунка не виводиться.

chatname має значення Anonymous; поля клієнта, приватні примітки й URL замовлень виключаються. chatmessage є звичайним текстом із textonly: true; subtitle містить до трьох публічних назв товарів. meta.commerce містить orderTotal і currency у валюті магазину, а також quantity коли відома повна коректна кількість. Одержувач і фізичне/цифрове призначення залишаються незаданими. Без hasDonation або donoValue задано. id є стабільним непрозорим хешем, обмеженим магазином/замовленням, із префіксом Shopify; це не необроблений ідентифікатор замовлення.

Покупки використовують наявні шляхи активності, категорію Purchase multi-alerts і Event Flow. Просування товарів використовує наявний meta.monetization.commerce каталог. Імпорт товару або встановлення його рекламного підпису Gift не створює подію покупки чи подарунка. Налаштування Shopify та обмеження доставки.

Подарунки й торгівля

Використовуйте event: "gift" для подарунка, giftcontribution для платної підтримки подарунка, giftfunded для завершення фінансування й purchase для продажу товару. Ці назви незалежні від постачальника й від того, фізичний товар чи цифровий. Залиште застарілий giftpurchase подія подарованих членств; Throne раніше неправильно використовував цю назву, а тепер надсилає gift. Наявні джерела подій членства залишаються незмінними. Власні фільтри назв подій Throne мають перейти на gift; фільтри донатів змінювати не потрібно.

hasDonation залишається ознакою сумісності для платної підтримки, з donoValue що містить надане або оцінене значення в USD. Подарунки й внески зберігають ці поля. Завершення фінансування пропускає обидва, щоб не враховувати внески двічі. Звичайні продажі товарів типово їх пропускають, зберігаючи контракт eBay. Не виводьте намір подарунка з магазину, URL списку бажань або фізичного товару: покупка для покупця чи іншого одержувача залишається продажем, якщо джерело явно не визначає подарунок автору.

Необов’язкове спільне meta.commerce поля: recipient (creator, buyer, other), itemType (physical, digital, service), quantity (додатна кількість товарів), currency (валюта ISO), goalAmount (ціль фінансування в основних одиницях валюти, ніколи не новий дохід) і orderTotal (відома загальна сума оплаченого замовлення в основних одиницях валюти; торгівля, а не дохід від донатів). Пропускайте невідомі подробиці. Зберігайте назви товарів у subtitle, зображення в contentimg, і текст підтримки в chatmessage. Наявні метадані постачальників залишаються доступними. Throne надає одержувача й валюту, а після завершення — goalAmount; eBay надає кількість. Жоден не вгадує тип товару й не розкриває приватних відомостей одержувача.

Стрічка активності показує ці події навіть без тексту підтримки. Multi-alerts використовує оформлення донатів для подарунків і внесків, включно з окремим сповіщенням Gift Fully Funded без грошового значення. Покупки мають окрему категорію Purchase, увімкнену за замовчуванням, з purchasestyle, purchasesound, purchaseaccent, і disablepurchases параметри URL. Сповіщення про покупки не змінюють суми донатів.

Event Flow надає ці назви подій у тригерах Event Type і Other Event. Тригери Donation і далі перевіряють hasDonation; тригери Gift Sub зберігають семантику членства. Compare Property приймає вкладені шляхи, наприклад meta.commerce.recipient. Шаблони дій приймають {meta.commerce.quantity} і {meta.commerce.currency}, поряд із наявним {donation}, {subtitle}, і {meta}. Вкладені шляхи чутливі до регістру, відсутні значення відображаються порожніми, а обхід прототипів заборонений.

Вебхуки торгівлі авторів і рекламні оверлеї

Публічні платежі Donation Ko-fi зберігають hasDonation і отримують USD donoValue. Платежі підписок використовують new_subscriber або resub, із рівнем у membership. Shop Order і Commission використовують purchase без значень донатів. Приватні події Ko-fi залишаються виключеними. JSON у кодуванні форми декодується один раз; імена й повідомлення є звичайним текстом.

Buy Me a Coffee donation.created зберігає грошову підтримку; extra_purchase.created і commission_order.created стають purchase. wishlist_payment.created стає giftcontribution використовуючи лише суму цього платежу; meta.commerce.completed записує прапорець завершення постачальника без надсилання ще одного грошового рядка. membership.started стає new_subscriber із рівнем у membership, більше не використовуючи помилково hasDonation для назви рівня. Сума початку підписки сама по собі не вважається оплаченим списанням. Тестові, повернені, невдалі та непідтримувані події оновлення/життєвого циклу не створюють платних сповіщень. Приховані примітки прихильників пропускаються.

Fourthwall підтримує ORDER_PLACED (purchase), GIFT_PURCHASE (gift, одержувач other), DONATION (звичайний рядок донату) і SUBSCRIPTION_PURCHASED (new_subscriber). Наявні суми замовлень зберігають hasDonation для зворотної сумісності, позначене meta.commerce.legacyDonationValue: true; це явний виняток із нових типових правил продажу товарів. Замовлення із застосованими подарунковими картками створюють сповіщення про покупку без значення донату: нове списання неможливо надійно визначити із загальної суми замовлення, а придбання подарунка вже враховане. Платіжні імена й електронні адреси не використовуються для публічної ідентичності. Тестові події панелі та оновлення замовлень не створюють платних сповіщень.

Ці адаптери зберігають наявне пересилання, дії ботів, Event Flow і маршрутизацію цілей, з meta.webhookId усунення дублікатів. Вони надають публічні імена, звичайні текстові повідомлення, відомі назви товарів у subtitle, і ISO meta.commerce.currency поряд із числовими значеннями донатів, де доречно. Вони не додають обліку повернень або нової автентифікації приймача; використовуйте наявний налаштований маршрут вебхука постачальника.

meta.monetization.commerce у monetization_update містить enabled, qr, position, display (first/cycle), seconds і публічний масив items. Кожен елемент має name, url, image, необов’язкове amount (null, якщо невідомо), currency та purpose (shop/gift/support/membership). Це введені ведучим рекламні подробиці, а не доказ оплати. Додавання або редагування елементів не створює події донату чи покупки. Загальний оверлей використовує mode=commerce; view=both|showcase|card|alerts відокремлює просування від активності. Необов’язкові параметри URL style, scale, cardevery, cardfor і onlytype керують поданням. Наявні режими постачальників також приймають керування view і розкладом. Дивіться посібник із налаштування.

Події подарунків Throne

Окремо вмикана інтеграція Monetization пересилає підписані події Throne з platform і type задається як throne. Усі три використовують стабільний ідентифікатор доставки id, звичайний текст chatname, chatmessage з textonly: true, назва товару в subtitle, і необов’язкову мініатюру HTTPS у contentimg.

подіяЗначенняСума донату / ранг
giftПридбаний подарунокhasDonation і USD donoValue; ранг подарунка +1
giftcontributionВнесок на подарунокЛише сума внеску; без підвищення рангу
giftfundedПодарунок, на який завершено спільний збірНі hasDonation або donoValue, уникаючи повторного врахування попередніх внесків; ранг подарунка +1

meta.throne містить itemName, creator (публічне ім’я користувача), completed, currency і в основних одиницях amount. Для giftfunded, сума описує ціль, а не новий дохід. Анонімні дарувальники залишаються Anonymous; завершені спільнотні подарунки використовують Community. Приватні платіжні поля й поля доставки ніколи не пересилаються.

monetization_update знімки додатково містять meta.monetization.throne: enabled, username, url, qr, position, rank, і gifts. Ці знімки не містять URL вебхука або облікових даних прослуховування.

Голосові команди ведучого (попередня настільна версія)

У Event Flow Коли я кажу… тригер отримує довірені локальні команди мікрофона від SSApp. Його внутрішній контекст дії використовує chatname: "Host", type: "hostvoice", розпізнана фраза в chatmessage, і textonly: true. Це не вхідна подія платформи й не новий транспорт чату. Надсилання цих полів через чат не може активувати голосовий тригер.

Потребує оновленої настільної збірки, явного запуску мікрофона й увімкнення дій після тестового режиму. Дивіться налаштування попередньої версії та стан перевірки.

Керування відображенням товарів

Наявне monetization_update знімки можуть включати meta.monetization.commerce.live: null для збереженого розкладу або {mode: "show" | "hide", url?: "https://...", until: 0 | epochMilliseconds}. Show зіставляє точний збережений URL товару; якщо товар відсутній, картка не показується. Додатне until після завершення строку повертає збережений розклад; нуль діє до зміни або перезапуску SSN. Hide приховує рекламні покази, але не сповіщення про платну активність.

commerce.viewerURL є опублікованим URL магазину лише для читання або порожнім рядком. Якщо є, рекламні QR-коди ведуть туди. Він ніколи не містить сесії SSN або ключа публікації. Товари залишаються в commerce.items. Керування відображенням, імпорт або публікація не створюють події донату/покупки. Дивіться Керування товарами для Event Flow і віддаленого API.

У Event Flow commerceControl дія чекає прямої відповіді/відповіді Chrome (до восьми секунд). Для звичайних даних події вона зберігає подію й додає meta.commerceControlResult: {success: true, commerce: controlState} або {success: false, error: "..."}. Для наявного числового, масивного або іншого необ’єктного meta, метадані не змінюються, а діагностика повертається як commerceControlResult у результаті дії натомість. Невдалі команди керування зупиняють наступні дії в цьому ланцюжку, не пригнічуючи початкову платіжну подію. Тайм-аут не доводить, що команду не застосовано; перевірте стан перед повтором відносної команди, наприклад Next. Успіх підтверджує локальний стан вибору/приховування/розкладу, але ніколи не видимість в OBS або синхронізацію публічної сторінки.

Іменовані процеси Stream Deck / API

Цей тригер іменованого процесу створює внутрішнє повідомлення Event Flow із type: "api", event: "workflow_trigger", chatname: "Stream Deck / API", порожнє chatmessage, і textonly: true. Його meta.workflow об’єкт містить назву тригера й надані викликачем JSON-дані data об’єкт. Читайте значення через шаблони, наприклад {meta.workflow.data.minutes}. Оцінюються лише збережені ввімкнені потоки, які явно відповідають цьому тригеру. Це не вхідна подія глядача/чату й вона не транслюється як чат; копіювання цих полів у чат не активує іменований тригер.

Пілот аудиторії NinjaChatter

Експериментальний спарений конектор розширення надсилає рядки лише для відображення з type: socialstreamchat, platform: ninjachatter, і textonly: true. meta.ninjachatter містить origin: audience, описове provider, і публічне room ID. Ці рядки обходять відповіді платформ, ботів, тригери Event Flow і бали. Відображений постачальник не є авторизацією. Застарілі захоплення джерела NinjaChatter включають meta.ninjachatter.room для усунення дублікатів у межах кімнати.

Cheer використовує окремий автентифікований шлях заявки й результату, ніколи не спеціальну команду чату. Фіксований пресет надсилає наявну подію оверлею Actions show_text повідомлення на три секунди. Його отримання означає прийняття транспортом, а не перевірений показ в OBS. Жодні дані аудиторії не можуть вибирати довільні дії. Пілот типово вимкнений у NinjaChatter; Electron зберігає наявне пересилання, доки нова межа приватного спарювання не буде перевірена.

Торгові дошки місць і останні продажі

Наявний monetization_update подія (type/platform: socialstream) також включає meta.monetization.boards. Його board містить title, style (spots/teams), columns (1–20), visible, і до 120 spots. Кожне місце має рядкове поле id, звичайний текст label, status (available/claimed/revealed) і result (звичайний текст, порожній до розкриття). Зайняття та розкриття — введений ведучим стан відображення, а не доказ покупки чи випадковий розподіл.

boards.sales містить до 100 останніх записів: id, title, необов’язкове amount (null, якщо невідомо), currency, quantity, source, і at (час запису в мілісекундах Unix). automatic вмикає збирання, salesVisible керує відображенням і revision збільшується при змінах. Автоматичне збирання приймає лише purchase події Shopify, продавця eBay, Fourthwall, Ko-fi та Buy Me a Coffee; приватні/тестові події виключаються. Метадані аукціону, чайові, подарунки або зайняття місць не вважаються покупками. Автоматичні записи не підставляють загальну суму замовлення, ціну оголошення або суму донату замість ціни товару. Ручні записи використовують source: "Host confirmed".

Стан зберігається в приватному сховищі монетизації цієї інсталяції; публічні знімки виключають ID усунення дублікатів доставки, ідентичність покупця та секрети. Явно показані продажі зберігають ID подій для видалення. Повернення потребують видалення ведучим. Дубльовані ID покупок запам’ятовуються окремо (до 2 000), зокрема після очищення видимої історії. Наявний getCommerceState відповідь включає commerce.boards; commerceControl приймає команди дошки/продажів, задокументовані в посібнику дошок. Ручні зміни транслюють оновлений стан, але ніколи не створюють подій покупок, сум донатів або платних винагород. Оверлеї приховуються, якщо знімок ведучого відсутній 35 секунд.

Доповнення процесу продавця: commerce.boards.board.id визначає покоління дошки. Ручний saleAdd може надавати boardId і spotId щоб атомарно записати продаж і зайняти це місце; дубльовані пов’язані продажі, що ще є в недавній історії, відхиляються. saleRemove з reopenSpot: true звільняє це місце лише якщо покоління дошки все ще збігається. Публічні записи продажів пропускають ці операторські поля зв’язку. Необов’язковий platform для ручного продажу зберігає джерело для фільтрації, тоді як source: "Host confirmed" визначає спосіб підтвердження. amount є підсумком запису, включно з його quantity. Поле адаптера оплачених замовлень eBay meta.ebayPurchase.quantity зберігається.

salesSettings.auctionSource вмикає помічник товарів Whatnot або eBay Live. Поле відповіді керування commerce.auction містить лише source, title, priceText, status і at з останнього захопленого auction_update, або null. Він спливає через п’ять хвилин і очищується при зміні джерела, неактивному знімку або перезапуску. Помічник призначений лише для оператора: він не зберігається та не входить до глядацьких трансляцій; особу учасника торгів/переможця відкидають. Скрипти джерел і дані подій аукціону не змінюються. Копіювання чернетки не підтверджує оплату й не створює продажу.