Справочник событий трансляции
Эта страница описывает канонические данные событий, которые Social Stream Ninja отправляет для основных платформ. Используйте её как общий источник истины при подключении новых источников, поиске проблем интеграций или согласовании подписей интерфейса. Более короткую таблицу для пользователей см. в Совместимость событий и уведомлений.
На этой странице
Перейдите к общим правилам полей, реализации платформы или примечаниям о совместимости в конце.
Важно: Доступность событий зависит от источника, разрешений и настроек захвата. Чтобы скрыть строки с маркером события в док-панели или оверлее выделенных сообщений, добавьте &hideevents или &hideallevents. Чтобы скрыть выбранные события, используйте &filterevents=subscription_gift,new_follower,gifted. Эти фильтры также могут скрывать платные строки, содержащие event; обычные строки пожертвований без маркера события не совпадают с фильтрами событий. Остальные фильтры сообщений продолжают действовать.
Выберите способ захвата: Для YouTube, Twitch и Kick Режим WebSocket обычно обеспечивает более широкий охват событий. Стандартный захват DOM читает строки и карточки, которые действительно отображены на странице. YouTube Super Chat, Super Sticker и подарки 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 Chat и Super Sticker |
Общее количество зрителей, подписчиков и просмотров (опрос) |
| Twitch — захват DOM |
Строки наборов подарков и уведомления о получателях |
- |
Биты помечены через hasDonation |
Количество зрителей, карточки наград и выделения сообщества |
| Twitch — EventSub / WebSocket |
Мгновенные подписки, продления и подарки |
Мгновенные уведомления о фолловерах + общее количество |
Cheers, Power-up и активации наград за баллы канала |
Общее количество зрителей, подписчиков и фолловеров, состояние эфира, уведомления о рекламе |
| 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 для общего пересчёта в доллары США без события пожертвования. Включаемый по желанию 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 | строка | число (необязательно) | Идентификатор сообщения или события. Его смысл зависит от источника и способа передачи; не считайте, что это всегда собственный идентификатор модерации платформы. Используйте meta.messageId когда адаптер предоставляет его для синхронизации удаления. |
data.donoValue | число (необязательно) | Числовой эквивалент в долларах США, переданный источником, включая оценки. Допустимое значение, в том числе ноль, имеет приоритет перед пересчётом currency.js. Без него получатели оценивают сумму в долларах по 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-сущности; не декодируйте, не очищайте как 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 в секундах для предыдущей сохранённой активности чата этого пользователя, когда включены определение новых участников и локальная база данных. Для совершенно новых пользователей не передаётся. |
Поддержка платформ
YouTube — стандартный захват DOM
Реализация: sources/youtube.js
- Держите вкладку чата трансляции открытой. Захват читает карточки подписок и подарков, отображаемые в этом сеансе; зрителю не обязательно быть владельцем канала или модератором. Доступ учётной записи и выбранный вид чата могут влиять на видимые строки.
- При открытии оверлея количества зрителей и активности чата с отображением зрителей их количество запрашивается автоматически. Настройки Показывать количество зрителей и Отслеживать активных участников чата также включают сбор данных.
- Для уведомлений о фолловерах и дополнительных событий, включите режим WebSocket в настройках расширения.
| Событие |
Когда срабатывает |
Примечания к данным |
sponsorship |
Приветственный заголовок подписки без явного текста чата (новые участники, поступившие наборы подарков), включая структурированные приветственные карточки или локализованный текст «Добро пожаловать в …». |
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 Chat, Super Sticker, карточки объявлений о пожертвованиях и 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 предоставляет собственный идентификатор сообщения чата трансляции, используемый док-панелью для синхронизации удаления.
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 минут). Примечание: результаты могут задерживаться или быть неполными; определить можно только публично видимые подписки.
- Data API не предоставляет баннеры перенаправления YouTube, поэтому
redirect остаётся доступным только из стандартного захвата DOM.
| Событие |
Когда срабатывает |
Примечания к данным |
superchat |
Записи Super Chat из истории Data API или опроса трансляции. |
hasDonation сохраняет сумму сайта (валюту и значение); event имеет значение superchat. В старых сборках WebSocket использовался event: "donation" для этой строки, поэтому получатели могут продолжать принимать его как устаревшее альтернативное имя. |
supersticker |
Super Sticker (только резервный текст сообщения, без изображения из API). |
hasDonation хранит сумму; chatmessage содержит декодированный текст описания. |
jeweldonation |
YouTube giftEvent сообщения, когда зрители обменивают Jewels на подарки. |
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 включает имя пользователя и отображаемое имя, идентификатор канала, 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.
Как это работает:
- Опрашивает API YouTube каждые 5 минут для получения новых подписчиков
- Отслеживает увиденных подписчиков в localStorage для определения новых
- Отправляет
new_follower события с именем подписчика, аватаром и идентификатором канала
- По умолчанию сообщения уведомлений о подписчиках отключены; при включении используется текущая строка перевода для
alert-just-subscribed
- По умолчанию объединяет серии из более чем трёх новых подписчиков, чтобы переподключения не переполняли оверлеи или Event Flow
- Требуется включить режим WebSocket в настройках расширения
Ограничения (это ограничения API YouTube, а не 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 |
Сценарий |
sponsorship | new_sponsor | Новый участник через newSponsorEvent |
sponsorship | new_member | Новый участник через processMembership |
resub | renewed_member | Продление подписки |
resub | upgraded_member | Повышение уровня |
giftpurchase | gift_giver | Подаренные подписки на канал |
giftredemption | gift_recipient | Получена подарочная подписка |
membermilestone | member_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 Watch Streaks настройка.
- Включаемый по желанию PluralMind настройка может заменять
chatname, nameColor, и часть, обёрнутую прокси, из chatmessage, также может добавляться текстовый значок с местоимениями. username остаётся логином Twitch; связанные удаления содержат delete.meta.pluralmind чтобы док-панель использовала этот стабильный логин.
| Событие |
Когда срабатывает |
Примечания к данным |
reward |
Карточки активации наград за баллы канала (включая контейнер наград 7TV). |
chatmessage содержит текст активации награды; membership без изменений. |
giftpurchase |
Системные строки, например «Пользователь дарит X подписок каналу». |
chatmessage — системная строка, позволяющая оверлеям выделять кампании дарителей. |
subscription_gift |
Уведомления о подаренных подписках («Пользователь подарил подписку …»). |
Помечает событие для фильтров выделения; membership остаётся подписью значка получателя. |
viewer_update |
Запрос к прокси зрителей Social Stream каждые 30 секунд (при ошибке — 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-up, активации наград за баллы канала и метаданные поезда ажиотажа.
- Строки Shared Chat используют Twitch IRC
source-room-id для заполнения sourceName/sourceImg с исходным каналом, когда он отличается от подключённого.
- Уведомления Watch Streak, которыми делятся зрители, по умолчанию отключены и требуют Показывать серии просмотра Twitch Watch Streaks настройка.
- Включаемый по желанию PluralMind настройка может заменять
chatname, nameColor, и часть, обёрнутую прокси, из chatmessage, также может добавляться текстовый значок с местоимениями. username и userid сохраняют идентификацию Twitch; связанные удаления содержат delete.meta.pluralmind чтобы док-панель использовала эти стабильные поля.
| Событие |
Когда срабатывает |
Примечания к данным |
cheer |
Уведомления Cheer из EventSub channel.bits.use. |
hasDonation «N bits»; meta.bits числовой; chatmessage сохраняет исходное сообщение; у распознанных отправителей Cheers есть chatimg. |
powerup |
Уведомления EventSub о встроенных или пользовательских Power-up channel.bits.use. |
Данные только события с пустым chatmessage и без hasDonation, поэтому обычная строка чата не создаётся. meta.bits имеет числовое значение, а meta.powerUp сохраняет подтип Twitch, название или идентификатор награды, сведения об эффекте и переданный текст сообщения при наличии. |
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 включает идентификатор награды, название, стоимость, подсказку, ввод пользователя, идентификатор и статус активации, а также устаревшее имя. Без поля верхнего уровня 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 присутствует для событий онлайн; офлайн использует пустой объект. |
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 включает идентификатор поезда, уровень, прогресс, цель, итог, участников поддержки, временные поля, признак общего поезда и trainType. Поезда сокровищ передаются через meta.trainType когда Twitch их помечает. |
user_banned |
EventSub channel.ban, или IRC CLEARCHAT резервный вариант при недоступности событий блокировки EventSub. |
Событие только с метаданными для виджетов модерации. meta включает имя пользователя и отображаемое имя, идентификатор пользователя, URL аватара или профиля, модератора, причину, длительность блокировки или тайм-аута и признак постоянной блокировки. |
Данные чата используют общий провайдер, поэтому data.event заполняется для `/me` (action) и устаревшее bits теги даже вне потоков EventSub. GIF-сообщения Twitch помещают ресурс Giphy в contentimg, оставьте chatmessage пустым, а резервную подпись Twitch сохраняйте в meta.gifLabel. Устранение дубликатов и удаление используют идентификаторы сообщений; сообщения, отправленные через SSN, используют собственный message_id из IRC-эха Twitch в data.id.
Метаданные Twitch Hype Train
hype_train содержит только метаданные и не включает chatname или chatmessage. Панели должны обновлять существующее представление поезда по meta.id вместо добавления каждого обновления прогресса как сообщения чата. Панель метаданных (meta.html) отображает эти события в виде верхней полосы прогресса.
| Поле |
Введите |
Примечания |
type | строка | Всегда twitch. |
event | строка | Всегда hype_train. |
meta.phase | строка | begin, progress, или end. |
meta.id | строка | Стабильный идентификатор поезда. Используйте для создания или обновления одного видимого виджета поезда. |
meta.broadcasterUserId | строка | Идентификатор пользователя ведущего 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 в долларах США.
- Определяемые типы событий:
follow, subscription, gift, cheer, donation, superchat, raid, redeem, merch, sponsor.
- Для сокет-моста вставьте токен Streamlabs Socket API и подключитесь; уведомления передаются без страницы окна уведомлений.
| Событие |
Когда срабатывает |
Примечания к данным |
donation |
Чаевые, благотворительность, JustGiving или общие уведомления «donated». |
hasDonation сохраняет текст валюты (например, «$36» или «$10 CAD»); donoValue передаётся только при доступном значении в долларах США; другие подписанные суммы используют общий пересчёт валют. |
cheer |
Уведомления о битах / Cheer Twitch. |
hasDonation становится «100 bits», а donoValue захватывает сумму в долларах США. |
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 |
Уведомления о присоединении, когда общая настройка Захватывать события присоединения к трансляции настройка включена. |
Пропускает уведомления о распространении; chatname может быть пустым для некоторых системных строк. |
followed |
Сообщения о новых фолловерах, разобранные из социальных карточек. |
Обеспечивает chatname существует перед отправкой. |
shared |
Строки распространения TikFinity. |
chatmessage — отображённый текст распространения. |
subscribe |
Строки подписок TikFinity. |
membership устанавливается в SUBSCRIBER. |
envelope |
Строки сундуков сокровищ TikFinity. |
meta.coins и meta.canOpen содержат сведения о сундуке. |
liked |
Сводки массовых лайков, запускаемые социальными карточками TikTok. |
chatname включается, когда TikTok его предоставляет; анонимные или системные карточки лайков всё равно могут отправляться. TikTok передаёт это обычным путём через фоновый процесс. Он направляет одну копию в оверлей реакций, затем продолжает основной конвейер чата и событий только когда 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 чтобы оверлеи могли объединять повторные обновления; устаревшие идентификаторы серий уникальны для экземпляра страницы. Метаданные подарка также могут включать tiktokGiftMessageId (исходный идентификатор сообщения TikTok), tiktokGiftSenderId, groupId, giftId, giftName, streakable, и repeatEnd. Собственные идентификаторы обозначают один подарок в разных окнах захвата; ненулевой идентификатор группы вместе с идентификаторами отправителя и подарка обозначает накопительные обновления серии. Захват SSApp через WebSocket передаёт те же поля после завершения серии, с count сохраняется для совместимости. Его переключатель пожертвований проверяется при пересылке каждого подарка: отключение пожертвований TikTok удаляет hasDonation и donoValue с сохранением события и метаданных подарка. Озвучивание использует эти идентификаторы для объединения обновлений и подавления завершённых дубликатов до десяти минут в ограниченном кэше и читает подарки TikTok как отправителя, количество и название подарка. Старые данные используют прежние идентификаторы серий и текст сообщений; идентификация не выводится только из текста подарка. Озвучивание подарков TikTok использует выбранный язык голоса независимо от языка интерфейса. Глаголы объявлений переведены на английский, испанский, португальский, французский, немецкий, итальянский и нидерландский; остальные языки используют отправителя, количество и название подарка без английского глагола. Упрощённое озвучивание сохраняет этот нейтральный формат. Названия подарков остаются такими, как передала платформа; каталоги подарков и сообщения чата автоматически не переводятся, язык трансляции не определяется.
В этих обновлениях серии количество и подпись пожертвования накопительные: 1, 2, 3 означают три подарка, а не шесть. При подсчёте итогов нужно добавлять только прирост сверх наибольшего уже учтённого значения для идентификатора серии. Стандартный захват поддерживает устаревшие классы подарков и текущие строки с изображением и количеством; оба сохраняют event: "gift" и hasDonation. При неизвестной цене сохраняются количество и названия подарков для отображения, а оценка в долларах США использует одну монету за подарок. Переданный источником donoValue имеет приоритет; метаданные отрисованного подарка могут предоставлять coinsPerGift или diamondsPerGift до необходимости обращаться к таблице подарков или значению по умолчанию. Оценки монет Standard/TikFinity и нативных алмазов SSApp используют свои существующие разные пересчёты; ни один не означает гарантированную денежную выплату.
Whatnot
Реализация: sources/whatnot.js
- Откройте страницу живого шоу Whatnot с видимым чатом; существующий захват WebSocket передаёт чат, уведомления аукциона и продаж, ошибки оплаты, рейды, пожертвования и быстрые обновления зрителей. Снимки товаров и розыгрышей по-прежнему зависят от разделов DOM, отрисованных в представлении шоу.
- Capture Stream Events («Захватывать события трансляции») управляет системными событиями Whatnot и обновлениями метаданных аукциона и каталога; строки присоединения также требуют Захватывать события присоединения к трансляции; количество зрителей по-прежнему подчиняется переключателям зрителей и ажиотажа.
| Событие |
Когда срабатывает |
Примечания к данным |
viewer_update |
Изменения количества зрителей из обновлений эфира WebSocket с резервным опросом DOM. |
meta — целое количество зрителей. |
donation |
События чаевых Whatnot WebSocket и взносов в усиление сообщества. |
hasDonation содержит отформатированную сумму; контекст WebSocket остаётся в meta. |
raid |
События рейдов Whatnot WebSocket, включая ответы истории активности. |
meta.numRaiders включается, когда Whatnot его предоставляет. |
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", с покупателем, товаром, идентификатором заказа и другими разрешёнными полями из этого уведомления. Это остаётся отдельным платёжным событием и не создаёт ещё одно 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). Эти ссылки на товары описывают каталог или родительское объявление; они не заменяют идентификатор заказа. Остаток товара не считается приобретённым количеством.
Для автоматизации успешных платежей задайте Тип события (расширенный) триггер в Собственное событие: payment_succeeded, а источник отфильтруйте до Whatnot. Существующие условия и шаблоны могут использовать поля этого события userid, chatname, subtitle и meta.orderId напрямую. Ранее сохранённая покупка не нужна, если уведомление содержит необходимые сведения.
Завершение аукциона или пометка товара как проданного не подтверждает успешную оплату: эти уведомления не отправляются как оплаченные purchase события и не задают суммы пожертвований. Событие успеха отправляется только для полученного payment_succeeded уведомление; захват не опрашивает завершение оплаты и не выводит его из продажи. Другие paymentStatus значения передаются только если явно присутствуют в захваченном пакете. Отсутствующие идентификаторы не передаются; один идентификатор товара может относиться к нескольким продажам, поэтому для сопоставления уведомлений используйте переданный идентификатор заказа или аукциона. Захват не запоминает покупки и не сопоставляет обновления платежей; такой процесс нужно явно настроить в 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 остаётся резервным вариантом, когда сетевые данные недоступны.
- Capture Stream Events («Захватывать события трансляции») управляет снимками метаданных (
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 включает идентификатор награды или активации, название, стоимость, статус, ввод пользователя и получателя награды. |
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 включает имя пользователя и отображаемое имя, идентификатор пользователя, URL аватара или профиля, модератора, причину, длительность блокировки или тайм-аута и признак постоянной блокировки. |
Поиск профилей использует profileCache; mapBadges объединяет ресурсы значков Kick с кэшированным SVG при наличии. Когда Kick сообщает пожертвования в KICKs, мост преобразует их в hasDonation а также meta.amount с currency используют резервное «KICKs». Данные чата включают meta.messageId когда мост предоставляет собственный идентификатор сообщения Kick, чтобы синхронизация удаления затрагивала правильное сообщение. Данные ответов включают meta.reply с родительским messageId, author, и text если известно. Переданные сведения об ответе остаются доступны, даже если исходное сообщение не закэшировано; у ответа только с идентификатором без кэшированного контекста всё ещё может не быть видимой цитаты.
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. Собственные идентификаторы заполняют 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 (идентификатор сообщения, автор, отрывок — денормализованы на сервере). |
Отображаются как ответы Kick: initial хранит подпись «автор: отрывок», 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 о присоединении или присутствии, когда Захватывать события присоединения к трансляции включено. |
Преобразуется в системное событие в формате чата с метаданными автора действия 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 поле, используемое док-панелями с поддержкой цветов.
- Изменения сообщений на сайте заменяют соответствующую строку док-панели; удаления, заглушения и блокировки убирают соответствующие строки по собственному идентификатору или имени пользователя.
- Отдельный источник 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 и 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 содержит количество и единицу токенов для общего пересчёта в доллары США, если доступны; соответствующая строка бота Joystick устраняется как дубликат. meta использует установленные ключи событий поддержки Kick: eventType, supporter, amount, currency, message, giftName, giftType, и tier. |
stream_online / stream_offline |
Joystick StreamEvent типы, например Started, StreamResuming, Ended, StreamEnding. |
Используется для автоматизации переходов в эфир и офлайн с учётом способа передачи. |
user_enter / user_leave |
Joystick UserPresence типы enter_stream / leave_stream. |
Уведомления о присутствии отправляются как сообщения событий и могут скрываться настройками hide-events. Эти настройки также скрывают события трансляции без пожертвований. |
viewer_update |
Источник сайта с выполненным входом получает ViewerCountUpdated через EventLogChannel. |
Использует обычное целое число meta, как у YouTube, Twitch и Kick. Отправляется только при включённом режиме количества зрителей или ажиотажа. Отдельный источник с учётными данными бота по-прежнему не получает количество зрителей. |
follower_update / subscriber_update |
События Joystick с обновлением количества фолловеров и подписчиков. |
Использует обычное целое число meta, в соответствии с контрактом счётчика Twitch. |
| Игнорируемые внутренние уведомления |
ChatMessageReceived, состояние устройства и несопоставленные обновления виджетов, например состояние целей чаевых, PvP или сабатона. |
Это уведомления передачи или состояния страницы, а не события 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 отображает их без обычного класса строки чата и идентификатора сообщения; видимая сумма доступна через
hasDonation как N Sparks.
- При включённом захвате событий строки с «just followed» или «followed the channel» отправляют
event: "new_follower".
- При включённом количестве зрителей постоянная док-панель чата отправляет
event: "viewer_update" из количества зрителей видео, уже загруженного страницей XPSync, и обновляет его по обновлениям страницы эфира XPSync. Отдельные учётные данные SSN не требуются.
Instagram — захват эфира через 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 секунд при включённом количестве зрителей. После трёх последовательных ошибок или при отсутствии 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". События лайков идут обычным путём через фоновый процесс: он отправляет одну копию в отдельный оверлей реакций, затем включает их в основной поток чата и событий только при 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 начал следить за вами»). |
follow_request |
Один private_user_follow_request запись появляется (приватные учётные записи получают запросы вместо прямых подписок). |
Та же структура, что у new_follower, которые остаются раздельными, чтобы автоматизация могла одобрять запросы или приветствовать по-разному. |
liked |
Запись во входящих новостях с типом лайка notif_name (включая comment_like) появляется. |
Общий словарь лайков с TikTok / MeetMe. chatname — автор действия, chatmessage текст входящих (например, «x понравилось ваше фото»). |
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 для идентификатора автора, если доступен, timestamp для допустимого времени создания в миллисекундах Unix и contentimg для изображения-вложения HTTP(S), переданного API. У комментариев только с изображением может быть пустое chatmessage. textonly применяется только к телу сообщения: исходный текст при true, экранированный HTML при false.
- Контекст комментария API использует
meta.messageId (собственный идентификатор комментария), 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 доллар США без задания data.event.
- Для проверки добавьте
ssnreplay=1 к URL Facebook Live для обработки строк чата, уже видимых после обновления.
| Событие |
Когда срабатывает |
Примечания к данным |
viewer_update |
DOM опрашивает значок зрителей эфира; мост API опрашивает одновременные просмотры эфира, если это включено. |
meta целое количество зрителей, как у других источников. Отсутствующие или неразбираемые значения пропускаются; настоящий ноль допустим. |
hasDonation |
Facebook Stars, отображаемые в DOM чата трансляции. |
Стандартные данные чата; hasDonation содержит видимое количество Stars, например 100 Stars, и donoValue содержит сумму в долларах США. 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", имя отправителя, аватар, необязательный идентификатор пользователя, цвет имени, значки, статус модератора, подписку, сумму пожертвования, вложение и идентификацию канала. Стабильные идентификаторы сообщений 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 эффекты остаются явно направленными в оверлей реакций.
- Количество зрителей берётся прежде всего из видимого заголовка 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 строка. Уведомления о присоединении и возвращении требуют Захватывать события присоединения к трансляции. |
Отправляет системные уведомления в формате чата с именем и аватаром автора действия, когда 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 форматируется как алмазы для общего пересчёта в доллары США, а 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 задаётся для чаевых в долларах США. |
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 |
Вызывает у 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 предоставляет несколько; недопустимые идентификаторы теперь вызывают ошибку вместо скрытого перехода к другой трансляции.
- Страница также определяет
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 содержит сумму, отформатированную в долларах США; meta включает amount_cents, amount_dollars, и expiresOn. |
new_follower |
Новые записи появляются в followers.recent_followers. |
Системное событие с chatname задаётся как имя нового фолловера и метка времени в meta.followedOn. |
new_subscriber |
Новые записи появляются в subscribers.recent_subscribers. |
membership устанавливается в SUBSCRIBER; subtitle повторяет задокументированную сумму в долларах США, когда 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 после определения идентификатора трансляции официальным 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. Существующие строки, повторные идентификаторы сообщений, переведённые копии и личные сообщения исключаются. Эмоуты превращаются в безопасные изображения или альтернативный текст в текстовом режиме.
С 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 сохраняют безопасные HTTP(S)-адреса. При textonlymode, изображения превращаются в альтернативный текст или [image] если альтернативного текста нет. Аватары, значки, пожертвования и подписки остаются пустыми, если отсутствуют в захваченной строке.
Держите виртуализированный чат прокрученным к новым сообщениям. Существующая история, повторно отрисованные строки и системные уведомления без автора исключаются. Индексы отрисовки остаются внутренними и не отправляются как собственные идентификаторы сообщений. События фолловеров, пожертвований, количества зрителей или модерации не выводятся предположительно.
Livacha — захват комнаты чата
Реализация: sources/livacha.js. Откройте https://livacha.com/chat/ROOM с видимым чатом либо вставьте URL комнаты в Add other source SSApp.
Новые строки чата отправляют type/platform: "livacha", обычный текст chatname, chatimg, nameColor, и очищенный chatmessage. Относительные URL аватаров и встроенных изображений превращаются в абсолютные HTTP(S)-адреса. Абзацы, переносы строк и списки объединяются в одно сообщение чата. При textonlymode, изображения превращаются в альтернативный текст или [image].
Идентификаторы сообщений используются внутри, чтобы не захватывать повторно изменения и заново добавленные строки. Начальная история и старые сообщения, добавленные сверху, пропускаются; метки времени и меню реакций находятся вне захватываемого текста. События пожертвований, подписок, модерации или количества зрителей не выводятся предположительно.
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 включено. События пожертвований, подписок или модерации не выводятся предположительно.
Экспериментально: при проверке отдельное окно beta оставалось в состоянии загрузки. 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 виртуализирует чат: для захвата держите его прокрученным к новым сообщениям. Тестовые идентификаторы DOM — индексы отрисовки, а не собственные идентификаторы сообщений. Prime пропускает старую историю, подгруженную выше начальных сообщений, и заглушки игнорируемых пользователей.
Ни одно отдельное окно не предоставляет проверенного количества зрителей, поэтому эти адаптеры не отправляют обновления зрителей и не определяют предположительно события пожертвований, подписок или модерации.
Охват и ограничения совместимости
Этот справочник описывает реализованные данные, но не гарантирует доставку каждого события каждой платформой. Пустой hasDonation присваивания в источнике не доказывают поддержку пожертвований. Получаемые данные по-прежнему определяются видимостью DOM, разрешениями учётной записи, переключателями захвата и доступностью API. Передача удалений зависит от источника; не предполагайте универсальную синхронизацию модерации.
Учтённые расхождения и пробелы
| Пара / область |
Обнаруженное расхождение / отсутствие |
Влияние |
| Twitch: стандартный захват и 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: стандартный захват и WebSocket |
Стандартный режим отправляет простые маркеры (gift, reward, логическое значение true, viewer_update). WebSocket добавляет официальные события фолловеров, подписок, подарков, активации наград, KICKs, модерации и состояния эфира. Сохраняется совместимость с устаревшим raid данные, но сейчас Kick не предоставляет официальной подписки на raid/host. |
Режим WebSocket предоставляет больше данных; при переходе следует проверить автоматизацию, основанную на именах событий только стандартного режима. Не требуйте события рейда Kick. |
| YouTube: стандартный захват и 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. Принимайте текущий контракт источника и его соответствующие устаревшие имена, а не переименовывайте каждое совпадающее событие.
| Альтернативное / устаревшее имя |
Каноническая замена |
Контекст |
subscription | new_subscriber | Новая подписка Twitch / Kick |
subgift | subscription_gift | Подаренная подписка Twitch |
membership | sponsorship | Новый участник YouTube (общий вариант) |
new_member | sponsorship | Новый участник YouTube |
new_membership | sponsorship | Новый участник YouTube |
newmember | sponsorship | Новый участник YouTube |
new-membership | sponsorship | Сборщик DOM YouTube (вариант с дефисом) |
upgraded_membership | resub | Повышение уровня YouTube |
upgraded-membership | resub | Сборщик DOM YouTube (вариант с дефисом) |
membership_upgrade | resub | Повышение уровня YouTube |
membership_milestone | membermilestone | Сообщение о достижении YouTube |
member_milestone | membermilestone | Сообщение о достижении YouTube (вариант с подчёркиванием) |
gift_membership | giftpurchase | Набор подарков YouTube |
membership_gift | giftpurchase | Набор подарков YouTube |
giftmemberships | giftpurchase | Набор подарков YouTube (вариант во множественном числе) |
gifted_membership | giftredemption | Получен подарок YouTube |
gifted_memberships | giftpurchase | Набор подарков YouTube (вариант во множественном числе) |
community_gift | giftpurchase | Набор подарков сообществу |
channel_points | reward | Активация награды Twitch WebSocket (устаревшее имя) |
followed | new_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 Chat, доступен в стандартном режиме и WebSocket; WebSocket добавляет другие типы событий. Точная поддержка всё равно зависит от платформы, роли учётной записи и выданных разрешений.
Наверх
Оверлеи монетизации
Чаевые NinjaBacker используют platform: "ninjabacker", type: "ninjabacker", chatname, обычный текст chatmessage, textonly: true, с префиксом источника id, отформатированный hasDonation, и числовой donoValue. Это обычные строки пожертвований без event переопределение. meta.ninjabacker содержит ISO currency и в основных единицах валюты amount. Для анонимных чаевых используется имя Anonymous. Источник использует либо SSE в реальном времени без повтора, либо отдельно включаемый приёмник подписанных вебхуков в API SSN с очередью доставки до семи дней. Надёжная доставка использует стабильный 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 ID никогда не включаются. meta.monetization.ebay содержит enabled, qr, position, display (cycle/cheapest/first), seconds, отдельно включаемые настройки объявлений и публичные товары. У каждого товара есть 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 с переданным или оценённым значением в долларах США. Подарки и взносы сохраняют эти поля. Завершение сбора не включает оба поля, чтобы не учитывать взносы дважды. Обычные продажи товаров по умолчанию их не включают, сохраняя контракт eBay. Не определяйте намерение подарить по магазину, ссылке списка желаний или физическому товару: покупка для покупателя или другого получателя остаётся продажей, если источник явно не указывает подарок автору.
Необязательный общий 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. Триггеры пожертвований по-прежнему проверяют hasDonation; триггеры Gift Sub сохраняют смысл подписки. Compare Property принимает вложенные пути, например meta.commerce.recipient. Шаблоны действий принимают {meta.commerce.quantity} и {meta.commerce.currency}, вместе с существующим {donation}, {subtitle}, и {meta}. Вложенные пути учитывают регистр; отсутствующие значения отображаются пустыми, обход прототипов запрещён.
Вебхуки торговли автора и рекламные оверлеи
Публичные платежи Donation Ko-fi сохраняют hasDonation и получают значение в долларах США donoValue. Оплата подписок использует new_subscriber или resub, с уровнем в membership. Заказы магазина и индивидуальные заказы используют 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 управляют отображением. Существующие режимы провайдеров также принимают параметры вида и расписания. См. руководство по настройке.
События подарков Throne
Включаемая по желанию интеграция Monetization пересылает подписанные события Throne с platform и type со значением throne. Все три используют стабильный идентификатор доставки id, обычный текст chatname, chatmessage с textonly: true, название товара в subtitle, и необязательную HTTPS-миниатюру в contentimg.
| событие | Значение | Сумма пожертвования / ранг |
|---|
gift | Купленный подарок | hasDonation и в долларах США 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 seller, Fourthwall, Ko-fi и Buy Me a Coffee; приватные и тестовые события исключаются. Метаданные аукциона, чаевые, подарки и занятие мест не считаются покупками. Автоматические записи не подставляют общие суммы заказов, цены объявлений или суммы пожертвований вместо цены товара. Ручные записи используют source: "Host confirmed".
Состояние сохраняется в приватном хранилище монетизации этой установки; публичные снимки исключают идентификаторы устранения повторных доставок, личность покупателя и секреты. Явно показанные продажи сохраняют идентификаторы событий для удаления. Возвраты ведущий должен удалять вручную. Повторные идентификаторы покупок запоминаются отдельно (до 2000), в том числе после очистки видимой истории. Существующий 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. Срок действия — пять минут; значение очищается при смене источника, снимке простоя или перезапуске. Помощник предназначен только оператору: он не сохраняется и не попадает в передачи зрителям; данные участника ставки или победителя отбрасываются. Скрипты источников и данные событий аукциона не меняются. Копирование черновика не подтверждает оплату и не создаёт продажу.