イベントリファレンス · ライブFIREHOSE · 配信中
TikTok LIVEのイベントをすべて網羅
チャット。ギフト。いいね。入室。フォロー。バトル。サブスク。TikTok LIVEのあらゆるイベントが、豊富なメタデータ付きで一本のWebSocketに流れます。下のフィードはモックではなく、今まさに流れている本物の公開Firehoseです。
ライブイベントフィード
次のライブイベントを待っています...
公開Firehoseはマスクされていますが、どのイベントも本物のTikTok LIVEルームから届いた本物のデータです。自分のキーで接続すれば、マスクなしの完全なペイロード(本物のユーザー名、本物のアバター、本物のダイヤモンド数)を受け取れます。プランによって変わるのは同時接続数の上限だけです。
あなたの環境で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()すべてのイベント、発火するタイミング、ペイロードの中身
すべてのイベントは共通のエンベロープ{ event: string, data: object }を使います。以下はすべてのイベントタイプと、そのデータの内容です。
chat非常に多い
視聴者がチャットメッセージを送ったときに発火します。最も多いイベントです。
userObjectuniqueId, nickname, profilePictureUrl, badgescommentStringメッセージ本文userIdStringTikTokの数値ユーザーID{
"event": "chat",
"data": {
"user": {
"uniqueId": "viewer42",
"nickname": "Viewer 42"
},
"comment": "Hello!",
"userId": "7123456789"
}
}gift中程度
視聴者がバーチャルギフトを送ったときに発火します。ギフト名、ダイヤモンド価値、連続送信のデータを含みます。
userObject送信者giftNameString例: "Rose"、"Galaxy"giftIdNumber数値のギフトIDdiamondCountNumberダイヤモンド価値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中程度
視聴者がLIVEルームに入室したときに発火します。
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(同じペイロードの別名)としても送ります。
viewerCountNumber現在の視聴者数topViewersArrayエンゲージメント順{
"event": "roomUserSeq",
"data": {
"viewerCount": 1234,
"topViewers": [
{
"user": {
"uniqueId": "top_fan"
},
"coinCount": 5000
}
]
}
}subscribeまれ
視聴者が配信者をサブスクしたときに発火します。
userObjectサブスクしたユーザー{
"event": "subscribe",
"data": {
"user": {
"uniqueId": "subscriber1"
}
}
}linkMicBattleバトル中
TikTok LIVEのバトルが始まったとき、更新されたとき、終わったときに発火します。スコアと参加者を含みます。
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プランは無料で、本物のイベントペイロード(本物のユーザー名、本物のダイヤモンドなど)をそのまま受け取れます。上流のWebSocketには、クライアントが自分のTikTok Cookieで署名します。上限はWebSocketの同時接続3本とRESTリクエスト5,000回/日だけです。$7/週のBasicなら、同時WS接続20本 + 10,000リクエスト/日に上がります。
人気の配信で一番よく発火するイベントは?
頻度では`like`と`chat`が圧倒的です。イベントあたりの価値が一番高いのは`gift`です。
複数のTikTokクリエイターを同時に購読できますか?
はい。uniqueIdごとにWebSocketを一本ずつ開いてください。Proプランでは同時WS接続50本、Ultraでは250本まで使えます。
ギフトの連続送信が終わったことを検出するには?
連続送信があるのは連続送信できるギフト(`giftType` 1)だけです。`repeatEnd === true`を待つか、数秒間新しいフレームが届かなければ自分で終了扱いにして、最大の`repeatCount`を使ってください。それ以外のギフトは終了フレームを送りません。8xのような数量指定の送信は`repeatCount` 8の一つのフレームなので、届いた時点で数えてください。どちらの場合も、ダイヤモンドの合計 = `diamondCount * repeatCount`です。
実際の配信と比べたレイテンシは?
イベントはTikTokで発火してから約150-400msで届きます。ほとんどのCDNでは、配信映像そのものより速く届きます。
バトルのイベントは両方のクリエイターで発火しますか?
はい。バトル中のどちらのクリエイターに接続しても、両方の`battleUsers`が入った同じ`linkMicBattle`イベントを受け取れます。