JavaScript triggered by flow events
Run JavaScript via Google Tag Manager
Formsort integrates directly with a number of 3rd party tools. If the tool you need does not have a prebuilt integration, Google Tag Manager can be used to run JavaScript to extend Formsort's capabilities
Custom events
Formsort dispatches custom events via custom event api. These events can be listened to and used to trigger JavaScript via Google Tag Manager.
The following is a list of events with payload definitions:
FlowLoaded
{
flowLabel: string;
variantLabel: string;
deploymentUuid: string;
experimentId?: string;
formsortEnv: string; // production, staging etc.
}
StepLoaded
{
stepIndex: number;
stepId: string | number; // loaded step id, falls back to step index if step id is not given
// and variant details defined in FlowLoaded
}
StepCompleted
{
stepIndex: number,
stepId: string | number;
msSpentOnStep: number; // time in milliseconds user spent on this step
// and variant details defined in FlowLoaded
}
FlowFinalized
{
stepIndex: string; // final step index
stepId: string | number; // final step id falling back to index number
redirectUrl?: string; // redirect url of final step (optional)
// and variant details defined in FlowLoaded
}
Example function
The following JavaScript for a mock analytics service can be triggered in Google Tag Manager based on a single step of a multi-step flow via the StepLoaded
event.
window.addEventListener('StepLoaded', (event) => {
const payload = event.details;
if (payload.stepId === 'watch_this_step') {
const thirdPartyScript = document.createElement('script');
thidrPartyScript.src = '...';
document.head.appendChild(thidrPartyScript);
fetch('my-api-url.com/record-start-event', {
method: 'POST',
body: JSON.stringify({ flowLabel: payload.flowLabel, timeStamp: +Date.now() }),
headers: {
'content-type': 'application/json',
},
})
}
});
window.addEventListener('StepCompleted', (event) => {
const payload = event.details;
if (payload.stepId === 'watch_this_step') {
window.thirdPartyService.stopRecording();
fetch('my-api-url.com/record-end-event', {
method: 'POST',
body: JSON.stringify({ flowLabel: payload.flowLabel, timeStamp: +Date.now() }),
headers: {
'content-type': 'application/json',
},
})
}
});
Last updated
Was this helpful?