The widget collects feedback in three ways:
- ๐ / ๐ on every answer. Always on.
- The exit survey asks โDid you find what you were looking for?โ when a reader leaves without rating anything. Off for a widget made in the dashboard.
- The satisfaction survey asks for a 1โ5 rating after a few answers. Off by default.
A widget made in the dashboard asks for ๐ and ๐ only. The two surveys are for developers, who turn them on in the script tag.
There is no sampling. Every reader who meets a surveyโs condition is asked, once per page load.
Answer ratings
Each finished answer has a copy button, a thumbs up and a thumbs down. Pressing a thumb records the vote. Pressing it again takes the vote back, and pressing the other thumb replaces it. Kelu keeps one vote per answer.
Votes are stored with the conversation and appear in the knowledge baseโs analytics. A thumbs down also marks the question as a knowledge gap. Readers never see a vote count.
Each vote fires onAskAIFeedbackSubmit, with reaction set to up, down or withdrawn.
Exit survey
When the reader closes the panel on a conversation that has an answer and no rating, the survey appears the next time they open the panel on that page. It is asked at most once per page load, and never after the reader has rated an answer.
The reader picks Yes or No, or Not now to dismiss it.
A widget made in the dashboard (its tag has data-widget-id) never shows it unless the tag turns it on:
<script async src="https://widget.kelu.dev/kelu-widget.js"
data-widget-id="YOUR_WIDGET_ID"
data-client-key="kl_pk_..."
data-exit-feedback-enabled="true"></script>
A tag without data-widget-id shows it unless the tag says data-exit-feedback-enabled="false".
Satisfaction survey
When turned on, the survey appears once per page load, after the readerโs third answer on that page (data-user-satisfaction-after-answers changes the number). It asks for a rating from 1 to 5 and an optional comment. Send feedback needs a rating; Not now dismisses it.
<script async src="https://widget.kelu.dev/kelu-widget.js"
data-knowledge-base-id="YOUR_KNOWLEDGE_BASE_ID"
data-client-key="kl_pk_..."
data-user-satisfaction-feedback-enabled="true"
data-user-satisfaction-after-answers="2"></script>
Where survey answers go
Kelu does not store survey answers. They reach your page as events only, so send them to your own analytics from a handler. Answer ratings are different: Kelu stores those and shows them in analytics.
window.Kelu("onExitFeedbackSubmit", ({ helpful, threadId }) => {
analytics.track("docs_ai_exit_survey", { helpful, threadId });
});
window.Kelu("onUserSatisfactionSubmit", ({ rating, comment, threadId }) => {
analytics.track("docs_ai_satisfaction", { rating, comment, threadId });
});
See Events for every payload.
Reference
| Attribute | Default | What it does |
|---|
data-exit-feedback-enabled | true, or false with data-widget-id | true shows the exit survey, false never shows it |
data-user-satisfaction-feedback-enabled | false | true offers the 1โ5 survey |
data-user-satisfaction-after-answers | 3 | Answers on the page before the satisfaction survey appears |
The dashboard has no switch for either survey: its widgets ask for ๐ and ๐ only. The surveys use the theme colours and follow data-language.