事件參考 · 即時 FIREHOSE · 串流中

TikTok LIVE 的完整事件清單

聊天、禮物、按讚、進場、追蹤、PK、訂閱。TikTok LIVE 上的每個事件都透過同一條 WebSocket 串流,附完整中繼資料。下方的動態就是此刻真實的公開 firehose,不是示意圖。

即時事件動態

已緩衝 0 個事件 · 真實公開直播

等待下一個直播事件...

公開 firehose 有遮蔽,但每個事件都是來自真實 TikTok LIVE 直播間的真實推送。用你自己的金鑰連線,就能收到完整顯示的 payload(真實使用者名稱、真實頭像、真實鑽石數)。各方案之間唯一的差別是同時連線數上限。

在你的技術堆疊裡訂閱 firehose

選語言、複製、執行。Sandbox 金鑰請到 /pricing 取得。

import { TiktokLiveClient } from '@tiktool/live'

const client = new TiktokLiveClient({
  apiKey: process.env.TIKTOOL_API_KEY,
  uniqueId: 'tiktok_handle_here',
})

client.on('gift', (e) => {
  console.log(`${e.user.uniqueId} sent ${e.giftName} (${e.diamondCount} diamonds)`)
})

client.on('chat', (e) => console.log(`${e.user.uniqueId}: ${e.comment}`))
client.on('member', (e) => console.log(`+ join ${e.user.uniqueId}`))
client.on('like', (e) => console.log(`+ ${e.likeCount} likes`))
client.on('linkMicBattle', (e) => console.log('battle update', e.battleUsers))

await client.connect()

每個事件:觸發時機和 payload 內容

所有事件共用 { event: string, data: object } 外層格式。以下是每種事件類型和它攜帶的資料。

chat非常頻繁

觀眾送出聊天訊息時觸發。最常見的事件。

userObjectuniqueId, nickname, profilePictureUrl, badges
commentString訊息內容
userIdString數字形式的 TikTok 使用者 ID
{
  "event": "chat",
  "data": {
    "user": {
      "uniqueId": "viewer42",
      "nickname": "Viewer 42"
    },
    "comment": "Hello!",
    "userId": "7123456789"
  }
}

gift中等

觀眾送出直播禮物時觸發。包含禮物名稱、鑽石價值和連送資料。

userObject送禮者
giftNameString例如 "Rose"、"Galaxy"
giftIdNumber數字形式的禮物 ID
diamondCountNumber鑽石價值
repeatCountNumber連送次數
repeatEndBoolean連送結束時為 true
{
  "event": "gift",
  "data": {
    "user": {
      "uniqueId": "big_fan"
    },
    "giftName": "Rose",
    "giftId": 5655,
    "diamondCount": 1,
    "repeatCount": 5,
    "repeatEnd": true
  }
}

like非常頻繁

觀眾點按讚按鈕時觸發。包含累計總按讚數。

userObject按讚者
likeCountNumber本次事件的數量
totalLikeCountNumber直播總數
{
  "event": "like",
  "data": {
    "user": {
      "uniqueId": "liker1"
    },
    "likeCount": 15,
    "totalLikeCount": 12500
  }
}

member中等

觀眾進入直播間時觸發。

userObject進場的使用者
{
  "event": "member",
  "data": {
    "user": {
      "uniqueId": "new_viewer",
      "nickname": "New Viewer"
    }
  }
}

follow低

觀眾在直播中追蹤直播主時觸發。

userObject追蹤的使用者
{
  "event": "follow",
  "data": {
    "user": {
      "uniqueId": "new_follower"
    }
  }
}

share低

觀眾分享直播時觸發。

userObject分享的使用者
{
  "event": "share",
  "data": {
    "user": {
      "uniqueId": "sharer"
    }
  }
}

roomUserSeq定期

定期的觀看人數更新,是追蹤即時觀看人數的主要方式。SDK 也會以 viewer_count 發出(別名,payload 相同)。

viewerCountNumber目前即時觀眾數
topViewersArray依互動程度排名
{
  "event": "roomUserSeq",
  "data": {
    "viewerCount": 1234,
    "topViewers": [
      {
        "user": {
          "uniqueId": "top_fan"
        },
        "coinCount": 5000
      }
    ]
  }
}

subscribe少見

觀眾訂閱直播主時觸發。

userObject訂閱者
{
  "event": "subscribe",
  "data": {
    "user": {
      "uniqueId": "subscriber1"
    }
  }
}

linkMicBattlePK 期間

TikTok LIVE PK 開始、更新或結束時觸發。包含分數和參與者。

battleUsersArray參與者與分數
typeNumber1=開始、2=更新、3=結束
{
  "event": "linkMicBattle",
  "data": {
    "type": 1,
    "battleUsers": [
      {
        "uniqueId": "streamer1"
      },
      {
        "uniqueId": "streamer2"
      }
    ]
  }
}

roomPin少見

直播主置頂聊天訊息時觸發。

pinnedMessageObject訊息內容 + 發送者
{
  "event": "roomPin",
  "data": {
    "pinnedMessage": {
      "text": "Welcome!",
      "user": {
        "uniqueId": "streamer"
      }
    }
  }
}

常見問題

要付費方案才能收到事件嗎?

評估階段不用。Sandbox 金鑰可使用 7 天,並提供完整的真實事件 payload(真實使用者名稱、真實鑽石等),你的用戶端會用自己的 TikTok cookie 簽署上游 WebSocket。評估期間的上限是 3 個同時 WebSocket 連線和每天 5,000 次 REST 請求。7 天後需要付費方案;Basic 每週 $7,提供 20 個同時 WS + 每天 10,000 次請求。

熱門直播中哪個事件觸發最頻繁?

`like` 和 `chat` 的頻率最高。`gift` 則是每個事件價值最高的訊號。

可以同時訂閱多位 TikTok 直播主嗎?

可以。每個 uniqueId 開一條 WebSocket。Pro 方案可同時開 50 條 WS,Ultra 可開 250 條。

怎麼偵測禮物連送結束?

只有可連送的禮物(`giftType` 1)才有連送:留意 `repeatEnd === true`,或幾秒內沒有新的 frame 就自行結束,取最大的 `repeatCount`。其他禮物不會送結束 frame:像 8 個一次送出這種數量送禮,就是一個 `repeatCount` 為 8 的 frame,收到時直接計算即可。不管哪種,總鑽石數都是 `diamondCount * repeatCount`。

跟實際直播相比延遲多少?

事件在 TikTok 上觸發後約 150-400 毫秒送達。在大多數 CDN 上比直播影像本身還快。

PK 事件兩位直播主都會觸發嗎?

會。連上 PK 中任一位直播主都可以,兩邊都會收到同樣的 `linkMicBattle` 事件,`battleUsers` 裡兩位都有資料。