Eventos de embudo te permiten rastrear el progreso de tus usuarios a través de etapas clave de tu juego. Esto incluye:
- Incorporación — ¿Dónde abandonan los usuarios cuando comienzan a jugar tu juego?
- Progresión — ¿Dónde dejan de avanzar los usuarios en tu juego?
- Tienda — ¿Dónde abandonan los usuarios las compras?
Una vez que tu juego comienza a rastrear eventos de embudo, desbloqueas la página de Embudos en el panel de análisis del Creator Hub. Puedes agregar pestañas al panel para hasta diez embudos.
Rastrear eventos de embudo
Para rastrear eventos de embudo, primero identifica los embudos más importantes en tu juego y divídelos en pasos. Dado que el objetivo es comprender el comportamiento del jugador, estos pasos generalmente corresponden a alguna acción o logro.
En un RPG, podrías tener un paso para unirte al juego, uno para elegir una clase, otro para salir de la sala inicial, y así sucesivamente. Típicamente llamarías a LogFunnelStepEvent() o LogOnboardingFunnelStepEvent() después de que un jugador complete un paso, pero lo más importante es ser consistente sobre cuándo llamas a estos métodos y usar nombres fáciles de interpretar.
Tu flujo de incorporación es un excelente lugar para comenzar a rastrear eventos de embudo, ya que es probable que aquí pierdas a la mayoría de tus usuarios.
Rastrear embudos de una sola vez
Un embudo de una sola vez monitorea eventos de conversión que ocurren solo una vez por usuario.
Un ejemplo común es un embudo de incorporación, que es crítico para entender cómo mejorar la retención de nuevos usuarios y el tiempo de sesión de tu juego. El siguiente ejemplo es un embudo de incorporación para Plant, un juego de tycoon donde los nuevos usuarios entran a una granja, plantan semillas, riegan plantas, y más en orden secuencial:
Rastreando Pasos de Incorporación en Plantlocal AnalyticsService = game:GetService("AnalyticsService")-- Registra el primer paso del FTUEAnalyticsService:LogOnboardingFunnelStepEvent(player,1, -- Número de paso"En la Granja" -- Nombre del paso)-- Registra el segundo pasoAnalyticsService:LogOnboardingFunnelStepEvent(player,2, -- Número de paso"Plantar Semilla" -- Nombre del paso)
Rastrear embudos recurrentes
Un embudo recurrente monitorea eventos de conversión que ocurren múltiples veces por usuario.
Un ejemplo común es un embudo de tienda, que puede ayudarte a entender cómo mejorar la conversión de pagadores de tu juego, ARPPU y ingresos. El siguiente ejemplo es un embudo de tienda donde los usuarios abren la tienda, ven un artículo, añaden un artículo al carrito, y más.
Usa funnelSessionId para distinguir entre diferentes sesiones del mismo usuario en un embudo recurrente, como abrir la tienda múltiples veces en una sola sesión.
Rastreando Pasos de la Tiendalocal AnalyticsService = game:GetService("AnalyticsService")local HttpService = game:GetService("HttpService")local funnelSessionId = HttpService:GenerateGUID()-- Registra cuando el usuario abre la tiendaAnalyticsService:LogFunnelStepEvent(player,"ArmoryCheckout", -- Nombre del embudo usado para agrupar pasosfunnelSessionId, -- ID de sesión del embudo para esta sesión única de pago1, -- Número de paso"Abrir Tienda" -- Nombre del paso)-- Registra cuando el usuario ve un artículoAnalyticsService:LogFunnelStepEvent(player,"ArmoryCheckout", -- Nombre del embudo usado para agrupar pasosfunnelSessionId, -- ID de sesión del embudo para esta sesión única de pago2, -- Número de paso"Visto Artículo" -- Nombre del paso)-- Registra cuando el usuario añade al carritoAnalyticsService:LogFunnelStepEvent(player,"ArmoryCheckout", -- Nombre del embudo usado para agrupar pasosfunnelSessionId, -- ID de sesión del embudo para esta sesión única de pago3, -- Número de paso"Añadido al Carrito" -- Nombre del paso)
Implementar funnelSessionId
Al implementar embudos, un funnelSessionId puede ayudarte a rastrear tus eventos, pero puede no ser necesario en cada instancia. Usa las siguientes directrices:
- Embudos de una sola vez - No necesitas usar funnelSessionId para embudos de una sola vez porque ocurren solo una vez por usuario.
- Embudos de tienda - Usa funnelSessionId para distinguir entre diferentes sesiones del mismo usuario en un embudo recurrente, como abrir la tienda múltiples veces en una sola sesión en el ejemplo anterior. En casos como este, donde el jugador puede abrir la tienda múltiples veces en una sola sesión, se recomienda usar un GUID como funnelSessionId.
- Mejoras de artículos - Usa funnelSessionId para distinguir entre diferentes caminos de mejora de artículos, generalmente durante un período más largo que una sola sesión de juego. En lugar de usar un GUID como en el caso del embudo de la tienda, a menudo puedes construir una clave única basada en el artículo que se está mejorando, por ejemplo: <playerId>-<itemId>.
Paso inicial
Los embudos comienzan cuando se registra el primer paso. Si deseas iniciar un embudo inmediatamente al unirse el jugador, registra el primer paso en el evento PlayerAdded.
Registrando el primer paso en el evento PlayerAdded
local AnalyticsService = game:GetService("AnalyticsService")
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
AnalyticsService:LogOnboardingFunnelStepEvent(
player,
1, -- Número de paso
"Jugador Unido" -- Nombre del paso
)
end)
Pasos repetidos
Si un usuario repite un paso en un embudo, el embudo solo considera la primera instancia del paso. Por ejemplo, si un usuario registra el paso 2 de un embudo dos veces, el embudo solo cuenta la primera instancia del paso 2. No tienes que tomar ninguna acción especial para manejar embudos de una sola vez para jugadores que se desconectan y vuelven a conectarse, y funnelSessionId maneja los embudos recurrentes.
Los pasos repetidos son ignorados por el embudo, pero aún se registran y contribuyen hacia el límite de tasa global.
Pasos omitidos
Si por alguna razón omites un paso en un embudo, los pasos anteriores se completan automáticamente. Por ejemplo, si tienes un embudo con pasos 1, 2 y 3 y registras el paso 3 sin registrar los pasos 1 o 2, el embudo considera que los pasos 1 y 2 están completados.
Usar filtros de embudo
Roblox proporciona filtros para ayudarte a analizar tus datos de embudo. Estos incluyen datos de jugador y datos de dispositivo, y también puedes enviar datos personalizados. En algunos casos, el estado de un jugador puede cambiar durante el embudo, como cuando el jugador cambia de dispositivo de móvil a de escritorio.
Para evitar contar doble los embudos, los filtros solo se aplican al primer paso del embudo. Esto significa que si un jugador cambia de dispositivo durante el embudo, el embudo solo se atribuirá a su dispositivo en el momento en que ingresan al embudo.
De manera similar, los embudos se muestran por cohorte, lo que significa que si un jugador entra al embudo el 19/6, el embudo se atribuirá a la cohorte del 19/6 incluso si completa el embudo el 20/6.
Modificar embudos
Después de hacer una actualización a tus pasos de embudo, es importante establecer el rango de fechas correcto para ver el embudo más reciente. Si la fecha actual es 21/6 y actualizaste el paso 2 de tu embudo de incorporación el 14/6, deberías establecer el rango de fechas en 14/6 - 21/6 para ver el embudo más reciente.
Si seleccionas un rango de fechas que incluye una actualización de paso de embudo, se mostrará una advertencia en el paso pertinente:

Proteger tus embudos de explotadores
Para mantener tus datos limpios, es importante añadir algún nivel de validación de datos en tu código del servidor para evitar que los explotadores envíen datos inválidos a tu servicio de análisis.
Por ejemplo, si tienes un embudo de incorporación con tres pasos, puedes usar un RemoteEvent para que el cliente notifique al servidor cuando el jugador ha completado cada paso y añadir una verificación en el servidor para asegurarte de que el número de paso es válido antes de registrar el evento:
Código de evento del lado del cliente
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local onboardingEvent = ReplicatedStorage:WaitForChild("OnboardingEvent")
local function fireOnboardingEvent(step: number)
onboardingEvent:FireServer({ step = step })
end
fireOnboardingEvent(1)
fireOnboardingEvent(2)
fireOnboardingEvent(10) -- paso inválido
Código de evento del lado del servidor
local AnalyticsService = game:GetService("AnalyticsService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local onboardingEvent = ReplicatedStorage:WaitForChild("OnboardingEvent")
local maxStep = 3
local function onPlayerEventFired(player: Player, args: { step: number })
local step = args.step
if(step > maxStep) then
warn(`Paso de tutorial inválido {step} recibido del cliente.`)
return
end
print(`{player.Name} completó el paso: {step}`)
AnalyticsService:LogOnboardingFunnelStepEvent(player, step)
end
onboardingEvent.OnServerEvent:Connect(onPlayerEventFired)
Usar campos personalizados
Los eventos de embudo también permiten desglosar en campos personalizados para facilitar la comparación entre segmentos. Por ejemplo, puedes rastrear qué coche inicial ofrece el mejor progreso a los jugadores, o adjuntar diferentes mapas para ver si un cierto mapa tiene un mejor bucle de juego que otros.

Para más información, consulta campos personalizados.
Usar embudos para hacer crecer tu juego
Uno de los embudos más importantes a rastrear es la incorporación, porque muchos juegos luchan con la retención y el compromiso de nuevos usuarios.
En el embudo de incorporación para Plant a continuación, la mayor caída es en el paso 2 ("Plantar Semilla").

Basado en estos datos, podrías:
- Agregar indicadores contextuales para dirigir mejor a los usuarios a plantar semillas cuando estén comenzando.
- Diseñar una nueva experiencia para el usuario que requiera que los usuarios planten semillas y hagan crecer una planta exitosa antes de explorar el resto del juego. Puedes mejorar este evento creando elementos de retroalimentación positiva o utilizando otras técnicas de diseño de juegos.
