- Docs versions:
v1,v2,latest. - Products that share one knowledge base.
- Audiences: public docs and internal runbooks.
Create groups and assign sources
Create a group
On the knowledge base’s Sources tab, click Groups. Enter a name (and an optional description) and click Create group.
Assign sources
Pick the Group when you add a source. For an existing source, open its Configuration tab, click Edit, and change Group. A source belongs to one group at most.
Choose which groups a surface answers from
| Surface | Where to set it |
|---|---|
| Website widget | Source groups in the widget’s settings, or data-source-group-ids="<id>,<id>" on the script tag. See Website widget. |
| Support form deflector | Source groups in the deflector’s settings. See Form deflector. |
| Slack and Teams bots | Source groups in the bot’s settings. See Bots. |
| Ask and the Playground | The Groups / Source groups filter above the question box. |
| SDKs | groupIds. See Web SDK. |
| Public API | group_ids on chat, search, form-deflect and WebSocket requests. |
- No groups picked means every source in the knowledge base is searched.
- With groups picked, only sources in those groups are searched. Ungrouped sources are left out, including your Custom Answers unless their source is in one of the groups.
- A page’s own setting can only narrow what the surface allows, never widen it.
To find a group’s ID, click Groups on the Sources tab. Each group shows its ID with a copy button. Where a surface has a Source groups picker, you can use that instead of typing IDs.
Versioned docs
Add one source per version (for example one GitHub Files source per branch, or one website source per version path). Give each a Version label such asv2 when you add it, put each in its own group, and scope each docs version’s widget to its group. Kelu passes the version label to the model with every excerpt, so it can say which version an answer applies to. If you change a source’s version label later on its Configuration tab, content already indexed gets the new label as soon as you save.
For how often sources re-sync, see Keeping content fresh.
Get notified when things happen
A knowledge base can send events to your own URL. There is no dashboard screen for this yet: register the URL through the management API, as a member with the Config permission on the knowledge base.GET on the same path lists a knowledge base’s webhooks, and DELETE /api/v1/webhook-triggers/:id removes one.
| Event | Sent when | data includes |
|---|---|---|
conversation.completed | A chat answer is finished | conversation_id, message_id, answer_excerpt |
deflection.completed | The support form deflector answered | conversation_id, confidence, deflected |
ticket.deflected | Helpdesk automation answered a ticket | integration_id, ticket_id |
ticket.escalated | Helpdesk automation handed a ticket or chat to a person | integration_id, ticket_id, reason. On tickets and Intercom, reason is always customer_replied. On Zendesk Messaging and Freshchat chats it says why: customer_asked, turn_cap (Kelu gave its 5 answers), low_confidence, or answer_failed (Kelu couldn’t write or post an answer) |
simulation.completed | A deflection simulation finished | simulation_id, integration_id, total, completed |
POST with a JSON body of event, knowledge_base_id, data and timestamp, and an X-Kelu-Event header naming the event. With a secret set, X-Kelu-Signature holds the hex HMAC-SHA256 of the raw body. Check it before trusting the payload. Deliveries are not retried, and your endpoint has 10 seconds to answer.