Как работает WebSocket TikTok LIVE
TikTool предоставляет управляемый WebSocket-эндпоинт wss://api.tik.tools, который стримит события любой трансляции TikTok LIVE в реальном времени. Вы подключаетесь с API-ключом и никнеймом в TikTok - сервер сам берёт на себя протокол, авторизацию и переподключение.
В отличие от прямого подключения к инфраструктуре трансляций TikTok (которое часто ломается), WebSocket API TikTool - это стабильный ретранслятор продакшен-уровня.
Быстрый старт - подключение в 3 строки
JavaScript / Node.js
import { TikTokLive } from '@tiktool/live'
const client = new TikTokLive({ uniqueId: 'streamer_username', apiKey: 'YOUR_KEY' })
client.on('chat', e => console.log(`${e.user.uniqueId}: ${e.comment}`))
client.connect()Или подключайтесь напрямую через нативный WebSocket (SDK не нужен):
const ws = new WebSocket('wss://api.tik.tools?uniqueId=USERNAME&apiKey=YOUR_KEY')
ws.onmessage = (msg) => {
const event = JSON.parse(msg.data)
console.log(event.event, event.data)
}Python
import asyncio, websockets, json
async def connect():
uri = "wss://api.tik.tools?uniqueId=USERNAME&apiKey=YOUR_KEY"
async with websockets.connect(uri) as ws:
async for message in ws:
event = json.loads(message)
print(event["event"], event.get("data", {}))Любой язык
Подходит любой язык с поддержкой WebSocket - Go, Rust, Java, C#, Ruby, PHP. Просто подключитесь к:
wss://api.tik.tools?uniqueId=TIKTOK_USERNAME&apiKey=YOUR_API_KEYПараметры WebSocket-подключения
uniqueId✓Никнейм стримера в TikTok (без @)apiKey✓Ваш API-ключ TikTooljwtKeyАвторизация по JWT (альтернатива apiKey для браузерных клиентов с токенами)Типы событий
Каждое сообщение WebSocket - это JSON-объект с полями event и data. Вот какие события вы будете получать:
chatНовое сообщение зрителя в чате. Содержит данные пользователя, текст сообщения и бейджи.
giftВиртуальный подарок от зрителя. Содержит название подарка, стоимость в алмазах и число повторов.
likeЗритель поставил лайк стриму. Содержит общее число лайков.
memberЗритель зашёл на стрим. Срабатывает, когда пользователь входит в комнату эфира.
socialПодписка / репост / избранное. Поле data.action показывает, что именно (follow, share, favourite).
roomUserSeqОбновление числа зрителей. Содержит текущие viewerCount и topViewers.
subscribeЗритель оформил подписку на стримера.
battleСобытие баттла LinkMic. Содержит статус баттла, счёт, длительность и участников.
battleArmiesОбновление армий баттла. Счёт команд и рейтинг участников.
linkMicОбновление раскладки гостей LinkMic. Содержит ID слотов/гостей для эфиров с несколькими ведущими.
roomPinСтример закрепил сообщение в чате.
liveIntroОбновление описания стрима. Содержит название и описание трансляции.
emoteChatКастомный эмоут в чате. Содержит ID эмоута и URL изображения.
envelopeСобытие сундука / красного конверта на стриме.
questionВопрос от зрителя в режиме вопросов и ответов.
rankUpdateОбновление места стримера в региональном рейтинге.
barrageСообщение-баннер/объявление вверху экрана.
superFanЗритель стал Super Fan или повысил уровень. Содержит новый уровень.
superFanJoinSuper Fan зашёл в комнату.
superFanBoxСобытие бокса / награды Super Fan.
controlУправление жизненным циклом стрима (пауза, завершение и т. д.).
Лимиты подключений по тарифам
Обработка ошибок и переподключение
WebSocket закрывается со стандартными кодами закрытия. Ваш клиент должен сам обрабатывать переподключение:
// Auto-reconnect pattern (Node.js)
function connect() {
const ws = new WebSocket('wss://api.tik.tools?uniqueId=USERNAME&apiKey=KEY')
ws.onmessage = (msg) => {
const event = JSON.parse(msg.data)
// Process event
}
ws.onclose = (e) => {
console.log(`Disconnected (${e.code}). Reconnecting in 3s...`)
setTimeout(connect, 3000)
}
ws.onerror = (err) => {
console.error('WebSocket error:', err.message)
ws.close()
}
}
connect()