Skip to main content
Version: Ionic SDK

Hooks

Define custom hooks to execute on survey and message events. All hooks are optional.

Available hooksโ€‹

Hook NameinitsurveyStartmessageStart
onReadyโœ…โŒโŒ
onSurveyDisplayAllowedโœ…โŒโŒ
onMessageDisplayAllowedโœ…โŒโŒ
onSurveyShowedโœ…โœ…โŒ
onSurveyStartedโœ…โœ…โŒ
onQuestionRepliedโœ…โœ…โœ…
onSurveyCompletedโœ…โœ…โŒ
onSurveyHiddenโœ…โœ…โŒ
onMessageShowedโœ…โŒโœ…
onMessageStartedโœ…โŒโœ…
onMessageCompletedโœ…โŒโœ…
onMessageHiddenโœ…โŒโœ…

Payload structureโ€‹

Hook payloads follow the shared browser SDK types:

type Channel = {
id: string;
type: "widget" | "ios" | "android";
};

type User = {
anonymous_id: string;
userId?: string;
};

type Survey = {
id: string;
survey_position:
| "center-left"
| "center-center"
| "center-right"
| "bottom-left"
| "bottom-center"
| "bottom-right";
survey_format: "conversationnal" | "cards";
survey_size: 100;
};

type Message = {
id: string;
messagey_size: 100;
};

type ResponseStatus =
| "displayed"
| "started"
| "ended"
| "closed"
| "interrupted";

type ResponseItemQuestion = {
id: string;
title: string;
type: "text" | "video";
url?: string;
};

type ResponseItemAnswer = {
replied_at?: string;
fields?: {
type: "string" | "number" | "boolean" | "none" | "time" | "file";
text?: string;
number?: number;
boolean?: boolean;
time?: string;
button_url?: string;
button_url_target?: "in-page" | "new-tab";
button_actions?: object[];
}[];
};

type ResponseItem = {
question: ResponseItemQuestion;
answer: ResponseItemAnswer;
};

Exact callback payloads:

onReady(payload: { channel: Channel; user: User }): void;

onSurveyDisplayAllowed(payload: {
channel: Channel;
user: User;
survey: Survey;
}): boolean;

onMessageDisplayAllowed(payload: {
channel: Channel;
user: User;
survey: Survey;
}): boolean;

onSurveyShowed(payload: {
channel: Channel;
user: User;
survey: Survey;
response: {
id: string;
items: ResponseItem[];
};
}): void;

onSurveyStarted(payload: {
channel: Channel;
user: User;
survey: Survey;
response: {
id: string;
};
}): void;

onSurveyCompleted(payload: {
channel: Channel;
user: User;
survey: Survey;
response: {
id: string;
items: ResponseItem[];
};
}): void;

onSurveyHidden(payload: {
channel: Channel;
user: User;
survey: Survey;
response: {
id: string;
items: ResponseItem[];
hide_reason: ResponseStatus;
};
}): void;

onQuestionReplied(payload: {
channel: Channel;
user: User;
survey: Survey;
response: {
id: string;
status: null;
question: ResponseItemQuestion;
answer: ResponseItemAnswer;
items: ResponseItem[];
};
}): void;

onMessageShowed(payload: {
channel: Channel;
user: User;
message: Message;
response: {
id: string;
items: ResponseItem[];
};
}): void;

onMessageStarted(payload: {
channel: Channel;
user: User;
message: Message;
response: {
id: string;
};
}): void;

onMessageCompleted(payload: {
channel: Channel;
user: User;
message: Message;
response: {
id: string;
items: ResponseItem[];
};
}): void;

onMessageHidden(payload: {
channel: Channel;
user: User;
message: Message;
response: {
id: string;
items: ResponseItem[];
hide_reason: ResponseStatus;
};
}): void;

On module initโ€‹

ScreebModule.forRoot({
autoInit: true,
websiteId: "<YOUR-CHANNEL-ID>",
hooks: {
version: "1.0.0",
onReady: (payload) => {
console.log("Screeb ready", payload);
},
onSurveyShowed: (payload) => {
console.log("Survey shown", payload);
},
onSurveyCompleted: (payload) => {
console.log("Survey completed", payload);
},
},
});

On surveyStartโ€‹

import { ScreebModule, ScreebService } from "@screeb/sdk-angular";

constructor(private screeb: ScreebService) {}

await this.screeb.surveyStart("<SURVEY_ID>", "", true, {}, {
onSurveyCompleted: (payload) => {
console.log("Survey completed", payload);
},
});

On messageStartโ€‹

await this.screeb.messageStart("<MESSAGE_ID>", true, {}, {
onMessageHidden: (payload) => {
console.log("Message hidden", payload);
},
});

For complete hook payload definitions, see the JS tag hooks reference.