Vfinity2.0 α
Desarrolladores

Puente personalizado de TikTok

Conecta Vfinity a un conector de TikTok LIVE que ejecutes tú mismo, en lugar del puente integrado

Normalmente, Vfinity inicia su propio asistente de TikTok cuando te conectas. Si ya ejecutas un conector, como TikFinity o uno desarrollado por ti, Vfinity puede leer los eventos de TikTok LIVE directamente desde su WebSocket.

Puente integrado (Vfinity)

Se inicia con Vfinity y se comunica con él de forma privada, sin abrir ningún puerto. Puede volver a unirse a un LIVE interrumpido, esperar a que comience tu directo y notificar los roles de cada espectador.

WebSocket personalizado (TikFinity u otro)

Se conecta a un servidor WebSocket que mantienes en ejecución. Vfinity lee cualquier evento que este envíe, y tu conector decide cómo y cuándo unirse al LIVE.

Tus eventos, alertas, lanzamientos, metas y clasificaciones funcionan exactamente igual de ambas formas. Twitch, Kick y YouTube no se ven afectados por esta opción.

Cambiar a tu conector

Desconectar TikTok

El tipo de conexión queda bloqueado mientras TikTok esté conectado. Haz clic primero en Desconectar en la tarjeta de TikTok LIVE en AjustesConexiones.

Elegir WebSocket personalizado

En la misma tarjeta, abre Conexión avanzada de TikTok y establece Tipo de conexión en WebSocket personalizado (TikFinity u otro).

Introducir su dirección

Rellena Host de WebSocket y Puerto de WebSocket para que coincidan con tu conector. Vfinity viene configurado por defecto con localhost y 21213.

Conectar

Inicia tu conector y haz clic en Conectar al LIVE. Vfinity se conectará a ws://host:puerto y considerará la sala como unida en cuanto se abra el socket.

La tarjeta de TikTok LIVE en Ajustes › Conexiones aloja el nombre de usuario y el tipo de conexión bajo Conexión avanzada de TikTok.

El asistente integrado no abre ningún puerto propio, por lo que nada en Vfinity compite con tu conector por su puerto.

Lo que Vfinity envía a tu conector

Si el campo Nombre de usuario de TikTok está relleno, Vfinity solicita a tu conector unirse a ese LIVE en cuanto se abre el socket:

{ "command": "connect", "username": "tu_nombre" }

Deja el nombre de usuario vacío si tu conector ya sabe a qué LIVE debe unirse.

Al hacer clic en Actualizar lista de regalos, se envía {"command":"getGifts"}. Responde con un mensaje giftList cuyo data sea una lista de regalos, cada uno con id, name, diamondCount e imageUrl.

Lo que envía tu conector

Envía un objeto JSON por mensaje, indicando el evento y sus datos:

{
  "event": "gift",
  "data": {
    "uniqueId": "mika_22",
    "nickname": "Mika",
    "profilePictureUrl": "https://example.com/mika.jpg",
    "giftId": 5655,
    "giftName": "Rose",
    "diamondCount": 1,
    "repeatCount": 5,
    "giftType": 1,
    "repeatEnd": true
  }
}

type funciona en lugar de event. Un mensaje sin data se interpreta como los datos en sí mismos. Los números también pueden enviarse como cadenas numéricas, al estilo en que TikTok envía contadores grandes.

eventCampos que lee Vfinity
giftel espectador, giftId, giftName, diamondCount, repeatCount, giftType, repeatEnd, giftPictureUrl
chatel espectador, comment
likeel espectador, likeCount, totalLikeCount
follow, shareel espectador
subscribeel espectador, subMonth, gifted
questionel espectador, questionText
envelopeel espectador, coins, people
roomUserviewerCount
roomStatsfollowerCount, viewerCount, totalLikeCount, title

También admite member, social, emote, superFan, battle y goalUpdate con la misma estructura con la que los envía el puente integrado de Vfinity. Cualquier nombre de evento desconocido será ignorado.

El espectador

Cada evento de espectador comienza con los mismos campos: uniqueId (el @handle), nickname, y opcionalmente userId y profilePictureUrl. Un espectador sin uniqueId se mostrará como "unknown".

Para que las reglas de roles funcionen, añade un objeto roles con cualquiera de isModerator, isSubscriber, isSuperFan, isFollower e isOwner en formato booleano (true o false), y followRole, gifterLevel o teamMemberLevel como números. Omite lo que no conozcas: un rol ausente cuenta como desconocido, nunca como false, y una regla que lo requiera no se cumplirá.

Combos de regalos

TikTok envía un regalo combo (giftType 1) muchas veces mientras el espectador sigue tocando la pantalla. Envía esas actualizaciones con repeatEnd: false, y un último mensaje con repeatEnd: true. Vfinity reacciona únicamente al último, por lo que un combo de 5 rosas cuenta una sola vez como 5 rosas. Sin giftType o repeatEnd, cada mensaje de regalo contará de forma independiente.

Un regalo de tu conector sigue la misma ruta que cualquier otro: coincide con un evento, el modelo reacciona y se muestra la alerta.

Probar con un servidor pequeño

Este servidor Node.js hace las veces de conector. Imprime lo que envía Vfinity y responde con un mensaje de chat y un combo de rosas.

// npm install ws
const { WebSocketServer } = require('ws');

const server = new WebSocketServer({ port: 21213 });

server.on('connection', (socket) => {
  socket.on('message', (raw) => console.log('Vfinity dice', raw.toString()));

  const viewer = { uniqueId: 'testviewer', nickname: 'Test Viewer' };
  socket.send(JSON.stringify({ event: 'chat', data: { ...viewer, comment: 'hello' } }));
  socket.send(JSON.stringify({
    event: 'gift',
    data: { ...viewer, giftId: 5655, giftName: 'Rose', diamondCount: 1,
            repeatCount: 5, giftType: 1, repeatEnd: true },
  }));
});

Ejecútalo, conecta Vfinity a localhost y 21213, y ambos eventos aparecerán en el registro de eventos del Panel.

Lo que requiere el puente integrado

Reconectarse al LIVE automáticamente y Esperar a que comience el LIVE son características exclusivas del puente integrado. Con un conector personalizado, la tarjeta lo indicará en su lugar, y tiktok.connect de la API local las ignorará. La reconexión a TikTok dependerá de tu conector.

Si la conexión falla o se agota el tiempo de espera, comprueba que tu conector esté en ejecución y escuchando en el host y puerto especificados. Vfinity desiste de una conexión que no se abra en un plazo de 10 segundos.

Relacionado