Skip to Content
CraftBot Docs v1 — internal preview

Intent Route

The Intent Route node classifies the customer’s reply against a list of intents and routes the flow down the matching branch. Classification is lexical: each intent is a list of literal keywords plus optional regular expressions, with a priority for tie-breaking. There’s no NLP model, no confidence score, and no per-tenant intent catalogue — every intent is defined inline on the node.

Configuring the node

  1. Drop the Intent Route node from the Logic category onto the canvas.
  2. Open the configuration drawer and add one row per intent:
    • Key — short identifier (e.g. track_order, billing_question). This is the port name on the canvas; wire each intent’s port to its downstream branch.
    • Label — optional human-readable name shown in the drawer and in analytics.
    • Priority — integer. When the inbound text matches more than one intent, the higher-priority intent wins. Ties fall back to row order.
    • Keywords — comma-separated literal strings. Matched case-insensitively against the inbound text after trimming.
    • Regexes — pipe-separated regular expressions. The first regex to match wins for that intent.
  3. Else port key (bottom of the drawer) — the port name that fires when no intent matches. Defaults to else.

Output ports

  • One output port per configured intent, with the port name equal to the intent’s key.
  • One else port (rename via the Else port key field) for inbound text that didn’t match any intent’s keywords or regexes.

When to use it

  • Open-ended menus where you want customers to type their request naturally rather than tap buttons.
  • Top-of-funnel triage when customer language varies wildly across a small, well-known set of intents (e.g. five top reasons-to-contact).
  • Reducing button-menu clutter for power users who type their request before the bot finishes prompting.

When not to use it

  • The customer’s reply is one of a fixed small set of expected literals — use Quick Links or List instead. Tap-to-select is more reliable than free-text matching.
  • You need genuine semantic understanding — Intent Route is purely lexical (keywords + regex). For LLM-style classification, use the Agent node and have your agent decide.
  • The intent depends on a contact attribute (tier, region, language) — use Condition instead.

Notes

  • Each match writes an intent_matched event with the intent key, label, and priority. Analytics surface those events so you can see which intents win most often.
  • When the node is entered without an inbound message (e.g. straight after a Message), it parks the session and waits for the next customer reply before classifying.
  • The runtime only supports mode: 'lexical'. Recipes saved with any other mode value won’t publish — the publish-time validator blocks them.
Last updated on