СПРАВОЧНИК СОБЫТИЙ · ЖИВОЙ ПОТОК · ПРЯМО СЕЙЧАС
Полный словарь событий TikTok LIVE
Чат. Подарки. Лайки. Входы. Подписки. Баттлы. Платные подписки. Каждое событие на трансляциях TikTok LIVE приходит через один WebSocket с подробными метаданными. Лента ниже - это настоящий публичный поток прямо сейчас, а не макет.
Живая лента событий
Ждём следующее событие в эфире...
Публичный поток замаскирован, но каждое событие - настоящий пуш из настоящей комнаты TikTok LIVE. Подключитесь со своим ключом, чтобы получать полные данные без маскировки (настоящие никнеймы, аватарки и количество алмазов) - между тарифами меняется только лимит одновременных подключений.
Подпишитесь на поток в своём стеке
Выберите язык. Скопируйте. Запустите. Ключ 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Текст сообщенияuserIdStringЧисловой ID пользователя TikTok{
"event": "chat",
"data": {
"user": {
"uniqueId": "viewer42",
"nickname": "Viewer 42"
},
"comment": "Hello!",
"userId": "7123456789"
}
}giftУмеренно
Срабатывает, когда зритель отправляет виртуальный подарок. Содержит название подарка, стоимость в алмазах и данные о серии.
userObjectОтправительgiftNameStringнапример, "Rose", "Galaxy"giftIdNumberЧисловой ID подаркаdiamondCountNumberСтоимость в алмазахrepeatCountNumberДлина серииrepeatEndBooleanTrue, когда серия закончилась{
"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 (алиас, те же данные).
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 работает 7 дней и отдаёт полные реальные данные событий (настоящие никнеймы, настоящие алмазы и т. д.) - ваш клиент подписывает исходный WebSocket своей cookie TikTok. Во время оценки лимиты - 3 одновременных WebSocket-подключения и 5 000 REST-запросов в день. Через 7 дней нужен платный тариф; Basic за $7/нед. даёт 20 одновременных WS и 10 000 запросов в день.
Какое событие чаще всего срабатывает на активном стриме?
По частоте лидируют `like` и `chat`. `gift` - самый ценный сигнал в расчёте на одно событие.
Можно подписаться на нескольких стримеров TikTok сразу?
Да. Открывайте по одному WebSocket на каждый uniqueId. Тариф Pro позволяет 50 одновременных WS, Ultra - 250.
Как понять, что серия подарков закончилась?
Серию дают только серийные подарки (`giftType` 1): ждите `repeatEnd === true` или закрывайте серию сами, если несколько секунд не приходит новый фрейм, и берите максимальный `repeatCount`. Остальные подарки никогда не присылают завершающий фрейм: отправка сразу нескольких штук, например 8x, - это один фрейм с `repeatCount` 8, так что считайте его сразу по приходу. В любом случае всего алмазов = `diamondCount * repeatCount`.
Какая задержка относительно самого стрима?
События приходят через ~150-400 мс после того, как происходят в TikTok. На большинстве CDN это быстрее, чем само видео.
Приходят ли события баттла для обоих стримеров?
Да. Подключайтесь к любому из стримеров в баттле - оба получают одно и то же событие `linkMicBattle`, где заполнены оба `battleUsers`.