事件参考 · 实时全量事件流 · 正在推送

TikTok LIVE 的完整事件词汇表

弹幕、礼物、点赞、进场、关注、PK、订阅。TikTok LIVE 上的每个事件都通过同一条 WebSocket 推送,并附带丰富的元数据。下方是此刻真实的公开全量事件流,不是演示效果图。

实时事件流

已缓冲 0 个事件 · 真实公开直播

正在等待下一个直播事件...

公开全量事件流已脱敏,但每个事件都是来自真实 TikTok 直播间的真实推送。用你自己的 Key 连接即可接收完整的不脱敏 payload(真实用户名、真实头像、真实钻石数)。不同套餐之间唯一的区别是并发连接上限。

在你的技术栈中订阅全量事件流

选择语言,复制,运行。Sandbox Key 可在 /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消息内容
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中等

观众进入直播间时触发。

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 Key 可使用 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`,或者在几秒内没有新帧时自行结束,并取最大的 `repeatCount`。其他礼物从不发送结束帧:像 8x 这样的批量赠送只有一帧,`repeatCount` 为 8,收到时直接计数即可。无论哪种情况,总钻石数 = `diamondCount * repeatCount`。

相比实际直播画面,延迟是多少?

事件在 TikTok 上触发后约 150-400ms 送达,在大多数 CDN 上比视频流本身还快。

PK 事件会为双方主播都触发吗?

会。连接 PK 中任意一位主播即可,双方都会收到同一个 `linkMicBattle` 事件,且 `battleUsers` 中包含双方数据。