СПРАВОЧНИК СОБЫТИЙ · ЖИВОЙ ПОТОК · ПРЯМО СЕЙЧАС

Полный словарь событий TikTok LIVE

Чат. Подарки. Лайки. Входы. Подписки. Баттлы. Платные подписки. Каждое событие на трансляциях TikTok LIVE приходит через один WebSocket с подробными метаданными. Лента ниже - это настоящий публичный поток прямо сейчас, а не макет.

Живая лента событий

Событий в буфере: 0 · настоящий публичный поток

Ждём следующее событие в эфире...

Публичный поток замаскирован, но каждое событие - настоящий пуш из настоящей комнаты 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, badges
commentStringТекст сообщения
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`.