RÉFÉRENCE DES ÉVÉNEMENTS · FIREHOSE LIVE · EN DIRECT
Tout le vocabulaire d'événements de TikTok LIVE
Chat. Cadeaux. Likes. Arrivées. Follows. Battles. Abonnements. Chaque événement des streams TikTok LIVE passe par un seul WebSocket avec des métadonnées riches. Le flux ci-dessous est le vrai firehose public en ce moment - pas une maquette.
Flux d'événements en direct
En attente du prochain événement live...
Le firehose public est masqué, mais chaque événement est un vrai push venant d'une vraie salle TikTok LIVE. Connecte-toi avec ta propre clé pour recevoir le payload complet sans masquage (vrais pseudos, vrais avatars, vrais nombres de diamants) - la seule chose qui change d'une offre à l'autre, c'est la limite de connexions simultanées.
Abonne-toi au firehose dans ta stack
Choisis ton langage. Copie. Lance. Clé sandbox sur /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()Chaque événement, ce qui le déclenche, ce que contient le payload
Tous les événements partagent l'enveloppe { event: string, data: object }. Ci-dessous : chaque type d'événement et les données qu'il transporte.
chatTrès fréquent
Déclenché quand un spectateur envoie un message dans le chat. L'événement le plus courant.
userObjectuniqueId, nickname, profilePictureUrl, badgescommentStringLe texte du messageuserIdStringID numérique de l'utilisateur TikTok{
"event": "chat",
"data": {
"user": {
"uniqueId": "viewer42",
"nickname": "Viewer 42"
},
"comment": "Hello!",
"userId": "7123456789"
}
}giftModéré
Déclenché quand un spectateur envoie un cadeau virtuel. Inclut le nom du cadeau, sa valeur en diamants et les données de série.
userObjectExpéditeurgiftNameStringex. "Rose", "Galaxy"giftIdNumberID numérique du cadeaudiamondCountNumberValeur en diamantsrepeatCountNumberNombre dans la sérierepeatEndBooleanTrue à la fin de la série{
"event": "gift",
"data": {
"user": {
"uniqueId": "big_fan"
},
"giftName": "Rose",
"giftId": 5655,
"diamondCount": 1,
"repeatCount": 5,
"repeatEnd": true
}
}likeTrès fréquent
Déclenché quand un spectateur appuie sur le bouton like. Inclut le total de likes cumulés.
userObjectAuteur du likelikeCountNumberNombre pour cet événementtotalLikeCountNumberTotal du stream{
"event": "like",
"data": {
"user": {
"uniqueId": "liker1"
},
"likeCount": 15,
"totalLikeCount": 12500
}
}memberModéré
Déclenché quand un spectateur rejoint la salle du live.
userObjectUtilisateur qui arrive{
"event": "member",
"data": {
"user": {
"uniqueId": "new_viewer",
"nickname": "New Viewer"
}
}
}followFaible
Déclenché quand un spectateur suit le streamer pendant le live.
userObjectUtilisateur qui suit{
"event": "follow",
"data": {
"user": {
"uniqueId": "new_follower"
}
}
}shareFaible
Déclenché quand un spectateur partage le live.
userObjectUtilisateur qui partage{
"event": "share",
"data": {
"user": {
"uniqueId": "sharer"
}
}
}roomUserSeqPériodique
Mise à jour périodique du nombre de spectateurs. Le moyen principal de suivre l'audience en temps réel. Le SDK l'émet aussi sous le nom viewer_count (alias, même payload).
viewerCountNumberSpectateurs en ce momenttopViewersArrayClassés par engagement{
"event": "roomUserSeq",
"data": {
"viewerCount": 1234,
"topViewers": [
{
"user": {
"uniqueId": "top_fan"
},
"coinCount": 5000
}
]
}
}subscribeRare
Déclenché quand un spectateur s'abonne au streamer.
userObjectAbonné{
"event": "subscribe",
"data": {
"user": {
"uniqueId": "subscriber1"
}
}
}linkMicBattlePendant les battles
Déclenché quand une battle TikTok LIVE commence, évolue ou se termine. Inclut les scores et les participants.
battleUsersArrayParticipants avec leurs scorestypeNumber1=début, 2=mise à jour, 3=fin{
"event": "linkMicBattle",
"data": {
"type": 1,
"battleUsers": [
{
"uniqueId": "streamer1"
},
{
"uniqueId": "streamer2"
}
]
}
}roomPinRare
Déclenché quand le streamer épingle un message du chat.
pinnedMessageObjectContenu du message + expéditeur{
"event": "roomPin",
"data": {
"pinnedMessage": {
"text": "Welcome!",
"user": {
"uniqueId": "streamer"
}
}
}
}Questions fréquentes
Faut-il une offre payante pour recevoir les événements ?
Pas pour évaluer. La clé Sandbox fonctionne pendant 7 jours et fournit le vrai payload complet (vrais pseudos, vrais diamants, etc.) - ton client signe le WebSocket amont avec son propre cookie TikTok. Pendant l'évaluation, les limites sont 3 connexions WebSocket simultanées et 5 000 requêtes REST/jour. Après 7 jours, une offre payante est nécessaire ; Basic à $7/sem. donne 20 WS simultanés + 10 000 req/jour.
Quel événement se déclenche le plus souvent sur un stream chargé ?
`like` et `chat` dominent en fréquence. `gift` est le signal le plus précieux par événement.
Puis-je m'abonner à plusieurs créateurs TikTok en même temps ?
Oui. Ouvre un WebSocket par uniqueId. L'offre Pro permet 50 WS simultanés, Ultra 250.
Comment détecter la fin d'une série de cadeaux ?
Seuls les cadeaux à série (`giftType` 1) font une série : surveille `repeatEnd === true`, ou clôture-la toi-même quand aucune nouvelle trame n'arrive pendant quelques secondes, et garde le `repeatCount` le plus élevé. Les autres cadeaux n'envoient jamais de trame de fin : un envoi en quantité comme 8x est une seule trame avec `repeatCount` 8, donc compte-le dès son arrivée. Dans les deux cas, le total de diamants = `diamondCount * repeatCount`.
Quelle est la latence par rapport au stream réel ?
Les événements arrivent environ 150-400ms après leur déclenchement sur TikTok. Plus vite que le flux vidéo lui-même sur la plupart des CDN.
Les battles se déclenchent-elles pour les deux créateurs ?
Oui. Connecte-toi à l'un ou l'autre créateur de la battle - les deux reçoivent le même événement `linkMicBattle` avec les deux `battleUsers` renseignés.