REFERENCIA DE EVENTOS · FIREHOSE EN VIVO · TRANSMITIENDO AHORA

Todos los eventos de TikTok LIVE

Chat. Regalos. Likes. Entradas. Follows. Batallas. Suscripciones. Cada evento de TikTok LIVE llega por un solo WebSocket con metadatos completos. El feed de abajo es el firehose público real en este momento, no una maqueta.

Feed de eventos en vivo

0 eventos en búfer · transmisión pública real

Esperando el próximo evento en vivo...

El firehose público está oculto, pero cada evento es un envío real desde una sala real de TikTok LIVE. Conéctate con tu propia key para recibir el payload completo sin ocultar (usuarios reales, avatares reales, diamantes reales): lo único que cambia entre planes es el límite de conexiones simultáneas.

Suscríbete al firehose desde tu stack

Elige tu lenguaje. Copia. Ejecuta. Key Sandbox desde /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()

Cada evento, qué lo dispara y qué trae el payload

Todos los eventos comparten el envoltorio { event: string, data: object }. Abajo: cada tipo de evento y los datos que lleva.

chatMuy frecuente

Se dispara cuando un espectador envía un mensaje en el chat. Es el evento más común.

userObjectuniqueId, nickname, profilePictureUrl, badges
commentStringEl texto del mensaje
userIdStringID numérico de usuario de TikTok
{
  "event": "chat",
  "data": {
    "user": {
      "uniqueId": "viewer42",
      "nickname": "Viewer 42"
    },
    "comment": "Hello!",
    "userId": "7123456789"
  }
}

giftModerada

Se dispara cuando un espectador envía un regalo virtual. Incluye nombre del regalo, valor en diamantes y datos de la racha.

userObjectQuien lo envía
giftNameStringp. ej. "Rose", "Galaxy"
giftIdNumberID numérico del regalo
diamondCountNumberValor en diamantes
repeatCountNumberNúmero de la racha
repeatEndBooleanTrue cuando termina la racha
{
  "event": "gift",
  "data": {
    "user": {
      "uniqueId": "big_fan"
    },
    "giftName": "Rose",
    "giftId": 5655,
    "diamondCount": 1,
    "repeatCount": 5,
    "repeatEnd": true
  }
}

likeMuy frecuente

Se dispara cuando un espectador toca el botón de like. Incluye el total de likes acumulados.

userObjectQuien da like
likeCountNumberLikes de este evento
totalLikeCountNumberTotal de la transmisión
{
  "event": "like",
  "data": {
    "user": {
      "uniqueId": "liker1"
    },
    "likeCount": 15,
    "totalLikeCount": 12500
  }
}

memberModerada

Se dispara cuando un espectador entra a la sala de la transmisión en vivo.

userObjectUsuario que entra
{
  "event": "member",
  "data": {
    "user": {
      "uniqueId": "new_viewer",
      "nickname": "New Viewer"
    }
  }
}

followBaja

Se dispara cuando un espectador sigue al streamer durante el LIVE.

userObjectUsuario que sigue
{
  "event": "follow",
  "data": {
    "user": {
      "uniqueId": "new_follower"
    }
  }
}

shareBaja

Se dispara cuando un espectador comparte la transmisión en vivo.

userObjectUsuario que comparte
{
  "event": "share",
  "data": {
    "user": {
      "uniqueId": "sharer"
    }
  }
}

roomUserSeqPeriódica

Actualización periódica del número de espectadores. La forma principal de seguir los espectadores en tiempo real. El SDK también lo emite como viewer_count (alias, mismo payload).

viewerCountNumberEspectadores en vivo ahora mismo
topViewersArrayClasificados por interacción
{
  "event": "roomUserSeq",
  "data": {
    "viewerCount": 1234,
    "topViewers": [
      {
        "user": {
          "uniqueId": "top_fan"
        },
        "coinCount": 5000
      }
    ]
  }
}

subscribeRara

Se dispara cuando un espectador se suscribe al streamer.

userObjectSuscriptor
{
  "event": "subscribe",
  "data": {
    "user": {
      "uniqueId": "subscriber1"
    }
  }
}

linkMicBattleDurante batallas

Se dispara cuando una batalla de TikTok LIVE empieza, se actualiza o termina. Incluye puntuaciones + participantes.

battleUsersArrayParticipantes con sus puntuaciones
typeNumber1=inicio, 2=actualización, 3=fin
{
  "event": "linkMicBattle",
  "data": {
    "type": 1,
    "battleUsers": [
      {
        "uniqueId": "streamer1"
      },
      {
        "uniqueId": "streamer2"
      }
    ]
  }
}

roomPinRara

Se dispara cuando el streamer fija un mensaje del chat.

pinnedMessageObjectContenido del mensaje + remitente
{
  "event": "roomPin",
  "data": {
    "pinnedMessage": {
      "text": "Welcome!",
      "user": {
        "uniqueId": "streamer"
      }
    }
  }
}

Preguntas frecuentes

¿Necesito un plan de pago para recibir eventos?

No. El plan Sandbox es gratis y entrega el payload real completo de los eventos (usuarios reales, diamantes reales, etc.): tu cliente firma el WebSocket de origen con su propia cookie de TikTok. Los únicos límites fijos son 3 conexiones WebSocket simultáneas y 5,000 solicitudes REST/día. Basic, a $7/sem, sube el límite a 20 WS simultáneos + 10,000 solicitudes/día.

¿Qué evento se dispara más en una transmisión con mucha actividad?

`like` y `chat` dominan en frecuencia. `gift` es la señal de mayor valor por evento.

¿Puedo suscribirme a varios creadores de TikTok a la vez?

Sí. Abre un WebSocket por cada uniqueId. El plan Pro permite 50 WS simultáneos y Ultra 250.

¿Cómo detecto cuándo termina una racha de regalos?

Solo los regalos que admiten racha (`giftType` 1) hacen racha: espera `repeatEnd === true`, o ciérrala tú cuando no llegue un frame nuevo en unos segundos, y toma el `repeatCount` más alto. Los demás regalos nunca envían un frame de fin: un envío por cantidad, como 8x, es un solo frame con `repeatCount` 8, así que cuéntalo en cuanto llegue. En ambos casos, el total de diamantes = `diamondCount * repeatCount`.

¿Cuál es la latencia respecto a la transmisión real?

Los eventos llegan ~150-400ms después de dispararse en TikTok. Más rápido que el propio video en la mayoría de las CDNs.

¿Las batallas se disparan para ambos creadores?

Sí. Conéctate a cualquiera de los dos creadores de la batalla: ambos reciben el mismo evento `linkMicBattle` con los dos `battleUsers` completos.