Keyword filter
Silently drop specific words or phrases while the bot is speaking — "hmm", "okay", "hello" — so they don't trigger an interruption.
When the bot is mid-sentence and background chatter or a polite “okay” reaches the mic, the pipeline normally treats it as a potential turn-start. The keyword filter drops specified tokens before they become interruptions. It is a surgical complement to min_words — use it for exact words you know are noise.
Prerequisites
- A template with
configurations— see Flow nodes. - Understanding of how interruptions work — see Interruption control.
- A list of specific words or short phrases you want to suppress.
Config fields
| Field | Type | Allowed values | Default | Behaviour |
|---|---|---|---|---|
enabled | bool | true, false | false | Master switch. false means no filtering even if keywords is populated. |
keywords | string[] | any words or phrases | [] | List to suppress. Matching is case-insensitive, leading/trailing whitespace is trimmed. |
match_type | enum | "exact", "includes" | "exact" | exact: the entire transcription must equal the keyword. includes: the transcription may contain the keyword. |
Minimal config
{
"configurations": {
"keyword_filter": {
"enabled": true,
"keywords": ["hmm", "okay", "hello", "yeah"],
"match_type": "exact"
}
}
}With this config, the user saying “okay” while the bot is speaking is dropped. The user saying “okay, what’s my balance” is not dropped in exact mode — switch to includes if you want to catch embedded keywords.
When the filter runs
The filter only engages while the bot is actively speaking — specifically between the BotStartedSpeaking and BotStoppedSpeaking frames. When the bot is idle, every transcription passes through normally. This preserves responsiveness: if the user initiates a turn with “okay, help me with…” while the bot is silent, nothing is filtered.
Edge cases
- Silent drop — Matching frames are discarded before they reach the interruption logic. No frame is pushed downstream; the LLM never sees them.
- Exact vs. includes — In
exactmode, keyword"okay"drops"okay"but not"okay sure". Inincludesmode, both are dropped. Useincludessparingly — it is aggressive and can swallow meaningful turns. - Case and whitespace — Matching is case-insensitive and whitespace-trimmed.
" OK "matches"ok". - Interacts with
min_words— Filtered frames are dropped before interruption logic runs, so they never count towardmin_wordseither. The filter is the strictest layer.
Don't filter words the bot needs to hear
If the conversation has a node where the user is expected to say “yes” or “no”, ensure those words are not in your keyword list. The filter is global across nodes — it does not auto-disable on answer-prompting nodes.