Skip to content

Commit ce8f660

Browse files
committed
fix generation issues
1 parent 191c2e5 commit ce8f660

2 files changed

Lines changed: 101 additions & 23 deletions

File tree

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
---
2+
title: Process Step Completed
3+
description: This event should be sent when a user successfully completes a step in a multi-step process, such as a checkout or booking flow.
4+
---
5+
6+
# Process Step Completed
7+
8+
The `Process Step Completed` event is designed to track a user's progress through a defined, multi-step funnel. It should be sent every time a user successfully completes a distinct stage in a process, such as a checkout flow, a sign-up form, or a multi-page booking journey.
9+
10+
This event is fundamental for conducting funnel analysis, identifying user drop-off points, and measuring the time it takes for users to move from one step to the next. In the Travel & Hospitality industry, this event is commonly aliased as **`Booking Step Completed`**.
11+
12+
While it can be sent from the client-side for user-facing flows, sending it from the server-side is recommended for critical steps to ensure data accuracy and completeness.
13+
14+
## Examples
15+
16+
### Simple Example: Booking Step Completed
17+
18+
Here is a simple example of the `Booking Step Completed` event, sent when a user finishes the first step of a hotel booking process. We use `dimensions` to capture the step name and `metrics` for the step number.
19+
20+
```javascript
21+
jitsu.track('Booking Step Completed', {
22+
commerce: {
23+
checkout_id: 'chk_e8d1b2c3-f4a5-b6c7-d8e9-f0a1b2c3d4e5'
24+
},
25+
dimensions: {
26+
step_name: 'Room Selection'
27+
},
28+
metrics: {
29+
step_number: 1
30+
}
31+
});
32+
```
33+
34+
### Advanced Example: Guest Information Submitted with A/B Test
35+
36+
This example shows a more complex `Booking Step Completed` event for the "Guest Information" step. The user is part of an A/B test to see if asking for a loyalty number upfront affects conversion. The event includes a `commerce` object with a `product` representing the reserved room, and the `lead_time` metric indicates how far in advance the booking is being made.
37+
38+
```javascript
39+
jitsu.track('Booking Step Completed', {
40+
commerce: {
41+
checkout_id: 'chk_e8d1b2c3-f4a5-b6c7-d8e9-f0a1b2c3d4e5',
42+
products: [
43+
{
44+
entry_type: 'Reservation',
45+
product_id: 'ROOM-DBL-KING-JAC',
46+
product: 'Deluxe King Room with Jacuzzi',
47+
main_category: 'Accommodation',
48+
units: 3, // Represents 3 nights
49+
unit_price: 250.00,
50+
currency: 'USD',
51+
starts: '2025-08-15T15:00:00Z',
52+
ends: '2025-08-18T11:00:00Z',
53+
lead_time: 45 // Booking is 45 days in advance
54+
}
55+
]
56+
},
57+
dimensions: {
58+
step_name: 'Guest Information',
59+
ab_experiment: 'Loyalty_Number_Upfront_Test',
60+
ab_test_variant: 'B-No-Loyalty-Field'
61+
},
62+
metrics: {
63+
step_number: 2
64+
}
65+
});
66+
```
67+
68+
## Relevant Documentation
69+
70+
* [**Commerce Object**](/docs/semantic-events/schema/commerce): For understanding how to structure transactional data.
71+
* [**Product Structure**](/docs/semantic-events/schema/products): For detailing items within a commerce event.
72+
* [**Dimensions & Metrics**](/docs/semantic-events/schema/dimensions-and-metrics): To learn about adding custom analytical data.
73+
* [**The Event Bible**](/docs/semantic-events/the-event-bible): Discover other predefined events to accelerate your analytics.
74+
75+
## Primary Event Properties
76+
77+
These are the primary fields to include when sending a `Process Step Completed` event.
78+
79+
| Property | Description | Provided By |
80+
| :--- | :--- | :--- |
81+
| `event` | The name of the event, e.g., `Process Step Completed` or `Booking Step Completed`. | **User-Provided** |
82+
| `commerce.checkout_id` | A unique ID to link all steps within the same checkout or booking session. | **User-Provided** |
83+
| `dimensions.step_name` | The name of the step that was completed (e.g., 'Payment Information'). | **User-Provided** |
84+
| `metrics.step_number` | The numerical sequence of the step (e.g., 2 for the second step). | **User-Provided** |
85+
| `timestamp` | The UTC timestamp indicating when the step was completed. | Auto-Populated |
86+
| `userId` / `anonymousId`| The identifier for the user performing the action. | Auto-Populated |
87+
88+
89+
## Enrichment and Analysis
90+
91+
Sending the `Process Step Completed` event unlocks powerful analytical capabilities without requiring additional setup:
92+
93+
* **Funnel Analysis**: This event is the cornerstone of funnel analysis. Our systems automatically stitch together the steps for each `checkout_id` to build conversion funnels, allowing you to visualize how many users successfully move from one stage to the next.
94+
95+
* **Drop-off Identification**: By analyzing where users stop sending `Process Step Completed` events, you can precisely identify which parts of your process are causing friction or abandonment.
96+
97+
* **A/B Testing Performance**: Including A/B test information in `dimensions` allows you to directly compare the conversion rates of different process variations within our analytics dashboards.
98+
99+
* **Performance Metrics**: Using `metrics` to track `lead_time` or the duration between steps enables you to analyze user behavior, such as how far in advance users book or how long they spend on each step of the process.

docs/lib/event-bible-priming.ts

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -226,13 +226,7 @@ export class EventBiblePrimingService {
226226
/**
227227
* Get current cache status
228228
*/
229-
getCacheStatus(): {
230-
hasAllEvents: boolean;
231-
hasFilterOptions: boolean;
232-
isPriming: boolean;
233-
lastPrimingTimestamp: Date | null;
234-
cacheStats: { size: number; maxSize: number };
235-
} {
229+
getCacheStatus() {
236230
return {
237231
hasAllEvents: cacheService.has(CACHE_KEYS.ALL_EVENTS),
238232
hasFilterOptions: cacheService.has(CACHE_KEYS.FILTER_OPTIONS),
@@ -263,22 +257,7 @@ export class EventBiblePrimingService {
263257
return this.primeCache(true);
264258
}
265259

266-
/**
267-
* Get cache status information
268-
*/
269-
getCacheStatus(): {
270-
hasAllEvents: boolean;
271-
hasFilterOptions: boolean;
272-
cacheStats: { size: number; maxSize: number; hitRate?: number };
273-
lastPriming: PrimingResult | null;
274-
} {
275-
return {
276-
hasAllEvents: cacheService.has(CACHE_KEYS.ALL_EVENTS),
277-
hasFilterOptions: cacheService.has(CACHE_KEYS.FILTER_OPTIONS),
278-
cacheStats: cacheService.getStats(),
279-
lastPriming: this.lastPrimingResult,
280-
};
281-
}
260+
282261
}
283262

284263
// Export singleton instance

0 commit comments

Comments
 (0)