イベントリファレンス · ライブFIREHOSE · 配信中

TikTok LIVEのイベントをすべて網羅

チャット。ギフト。いいね。入室。フォロー。バトル。サブスク。TikTok LIVEのあらゆるイベントが、豊富なメタデータ付きで一本のWebSocketに流れます。下のフィードはモックではなく、今まさに流れている本物の公開Firehoseです。

ライブイベントフィード

0件のイベントをバッファ中 · 本物の公開配信

次のライブイベントを待っています...

公開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, badges
commentStringメッセージ本文
userIdStringTikTokの数値ユーザー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中程度

視聴者が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`イベントを受け取れます。