Sự kiện phễu cho phép bạn theo dõi quá trình tiến bộ của người dùng qua các giai đoạn chính của trò chơi. Điều này bao gồm:
- Giới thiệu - Người dùng bỏ qua ở đâu khi bắt đầu với trò chơi của bạn?
- Tiến triển - Người dùng dừng lại ở đâu khi tiến triển trong trò chơi của bạn?
- Cửa hàng - Người dùng bỏ dở việc mua hàng ở đâu?
Khi trò chơi của bạn bắt đầu theo dõi sự kiện phễu, bạn sẽ mở khóa trang Phễu của bảng điều khiển Phân tích trên Creator Hub. Bạn có thể thêm tab vào bảng điều khiển cho tối đa mười phễu.
Theo dõi sự kiện phễu
Để theo dõi sự kiện phễu, trước tiên hãy xác định những phễu quan trọng nhất trong trò chơi của bạn và phân đoạn chúng thành các bước. Vì mục tiêu là hiểu hành vi của người chơi, những bước này thường tương ứng với một hành động hoặc thành tựu nào đó.
Trong một trò chơi RPG, bạn có thể có một bước để tham gia trò chơi, một bước để chọn lớp, một bước để thoát khỏi phòng khởi đầu, và nhiều bước khác. Bạn thường gọi LogFunnelStepEvent() hoặc LogOnboardingFunnelStepEvent() sau khi một người chơi hoàn thành một bước, nhưng điều quan trọng nhất là phải nhất quán về thời điểm bạn gọi những phương thức này và sử dụng các tên dễ hiểu.
Luồng giới thiệu của bạn là một nơi tuyệt vời để bắt đầu theo dõi sự kiện phễu, vì đây có thể là nơi bạn mất đi phần lớn người dùng của mình.
Theo dõi phễu một lần
Một phễu một lần theo dõi các sự kiện chuyển đổi chỉ xảy ra một lần cho mỗi người dùng.
Một ví dụ phổ biến là phễu giới thiệu, điều này rất quan trọng để hiểu cách cải thiện việc giữ chân người dùng mới và thời gian phiên của trò chơi của bạn. Ví dụ sau đây là một phễu giới thiệu cho Plant, một trò chơi tycoon nơi người dùng mới vào một trang trại, trồng hạt, tưới cây và hơn thế nữa theo thứ tự liên tiếp:
Theo dõi các bước giới thiệu trong Plantlocal AnalyticsService = game:GetService("AnalyticsService")-- Ghi lại bước đầu tiên của FTUEAnalyticsService:LogOnboardingFunnelStepEvent(player,1, -- Số bước"Trong Trang Trại" -- Tên bước)-- Ghi lại bước thứ haiAnalyticsService:LogOnboardingFunnelStepEvent(player,2, -- Số bước"Trồng Hạt" -- Tên bước)
Theo dõi phễu định kỳ
Một phễu định kỳ theo dõi các sự kiện chuyển đổi xảy ra nhiều lần cho mỗi người dùng.
Một ví dụ phổ biến là phễu cửa hàng, điều này có thể giúp bạn hiểu cách cải thiện việc chuyển đổi người chơi, ARPPU và doanh thu của trò chơi. Ví dụ sau đây là một phễu cửa hàng nơi người dùng mở cửa hàng, xem mặt hàng, thêm mặt hàng vào giỏ hàng và hơn thế nữa.
Sử dụng funnelSessionId để phân biệt giữa các phiên khác nhau của cùng một người dùng trong một phễu định kỳ, chẳng hạn như mở cửa hàng nhiều lần trong một phiên duy nhất.
Theo dõi các bước cửa hànglocal AnalyticsService = game:GetService("AnalyticsService")local HttpService = game:GetService("HttpService")local funnelSessionId = HttpService:GenerateGUID()-- Ghi lại khi người dùng mở cửa hàngAnalyticsService:LogFunnelStepEvent(player,"ArmoryCheckout", -- Tên phễu được sử dụng để nhóm các bước lại với nhaufunnelSessionId, -- ID phiên phễu cho phiên thanh toán độc nhất này1, -- Số bước"Mở Cửa Hàng" -- Tên bước)-- Ghi lại khi người dùng xem một mặt hàngAnalyticsService:LogFunnelStepEvent(player,"ArmoryCheckout", -- Tên phễu được sử dụng để nhóm các bước lại với nhaufunnelSessionId, -- ID phiên phễu cho phiên thanh toán độc nhất này2, -- Số bước"Xem Mặt Hàng" -- Tên bước)-- Ghi lại khi người dùng thêm vào giỏ hàngAnalyticsService:LogFunnelStepEvent(player,"ArmoryCheckout", -- Tên phễu được sử dụng để nhóm các bước lại với nhaufunnelSessionId, -- ID phiên phễu cho phiên thanh toán độc nhất này3, -- Số bước"Thêm vào Giỏ Hàng" -- Tên bước)
Triển khai funnelSessionId
Khi triển khai các phễu, một funnelSessionId có thể giúp bạn theo dõi các sự kiện của mình nhưng có thể không cần thiết trong mọi trường hợp. Sử dụng các hướng dẫn sau:
- Phễu một lần - Bạn không cần sử dụng funnelSessionId cho phễu một lần vì chúng chỉ xảy ra một lần cho mỗi người dùng.
- Phễu cửa hàng - Sử dụng funnelSessionId để phân biệt giữa các phiên khác nhau của cùng một người dùng trong một phễu định kỳ, chẳng hạn như mở cửa hàng nhiều lần trong một phiên duy nhất trong ví dụ trước. Trong các trường hợp như thế này, nơi người chơi có thể mở cửa hàng nhiều lần trong một phiên duy nhất, bạn nên sử dụng một GUID làm funnelSessionId.
- Nâng cấp mặt hàng - Sử dụng funnelSessionId để phân biệt giữa các con đường nâng cấp mặt hàng khác nhau, thường là trong khoảng thời gian dài hơn so với một phiên chơi đơn. Thay vì sử dụng một GUID như trong trường hợp phễu cửa hàng, bạn thường có thể xây dựng một khóa duy nhất dựa trên mặt hàng được nâng cấp, ví dụ: <playerId>-<itemId>.
Bước đầu tiên
Các phễu bắt đầu khi bước đầu tiên được ghi lại. Nếu bạn muốn bắt đầu một phễu ngay lập tức khi người chơi tham gia, hãy ghi lại bước đầu tiên trong sự kiện PlayerAdded.
Ghi lại bước đầu tiên trong sự kiện PlayerAdded
local AnalyticsService = game:GetService("AnalyticsService")
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
AnalyticsService:LogOnboardingFunnelStepEvent(
player,
1, -- Số bước
"Người Chơi Đã Tham Gia" -- Tên bước
)
end)
Các bước lặp lại
Nếu một người dùng lặp lại một bước trong một phễu, phễu chỉ xem xét lần đầu tiên xuất hiện của bước đó. Ví dụ, nếu một người dùng ghi lại bước 2 của một phễu hai lần, phễu chỉ tính lần đầu tiên của bước 2. Bạn không cần thực hiện bất kỳ hành động nào đặc biệt để xử lý các phễu một lần cho những người chơi bị ngắt kết nối và kết nối lại, và funnelSessionId xử lý các phễu định kỳ.
Các bước lặp lại sẽ bị phễu bỏ qua, nhưng chúng vẫn được ghi lại và góp phần vào giới hạn tỷ lệ toàn cầu.
Các bước bị bỏ qua
Nếu vì lý do nào đó bạn bỏ qua một bước trong phễu, các bước trước đó sẽ tự động hoàn thành. Ví dụ, nếu bạn có một phễu với các bước 1, 2 và 3 và bạn ghi lại bước 3 mà không ghi lại các bước 1 hoặc 2, phễu sẽ coi bước 1 và 2 đã hoàn thành.
Sử dụng bộ lọc phễu
Roblox cung cấp các bộ lọc để giúp bạn phân tích dữ liệu phễu của mình. Các bộ lọc này bao gồm dữ liệu người chơi và dữ liệu thiết bị, và bạn cũng có thể gửi dữ liệu tùy chỉnh. Trong một số trường hợp, trạng thái của người chơi có thể thay đổi trong suốt phễu, chẳng hạn như khi người chơi chuyển đổi thiết bị từ di động sang máy tính để bàn.
Để tránh việc tính sai phễu, các bộ lọc chỉ áp dụng cho bước đầu tiên của phễu. Điều này có nghĩa là nếu một người chơi chuyển đổi thiết bị trong suốt phễu, phễu sẽ chỉ được ghi nhận trên thiết bị của họ tại thời điểm họ tham gia phễu.
Tương tự, các phễu hiển thị theo nhóm, có nghĩa là nếu một người chơi tham gia phễu vào ngày 6/19, phễu sẽ được ghi nhận vào nhóm 6/19 ngay cả khi họ hoàn thành phễu vào ngày 6/20.
Sửa đổi phễu
Sau khi bạn thực hiện một bản cập nhật cho các bước phễu của mình, điều quan trọng là đặt đúng khoảng thời gian để xem phễu mới nhất. Nếu ngày hiện tại là 6/21 và bạn đã cập nhật bước 2 của phễu giới thiệu vào ngày 6/14, bạn nên đặt khoảng thời gian từ 6/14 đến 6/21 để xem phễu mới nhất.
Nếu bạn chọn một khoảng thời gian có bao gồm một bản cập nhật bước phễu, một cảnh báo sẽ hiển thị trên bước liên quan:

Bảo vệ phễu của bạn khỏi những kẻ khai thác
Để giữ cho dữ liệu của bạn sạch sẽ, điều quan trọng là thêm một mức độ xác thực dữ liệu nào đó trong mã máy chủ của bạn để ngăn chặn những kẻ khai thác gửi dữ liệu không hợp lệ đến dịch vụ phân tích của bạn.
Ví dụ, nếu bạn có một phễu giới thiệu với ba bước, bạn có thể sử dụng một RemoteEvent cho phía khách hàng để thông báo cho máy chủ khi người chơi đã hoàn thành mỗi bước và thêm một kiểm tra từ máy chủ để đảm bảo rằng số bước là hợp lệ trước khi ghi lại sự kiện:
Mã sự kiện phía khách hàng
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) -- bước không hợp lệ
Mã sự kiện phía máy chủ
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(`Bước hướng dẫn không hợp lệ {step} đã nhận từ khách hàng.`)
return
end
print(`{player.Name} đã hoàn thành bước: {step}`)
AnalyticsService:LogOnboardingFunnelStepEvent(player, step)
end
onboardingEvent.OnServerEvent:Connect(onPlayerEventFired)
Sử dụng trường tùy chỉnh
Sự kiện phễu cũng cho phép phân tích thêm dữ liệu theo các trường tùy chỉnh để hỗ trợ việc so sánh dễ dàng hơn giữa các phân đoạn. Ví dụ, bạn có thể theo dõi chiếc xe khởi động nào giúp người chơi có được tiến bộ tốt nhất, hoặc gán các bản đồ khác nhau để xem liệu một bản đồ nhất định có quy trình chơi tốt hơn không.

Để biết thêm thông tin, xem trường tùy chỉnh.
Sử dụng phễu để phát triển trò chơi của bạn
Một trong những phễu quan trọng nhất để theo dõi là giới thiệu vì nhiều trò chơi gặp khó khăn trong việc giữ chân và tương tác với người dùng mới.
Trong phễu giới thiệu cho Plant dưới đây, tỷ lệ bỏ rơi lớn nhất là bước 2 ("Trồng Hạt").

Dựa trên dữ liệu này, bạn có thể:
- Thêm các chỉ dẫn ngữ cảnh để hướng người dùng tốt hơn để trồng hạt khi họ bắt đầu.
- Thiết kế một trải nghiệm người dùng mới yêu cầu người dùng phải trồng hạt và phát triển một cây thành công trước khi khám phá phần còn lại của trò chơi. Bạn có thể cải thiện sự kiện này bằng cách tạo ra các yếu tố phản hồi tích cực hoặc sử dụng các kỹ thuật thiết kế trò chơi khác.
