Skip to main content
Version: Angular 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

onAppStoreRatingTriggered is Angular-specific and is not part of the shared @screeb/sdk-browser hook payload types documented below.

Payload structure

@screeb/sdk-angular reuses the browser hook payload 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;
}[];
};

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 { Screeb } from "@screeb/sdk-angular";

constructor(private screeb: Screeb) {}

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.