单一计数器(观众、关注者、订阅者)使用纯整数,更丰富的上下文使用对象。一些较旧的事件,例如 Twitch DOM community_highlight,携带字符串。在读取对象属性前检查特定事件的数据结构;新增的结构化详情应放在对象中。
data.timestamp
数值(可选)
Unix milliseconds. Sources convert supplied event times before sending the message; SSN supplies receipt time when no valid timestamp is available. Structured event times in meta also use Unix milliseconds, with missing or invalid times omitted or null. Duration fields keep their documented units.
商业叠加层应使用位于以下位置的快照对象: meta (例如 auction_update 和 commerce_update),并避免临时添加顶层字段。
Network auction events from Whatnot and eBay include meta.captureId, an opaque page/connection marker. A change means consumers should review capture continuity. It is not an auction ID or proof of payment; it is reported with the next auction event.
来自 API 的聊天转发使用 meta.plainText 用于纯文本消息,与富文本 chatmessage 内容。它是文本而非 HTML,仍可包含 Unicode 表情。会员徽章回退为表情(⭐, 💝, 🏅, etc.) to remain consistent with DOM capture. Chat, paid support, and membership payloads include the native ID in meta.messageId when available, for deletion sync and pending bot reply cancellation.
YouTube 订阅者提醒(new_follower)
Social Stream 现在可以使用以下方式检测新的 YouTube 订阅者: myRecentSubscribers API 端点。其工作方式类似于 Streamlabs 订阅者提醒。
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 提醒框
Socket alerts identify Streamlabs with meta.platform: "streamlabs". The alert kind stays in type 和 event; meta.sourcePlatform identifies the upstream service when supplied.
Fan Club level: TikTok chat messages include meta.teamMemberLevel when an explicit Team level or numeric Fan Club badge level is available. It is a non-negative integer; 0 is an explicitly supplied zero, while an absent field means unknown. It excludes user-grade/gifter ranks and levels inferred from badge image filenames. Standard capture reads the numeric Fan Club badge metadata attached to each rendered chat message. The TikFinity activity-feed widget does not supply this field. For minimum-level filtering, use Compare Property → TikTok Team Level together with a TikTok source condition; messages with unknown levels do not match. The older meta.memberLevel field has capture-dependent meaning and should not be used for an exact Fan Club threshold.
其他可选字段包括 meta.catalogProductId (数据包的 product.productId), meta.parentProductId (product.parentId), meta.transactionType (Whatnot 的销售类型,保持不变),以及 meta.placeOrderErrorReason (Whatnot's supplied order/payment error code). These product references describe the catalog or parent listing; they do not replace an order ID. Stock quantity is not treated as purchased quantity. When product.breakInfo supplies them, meta.breakId, meta.breakSpotId,以及 meta.breakFormat preserve the platform values, including numeric IDs. Missing fields are omitted; titles are not used to infer spot identity or random team assignments.
meta 是整数型关注者数量。来源每 60 秒轮询一次卖家端点;该端点仍可能返回最长缓存 5 分钟的值。
auction_update
当前拍卖元数据变化时。
仅含元数据的事件。网络捕获会设置 meta.sourceMode 为 network 并提供 title、price、bidder、winner、bids、timer 和 endingAt。 meta.ebay 包含 eventId、listingId、GraphQL 商品记录(listing)、当前的公开 socket 商品信息(eventListing),以及最新的拍卖更新(update). These preserve category, images, currencies, quantities, case-break details, auction results and timing fields without flattening away platform detail. The GraphQL record is a fetched snapshot; the socket listing and update carry newer live state. Auction start, will-start, and end updates accept both the original and V2 event names; the original name remains in meta.ebay.update.typename. A sold result identifies the auction winner, not confirmed payment. Initial/reconnect history is folded into the current snapshot rather than emitted as old wins. Removing all presented listings emits status: "idle" 带有 cardCount: 0 以清除拍卖。DOM 回退保留播放器卡片或活动预览字段。
meta includes reward/redemption id, title, cost, status, user input, and redeemer. Structured redemptions are shown once per redemption id during capture; rejected updates and redemptions from before capture started are ignored. New redemptions that arrive already accepted are supported when their original redemption time is supplied.
new_subscriber
channel.subscription.new.
membership 分配给订阅者角色; meta 包含 { subscriber, plan }。
Forwards Lumni's chat and event rows with type: "lumni". Text-only mode converts HTML message bodies to plain text; donation display amounts stay in hasDonation, with optional numeric USD donoValue.
The Hide events setting suppresses event rows. joined also requires Capture "joined" stream events. Viewer updates require the viewer-count or hype setting.
Dock replies use the connected account's key to send plain-text messages of up to 300 characters. Disconnect stops polling and sending; Forget key removes the saved key for the selected server.
Connects with Socket.IO to the Hou.la event channel (https://api.hou.la/events, path /ws) using an event key (hle_) the creator generates in the Hou.la Studio. Open the page with the Social Stream Ninja extension or in SSApp. Messages use the normal Social Stream settings and destinations.
The event-key page is read-only. Neither mode synchronizes deletions; remove deleted messages from the dock manually. Message formatting follows the Text-only setting. Standard capture forwards new chat rows, excluding existing history, pending comments and visible deletion notices; use the event-key page for donation values, gifts, follows and viewer counts.
事件
触发时机
载荷说明
message
A new standard chat row, or a Hou.la comment event (an approved live comment).
chatname 和 chatimg identify the commenter; event-key capture also supplies userid. chatmessage is plain text when textonly is enabled, otherwise escaped HTML. mod 和 bot are set when available. Event-key capture adds hasDonation (100 coins) and numeric USD donoValue, estimated at $0.015 per coin, for paid comments; event stays blank.
gift
Hou.la gift event (a virtual gift sent during the live).
chatmessage is the gift name with its quantity (Dragon x3), hasDonation the coin total (150 coins), donoValue the numeric USD estimate at $0.015 per coin, and contentimg the gift image. meta 携带 giftId, giftSlug, quantity, coins. Recent replays are dropped using the live and transaction ID.
new_follower
Hou.la follow event (a new follower during the live).
chatname / chatimg identify the follower.
viewer_update
Viewer count stamped on Hou.la event envelopes. While connected, the last known count is repeated every 30 seconds.
meta is the viewer integer. Sent only with capture enabled and either viewer counts or hype mode enabled. No count is sent before Hou.la supplies one.
实现: sources/instagram.js 和 sources/instagramlive.js (identical copies), plus the optional Graph API bridge at sources/websocket/instagram.html
The API bridge polls Graph API comments for one chosen media item. A live video emits type: "instagramlive" and a post or Reel emits type: "instagram"; platform carries the same value. Comments are plain text (textonly: true) with an empty chatimg, userid when the API returns the author ID, and timestamp in Unix milliseconds when valid. meta.messageId is the native comment ID and meta.mediaId the media it belongs to. Comments that already exist when capture starts are shown on the page as history and not forwarded; hidden comments are skipped.
在直播页面上(/<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.
打开 https://razo.tv/watch/USERNAME. In the desktop app, paste that URL into 添加其他来源(Add other source) and activate it. The signed-in dashboard chat popout and complete Chat overlay link from Creator Studio also work as source URLs.
Captures ordinary Razo chat, including loaded history, once per native message ID during the page session. Messages received while capture is off are skipped.
Chat uses type: "razo" 和 platform: "razo", with display name, username, name color, image badges and message text or emotes. Text-only mode uses emote alt text.
Visible “Message removed” updates remove the corresponding captured message. Paid cards, activity notices, private staff/bot notices and imported multichat rows are excluded; use Razo for those features.
Cloud API capture emits plain-text chat and tip rows with type: "chaturbate". Tips carry hasDonation in tokens and numeric meta.tokens; they do not set a USD override. Anonymous tips use "Anonymous" and omit the sender identity. Media purchases use event: "purchase", the media name in subtitle,以及 meta.mediaId 和 meta.mediaType. meta.messageId preserves the native event ID; id is scoped to the broadcaster in meta.channel. Private messages and initial history are excluded. A tip amount does not identify a tip-menu purchase.
When Breaks has saved state, monetization_update 包含 meta.monetization.breaks. It is null without an active break; otherwise version 1 contains revision, id, title, stage, visible, layout, columns, accent, showBuyers, showPrices, availableOnly, currency, highlight, highlightAt, and up to 120 spots. Spots expose only id, label, buyer, asking price, status, revealed result, description, and image. Buyer names and asking prices are omitted as empty/null when their display options are off. Notes, payment status, paid amounts, costs, stock, stock records, undo, and history are never included. These are host-managed assignments, not platform payment events. Event Flow Breaks results expose only the revision, active ID, and stage. Run a break.
Local Event Flow triggers break_started 和 break_finished fire after a private workspace stage change commits. They use type 和 platformsocialstream, chatname: "Breaks", and the public break title in chatmessage 带有 textonly: true. They are sent directly to the host's Event Flow engine, not broadcast as chat rows. They contain no buyer, order, payment, packing or stock fields. Repeatedly saving the same stage does not fire another event; changing away and back can.
Event Flow 在 Event Type 和 Other Event 触发器中提供这些事件名称。打赏触发器仍检查 hasDonation;Gift Sub 触发器保留会员语义。Compare Property 接受嵌套路径,例如 meta.commerce.recipient。操作模板接受 {meta.commerce.quantity} 和 {meta.commerce.currency},以及现有的 {donation}, {subtitle},以及 {meta}。嵌套路径区分大小写,缺失值显示为空,并禁止遍历原型。
Patreon new pledges
Standard Patreon chat uses a patreon:chat:-prefixed message ID scoped to the chat, so separate messages with identical text remain distinct when duplicate filtering is enabled. When viewer counts are enabled and the page exposes its online-viewer counter, the source emits viewer_update with a numeric meta count.
The signed Patreon receiver maps members:pledge:create 为 type/platform: "patreon" 和 event: "new_subscriber". It requires a campaign/member identity and a current pledge_relationship_start on or after the connection was enabled. Free trials, gifted memberships, declined/former memberships and other event types are excluded.
membership 和 subtitle contain the tier when available; chatname is the supplied name or Anonymous. chatmessage 是纯文本(textonly: true), with a labelled pledge amount only when both amount and campaign currency are supplied. No hasDonation 或 donoValue is set: a new pledge is not a payment receipt. Emails, addresses, notes, raw member IDs and account URLs are excluded.
The stable patreon:-prefixed event ID is derived from campaign, member and pledge-chain start, preserving separate pledges with identical text. Delivery retries reuse that ID. Pending events and retry records are retained for seven days; workflows with irreversible external actions should also guard by event ID against interruption between processing and acknowledgment. Connect Patreon alerts.