直播事件參考

查找源的事件名称、负载字段和捕获要求。有关支持的警报的快速概述,请参阅 事件和提醒相容性.

擷取設定、過濾器和負載約定
重要: 事件是否可用取決於來源、權限和擷取設定。要在停駐面板或精選疊加畫面中隱藏帶事件標記的列,請加入 &hideevents 或 &hideallevents。要隱藏所選事件,請使用 &filterevents=subscription_gift,new_follower,gifted。這些篩選器也可以隱藏帶有以下標記的付費列: event;沒有事件標記的一般贊助列不會被事件篩選器比對到。其他訊息篩選器仍然適用。
選擇擷取方式: 對於 YouTube、Twitch 和 Kick, WebSocket 模式 通常提供更廣泛的事件涵蓋範圍。標準 DOM 擷取讀取頁面上實際繪製的列和卡片。YouTube Super Chats、Super Stickers 和 Jewel 禮物在兩種模式中都有擷取路徑;其他禮物、贊助和會員事件因來源而異。支援的路徑和必要設定請參閱平台表格。
正在建立自動化? 請查看 Event Flow 指南 了解如何在自訂觸發條件、提醒和工作流程中使用這些事件承載資料。該指南包含 範本變數參考 瞭解文字格式。禮物金額、連送計數和可編輯遊戲示例請參閱 製作遊戲與獎勵.
承載資料結構: 贊助樣式的聊天列應使用 hasDonation 和可選的 donoValue。不要設定 event: "donation" 僅僅因為一般聊天/贊助列有金額;僅對真實平台動作或付費商品類型使用具體事件名稱,例如 superchat, supersticker, gift,或 jeweldonation。使用 meta 僅用於使用端確實需要、且現有欄位尚未涵蓋的額外結構化資料。

功能可用性速覽

使用此表查看每種擷取方式目前提供哪些提醒類型。詳細承載資料說明見下文。

專用的 Multi-Stream Alert Box 將直播事件分為六個核心提醒類別: Follow, Subscription/Member, Donation, Bits/Cheers, Raid/Host,以及 Purchase,以及兩個需主動啟用的類別(Auction 和 Hype Train)透過 URL 參數啟用。這些類別根據現有的 event, membership, subtitle, hasDonation,以及 meta 此處記載的欄位;無需單獨的承載資料格式。

來源 新訂閱者 / 會員 新追蹤者 贊助 計數和其他資料
YouTube(Data API 橋接) 會員加入、續訂、贈送 個別訂閱者提醒*及總數 Super Chats & Super Stickers 觀眾、訂閱者和觀看總數(輪詢)
Twitch — DOM 擷取 送禮包列和獲贈通知 - Bits 透過以下欄位標記: hasDonation 觀眾數量、獎勵卡片和社群醒目提示卡片
Twitch — EventSub/Websocket 即時訂閱、續訂和贈送 即時追蹤及追蹤者總數 Cheers、Power-ups 和頻道點數兌換 觀眾/訂閱者/追蹤者總數、直播狀態、廣告通知
TikTok Live - 追蹤卡片(TikTok 顯示時) 禮物轉換為金幣總數 觀眾數量、加入提醒和按讚風暴
YouNow - 粉絲和觀眾活動 - 來自直播觀眾面板的觀眾數量
Favorited Studio - - - 來自直播觀眾分頁的觀眾數量
Whatnot - - - 觀眾數量、加入提醒、直播拍賣中繼資料、商品和贈品抽獎快照
eBay Live - - - 觀眾數量、追蹤者數量、直播事件卡片快照、拍賣頁尾中繼資料(提供時)、愛心回應和即將舉行活動的中繼資料
Streamlabs 提醒框 訂閱、禮物、贊助、追蹤 Cheer/bits、贊助(帶貨幣) Cheer/bits、贊助(hasDonation) 提醒框開啟時;也可透過以下方式使用: sources/websocket/streamlabs.html socket 權杖
OBS Flow Actions - - - 用於 Event Flow 的 OBS 輸出、場景、重播緩衝區和媒體結束事件,在以下情況下: actions.html 已連接至 OBS WebSocket
Kick — DOM - - - 觀眾數量及基本獎勵/禮物系統通知;如需更豐富的提醒,請使用 Kick 橋接
Kick — Websocket/橋接 新訂閱、續訂和贈送 追蹤提醒 + 追蹤者總數 支持/贊助事件(金額 + 貨幣) 直播狀態、獎勵兌換和個人資料中繼資料
Facebook Live - - DOM 中可見時的 Stars 聊天列、Stars 和觀眾數輪詢
Rumble — DOM 擷取 - - 可見的 Rant 價格 聊天、傳入 raid 和觀眾數輪詢
Rumble — Websocket/API URL 新訂閱和贈送訂閱 追蹤提醒 + 追蹤者總數 Rant/贊助(金額 + 貨幣) 觀眾總數、訂閱者總數、直播狀態和聊天動態
Streamplace - - - 觀眾數量及聊天姓名、色彩、徽章、回覆和連結
WorldsWave - - 存在時的贊助標籤 繪製的直播聊天及可選啟用的觀眾數量更新
CHZZK - - 可見的起司贊助列 聊天列、徽章圖片、表情和觀眾數輪詢
BEAM - - - 聊天列;僅聊天頁面提供觀眾計數器時,還包括觀眾數輪詢
Seal Team Sloth - - - 繪製的彈出聊天列及 viewer_update 啟用觀眾數量時進行輪詢
Castyr - - - 繪製的彈出聊天列及可選啟用的觀眾數量更新
RPLAY - - - 已登入 /live/chat/box/ 彈出視窗: type: "rplay" 聊天、頭像、等級徽章影像和表情。金幣贊助在以下欄位中保留金額/單位: hasDonation 用於共用美元換算,不帶贊助事件。可選啟用的 viewer_update 輪詢使用整數 meta 來自 RPLAY 的公開直播端點。排除轉送的 Twitch 列。
FLEX TV - - - 繪製的聊天列,包含姓名、作者色彩、徽章影像和會員中繼資料
Goodgame - - - Chat, viewer counts, and native chat message IDs when available
Pilled --- Chat and viewer counts on dedicated chat and topic pages
Owncast --- Chat and viewer counts from the Owncast server
Picarto --- Chat and viewer counts on the public chat popout
Piczel --- Chat capture and viewer counts on chat and watch pages

*YouTube 訂閱者提醒透過輪詢取得,可能延遲或不完整。API 參考並未承諾固定的四小時交付時段。請參閱 官方訂閱 API 限制.

欄位總覽

data 此處指訊息物件,不是需要加入的額外包裝層。聊天列和僅中繼資料事件具有不同結構:計數器和狀態快照可能省略 chatname/chatmessage。在平台表格中, 訊息 描述一般聊天列,而非字面上的 event: "message".

欄位 結構 用法
data.type 字串 疊加畫面、篩選器和 Event Flow 使用的來源識別碼。Instagram 將直播聊天保留為 instagramlive 以及將非直播留言表示為 instagram。請參閱 來源類型指南 用於變體、通用來源和傳出路由。
data.chatname 字串 Source-provided display name used by message processing and non-overlay outputs. A configured user display-name alias may replace this value only in copied dock and overlay transport payloads. The opt-in Show display name (username) setting appends the username when a source supplies both names and they differ, ignoring capitalization, for example 알렌 (allenhklee). These copies retain the source name in meta.sourceDisplayName for moderation matching. Custom aliases take priority; username remains the account login.
data.username 字串 可用時的來源使用者名稱。套用別名的停駐面板或疊加畫面承載資料可能加入此欄位以保留原始的 chatname 用於使用者動作;標準訊息保持不變。
data.userid 字串 平台專屬的使用者識別碼。使用者操作優先使用此值,而非 username 和 chatname.
data.platform字串(可選)部分整合會將此欄位與以下內容一併包含: type。很多來源介接器會省略它;請使用 type 用於來源路由。
data.id字串 | 數值(可選)訊息或事件識別碼。其意義取決於來源和傳輸方式;不要假定它始終是平台原生的管理 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 淨化或向該本文加入格式標籤。將事件樣式套用至顯示元素。 false 表示 chatmessage 可以包含經過淨化/可繪製的 HTML;不含該旗標的舊訊息保留此 HTML 行為。其他一般欄位為純文字,以下媒體欄位除外: chatimg 和 contentimg。使用以下方式顯示純文字欄位: textContent,或在建立 HTML 範本時跳脫一次;不要刪除或反覆解碼其內容。
data.contentimg 字串(可選) 內容圖片或支援的媒體 URL。在擴充功能和桌面應用程式中,需主動啟用的 allowExternalGifs 設定會使用訊息文字或 HTML 連結中的第一個直接 HTTP(S) GIF 連結填入空白欄位。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 時間戳記(秒)。全新使用者省略此欄位。

Meta 約定

疊加畫面控制傳輸與擷取的聊天/事件分開。更新後的接收端使用 ssnControl 封套,其中包含傳遞 id,展示 target、選用的回覆頻道和快照用戶端 ID。現有功能要求本文保持完整。公開功能控制使用頻道 7;Actions 保留頻道 6。Poll 和 Map 狀態包含主播的 epoch, revision 和 reset 標記;Timer、Ticker 和 Spotify 使用 ssnState 帶有 epoch 和 revision。這些標記描述主持人狀態,並非還原的投票/聊天歷史。來源不得向擷取的訊息加入控制封套欄位。接收確認不代表動作完成或 OBS 可見。請參閱 移轉狀態 了解支援的功能、回覆協商和重新連線限制。

Phrase Guess 使用原生的 {response: text} 請求,用於 server2 聊天回覆,以及 {action: "phraseGuessResponse", value: {type: "bot", chatname: name, chatmessage: text}} 用於僅停駐面板公告。主持人必須啟用傳入的 server3 訊息;停用主持人控制仍會封鎖這些請求。停駐面板公告會作為一般機器人聊天列轉送,帶有 textonly: true,而不會將它們傳送到擷取來源的聊天輸入框。舊版 API 模式保留現有命令格式。

為了保持儀表板和自動化一致,擴充以下內容時請遵循這些約定: data.meta:

  • viewer_update, follower_update, subscriber_update,以及 likes_update 使用純整數 meta 值。 likes_update 是權威的平台總數:使用端必須直接設定顯示值,而不是將其累加。背景指令碼將觀眾數量彙總至 viewer_updates 帶有以下列欄位為鍵的物件: data.type.
  • giveaway_state 是由主持人產生、用於受管理顯示的僅中繼資料快照。 meta.giveaway 第 2 版包含 giveawayId,持久的 roundId/epoch,遞增的 generation 跨新回合, revision 在一個回合內, status, open, draw, keyword, count, ticketCount,凍結的 config,最多 120 個預覽 entrants,以及最近的 20 則 winners。項目公開 id, name, platform 和 tickets;獲勝者新增 drawnAt 以及授予的 points。Coin Flip Pot 新增 outcome;Number Hunt 新增 number 帶有公開的 low, high 和最近的 guesses,絕不包含金鑰。使用端按抽獎 ID 篩選並捨棄較舊的 generation/revision。這些是顯示樣本,不是完整票券帳本或付款指令。錢包金鑰、餘額和保留資訊不會出現在面向觀眾的快照中。主播發佈到 giveaway P2P 標籤和已啟用的疊加畫面 WebSocket 資料流;這並不表示 OBS 可見。 指南.
  • meta.giveawayControlResult 包含 Event Flow 贈品抽獎動作的結果(ok,選用的 error, giveaway 或 simulated). meta.giveawayHandled 列出已由參加/購買流程動作處理的贈品抽獎 ID,以免自動聊天命令再次扣款。編輯器加入 meta.economyTest 用於模擬贈品抽獎動作;它不是來源平台事件,也不是授權憑證。
  • video_stats 使用結構化的 meta 物件,用於外部編碼器/伺服器健康狀態,包括 provider, label, online, bitrateKbps, rttMs, bufferMs、封包遺失/捨棄計數器,以及選用的編解碼器詳情。
  • 贊助樣式的事件可包含描述性物件,例如 { amount, currency, supporter } 用於 Kick, { bits } 用於 Twitch cheer。會員事件有自己的來源專屬中繼資料;它們不會自動算作貨幣贊助。
  • 標準化的 Stripe、Ko-fi、Buy Me a Coffee 和 Fourthwall webhook 訊息包含以提供者為範圍的 meta.webhookId,從提供者的穩定事件識別碼複製,以便下游頁面抑制重試和混合傳輸造成的重複事件。
  • Twitch 突襲傳遞 { fromId, fromLogin, viewers }。其他來源不同:Whatnot 使用 meta.numRaiders,SharePlay 則使用選用的 meta.fromLogin/meta.viewers。讀取 raid 中繼資料前請檢查特定來源對應的列。
  • Twitch EventSub 獎勵兌換提供 meta.rewardId, cost, rewardTitle, redemptionId,以及舊版的 alias 與準備好的訊息一併提供。DOM 獎勵卡片和其他來源可能提供更少或不同的欄位。
  • user_banned 僅含中繼資料,供管理元件使用。它刻意省略 chatname 和 chatmessage;使用 meta.username, meta.displayName, meta.avatarUrl,以及 meta.profileUrl.
  • 支援來源控制刪除同步的聊天傳輸,應將平台原生聊天識別碼公開為 meta.messageId 而不是依賴停駐面板內部的 data-mid 值。
  • 來源刪除使用 {delete: {type, id}} 用於已知的停駐面板訊息 ID,或 {delete: {type, meta: {messageId}}} 用於原生平台訊息 ID。已知 ID 只移除相符的訊息。僅知道目標使用者時,傳送 {delete: {type, userid}} 或 {delete: {type, chatname}} 以從該平台移除該使用者的訊息。絕不以管理員身分取代目標使用者。傳入的刪除不需要啟用可選的停駐面板到平台管理同步設定。
  • SSApp 來源身分中繼資料可能加入 meta.ssnAccountRole, meta.ssnSourceId,以及 meta.ssnSession 當來源被指派非一般帳號角色時。
  • Event Flow 可透過設定以下欄位要求醒目顯示: meta.featured = true 位於聊天承載資料上,會在停駐面板/featured 疊加畫面中自動精選該訊息。
  • AI Event Overlay: 動作 showAiEventOverlay 將觸發該動作的訊息副本傳送至標籤 aievent-CONFIGURATION_ID,並新增 meta.aiEventOverlay: {profile: "CONFIGURATION_ID"}。現有訊息欄位和物件形式的中繼資料保持不變;純量中繼資料保留為 meta.value。這是定向傳遞,不是新的平台事件。原始訊息不會被修改。請參閱 設定指南.
  • 選用 meta.aiEventOverlay.variation 選取已儲存疊加層設定中核准的完全相符詞句。觀眾文字與中繼資料會在生成完成後填入範本欄位。
  • AI Event Overlay 顯示請求需要設定檔及其私有顯示權杖。設定與 API 金鑰只能透過本機 SSN 彈出視窗管理。回應使用 {aiEventResponse: {target, value}} 或 {aiEventResponse: {target, error}}. 生成結果包含 template, duration, warnings, 選用的媒體資料 URL 位於 image/audio.
  • 使用點數支付的 AI 覆蓋層獎勵透過 aiEventPresentation (id, profile, expiresAt, result, message) 傳送,並透過 aiEventDelivered(傳送 ID)確認接收。點數扣款紀錄和退款金額保留在主機端。
  • Event Flow 可透過設定以下欄位要求在停駐面板中釘選: meta.pinned = true;選用的 meta.pinnedTarget 將該置頂限制到具有相符以下值的停駐面板: label.
  • Event Flow 熱感列印將結果記錄在 meta.thermalPrintResult (success 和可選的 code/error),保留聊天事件和其他中繼資料。對於具有數字或其他非物件中繼資料的事件,診斷資訊保留在動作結果中,事件保持不變。
  • 可選啟用的 SSN 貼圖獎勵: event: "sticker" 僅傳送至 stickers 疊加畫面標籤,在忠誠度點數扣除後使用。它設定 platform 和 type 指向原始訊息的 type,並保留 chatname,並且為空的 chatmessage, textonly: true,以及 contentimg 包含已封裝的相對影像路徑或主持人核准的 HTTPS 媒體 URL。 meta.sticker 包含 id, pack, name, cost, duration (秒), motion, redemptionId,以及 expiresAt (Unix 毫秒)。這是 SSN 獎勵,並非平台贊助或原生頻道點數事件。請參閱 圖庫和設定指南.
  • 貼圖播放器傳回控制封包 {action: "stickerReceipt", meta: {sticker: {redemptionId, success}}} 在影像載入成功或失敗時傳送給傳送端。僅接受來自已連接的 stickers 對等端解決待處理的兌換。傳遞失敗或未確認會觸發退款;此控制封包不是聊天事件。建議每個工作階段僅保留一個作用中的貼圖顯示。
  • AI 舞台疊加畫面命令使用 { action: "aiOverlay", target, meta } 或由停駐面板控制的共同主持人播放使用 { action: "cohostOverlay", target, meta };保留所有命令詳情,例如 command, text, emotion, avatar,以及 tts 內部 meta.
  • 如果平台同時提供多個計數器,應優先使用具有明確鍵的結構化物件(meta.viewer_count, meta.follower_count),而不是讓字串承擔多種含義。
  • 商業疊加畫面應使用位於以下位置的快照物件: meta (例如 auction_update 和 commerce_update),並避免臨時新增頂層欄位。

平台涵蓋範圍

YouTube — 標準 DOM 擷取

實作: sources/youtube.js

  • 保持直播聊天分頁開啟。擷取功能讀取該工作階段中繪製的會員和禮物卡片;不要求觀看者是頻道擁有者或管理員。帳號存取權限和所選聊天檢視可能影響哪些列可見。
  • 開啟觀眾人數與聊天活動疊加層並顯示觀眾人數時,系統會自動請求觀眾人數。設定項目 顯示觀眾數量 和 追蹤活躍聊天使用者 也會啟用資料收集。
  • 用於追蹤者提醒和其他事件,在擴充功能設定中啟用 WebSocket 模式。
事件 觸發時機 承載資料說明
sponsorship 不含明確聊天文字的會員歡迎標題(新會員、贈送套組到帳),包括結構化歡迎卡片或在地化的「Welcome to …」文字。 membership 填入翻譯後的「MEMBERSHIP」; subtitle 偵測到時包含連續紀錄/等級; nameColor 允許時使用會員綠色。
giftpurchase 送禮包購買橫幅(ytd-sponsorships-live-chat-gift-purchase). membership 變為 gift_giver; subtitle 已知時帶有禮物數量;沒有 hasDonation 或 donoValue.
giftredemption 面向接收者的禮物兌換公告。 membership 變為「MEMBERSHIP」; subtitle 包含「Gifted by …」。
resub 包含「upgraded to …」的升級橫幅。 subtitle 擷取新等級標籤; membership 仍為「MEMBERSHIP」。
membermilestone 包含聊天文字的會員里程碑卡片,適用於尚未辨識出其他事件類型的情況。 chatmessage 包含會員的訊息; membership 包含會員標籤,而 subtitle 在偵測到時包含會員時長。這表示會員里程碑訊息,而非新購或贈送會員。
superchat, supersticker, jeweldonation Super Chats、Super Stickers、贊助公告卡片,以及由 Jewels 提供的 YouTube Gifts(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 每 30 秒輪詢 Social Stream 的觀眾數端點(發生配額錯誤時退回頁面擷取)。 meta 是即時觀眾整數;計入彙總的 viewer_updates 在背景指令碼中。

會員區塊還會設定 membership 用於管理員/會員聊天,而 subtitle 帶有月數或等級名稱。 sourceName/sourceImg 在以下條件成立後填入: getChannelInfo 成功。標準 DOM 聊天現在包含 meta.messageId 當 YouTube 提供原生直播聊天訊息 ID 時,停駐面板使用它進行刪除同步。

YouTube — Websocket/Data API 擷取

實作: sources/websocket/youtube.html,共用輔助工具位於 shared/

  • 預設使用 OAuth 權限範圍 youtube.readonly 和 youtube.channel-memberships.creator。選用寫入權限新增 youtube.force-ssl 用於傳送聊天、管理、封鎖和編輯直播詳細資訊;由於 YouTube 不提供僅限聊天的寫入權限範圍,Google 可能將其顯示為廣泛的 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 來自 Data API 累積記錄或直播輪詢的 Super Chat 項目。 hasDonation 保留網站金額(貨幣 + 值); event 為 superchat。較舊的 WebSocket 版本使用 event: "donation" 用於此列,因此使用端可以繼續接受它作為舊版別名。
supersticker Super Stickers(僅有訊息文字備援內容,API 不提供影像)。 hasDonation 儲存金額; chatmessage 包含解碼後的描述文字。
jeweldonation YouTube giftEvent 訊息,當觀眾將 Jewels 兌換為 Gifts 時。 hasDonation 儲存 N Jewels,或 1 YouTube Gift 當 YouTube 隱藏數量時; contentimg 提供時使用禮物資源 URL; subtitle 帶有禮物標籤; meta.youtubeGift 帶有額外的禮物詳細資訊。
sponsorship 新會員透過以下方式加入: newSponsorEvent. membership 變為 new_sponsor 或 new_member; meta 包含 originalEventType、時長和等級資訊。
resub 會員續訂或等級升級。 membership 變為 renewed_member (續訂)或 upgraded_member (升級); subtitle 顯示等級。
giftpurchase 透過 API 購買的送禮包。 membership 設為 gift_giver; subtitle 列出數量/等級;沒有 hasDonation 或 donoValue.
giftredemption 禮物兌換通知。 membership gift_recipient;徽章預設為 🎁; subtitle 表示贈送的等級。
membermilestone 里程碑聊天(memberMonth 或 displayMessage 存在)。 membership member_milestone; subtitle 彙總月數和等級; meta 擷取原始里程碑對應。
viewer_update 啟用觀眾回報時的直播統計資訊(同時在線觀眾)。 meta 是整數計數;與 DOM 指令碼保持一致,以便下游使用端可以合併兩條資料流。使用以下設定的停駐面板: &showviewercount 請求收集觀眾數量 70 分鐘,並每小時續期,不會永久變更全域設定。
likes_update 在以下情況下輪詢官方影片統計資訊: 傳送平台按讚總數 已啟用。 meta 是目前影片按讚數整數。它在計數變化時發出,並在不變時定期發出,讓使用端保持更新。全域的 captureliketotals 設定啟用此功能;舊版 captureyoutubelikes 仍作為相容別名。啟用彈出視窗中每個停駐面板的 &showlikecount 選項還會持續啟用這些全域擷取設定,而手動加入 URL 參數僅控制繪製。關閉顯示選項不會停用全域收集。
subscriber_update 在以下情況下輪詢頻道統計(訂閱者): showsubscount 未明確停用。 meta 是訂閱者總數;介面會更新儀表板計數器。
view_update 在以下情況下輪詢頻道統計(累計觀看次數): showviewercount 或 hype 模式處於作用中。 meta 是觀看次數整數。
live_chat_ended 繫結直播的即時聊天變得不可用。 meta.streamTitle 已快取直播中繼資料時填入。
user_banned userBannedEvent 來自直播聊天 API 或 gRPC 串流。 用於管理元件的僅中繼資料事件。 meta 包含使用者名稱/顯示名稱、頻道 ID、頭像/個人資料 URL、管理員、封鎖/暫時禁言期間和是否永久。
new_follower 透過以下方式偵測到的新訂閱者: myRecentSubscribers API(每 5 分鐘輪詢)。 chatname 是訂閱者的頻道名稱; chatmessage 為空,除非在 YouTube 來源頁面中啟用了訂閱者提醒訊息。 meta 包含 channelId, title, subscribedAt,分組爆發會新增 grouped, count, others,以及 subscribers。注意:結果可能延遲或不完整;只能辨識公開可見的訂閱。

來自 API 的聊天轉送使用 meta.plainText 用於純文字訊息,與豐富文字 chatmessage 內容。它是文字而非 HTML,仍可包含 Unicode 表情。會員徽章改用表情作為備援(⭐, 💝, 🏅等),以與 DOM 擷取保持一致。一般聊天承載資料還包括 meta.messageId 讓停駐面板端的刪除動作可以往返傳回 YouTube 管理 API。

YouTube 訂閱者提醒(new_follower)

Social Stream 現在可以使用以下方式偵測新的 YouTube 訂閱者: myRecentSubscribers API 端點。其運作方式類似於 Streamlabs 訂閱者提醒。

運作方式:

  • 每 5 分鐘輪詢一次 YouTube API,以取得最近的訂閱者
  • 在 localStorage 中追蹤已見過的訂閱者,以偵測新的訂閱者
  • 發出 new_follower 事件,帶有訂閱者的姓名、頭像和頻道 ID
  • 預設停用訂閱者提醒訊息;啟用時會使用以下內容的目前翻譯字串: alert-just-subscribed
  • 預設將超過三個新訂閱者的集中到達事件分組,避免重新連線時大量淹沒疊加畫面或 Event Flow
  • 需要在擴充功能設定中啟用 WebSocket 模式

限制(這些是 YouTube API 的限制,而非 Social Stream 的限制):

  • 不保證傳遞延遲 — SSN 每五分鐘輪詢一次,但 API 傳回的結果可能有延遲或不完整。不要依賴固定的四小時時段。
  • 僅限公開訂閱 — 將訂閱清單設為不公開的訂閱者不會觸發提醒。YouTube 上的訂閱預設是不公開的。
  • 僅頻道擁有者 — 您只能接收自己擁有且已完成驗證的頻道的訂閱者提醒。
  • API 配額使用情況 — 每次輪詢消耗 1 個 API 單位。以 5 分鐘為間隔,每天約使用 288 個單位(預設每日配額為 10,000)。

Event Flow 編輯器觸發條件: 使用 data.event === "new_follower" 和 data.type === "youtube"

YouTube Websocket:事件和會員速查

data.event data.membership 情境
sponsorshipnew_sponsor透過以下方式加入的新會員: newSponsorEvent
sponsorshipnew_member透過以下方式加入的新會員: processMembership
resubrenewed_member會員續訂
resubupgraded_member等級升級
giftpurchasegift_giver贈送給頻道的會員
giftredemptiongift_recipient收到贈送的會員資格
membermilestonemember_milestone會員週年聊天
superchat-Super Chat
supersticker-Super Sticker
user_banned-僅含中繼資料的封鎖/暫時禁言事件
new_follower-新訂閱者(輪詢;可能有延遲)

Twitch — 標準 DOM 擷取

實作: sources/twitch.js

  • 保持 Twitch 聊天開啟。Twitch 繪製會員和使用者通知時就會擷取這些內容;不限於實況主或管理員帳號。帳號專屬功能可能需要驗證。
  • 觀眾數量請求存取 https://api.socialstream.ninja/twitch/viewers 每 30 秒一次。
  • 用於追蹤者提醒、raid 和完整事件支援,在擴充功能設定中啟用 WebSocket 模式。
  • 觀眾分享的連續觀看通知預設停用,需要 顯示 Twitch 連續觀看紀錄 設定。
  • 可選啟用的 PluralMind 設定可能取代 chatname, nameColor,以及經 Proxy 包裝的部分 chatmessage,並可能新增代名詞文字徽章。 username 仍為 Twitch 登入名稱;相關刪除帶有 delete.meta.pluralmind 讓停駐面板使用該穩定登入名稱。
事件 觸發時機 承載資料說明
reward 頻道點數兌換卡片(包括 7TV 獎勵容器)。 chatmessage 包含兌換文字; membership 保持不變。
giftpurchase 系統列,例如「User gifting X Subs in the channel」。 chatmessage 是系統列,讓疊加畫面可以醒目顯示贈送活動。
subscription_gift 贈送訂閱通知(「使用者向……贈送了一份訂閱」)。 標記事件以供醒目提示篩選器使用; membership 仍為接收者徽章標籤。
viewer_update 每 30 秒向 Social Stream 觀眾數 Proxy 取得一次(出錯時退回為 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 可選啟用、由觀眾分享並在 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 模式提供即時的 追蹤者提醒、訂閱事件、突襲、cheer、Power-ups、頻道點數兌換和 hype train 中繼資料。
  • 共用聊天列使用 Twitch IRC source-room-id 以填入 sourceName/sourceImg 當原始頻道與連接頻道不同時,帶有原始頻道。
  • 觀眾分享的連續觀看通知預設停用,需要 顯示 Twitch 連續觀看紀錄 設定。
  • 可選啟用的 PluralMind 設定可能取代 chatname, nameColor,以及經 Proxy 包裝的部分 chatmessage,並可能新增代名詞文字徽章。 username 和 userid 保留 Twitch 身分;相關刪除帶有 delete.meta.pluralmind 讓停駐面板使用這些穩定欄位。
事件 觸發時機 承載資料說明
cheer ?? IRC ? EventSub ????? channel.bits.use. hasDonation 「N bits」; meta.bits 數值型; chatmessage 保留原始訊息;已識別的 cheer 傳送者包含 chatimg.
powerup 來自 EventSub 的內建或自訂 Power-up 通知 channel.bits.use. 僅含事件的承載資料,其中以下欄位為空: chatmessage 且沒有 hasDonation,因此不會建立一般聊天列。 meta.bits 為數值型,並且 meta.powerUp 保留 Twitch 子類型、標題/獎勵 ID、效果詳細資訊,以及可用時提供的訊息文字。
new_subscriber channel.subscribe 或帶有以下內容的 USERNOTICE: msg-id=sub. meta 包含 { userId, tier, isGift };快取的訂閱者總數在可用時遞增;觀眾總數獨立輪詢。
resub channel.subscription.message 或 USERNOTICE msg-id=resub. meta 帶有連續和累計月數; chatmessage 包含重新訂閱文字。
subscription_gift channel.subscription.gift 或 USERNOTICE msg-id=subgift. meta 提供贈送總數和等級; chatmessage 概述該動作。
reward channel.channel_points_custom_reward_redemption.add. meta 包含獎勵 ID、標題、費用、提示、使用者輸入、兌換 ID/狀態和舊版別名。沒有頂層 reward 物件由此 EventSub 處理常式發出。舊版使用端可能仍顯示 channel_points 作為已棄用的別名。
raid EventSub channel.raid 或 USERNOTICE msg-id=raid. meta = { fromId, fromLogin, viewers }.
watch_streak 可選啟用的 Twitch IRC USERNOTICE,帶有 msg-id=viewermilestone 和 msg-param-category=watch-streak. 在以下欄位中包含觀眾: chatname,Twitch 的通知文字位於 chatmessage,以及 meta.streakCount/meta.milestoneId。其他一般 USERNOTICE 類型仍被忽略。
new_follower channel.follow EventSub 通知。 自動遞增 follower_update; meta 記錄 { userId, followedAt }.
viewer_update Helix streams 每 30 秒輪詢一次。 meta 整數型觀眾數量;除非在設定中啟用觀眾統計,否則抑制。
follower_update Helix 追蹤者總數,在追蹤事件後或定期輪詢時觸發。 meta 整數型追蹤者數量。
subscriber_update Helix 訂閱者總數(需要帶有訂閱權限範圍的主播權杖)。 meta 整數型訂閱者數量。
stream_online / stream_offline EventSub stream.online/stream.offline. meta.startedAt 在上線事件中存在;離線使用空物件。
ad_break / ad_request / ad_schedule 廣告管理 API 回應(channel.ad_break.begin,手動的 POST channels/ads, GET channels/ads). meta 詳細提供期間、請求者和排程承載資料,以供儀表板使用。
hype_train EventSub channel.hype_train.begin, channel.hype_train.progress,以及 channel.hype_train.end v2 通知。 僅含中繼資料的事件:沒有 chatname 或 chatmessage. meta.phase 為 begin, progress,或 end; meta 包含列車 ID、等級、進度、目標、總值、貢獻者、時間欄位、共用列車旗標和 trainType。寶藏列車透過以下欄位顯示: meta.trainType 當 Twitch 為它們加入標籤時。
user_banned EventSub channel.ban,或 IRC CLEARCHAT 當 EventSub 封鎖事件無法使用時的備援方式。 用於管理元件的僅中繼資料事件。 meta 包含使用者名稱/顯示名稱、使用者 ID、頭像/個人資料 URL、管理員、原因、封鎖/暫時禁言期間和是否永久。

聊天承載資料重用共用提供程式,因此 data.event 針對 `/me` 填入(action)以及舊版 bits 標籤,即使在 EventSub 流程之外也如此。Twitch GIF 訊息將 Giphy 資源放在 contentimg,保留 chatmessage 為空,並在以下欄位中保留 Twitch 的備援標籤: meta.gifLabel。去除重複與刪除邏輯使用訊息 ID;透過 SSN 傳送的訊息使用原生 message_id 來自 Twitch 的 IRC 回傳,位於 data.id.

Twitch Hype Train 中繼資料

hype_train 僅含中繼資料,不包含 chatname 或 chatmessage。儀表板應透過以下欄位更新現有列車顯示: meta.id 而不是將每次進度更新作為聊天附加。Meta Data Bar(meta.html)將這些事件顯示為頂端進度列。

欄位 輸入 說明
type字串一律 twitch.
event字串一律 hype_train.
meta.phase字串begin, progress,或 end.
meta.id字串穩定的列車 ID。用它來插入或更新一個可見的列車元件。
meta.broadcasterUserId字串Twitch 實況主使用者 ID。
meta.broadcasterUserLogin字串Twitch 實況主登入名稱。
meta.broadcasterUserName字串Twitch 實況主顯示名稱。
meta.total數值 | nullTwitch 為列車回報的支持總值。
meta.progress數值 | null朝目前等級目標推進的進度。
meta.goal數值 | null目前等級目標。
meta.progressPercent數值 | nullTwitch 僅提供可見彈出視窗進度列時使用的 DOM 替代百分比。
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布林值當 Twitch 將列車標記為共用時為 true。
meta.trainType字串通常 regular;Twitch 對寶藏列車進行標記時,會在這裡顯示。
meta.allTimeHighLevel數值 | nullTwitch 提供時,表示列車歷史最高等級。
meta.allTimeHighTotal數值 | nullTwitch 提供時,表示列車歷史最高總量。
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使用 Bits 歡呼
powerup使用了內建或自訂 Power-up
reward頻道點數兌換
raid收到的突襲
viewer_update同時在線觀眾數
follower_update追蹤者總數
subscriber_update訂閱者總數
stream_online直播已開始
stream_offline直播結束
ad_break廣告插播開始
hype_trainHype Train/Treasure Train 狀態中繼資料
user_banned使用者遭封鎖或暫時禁言

OBS Flow Actions

實作: actions.html 透過 OBS WebSocket v5 事件,帶有 dock.html 將 OBS 瀏覽器來源事件作為備援方式

  • 保持 Flow Actions 疊加畫面開啟,並使用與 Event Flow 編輯器/背景相同的 Social Stream 工作階段,或讓停駐面板在 OBS 內保持載入。
  • 在 OBS 28+ 上設定 OBS WebSocket v5;預設 URL 為 ws://127.0.0.1:4455.
  • 這些是 Event Flow 系統事件。它們不包含 chatname 或 chatmessage,其他 OBS 詳情保留在 meta.
事件 觸發時機 承載資料說明
stream_started OBS 回報直播輸出已達到啟動狀態。 type 為 obs; event 為 stream_started; meta.source 為 obs-websocket 或 obs-browser-source; meta.outputState 可能帶有原始 OBS 輸出狀態。
stream_stopped OBS 回報直播輸出已達到停止狀態。 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);選用的 socket 橋接位於 sources/websocket/streamlabs.html

  • 讓 Streamlabs 提醒框在分頁或瀏覽器來源中保持開啟,以便繪製提醒;內容指令碼會讀取提醒 DOM 中的訊息、影像和權杖。
  • 贊助樣式的提醒設定 hasDonation (例如「$10 USD」或「100 bits」)以及選用的 donoValue 以美元計。
  • 推斷的事件類型: follow, subscription, gift, cheer, donation, superchat, raid, redeem, merch, sponsor.
  • 對於 socket 橋接,貼上 Streamlabs Socket API 權杖並連線;無需提醒框頁面即可轉送提醒。
事件 觸發時機 承載資料說明
donation 贊助、慈善、JustGiving 或通用的「donated」提醒。 hasDonation 保留貨幣文字(例如「$36」或「$10 CAD」); donoValue 僅在美元值可用時提供;其他帶標籤的金額使用共用貨幣換算。
cheer Twitch bit/cheer 提醒。 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 來自 YouTube 或支援的提醒整合的 Super Chat 樣式提醒。 hasDonation 帶有金額;使用端可以繼續接受舊版的 donation 別名。
sponsor 由 Streamlabs 顯示的贊助者/會員樣式提醒。 標準欄位;除非文字包含金額,否則不含贊助。

TikTok Live — DOM 擷取和 TikFinity 資料流

實作: sources/tiktok.js 用於原生 TikTok 頁面,以及 sources/tikfinity.js TikFinity 的活動提要小工具/iframe。 SSApp 仍然具有本機 TikTok 整合和最廣泛的事件覆蓋範圍(請參閱 SSApp 文件)。標準聊天包括 meta.messageId 當頁面公開本機訊息 ID 時;具有相同文字的不同訊息保留不同的 ID。

  • 在實況主的直播頁面上運作。禮物/按讚/追蹤橫幅僅在工作階段經過驗證時填入。
  • TikTok 透過 DOM 偵測提供多種事件 無需 WebSocket 模式 — 禮物、追蹤、按讚和可選啟用的加入通知從繪製的列中擷取。
  • TikFinity 元件頁面位於 tikfinity.zerody.one/widget/activity-feed* 也適用。內嵌的活動動態 iframe 為聊天、追蹤、分享、禮物、訂閱、可選啟用的加入通知和寶箱發出相同的標準 TikTok 承載資料欄位。
  • 無需額外的 API 驗證。
  • SSApp 原生模式 仍會在頁面/元件擷取路徑之外新增事件: question_new, emote, viewer_update,以及需主動啟用的彙總 likes_update.
事件 觸發時機 承載資料說明
gift 禮物橫幅列或 DivGiftMessage 項目。 hasDonation 轉換為「N coins」(以禮物查詢作為備援方式); membership 可用時使用徽章文字。
joined 全域設定啟用時的加入通知: 擷取「joined」直播事件 設定已啟用。 略過分享通知; chatname 對於某些系統字串可能為空。
followed 從社交卡片解析的追蹤訊息。 確保 chatname 在發出之前存在。
shared TikFinity 分享列。 chatmessage 是繪製的分享文字。
subscribe TikFinity 訂閱列。 membership 設為 SUBSCRIBER.
envelope TikFinity 寶箱列。 meta.coins 和 meta.canOpen 帶有寶箱詳細資訊。
liked 由 TikTok 社交卡片觸發的按讚風暴摘要。 chatname TikTok 提供時會包含;匿名/系統按讚卡片仍可能發出。TikTok 透過一般背景路徑傳送此內容。背景將一份副本路由至 Reactions Overlay,然後僅在以下條件成立時繼續進入主聊天/事件處理管線: capturelikeevent 已啟用。
likes_update SSApp 收到權威的 TikTok LIVE 累計總數,而 captureliketotals 已啟用。 meta 是目前總數整數。SSApp 立即傳送第一個值,將突發更新合併為最多每五秒一次,約每 90 秒重複最新值,並在直播結束時傳送零。這與特定觀眾的以下內容分開: liked 事件。
true (布林值) TikTok 未提供子類型的一般社群/系統廣播。 使用 chatmessage 內容來決定展示方式;布林值 true 表示「系統事件 — 類型未知」。

membership 對應徽章工具提示(訂閱者等級)。頭像快取使 chatimg 在事件之間保持有效;如果 DOM 隱藏管理員色彩,指令碼會清除 nameColor. TikFinity 活動源捕獲支援舊版碼頭和新碼頭 widgets.tikfinity.com 瀏覽器來源 URL。新 stream_event 訊息被轉換為此處描述的相同聊天、禮物、關注、分享、訂閱、加入和信封有效負載。 TikFinity 禮品行也設定了 當來源提供時, contentimg 到禮物圖示(如果有)。對於帶有明顯條紋的禮物 repeatEnd 標誌,TikFinity 僅發送已完成的連勝及其最終數量;不轉發中間計數更新。非條紋禮物和沒有該標誌的舊有效負載將立即繼續。原生 DOM 禮物連續更新和 TikFinity 禮物行包括 meta.tiktokGiftStreakId, meta.tiktokGiftCount,以及 meta.tiktokGiftQuietMs 讓疊加畫面可以合併重複更新;舊版連續紀錄 ID 對每個頁面實例唯一。禮物中繼資料還可能包含 tiktokGiftMessageId (原始 TikTok 訊息 ID), tiktokGiftSenderId, groupId, giftId, giftName, streakable,以及 repeatEnd。原生 ID 用於辨識不同擷取視窗中的同一禮物;非零群組 ID 配合傳送者和禮物 ID,用於辨識累計連送更新。SSApp WebSocket 擷取在連送結算後提供相同欄位,並帶有 count 為相容性而保留。轉送每個禮物時都會檢查其贊助開關:停用 TikTok 贊助會移除 hasDonation 和 donoValue 同時保留禮物事件和中繼資料。TTS 使用這些身分合併更新,並在最長十分鐘內抑制已完成的重複項目(有界快取),依傳送者、數量和禮物名稱朗讀 TikTok 禮物。舊版承載資料改用現有連送 ID 和訊息文字作為備援;不會僅從禮物文字推斷身分。TikTok 禮物語音使用所選的 TTS/語音語言,獨立於介面語言。播報動詞已針對英語、西班牙語、葡萄牙語、法語、德語、義大利語和荷蘭語在地化;其他語言使用傳送者、數量和禮物名稱,不帶英語動詞。簡化 TTS 保留這種中性格式。禮物名稱保持平台提供的原樣;這不會自動翻譯禮物目錄或聊天訊息,也不會推斷直播語言。

對於這些連送更新,計數和贊助標籤是累計值:1、2、3 表示三件禮物,而不是六件。總數使用端應只增加超過該連送 ID 已見最大值的部分。Standard 擷取支援舊版禮物類別和目前的圖片/計數列;兩者都保留 event: "gift" 和 hasDonation。價格未知時保留禮物數量/名稱用於顯示,並以每件禮物一枚金幣估算美元值。來源提供的 donoValue 優先;繪製的禮物中繼資料可能提供 coinsPerGift 或 diamondsPerGift 然後才需要使用禮物表或預設值。標準模式/TikFinity 的金幣估算與 SSApp 原生的鑽石估算使用各自現有的不同換算方式;兩者都不代表有保證的現金收益。

Whatnot

實作: sources/whatnot.js

  • Use the Whatnot source in SSApp for public chat and auction events without video, or open the live show page for website capture. Both connect to the public auction feed. Website capture also reads rendered auction and catalog sections.
  • 擷取直播事件 控制 Whatnot 系統事件和拍賣/目錄中繼資料更新;加入列還需要 擷取「joined」直播事件;觀眾計數仍遵循觀眾/Hype 開關。
事件 觸發時機 承載資料說明
viewer_update 來自 websocket 直播更新的觀眾數量變化,以 DOM 輪詢作為備援方式。 meta 是整數型觀眾數量。
donation Whatnot websocket 贊助和社群 boost 貢獻事件。 hasDonation 包含格式化的金額;websocket 專屬脈絡保留在 meta.
raid Whatnot websocket 突襲事件,包括累積活動回覆。 meta.numRaiders Whatnot 提供時會包含。
joined 正規化本文以以下內容開頭的聊天列: joined,當 擷取「joined」直播事件 已啟用。 加入通知使用字串事件標籤(而非布林值 true).
auction_update 直播頁尾拍賣狀態變化時(得標者/領先文字、標題、出價、價格、計時器、已售狀態),通常由 websocket 拍賣生命週期封包加速。 僅含中繼資料的事件。沒有 chatname/chatmessage;資料位於 meta (例如 meta.title, meta.bids, meta.price, meta.timer, meta.status).
commerce_update 商品目錄區段變化時(商品、驚喜套組、即將舉行的贈品抽獎),通常由 websocket 贈品抽獎/商品生命週期封包加速。 Metadata-only update. Website section snapshots use meta.products, meta.surpriseSets,以及 meta.upcomingGiveaways. Public giveaway updates use meta.giveaway.productId 和 meta.giveaway.entryCount. Pinned-item updates use meta.pinnedItems, containing the supplied type, ID, product ID, or name. meta.websocketEvent identifies giveaway_entry_count_updated 或 pinned_item_updated; unchanged states are suppressed.
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 提供時。
giveaway_started, giveaway_won The public auction feed announces a giveaway start or winner. Uses the auction event fields for the supplied product and winner. meta.entryCount contains the entry count when supplied. Entrant lists and raw order details are not forwarded.
payment_failed 收到即時付款失敗 WebSocket 通知。 相同的可用買家、商品和識別碼欄位,帶有 meta.paymentStatus: "failed"。僅當 product.purchaserUserId 識別買家,並填入 userid 用於銷售/付款事件,且買家姓名保持空白。不會根據其他或先前的拍賣推斷買家。
payment_succeeded 收到即時付款成功 WebSocket 通知。 meta.paymentStatus: "succeeded",包含該通知提供的買家、商品、訂單 ID 和其他允許欄位。這仍是獨立的付款事件;不會再發出一個 purchase 或贊助。缺失欄位保持空白或省略,即使先前的銷售提供過這些欄位。

拍賣/商業展示更新仍是基於 DOM 的快照。要在 Event Flow 中比對單一 WebSocket 事件,請使用 事件類型(進階)(Event Type (Advanced)),選擇 自訂事件(Custom Event),並輸入其精確名稱。標籤可以使用 **{username}**\n{subtitle} 帶有所選文字權重;條件可以比較 meta.paymentStatus 帶有 failed。一個 可匯入的 Whatnot 標籤範例 可用。現有直播事件擷取設定仍然適用。

其他選用欄位包括 meta.catalogProductId (封包的 product.productId), meta.parentProductId (product.parentId), meta.transactionType (Whatnot 的銷售類型,保持不變),以及 meta.placeOrderErrorReason (Whatnot 提供的訂單/付款錯誤代碼)。這些商品參照描述的是目錄或上層商品頁面,不能取代訂單 ID。庫存數量不視為購買數量。

要自動處理付款成功,請設定一個 事件類型(進階)(Event Type (Advanced)) 觸發條件,以 自訂事件(Custom Event): payment_succeeded,並將來源篩選為 Whatnot。現有條件和範本可以使用該事件的 userid, chatname, subtitle 和 meta.orderId 直接處理。通知包含所需詳細資訊時,不需要已記憶的購買記錄。

拍賣結束或商品被標記為已售出,並不確認付款成功:這些通知不會作為已付款的 purchase 事件,且不設定贊助金額。只有收到以下內容才會發出成功事件: payment_succeeded 通知;擷取不會輪詢付款完成狀態,也不會根據銷售推斷付款完成。其他 paymentStatus values are forwarded only when explicitly supplied in a captured packet. Missing identifiers are omitted; a product ID alone may cover multiple sales, so use a supplied order/auction ID to correlate notifications. Capture does not remember purchases or match payment updates; any such workflow must be explicitly configured in Event Flow. Repeated commerce notifications with the same native event timestamp/ID are suppressed across overlapping channels and reconnects, within a 2,000-event cache. Packets without a native event identity use a brief duplicate window. Raw order/payment objects are not forwarded.

eBay Live

營利功能中的 eBay 賣家連接需要設定 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。兩者接收同一即時拍賣 feed。
  • 公開的 WebSocket 資料流提供拍賣、出價、得標者、計時延長和庫存變化;唯讀 GraphQL 查詢提供商品詳細資訊。當網路資料無法使用時,DOM 擷取仍作為備援方式。
  • 擷取直播事件 控制中繼資料快照(auction_update, commerce_update);觀眾計數器仍遵守觀眾/Hype 開關。
事件 觸發時機 承載資料說明
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)、目前的公開 socket 商品資訊(eventListing),以及最新的拍賣更新(update)。這些欄位保留類別、圖片、貨幣、數量、拆盒詳情、拍賣結果和時間欄位,不會因扁平化而遺失平台細節。GraphQL 記錄是取得的快照;socket 商品資訊和更新攜帶較新的直播狀態。初始/重新連線歷史會合併到目前快照中,而不會作為舊的得標事件發出。移除所有展示的商品時會發出 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.聊天包括 meta.messageId 當頁面公開本機訊息 ID 時。

  • 需要經過驗證的工作階段才能解析個人資料影像和訂閱者徽章。
  • 透過聊天文字比對和徽章進行有限的事件偵測;啟用開關後,觀眾數量仍然有效。
事件 觸發時機 承載資料說明
gift 透過貼圖影像和可見的 Kick 貨幣金額偵測到的 KICKs 禮物。 hasDonation 帶有 N KICKs (1 KICK 表示一個),前提是可見金額可用; contentimg 帶有禮物影像。現有訊息文字會保留。
reward 獎勵兌換(「has redeemed …」)。 chatmessage 包含兌換文字。
true (布林值) 不符合禮物或獎勵模式的一般系統通知。 使用 chatmessage 內容來決定展示方式;布林值 true 表示「系統事件 — 類型未知」。
viewer_update 每 30 秒輪詢一次 Kick 的頻道 API(僅在啟用觀眾統計資訊時)。 meta 整數型觀眾數量;訂閱、追蹤或贊助請使用下方的 Kick 橋接。

Kick — Websocket/橋接

實作: sources/websocket/kick.js 使用位於以下位置的共用輔助程式: providers/kick/core.js

  • 透過 Social Stream Kick 橋接進行 OAuth。目前權限範圍為 user:read, channel:read, channel:write, channel:rewards:read, chat:write, events:subscribe, moderation:ban, moderation:chat_message:manage,以及 kicks:read。權杖會自動更新。
  • Kick webhook 佈建可能需要幾分鐘;介面會依頻道列出有效訂閱。
事件 觸發時機 承載資料說明
message 橋接聊天承載資料。 meta.plainText 包含純文字訊息(仍可包含表情);徽章合併平台和個人資料快取。討論串回覆填入 initial, reply,以及 meta.reply 當回覆詳細資訊或已快取的父訊息可用時。
reward channel.reward.redemption.updated,以及看起來像兌換事件的橋接聊天/系統承載資料。 meta 包含獎勵/兌換 ID、標題、費用、狀態、使用者輸入和兌換者。
new_subscriber channel.subscription.new. membership 指派給訂閱者角色; meta 包含 { subscriber, plan }。
resub channel.subscription.renewal. meta.duration (月)以及 meta.plan 可用; subtitle 彙總連續紀錄。
subscription_gift channel.subscription.gifts. meta.totalGifted, meta.gifter;徽章退回為 💝 圖示。
donation 透過事件類型啟發式規則偵測的支持/贊助事件;KICKs 禮物使用 gift 如下。 hasDonation 帶有格式化的金額; meta 包含 { amount, currency, supporter, message, giftName }。
gift kicks.gifted (KICKs 禮物),與 DOM 擷取器一致。 hasDonation 帶有 N KICKs (1 KICK 表示一個); contentimg 可用時帶有禮物影像。結構化禮物詳細資訊保留在 meta.
raid 相容處理舊版 host 形式的 socket 承載資料,例如 App\Events\StreamHostEvent. Kick 目前的官方事件目錄沒有 raid/host 訂閱。如果收到相容的舊版承載資料,會將其對應為標準的 raid;不要在目前 Kick 工作流程中依賴此項。
new_follower channel.followed. 追蹤者圖示來自個人資料快取; follower_update Kick 提供累計總數時觸發。
follower_update 橋接在 webhook 承載資料中提供追蹤者計數。 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 來自橋接/webhook,或 Kick 聊天 socket 封鎖事件。 用於管理元件的僅中繼資料事件。 meta 包含使用者名稱/顯示名稱、使用者 ID、頭像/個人資料 URL、管理員、原因、封鎖/暫時禁言期間和是否永久。

個人資料查詢使用 profileCache; mapBadges 可用時將 Kick 的徽章資源與快取的 SVG 合併。當 Kick 以 KICKs 回報贊助時,橋接將其轉換為 hasDonation 加上 meta.amount 帶有 currency 改用「KICKs」作為備援。聊天承載資料包含 meta.messageId 當橋接提供原生 Kick 訊息 ID 時,讓刪除同步能夠定位正確訊息。回覆承載資料包含 meta.reply 帶有父層 messageId, author,以及 text 已知時。即使原始訊息未快取,提供的回覆詳細資訊仍然可用;沒有快取脈絡、僅有 ID 的回覆仍可能缺少可見引用。

Kick Websocket:事件速查

data.event 情境
new_follower使用者追蹤了頻道
new_subscriber新訂閱
resub訂閱續訂
subscription_gift贈送的訂閱
reward頻道獎勵兌換,或獎勵樣式的聊天/系統訊息
donation贊助/支持事件
giftKICKs 禮物事件
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 frames remove the matching rows from the dock. Deletions carry meta.streamUsername to select the channel and meta.messageId when targeting a native message ID. Optional toggles sync dock deletes and blocks back to VPZone (channel owner only).
  • 頻道擁有者會取得頁面內的 Stream Info 面板,用於更新直播標題和類別(與 Twitch 來源頁面的模式相同)。
事件 觸發時機 承載資料說明
message VPZone msg, message, new_message,或 chat_message websocket 影格。 chatname 來自 username; chatmessage 來自 body;subscriber/owner/mod/VIP 旗標複製到 chatbadges、頂層角色旗標,以及 meta。原生 ID 填入 data.id 和 meta.messageId.
viewer_update VPZone presence 影格,帶有 count 或等效的觀眾欄位。 meta 是即時觀眾整數;計入彙總的 viewer_updates.
new_subscriber VPZone subscribe / subscription 影格。 membership 存在訂閱旗標時設為 Subscriber。
subscription_gift VPZone gift / gift_subscription 影格。 使用與 Twitch、Kick、Rumble 和 Velora 相同的贈送訂閱事件名稱。 subtitle 帶有禮物數量(x5)或接收者。
message + hasDonation VPZone system 影格,帶有 metadata.kind: "pixels_cheer" (Pixels 贊助)。 帶有贊助的聊天列; hasDonation 是金額標籤(例如 100 Pixels), meta.pixels 該整數。 event 保持空白;透過以下欄位偵測此贊助: hasDonation。Kick 橋接的支持事件改用 event: "donation".
message 回覆 VPZone msg 影格,帶有 metadata.reply_to (訊息 ID、作者、摘要——在伺服器端反正規化)。 與 Kick 回覆一樣繪製: initial 儲存「author: excerpt」標籤, reply 原始回覆文字, meta.reply 結構化目標。遵循 排除「replying to」 設定。
raid VPZone raid 影格,帶有 metadata.kind: "incoming". 略過傳出的突襲影格; meta.viewers 提供時帶有突襲人數。
shoutout VPZone shoutout 影格(!so 命令)。 meta.targetUser 提供被推薦的頻道名稱。
reward VPZone system 影格,帶有 metadata.kind: "channel_points_redeem". 頻道點數兌換,使用與 Twitch 獎勵相同的事件名稱。
stream_online / stream_offline VPZone system 影格,帶有 metadata.kind: "stream_started" / "stream_ended". 歸屬為頻道名稱(訊框中不包含行為者)。
new_follower VPZone follow 影格。 對應為標準追蹤者事件結構。
joined VPZone 加入/在線狀態樣式的 websocket 事件,在以下情況下: 擷取「joined」直播事件 已啟用。 對應為聊天樣式的系統事件,VPZone 行為者中繼資料位於 meta.

Joystick

實作: sources/joystick.js, sources/inject/joystick-ws.js,以及 sources/websocket/joystick.js

  • 一般 Joystick 2.0 網站來源執行於已登入的 /u/<channel>/chat 頁面。它讀取頁面的 ChatChannel, WhisperChatChannel, EventLogChannel,以及 SystemEventChannel Action Cable 訊框,並為 Electron 和重新連線情況提供基於已呈現列的替代方式。
  • 網站聊天訊息使用與 YouTube、Twitch 和 Kick 相同的核心欄位:原生 id, chatname, chatmessage, chatimg, chatbadges, nameColor, membership, mod, private, username/userid,以及 timestamp 當 Joystick 提供它們時。當 socket 省略使用者名稱色彩時,繪製的列提供相同的 nameColor 由啟用色彩的停駐面板使用的欄位。
  • 網站端的訊息編輯會取代相符的停駐面板列;刪除、靜音和封鎖會使用原生 ID 或使用者名稱移除相符列。
  • 單獨的 WebSocket 來源使用 Joystick 機器人憑證(client_id + client_secret);網站來源使用已登入的頁面工作階段。
  • 在以下位址授權: https://joystick.tv/api/oauth/authorize,然後在以下位址交換/更新權杖: https://api.joystick.tv/api/oauth/token.
  • 連線到 wss://api.joystick.tv/cable 並訂閱 GatewayChannel.
  • 可選的 OAuth 權杖交換用於輔助端點,例如 https://api.joystick.tv/api/users/stream-settings.
  • 單獨的機器人憑證來源不會發出 viewer_update。已登入的網站來源在頁面 socket 提供觀眾數時確實會發出觀眾數,如下所述。
事件 觸發時機 承載資料說明
message Joystick ChatMessage, BotMessage, new_message, bot_message, event_bot_message, pvp_message,以及悄悄話。 一般聊天沒有 event。原生 ID 放在頂層 id 和 meta.messageId;角色和私有狀態使用既有頂層/徽章欄位。
new_follower Joystick StreamEvent 類型為 Followed. 使用標準追蹤者結構,並與 Joystick 相符的機器人列進行去重。可選的 meta.userId/meta.followedAt 僅在 Joystick 提供時包含。
new_subscriber / subscription_gift Joystick 事件類型 NewSubscription / GiftedSubscription. 使用與 Kick 相容的訂閱中繼資料鍵: eventType, subscriber, gifter, totalGifted, duration,以及 plan.
donation Joystick StreamEvent 類型 Tipped / TipMenu. hasDonation 可用時帶有代幣金額和單位,以供共用美元換算,並對相符的 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. 在線狀態通知作為事件訊息發出,可透過隱藏事件設定抑制。隱藏事件還會抑制非贊助的直播事件。
viewer_update 已登入的網站來源接收 ViewerCountUpdated 透過 EventLogChannel. 使用純整數 meta,與 YouTube、Twitch 和 Kick 一致。僅在啟用觀眾計數或 Hype 模式時發出。獨立的機器人憑證來源仍不會接收觀眾數。
follower_update / subscriber_update Joystick 追蹤者/訂閱者數量更新事件。 使用純整數 meta,與 Twitch 計數器約定一致。
被忽略的內部通知 ChatMessageReceived、裝置狀態,以及未對應的小工具重新整理,例如贊助目標/PvP/subathon 狀態。 這些是傳輸或頁面狀態通知,並非 Social Stream 事件。它們不會被轉換為虛構的 snake_case 事件名稱;實際的 ChatChannel/new_message 列仍是唯一的聊天承載資料。

XP Sync

實作: sources/xpsync.js

  • 聊天列使用標準承載資料欄位,並帶有 type: "xpsync",包括作者、訊息、頭像、圖片和行內 SVG 徽章、名稱顏色、會員狀態、管理員/會員/機器人旗標,以及作為以下欄位的原生訊息 UUID: id 可用時。
  • 回覆遵循 YouTube、Twitch 和 Kick DOM 來源的約定:除非停用回覆前綴,否則 initial 包含被回覆的使用者, reply 保留不帶前綴的訊息,而 chatmessage 接收可見的回覆前綴。
  • 即使 XPSync 在繪製 Sparks 醒目提示列時不使用一般聊天列類別名稱或訊息 ID,這些列也會被擷取;可見金額透過以下欄位提供: 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=...),直播聊天來自 Instagram 自己的 Web API,使用工作階段 cookie 在同源進行輪詢: GET /api/v1/live/{broadcast_id}/get_comment/?last_comment_ts={ts} 約每 2 秒一次,而 POST /api/v1/live/{broadcast_id}/heartbeat_and_get_viewer_count/ 啟用觀眾數量時約每 5 秒一次。連續失敗 3 次後(或沒有 broadcast_id 可探索)時,來源會改為解析繪製的聊天 DOM 作為備援。
  • 透過以下方式輪詢帳號本身的活動動態: POST /api/v1/news/inbox/ 在任何 Instagram 頁面上約每 45 秒一次。第一次輪詢僅初始化去重集合,因此絕不會重播累積記錄;限時動態依據以下欄位去重: 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.
  • 所有活動 feed 事件均使用 type: "instagram";直播聊天保持為 type: "instagramlive"。按讚事件使用正常的背景路徑:背景先向專用 Reactions Overlay 傳送一份,然後僅在以下情況下將其納入主聊天/事件 feed: capturelikeevent 已啟用,與 TikTok 和 MeetMe 一致。 hideevents 和自訂事件篩選器會在所有位置封鎖它們。由於收件匣事件屬於已登入的帳號,在觀看他人直播時會抑制這些事件(兩種 /<user>/live/ 頁面和限時動態檢視器中的直播;依個人資料解析擁有權,並在查詢失敗後重試),並在您自己的直播及所有非直播頁面上發出。一次僅有一個作用中的 Instagram 分頁輪詢帳號收件匣,且僅在已登入時執行輪詢。
事件 觸發時機 承載資料說明
message (直播) 以下位置的新項目: get_comment 回應(comments[]/system_comments[]),或者在 REST 無法使用時擷取新的 DOM 聊天列。 標準聊天承載資料, type: "instagramlive"。REST 提供精確的 user.username, user.profile_pic_url,以及唯一的 pk 用於去重。
viewer_update heartbeat_and_get_viewer_count 回報變化的 viewer_count,在啟用觀眾數擷取或 Hype 模式時。 meta 整數型觀眾數量。在以下情況下停止輪詢: broadcast_status 不再是 "live".
stream_online / stream_offline stream_online 在 REST 直播工作階段開始時觸發一次; stream_offline 心跳回報非直播的以下內容時觸發: broadcast_status (需要觀眾數擷取或 Hype 模式)。 與 Twitch 和 Joystick 使用的共用直播狀態詞彙一致的僅中繼資料事件。
new_follower 帶有追蹤類型的動態收件匣項目 notif_name (或 story_type 12)出現。 chatname 是新追蹤者, chatimg 其個人資料影像, chatmessage 收件匣文字(例如「x started following you.」)。
follow_request 一個 private_user_follow_request 限時動態出現(私人帳號收到的是請求,而非直接追蹤)。 結構與以下內容相同: new_follower,保持區分,以便自動化批准要求或使用不同的問候。
liked 帶有按讚類型的動態收件匣項目 notif_name (包括 comment_like)出現。 與 TikTok/MeetMe 共用的按讚詞彙。 chatname 是行為者, chatmessage 收件匣文字(例如「x liked your photo.」)。
message (自己貼文上的留言) 帶有留言類型的動態收件匣項目 notif_name 出現。 一般聊天列(event: false), type: "instagram"; chatmessage 帶有收件匣文字,包括留言摘錄。
notification 任何其他動態收件匣項目類型(提及、標籤、購物等)。 一般備援項目; meta.notifName 和 meta.storyType 保留原始限時動態分類。

Facebook Live

實作: sources/facebook.js (DOM 擷取)以及位於以下位址的選用 Graph API 橋接: sources/websocket/facebook.html

  • DOM 擷取讀取已呈現的 Facebook 留言;管理粉絲專頁的 Graph API 橋接讀取影片留言。兩者都使用 type: "facebook"、標準聊天欄位,並且沒有 event 用於一般留言。API 橋接還包含可選的 platform: "facebook".
  • API 橋接使用 userid 用於可用時的作者 ID, timestamp 用於以 Unix 毫秒表示的有效建立時間,以及 contentimg 用於 API 提供的 HTTP(S) 附件影像。僅含影像的留言可能有空白的 chatmessage. textonly 僅適用於訊息本文:為 true 時使用原始文字,為 false 時使用經過逸出的 HTML。
  • API 留言上下文使用 meta.messageId (原生留言 ID), meta.permalink, meta.videoId,以及 meta.pageId。早期 API 版本使用 meta.commentId,重複的作者/時間欄位位於 meta,並在那裡傳遞原始附件。新版本改用標準的作者/時間/媒體欄位;這不會增加刪除同步支援。
  • 觀眾數量僅在啟用後重新整理。API 橋接讀取同時在線的 live_views;不會用影片累計觀看次數代替,也不會為無法取得的計數捏造零值。API 擷取不會從一般留言文字推斷 Stars、會員、醒目標示或回覆。
  • 當 Facebook 顯示可見的以下內容時,會從繪製的 Live Chat DOM 中擷取 Stars: N sent 標記;它們填入 hasDonation 和 donoValue 按 100 Stars = 1 美元計算,不設定 data.event.
  • 測試時,加入 ssnreplay=1 加入 Facebook Live URL,以處理重新整理後已經可見的聊天列。
事件 觸發時機 承載資料說明
viewer_update DOM 輪詢即時觀眾徽章;API 橋接在啟用時輪詢同時在線觀眾數。 meta 整數型觀眾數量,與其他來源一致。缺失或無法解析的計數會略過;實際為零的值有效。
hasDonation 在 Live Chat DOM 中呈現的 Facebook Stars。 標準聊天承載資料; hasDonation 帶有可見的 Stars 數量,例如 100 Stars,以及 donoValue 帶有美元值。Stars 不設定 data.event.
highlightColor Facebook 呈現可見的 HIGHLIGHTED 標籤。 使用一般聊天欄位和 highlightColor;沒有 data.event 已設定。Stars 仍然使用 hasDonation.

Online Church

實作: sources/onlinechurch.js

  • 依賴對公開聊天和媒體標題列的 DOM 擷取。
  • 觀眾數量僅在以下情況下重新整理: 顯示觀眾數量 或 hype 模式已啟用。
事件 觸發時機 承載資料說明
message 新項目出現在以下位置: #publicchat. 標準聊天承載資料,包含傳送者姓名、頭像、徽章,以及 DOM 中存在時的可選會員標籤。
viewer_update 每 10 秒輪詢媒體標題列中的即時在線人數徽章。 meta 整數型觀眾數量;傳送 0 當徽章缺失或無法讀取時,用於清除過期計數器。

SharePlay.tv

實作: sources/shareplay.js

桌面 API 實作: ssn_app/resources/shareplay-client.js。SSApp 原生來源使用由 SharePlay 工作人員設定的公開 OAuth 用戶端,訂閱授權使用者自己的頻道。

  • 依賴對 SharePlay 頻道頁面上直播聊天抽屜的 DOM 擷取。
  • 擷取程式連接後,僅發出新插入的聊天列和卡片;現有累積記錄會刻意忽略。
  • 桌面 API 來源接收新的 EventSub 事件;斷線期間的訊息不會重播。聊天將 SharePlay 訊息 ID 放入 id ,傳送者 ID 放入 userid,但不包含頭像或徽章。表情遵循 textonly;當被回覆的訊息位於工作階段的 200 則訊息快取中時,回覆會填入現有的回覆欄位。
  • 桌面 API 將已完成的 channel.blitz 事件對應為 raid,聊天中的頻道推薦對應為 shoutout,以及 stream.viewers 為 viewer_update (啟用觀眾數或 hype 模式時)。API 頻道推薦包含所提供的聊天文字,不包含 DOM 卡片的橫幅或按鈕中繼資料。合成的聊天/Blitz 事件保留 meta.is_synthetic: true;觀眾數更新保留整數形式的 meta.
事件 觸發時機 承載資料說明
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 整數型觀眾數量;僅在以下情況下發出: 顯示觀眾數量 或 hype 模式已啟用,並傳送 0 如果徽章變得無法讀取,則清除過期計數器。

Streamplace

實作: sources/streamplace.js

  • 讀取 Streamplace 由 React 繪製的直播頁面,並在連接時略過可見的聊天累積記錄。
  • 轉送樣式的訊息,例如 Name (Discord): message 被標準化為轉送的傳送者姓名。
事件 觸發時機 承載資料說明
message 連接後出現新的 Streamplace 聊天列。 帶有以下欄位的標準聊天承載資料: nameColor, chatbadges、保留 HTML 的連結,以及回覆欄位 initial, reply,以及 meta.reply 可見時。
viewer_update 啟用觀眾數量擷取或 hype 模式時,標題列觀眾徽章發生變化。 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 選取器。
  • 擷取連線時會略過已有聊天歷史;請用新訊息測試。
  • 觀眾數量需要 顯示觀眾數量 或 hype 模式。尚未實作專用禮物/贊助事件和回傳。繪製的列仍可透過以下欄位提供贊助標籤: data-ww-donation.
事件 觸發時機 承載資料說明
message 出現一則新呈現的 WorldsWave 聊天列。 帶有以下欄位的標準聊天承載資料: type: "worldswave"、傳送者名稱、頭像、選用使用者 ID、名稱顏色、徽章、管理員狀態、會員狀態、贊助值、附件和頻道識別資訊。穩定的 WorldsWave 訊息 ID 公開為 meta.messageId 並在同時顯示的預覽/完整聊天面板之間去重。停用純文字模式時,內嵌訊息影像仍會經過淨化。
viewer_update 啟用觀眾數量擷取或 hype 模式時,可見的即時觀眾總數發生變化。 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/* 頁面。
  • 觀眾數量需要 顯示觀眾數量 或 hype 模式。
事件 觸發時機 承載資料說明
message 出現一則新呈現的 Seal Team Sloth 聊天列。 帶有以下欄位的標準聊天承載資料: type: "sealteamsloth"、傳送者名稱、頭像和訊息內容。
viewer_update 啟用觀眾數量擷取或 hype 模式時,可見的即時觀眾總數發生變化。 meta 是整數型觀眾數量;縮寫值,例如 1.2K 會進行標準化。

MeetMe — DOM 和 WebSocket 擷取

實作: sources/meetme.js

  • 讀取 MeetMe 在以下位置繪製的直播聊天 DOM: app.meetme.com/live/view/... 頁面,以及在 api.gateway.meetme-live.com/web-live/... iframe.
  • iframe websocket 可用時, wss://video-live.meetme.com/ 影格會在 DOM 備援之前解析,以擷取更豐富的直播事件。
  • hideevents 抑制非贊助事件;MeetMe 禮物和鑽石贊助仍會填入贊助欄位。 capturejoinedevent 啟用加入/重新加入通知。行為者專屬的 liked 事件使用共用背景路由,由以下設定控制: capturelikeevent;彙總的 reaction 效果仍明確以 Reactions Overlay 為目標。
  • 觀眾數量優先使用可見的 MeetMe 標題列計數,僅在 DOM 計數無法使用時改用 websocket 總數。計數會在變化時發出,並且在以下條件成立時約每 30 秒重複發出最新計數: showviewercount/hypemode 已啟用;追蹤者總數僅在變化時發出,且頻率限制為約 60 秒一次。
事件 觸發時機 承載資料說明
message 新 SNSChatMessage websocket 影格抵達,或新的 ChatMessage_* DOM 列出現在 ChatHistoryContainer_*. 標準聊天承載資料,包含傳送者姓名、頭像、訊息 HTML/文字和徽章影像/文字。DOM 列詳細資訊採用扁平結構,位於 meta 鍵,包括 messageId, roomId, level, levelColor, badgeLabels, badgeSrcs, badgeClasses, isBouncer, isTopStreamer, isBestOfTheWeek, rank,以及 rowClassName。WebSocket 承載資料設定 meta.source = "websocket".
joined / rejoined / left SNSChatParticipant websocket 建立、更新或刪除影格抵達,或 MeetMe 繪製 DOM join-cell 列。加入/重新加入通知需要 擷取「joined」直播事件. 當 MeetMe 提供行為者的名稱/頭像時,會發出帶有這些資訊的聊天樣式系統通知。 meta.isNewViewer, meta.viewerLevelId, meta.isBouncer,以及 meta.isSubscriber 保留參與者狀態。
new_follower MeetMe 繪製 DOM 收藏/追蹤列,例如 Favorited. 使用共用的追蹤者事件詞彙。 chatname 是行為者, chatimg 是可用時偵測到的個人資料照片,而扁平的 meta.favoriteText/meta.targetName 保留原始列詳細資訊。
gift SNSGiftMessage websocket 影格抵達,或 MeetMe 在聊天列中繪製禮物影像。 hasDonation 帶有可見的禮物標籤或鑽石值, contentimg 提供時帶有禮物影像,以及如下扁平鍵: meta.giftName, meta.giftCount, meta.amount,以及 meta.currency 保留結構化詳細資訊。 gift 事件保留給實際的禮物影格/列;贊助繪製仍應依據 hasDonation.
donation SNSDiamond websocket 影格提供鑽石活動。 專用 diamond 訊框被視為贊助事件。 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 整數型觀眾數量;僅在啟用觀眾數量擷取或 hype 模式時發出。

Velora

實作: sources/velora.js 和 sources/websocket/velora.js

  • 標準模式讀取可見的聊天 DOM;WebSocket 模式透過 OAuth 使用 Velora Events API。
  • 支援的標準模式 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.
  • DOM 或 Events API 提供 Volts 和頻道點數樣式卡片時,會將其作為事件承載資料發出。
事件 觸發時機 承載資料說明
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 啟用觀眾數量擷取或 hype 模式時,可見的觀眾數量發生變化。 meta 整數型觀眾數量。

Parti — 個人資料 / 彈出聊天擷取

實作: sources/parti.js

  • 支援如下個人資料 URL: https://parti.com/USERNAME 以及如下彈出視窗 URL: https://parti.com/popout-chat?id=USER_ID.
  • 啟用觀眾數量擷取或 hype 模式時,觀眾數量使用 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.
  • 啟用觀眾數量擷取或 hype 模式時,觀眾數量使用 CHZZK 的直播狀態輪詢端點。
事件 觸發時機 承載資料說明
message 可見的 CHZZK 聊天列出現在彈出聊天串流中。 帶有以下欄位的標準聊天承載資料: type: "chzzk", nameColor,徽章圖片 URL 位於 chatbadges,以及位於以下欄位中的已呈現表情: chatmessage 除非啟用了純文字模式。
聊天,帶有 hasDonation 可見的 CHZZK 起司贊助列出現在聊天中。 hasDonation 帶有顯示的起司數量。這些列不設定 data.event.
viewer_update 直播狀態輪詢傳回觀眾數量。 meta 是整數型觀眾數量。

Rumble — 標準 DOM 擷取

實作: sources/rumble.js

  • 需要經過驗證的工作階段 Cookie,以便 service.php 觀眾 API 回應。
  • 繪製的 Rant 列提供 hasDonation;傳入 raid 卡片提供 event: "raid"。此 DOM 來源不會發出 API 橋接的訂閱者/追蹤者事件 feed。
事件 觸發時機 承載資料說明
message 可見的 Rumble 聊天列出現在頁面或彈出聊天中。 標準聊天承載資料; chatmessage 在頁面繪製後保留 Rumble 表情影像 HTML,除非啟用了純文字模式。
viewer_update 呼叫 Rumble 的 video.watching-now 服務,每 30 秒一次。 meta 整數型觀眾數量;使用 credentials: 'include' 以重用工作階段 Cookie。
聊天,帶有 hasDonation可見的 Rant 列包含價格。hasDonation 保留繪製的價格;不會新增贊助事件標記。
raid聊天中出現傳入 raid 卡片。使用可見的突襲訊息和可選卡片影像,位於 contentimg.

Rumble — Websocket/API URL

實作: sources/websocket/rumble.js

  • 需要創作者擁有的 Live Stream API URL,取得位置為 https://rumble.com/account/livestream-api。Rumble 文件說明此 URL 包含直播金鑰,無需獨立驗證,並且只能與受信任的第三方分享。
  • 唯讀傳輸。公開的 Rumble Live Stream API 文件沒有描述官方聊天傳送端點,因此此來源會將訊息/事件轉送至 Social Stream,但不會將聊天傳回 Rumble。
  • livestreams[].chat 僅在所選直播正在進行時填入。使用 ?streamId=... 在 API 提供多個直播時固定某個直播;無效 ID 現在會失敗,而不是無聲地改用其他直播。
  • 該頁面還會解析 https://rumble.com/chat/popup/<livestreams[].id> 這樣您可以直接開啟一般插入式彈出聊天,而無需先載入實況主的 /live 頁面。
事件 觸發時機 承載資料說明
message 官方 API 解析以下內容後,Rumble 的 SSE 聊天串流會收到新項目: 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 當所選直播離線時,用於清除過期計數器。

此傳輸方式適用於您擁有或管理的頻道。由於 API URL 包含直播金鑰,請勿將其暴露在疊加畫面、記錄、螢幕擷取畫面或共用瀏覽器設定檔中。官方 API 解析直播 ID 後,聊天頭像來自 Rumble 的 SSE 聊天串流;此傳輸方式不會擷取 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 整數型觀眾數量;僅當聊天頁面提供觀眾計數器時發出。

斯塔維奧斯

實作: sources/starvios.js

  • 捕捉新呈現的聊天行 https://starvios.com/popout/chat/USERNAME 帶有 type: "starvios",簡單的寄件者姓名、名稱顏色以及文字或內聯表情 textonly.
  • 付費聊天行保留顯示的金額 hasDonation (例如, 100 Starvies)。不提供美元兌換或捐贈事件。
  • 現有行和在最初的 1.5 秒歷史記錄穩定期內渲染的行將被跳過。單獨的固定卡片、回覆預覽和訂閱/突襲通知不包括在內。弹出窗口不提供经过验证的观看者数量。
  • 使用標準 focusChat 当存在可见的、可编辑的输入时回复挂钩。經過身份驗證的發送仍未得到驗證。

RobotStreamer

開啟 https://robotstreamer.com/chat.html?c=CHANNEL_ID and keep Stream Chat selected for channel-only capture. Each new message, including messages grouped beneath the same author, uses platform/type: "robotstreamer",純文字的 chatname, userid, chatimg, chatbadges,以及 nameColor. Message bodies preserve safe inline images; textonlymode uses literal text and image labels. Initial history and system notices are excluded. RobotStreamer deletions are not forwarded; remove moderated messages in the SSN dock if needed.

Castyr - DOM 擷取

實作: sources/castyr.js

  • 從以下位置讀取新繪製的聊天列: https://castyr.live/homebeta/popout-chat/* 並發出帶有以下欄位的標準聊天承載資料: type: "castyr".
  • 來源連線時會略過已有聊天歷史。
事件 觸發時機 承載資料說明
message 一個新的 .chat-message 列出現。 標準聊天承載資料,包含傳送者姓名、繪製的訊息內容,以及來源提供時的姓名色彩。
viewer_update 可見的活躍聊天計數發生變化,同時 showviewercount/hypemode 已啟用。 meta 是從 Castyr 帶標題的活躍聊天元素中讀取的整數計數。

SOOP — 播放器 DOM 擷取

實作: sources/sooplive.js。支援統一的 play.sooplive.com 播放器和舊版 play.sooplive.co.kr URL。提供舊版全域聊天版面配置時,仍會辨識它。

公開聊天發出 type/platform: "sooplive",純文字的 chatname/userid, nameColor,以及經過清理的 chatmessage。排除現有列、重複訊息 ID、翻譯副本和私人悄悄話。表情會轉換為安全圖片,或在純文字模式下轉換為替代文字。

帶有 showviewercount 或 hypemode 啟用時, viewer_update 帶有整數 meta 來自播放器的 #nAllViewer。僅聊天的彈出視窗可能不提供此計數。SSApp 開啟獨立彈出視窗時會使用完整播放器,因為目前 SOOP 彈出視窗依賴其開啟者。

Gosh - 頻道聊天擷取

實作: sources/gosh.js。開啟 https://gosh.com/USERNAME 並讓聊天可見,或將該 URL 貼到 SSApp 的 Add other source(新增其他來源)。無需彈出聊天視窗。

新的聊天列發出 type/platform: "gosh",純文字的 chatname, nameColor,以及經過清理的 chatmessage。行內圖片和 GIF 保留安全的 HTTP(S) URL。使用 textonlymode,圖片轉換為替代文字或 [image] 當沒有替代文字時。頭像、徽章、贊助和會員在擷取列中缺失時保持空白。

讓虛擬化聊天清單保持捲動到最新訊息。排除現有歷史記錄、重新繪製的列和無作者的系統通知。繪製索引僅供內部使用,不會作為原生訊息 ID 發出。不會推斷追蹤、贊助、觀眾數量或管理事件。

Livacha — 聊天室擷取

實作: sources/livacha.js。開啟 https://livacha.com/chat/ROOM 並讓聊天可見,或將聊天室 URL 貼到 SSApp 的 Add other source(新增其他來源)。

新的聊天列發出 type/platform: "livacha",純文字的 chatname, chatimg, nameColor,以及經過清理的 chatmessage。相對頭像和行內圖片 URL 會轉換為絕對 HTTP(S) URL。段落、換行和清單會攤平成一則聊天訊息。使用 textonlymode,圖片轉換為替代文字或 [image].

訊息 ID 在內部用於避免重複擷取編輯內容和重新掛載的列。會略過初始歷史記錄和前置載入的舊訊息;時間戳記和回應選單不屬於擷取本文。不會推斷贊助、會員、管理或觀眾數量事件。

Chatango - Group Chat

開啟 https://ROOM.chatango.com/, or a page with an embedded Chatango room. New rows emit standard chat with type/platform: "chatango",純文字的 chatname, nameColor, chatmessage,以及 chatimg when available. Inline images use HTTP(S) URLs; text-only mode uses their alt text or [image]. Rows already displayed when capture attaches and older messages prepended while scrolling back are skipped.

Vaughn Live - 頻道聊天捕獲

實作: sources/vaughn.js。開啟 https://vaughn.live/USERNAME 聊天可見,或將頻道 URL 貼到桌面應用程式的新增其他來源。

每個新訊息正文都會發出標準聊天 type/platform: "vaughn",純文字的 chatname, chatmessage,以及團體頭像 chatimg, nameColor和影像/SVG chatbadges 當存在時。緊湊聊天會讀取訊息前面的名稱。表情使用其顯示的圖像 URL,或其觸發/替代文本 textonlymode.

內部追蹤訊息 ID 和元素,以避免在分組訊息到達、確認後 ID 變更或再次呈現行時出現重複。當初始載入覆蓋可見時呈現的現有訊息和歷史記錄將被跳過。時間戳、訊息工具和連結預覽卡不包含在訊息內容中。

Stream.space — 實驗性 DOM 擷取

實作: sources/streamspace.js。僅比對 https://beta.stream.space/chat-popup.php?channel=USERNAME 和等效的 https://stream.space 彈出視窗。

新繪製的聊天列發出 type: "streamspace", platform: "streamspace",純文字的 chatname/userid, chatmessage,頭像 chatimg,以圖片呈現的等級 chatbadges,以及 nameColor。行內表情會重建為安全圖片,或在以下情況下使用其替代文字: textonlymode 已啟用。排除現有歷史記錄、歡迎通知、回覆預覽和置頂重複項目。

viewer_update 帶有整數 meta 讀取自 #popupViewersNum 當 showviewercount 或 hypemode 已啟用。不會推斷贊助、會員或管理事件。

實驗性:檢查期間 beta 彈出視窗一直停留在 Loading。SSApp 載入了彈出視窗並擷取到觀眾更新,但即時聊天傳遞和正式版彈出視窗仍未驗證。SSN 無法擷取網站未呈現的訊息。

w.tv 和 Prime — DOM 擷取

實作: sources/wtv.js 在 https://w.tv/USERNAME/chat 和 sources/prime.js 在 https://prime.gs/USERNAME?chat_popout=1.

新的聊天列使用 type/platform 的 wtv 或 prime,純文字的 chatname, nameColor,以及經過清理的 chatmessage。行內表情會轉換為安全圖片,或在純文字模式下轉換為替代文字。Prime 還包括該列的 userid 並支援已登入的個人資料連結及未登入的使用者名稱標籤。當已驗證的列結構中不存在頭像和徽章時,這些欄位保持空白。

不包含初始歷史記錄、置頂卡片和回覆預覽。w.tv 使用虛擬化聊天清單:請保持捲動到最新訊息,以便擷取。其 DOM 測試 ID 是繪製索引,並非原生訊息 ID。Prime 會略過在初始訊息上方載入的舊歷史記錄和遭忽略使用者的預留內容。

這兩種彈出視窗都不提供經過驗證的直播觀眾數量,因此這些介接器不會發出觀眾更新,也不會推斷贊助、訂閱或管理事件。

Goodgame, Pilled, Owncast, Picarto, and Piczel Viewer Counts

啟用 顯示觀眾數量 或 追蹤活躍聊天使用者 (showviewercount 或 hypemode) to collect viewer counts. Opening the Viewer Count & Chat Activity overlay with viewers displayed also requests them. Each source emits event: "viewer_update" with a nonnegative integer meta, refreshed every 30 seconds while capture is enabled. These are stream viewer counts; active chatters are counted separately. A reported zero is valid; failed requests do not produce a zero count.

Normal chat uses the source's type, chatname, chatmessage,以及 textonly fields without a viewer event marker. Viewer updates contain type, event, and integer meta; the background combines them into viewer_updates for overlays.

Source / typePage to captureViewer count and chat fields
Goodgame
goodgame
goodgame.ru/CHANNEL/chat串流 viewers. Chat rows also include the native ID as a string in meta.messageId 可用時。
Pilled
pilled
pilled.net/livechat/USERNAME 或 pilled.net/comment/TOPIC_IDThe current live topic's topicFacts.liveViews. The dedicated chat URL supports counts without opening the video page.
Owncast
owncast
Your captured Owncast stream or chat pageviewerCount from that server's /api/status.
Picarto
picarto
picarto.tv/chatpopout/CHANNEL/public頻道 viewers.
Piczel
piczel
piczel.tv/chat/CHANNEL 或 piczel.tv/watch/CHANNELThe matching stream's viewers. Join the chat or sign in to expose chat rows; viewer counts can be collected before joining.

跨平台事件一致性

使用此表了解類似概念如何在各平台之間對應。在可能的情況下,新來源應與第一欄中的通用事件名稱保持一致。

概念 YouTube WS Twitch WS Kick WS
新會員/訂閱者 sponsorship new_subscriber new_subscriber
續訂/重新訂閱 resub resub resub
贈送訂閱 giftpurchase subscription_gift subscription_gift
收到禮物 giftredemption - -
里程碑 membermilestone - -
捐款/贊助 superchat, supersticker, jeweldonation 帶有 hasDonation cheer (bits) donation
新追蹤者 new_follower (輪詢)* new_follower new_follower
觀眾數量 viewer_update viewer_update viewer_update
追蹤者計數 - follower_update follower_update
訂閱數量 subscriber_update subscriber_update -
直播狀態 live_chat_ended stream_online/stream_offline stream_online/stream_offline
突襲 - raid -
獎勵兌換 - reward reward

一致性說明

  • YouTube 使用 sponsorship 用於新會員,而 Twitch 和 Kick 使用 new_subscriber。建立跨平台觸發條件時,可考慮同時檢查兩者。
  • resub 保持一致 用於全部三個平台的續訂。
  • 禮物事件有所不同: YouTube 使用 giftpurchase/giftredemption,而 Twitch 和 Kick 使用 subscription_gift.
  • 贊助因平台而異: YouTube 使用具體的付費事件名稱,例如 superchat, supersticker,以及 jeweldonation 帶有 hasDonation;Twitch 有 bits(cheer);Kick 有贊助(donation).
  • new_follower 現在保持一致 適用於全部三個平台,但 YouTube 會輪詢最近的訂閱者,傳回的結果可能有延遲或不完整。
  • 按讚和回應使用不同的資料約定: 個別 liked/like 事件會抵達 Reactions Overlay,除非被全域篩選,並且僅在以下條件成立時進入主處理管線: capturelikeevent 已啟用。視覺化或平台原生的 reaction 事件保留產生端定義的路由。彙總的 likes_update 計數器由以下設定單獨控制: captureliketotals.

涵蓋範圍和相容性限制

本參考描述已實作的承載資料,並不保證每個平台都會提供每種事件。空的 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。接受目前來源約定及其相關舊版別名,而不是重新命名每個相符的事件。

別名 / 舊版名稱 標準替代項 脈絡
subscriptionnew_subscriberTwitch/Kick 新訂閱
subgiftsubscription_giftTwitch 贈送訂閱
membershipsponsorshipYouTube 新會員(通用)
new_membersponsorshipYouTube 新會員
new_membershipsponsorshipYouTube 新會員
newmembersponsorshipYouTube 新會員
new-membershipsponsorshipYouTube DOM 擷取程式(連字號變體)
upgraded_membershipresubYouTube 等級升級
upgraded-membershipresubYouTube DOM 擷取程式(連字號變體)
membership_upgraderesubYouTube 等級升級
membership_milestonemembermilestoneYouTube 里程碑聊天
member_milestonemembermilestoneYouTube 里程碑聊天(底線變體)
gift_membershipgiftpurchaseYouTube 禮物套組
membership_giftgiftpurchaseYouTube 禮物套組
giftmembershipsgiftpurchaseYouTube 禮物套組(複數變體)
gifted_membershipgiftredemption收到 YouTube 禮物
gifted_membershipsgiftpurchaseYouTube 禮物套組(複數變體)
community_giftgiftpurchase社群送禮包
channel_pointsrewardTwitch websocket 獎勵兌換(舊版別名)
followednew_follower目前 TikTok DOM/TikFinity 輸出;組合 TikTok 擷取模式時應接受這兩個名稱。

使用本參考

  • 新增事件時,重用現有詞彙(subscription_gift, viewer_update等)。如確實無法避免差異,請在此記錄並說明原因。
  • 保持 data.meta 保持可預測:優先使用扁平鍵,絕不將混合資料塞入字串,並始終包含單位(currency, bits, duration).
  • 變更承載資料時同步更新本頁;僅在共用開發規則變化時更新代理說明。
  • 驗證承載資料變更時,同時檢查發出承載資料的來源和使用承載資料的疊加畫面或 Event Flow 觸發條件。
  • 是否擷取取決於來源支援和設定。要在停駐面板或精選疊加畫面中隱藏帶事件標記的列,請加入 &hideevents 或 &hideallevents。要隱藏所選事件,請使用 &filterevents=subscription_gift,new_follower,gifted.
  • 對於 YouTube、Twitch 和 Kick,啟用 WebSocket 模式 以取得最廣泛的平台專屬事件支援。YouTube 的禮物/贊助擷取(包括禮物和 Super Chat)在標準和 WebSocket 模式下均可用;WebSocket 還增加了額外的事件類型。具體支援仍因平台、帳號角色和已授予的權限範圍而異。

回到頂端

營利疊加畫面

NinjaBacker 贊助使用 platform: "ninjabacker", type: "ninjabacker", chatname,純文字的 chatmessage, textonly: true、帶有來源前綴的 id,格式化後的 hasDonation,以及數字形式的 donoValue。它們是一般贊助樣式列,沒有 event 覆寫值。 meta.ninjabacker 包含 ISO currency 和主貨幣單位的 amount。匿名贊助使用顯示名稱 Anonymous。來源使用即時 SSE(不重播),或 SSN API 上需主動啟用的已簽章 webhook 接收器(佇列傳遞最長七天)。可靠傳遞使用穩定的 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,以及目前項目(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 前綴、以商店/訂單為範圍的穩定不透明雜湊;它不是原始訂單識別碼。

購買使用現有的活動、multi-alerts Purchase 類別和 Event Flow 路徑。商品推廣使用現有的 meta.monetization.commerce 目錄。匯入商品或將其推廣標籤設為 Gift 不會產生購買或禮物事件。 Shopify 設定和傳遞限制.

禮物和商業交易

使用 event: "gift" 用於禮物, giftcontribution 用於為禮物提供付費支持, giftfunded 用於募款完成,以及 purchase 用於商品銷售。這些名稱獨立於提供者,也不取決於商品是實體還是數位商品。將舊版的 giftpurchase 用於贈送會員的事件;Throne 以前錯誤地使用該名稱,現在發出 gift。現有的會員事件產生端保持不變。自訂 Throne 事件名稱篩選器應改用 gift;贊助篩選器無需變更。

hasDonation 仍為付費支持的相容訊號,帶有 donoValue 儲存所提供或估算的美元值。禮物和貢獻保留這些欄位。募款完成會省略兩者,避免重複計算貢獻。一般商品銷售預設省略它們,保持 eBay 的資料約定。不要根據商店、願望清單 URL 或實體商品推斷贈禮意圖:為買家或其他收件人購買仍然屬於銷售,除非來源明確標示為向創作者贈禮。

可選的共用 meta.commerce 欄位為 recipient (creator、buyer、other), itemType (physical、digital、service), quantity (正數商品數量), currency (ISO 貨幣), goalAmount (以主要貨幣單位表示的募款目標,絕不是新增收入),以及 orderTotal (已知的主要貨幣單位已付款訂單總額;屬於商業交易,而非贊助收入)。省略未知詳情。商品名稱保留在 subtitle,圖片位於 contentimg,以及位於以下欄位中的支持者文字: chatmessage。現有提供者中繼資料仍然可用。Throne 提供接收者和貨幣,並在完成時提供 goalAmount;eBay 提供數量。兩者都不會猜測商品類型,也不會公開接收者的私人資訊。

即使沒有支持者文字,活動動態也會顯示這些事件。Multi-alerts 對禮物和貢獻使用贊助展示方式,包括一個不含貨幣價值的獨立 Gift Fully Funded 通知。購買有單獨的 Purchase 類別,預設啟用,帶有 purchasestyle, purchasesound, purchaseaccent,以及 disablepurchases URL 控制項。購買提醒不會改變贊助總額。

Event Flow 在 Event Type 和 Other Event 觸發條件中提供這些事件名稱。贊助觸發條件仍檢查 hasDonation;Gift Sub 觸發條件保留會員語意。Compare Property 接受巢狀路徑,例如 meta.commerce.recipient。動作範本接受 {meta.commerce.quantity} 和 {meta.commerce.currency},以及現有的 {donation}, {subtitle},以及 {meta}。巢狀路徑區分大小寫,缺失值顯示為空,並禁止遍歷原型。

創作者商業 webhook 和促銷疊加畫面

Ko-fi 公開 Donation 付款保留 hasDonation 並獲得美元 donoValue。訂閱付款使用 new_subscriber 或 resub,等級位於 membership。Shop Order 和 Commission 使用 purchase 不帶贊助值。私人 Ko-fi 事件仍遭排除。表單編碼的 JSON 只解碼一次;姓名和訊息為純文字。

Buy Me a Coffee donation.created 保留貨幣支持; extra_purchase.created 和 commission_order.created 變為 purchase. wishlist_payment.created 變為 giftcontribution 僅使用該付款金額; meta.commerce.completed 記錄提供者的完成旗標,不會再發出一條貨幣金額列。 membership.started 變為 new_subscriber 等級位於 membership,不再誤用 hasDonation 用於等級名稱。訂閱開始金額不會單獨被視為一次付費扣款。測試、已退款、失敗和不支援的更新/生命週期事件不會產生付費提醒。隱藏的支持者備註會省略。

Fourthwall 支援 ORDER_PLACED(purchase)、GIFT_PURCHASE(gift,接收者為其他人)、DONATION(一般贊助列)和 SUBSCRIPTION_PURCHASED(new_subscriber)。現有訂單總額保留 hasDonation 以保持回溯相容,標記為 meta.commerce.legacyDonationValue: true;這是對新商品銷售預設規則的明確例外。使用禮品卡的訂單會發出沒有贊助值的購買提醒:無法可靠地從訂單總額推斷新的扣款,且禮品卡購買已計入。帳單姓名和電子郵件地址不用於公開身分。儀表板測試事件和訂單更新不會產生付費提醒。

這些介接器保留現有的轉送、機器人動作、Event Flow 和目的地路由,並帶有 meta.webhookId 去重。它們提供公開姓名、純文字訊息,以及以下欄位中的已知商品名稱: subtitle,以及 ISO meta.commerce.currency 在適用時與數值型贊助值一併提供。它們不會新增退款記帳或新的接收端驗證;請使用提供者現有設定的 webhook 路由。

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 將推廣與活動分開。可選的 style、scale、cardevery、cardfor 和 onlytype URL 參數控制展示方式。現有提供者模式還接受 view 和排程控制項。請參閱 設定指南.

Throne 禮物事件

可選啟用的營利整合轉送帶簽章的 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。這些快照不包含 webhook 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 code 會連結至該位址。它絕不包含 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 (名額/隊伍), columns (1–20), visible,以及最多 120 個 spots。每個名額都有一個字串 id,純文字的 label, status (available/claimed/revealed)以及 result (純文字,揭曉前為空)。領取和揭曉是由主播輸入的顯示狀態,並非購買證據或隨機分配。

boards.sales 儲存最多 100 筆最近記錄: id, title,選用的 amount (未知時為 null), currency, quantity, source,以及 at (記錄時的 Unix 毫秒時間戳)。 automatic 啟用收集, salesVisible 控制顯示和 revision 在變化時遞增。自動收集僅接受 purchase 來自 Shopify、eBay 賣家、Fourthwall、Ko-fi 和 Buy Me a Coffee 的事件;排除私有/測試事件。它不會將拍賣中繼資料、贊助、禮物或名額認領視為購買。自動記錄不會用訂單總額、商品刊登價格或贊助金額代替商品單價。手動記錄使用 source: "Host confirmed".

狀態會持續儲存在此安裝實例的私有營利儲存空間中;公開快照不包含傳遞去重 ID、買家身分和機密資料。明確顯示的銷售記錄保留其事件 ID,以供移除。退款需要主持人手動移除。重複購買 ID 會單獨記憶(最多 2,000 個),包括清除可見歷史記錄之後。現有的 getCommerceState 回應包含 commerce.boards; commerceControl 接受以下文件中記載的面板/銷售命令: 面板指南。手動編輯會廣播更新後的狀態,但絕不會建立購買事件、贊助總額或付費獎勵。主播快照缺失 35 秒後,疊加畫面會隱藏。

賣家工作流程新增內容: commerce.boards.board.id 識別某一代面板。手動 saleAdd 可能提供 boardId 和 spotId 以不可分割的方式記錄銷售並認領該名額;仍在最近歷史記錄中的重複關聯銷售會遭拒絕。 saleRemove 帶有 reopenSpot: true 僅當面板代次仍相符時釋放該名額。公開銷售項目省略這些操作員關聯欄位。可選的 platform 在手動銷售記錄上保留其來源以供篩選,而 source: "Host confirmed" 識別確認方式。 amount 是該項目的總數,包括其 quantity。eBay 已付款訂單介接器的 meta.ebayPurchase.quantity 會保留。

salesSettings.auctionSource 啟用 Whatnot 或 eBay Live 商品助手。控制回應中的 commerce.auction 僅包含最近擷取內容中的 source、title、priceText、status 和 at: auction_update,或 null。五分鐘後過期,並在來源變更、閒置快照或重新啟動時清除。此輔助工具僅供操作員使用:既不持久儲存,也不納入面向觀眾的廣播;出價者/得標者身分會被捨棄。來源指令碼和拍賣事件承載資料保持不變。複製草稿不會確認付款,也不會建立銷售。

Event Flow audio controls

The Actions overlay accepts actionType: "play_audio" 帶有 audioUrl, volume (0–1), and optional audioPlayback: "queue" 或 "interrupt". Omitting the playback option keeps overlapping playback. Local media continues to use sourceType: "local", localAssetId,以及 localAssetName. Queue mode holds up to 30 waiting clips with a two-minute limit per clip; interrupt mode replaces that queue's current clip and clears its waiting items.

actionType: "stop_audio" stops Flow Actions audio clips and clears the sound queue. These are overlay control messages, not source chat events or proof that OBS output was heard. Event Flow resolves a configured random sound set to one audio URL before sending the action. See Event Flow setup.