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

AttributeDefaultWhat it does
data-exit-feedback-enabledtrue, or false with data-widget-idtrue shows the exit survey, false never shows it
data-user-satisfaction-feedback-enabledfalsetrue offers the 1โ€“5 survey
data-user-satisfaction-after-answers3Answers 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.