---
title: "Use Case 1: FAQ bot with AI"
description: "First AI bot on Fast Line Pro: collect a question, answer from the knowledge base, and fallback when there is no answer."
---

# Use Case 1: FAQ bot with AI answers

**Level:** basic · **Modules:** Fast Line Pro, Scenario Builder · **Action:** `action_fastline_pro`

## Required permissions and access

| What you need | Where in the menu | Why |
|---------------|-------------------|-----|
| **Scenario Builder** | Menu → Scenario Builder | Build the FAQ scenario |
| **Fast Line Pro** | Menu → Fast Line Pro | AI agent and knowledge base |
| **Fast Line Pro → Knowledge base** | Fast Line Pro → Knowledge base | FAQ documents; wait for indexing |
| **Settings → Bots** | Settings → Bots | Channels for preview / Telegram |

If a section is missing from the menu — check your account permissions or contact ConnectiveOne support.

## Business context

The company wants to answer frequent questions automatically without operators. The customer asks a question in chat — the bot answers from the knowledge base; if there is no answer, the customer gets a clear fallback message, not silence.

## Expected result

- The customer writes a question after the greeting.
- Fast Line Pro answers from the knowledge base.
- If there is no answer — the **fallback** edge fires with text like “Try rephrasing.”
- In Runs you see the `{{ai_answer}}` variable after a successful AI request.

## Flow architecture

```text
Start → MessageKeyboard (greeting + “Ask a question”)
     → WaitForInput (save question)
     → Action (action_fastline_pro)
        ├─ main exit → MessageKeyboard ({{ai_answer}})
        └─ fallback → “Try rephrasing”
```

## Step-by-step implementation

### Step 0. Fast Line Pro (outside Scenario Builder)

| What | Why |
|------|-----|
| Fast Line Pro → **Chatbots** tab | For FAQ, knowledge-base answers are enough; tools are not needed |
| Knowledge base → txt, 5–10 Q&A | A small file indexes faster in training |
| **Indexing status** | Wait until the document finishes processing in the KB before testing in the scenario |
| **Name** (e.g. `Training FAQ Bot`) | Must match `agent_name` in the scenario **exactly** (the parameter name is historical — the type may be “Chatbot”) |

Check: Fast Line Pro → “Testing” — KB answers work without a scenario.

**Chatbot vs Agent in Fast Line Pro**

The module has two AI app types. This is **not** “training vs production” and not the same as a bot in Scenario Builder / Settings → Bots.

| Type | What it can do | When to choose |
|------|----------------|----------------|
| **Chatbot** | Answers from the knowledge base and prompt; **no** tools | FAQ, categorizer, typical `action_fastline_pro` |
| **Agent** | The same + **Tools** (external actions) and advanced modes (e.g. streaming) | When AI must *do* something, not only answer from the KB |

**For this Use Case:** create a **Chatbot**. An Agent will be needed later if tools appear — see [Advanced Fast Line Pro](/en/learn/implementer/training/optional/use-case-advanced-fastline.md).

Optionally after fallback: edge “Talk to an operator” → connect (if Operator Panel is already set up in [Use Case 3](/en/learn/implementer/training/basic/use-case-03-handoff-to-operator.md)).

---

### Step 1. Start

| Parameter | Value | Why |
|-----------|-------|-----|
| Trigger | Message in channel (default) | Starts on the customer’s first message in preview / Telegram |

**Edges:** one exit → next node (greeting).

---

### Step 2. MessageKeyboard — greeting

**Node:** Message with buttons (`send-message-keyboard`).

| Parameter (Inspector) | Value | Why |
|-----------------------|-------|-----|
| Message text | “Hi! I’m the FAQ bot. Tap the button to ask a question.” | First message to the customer |
| Keyboard type | **inline** | Buttons under the message — convenient in Telegram and preview |
| Button 1 | Text: “Ask a question” · payload: `ask` | One branch — keeps Use Case 1 simple |
| Output Variable | *(optional)* | For Use Case 1, the button edge transition is enough |

**Edges:** button exit `ask` → WaitForInput. If the customer types text instead of tapping the button — enable validation `none` or add an “any text” edge → the same WaitForInput.

---

### Step 3. WaitForInput — collect the question

**Node:** Wait for input (`wait-for-input`).

| Parameter | Value | Why |
|-----------|-------|-----|
| messageText | “Write your question in one message” | Prompt to the customer |
| outputVariable | `question` | Text goes into `{{question}}` for AI |
| Validation → type | `none` | In training we accept any text |

**Edges:** one exit (successful input) → Action `action_fastline_pro`.

---

### Step 4. Action — `action_fastline_pro`

**Node:** Action → template **`action_fastline_pro`**.

**What the action does:** sends `user_input` to the Fast Line Pro agent, gets an answer from the knowledge base, writes it to a variable.

| node_params (JSON) | Value | Why |
|--------------------|-------|-----|
| `agent_name` | `Training FAQ Bot` | Agent name from Fast Line Pro |
| `user_input` | `{{question}}` | Question from the previous node |
| `save_response` | `ai_answer` | **Variable name** for the answer → later `{{ai_answer}}` |
| `conversation_id` | `fl_conversation_id` | Keeps context between questions in one Run (recommended) |
| `vision_file` | `false` | Use Case 1 without attachments |

**Edges (both required):**

| Edge | Where | Why |
|------|-------|-----|
| Main exit (answer exists) | MessageKeyboard with `{{ai_answer}}` | Customer sees the AI answer |
| **fallback** | MessageKeyboard: “Couldn’t find an answer. Try rephrasing.” | Without fallback the bot “goes silent” if the KB gave no answer |

---

### Step 5. MessageKeyboard — show the answer

| Parameter | Value | Why |
|-----------|-------|-----|
| Text | `{{ai_answer}}` | Substitutes the AI answer |
| Button (optional) | “Another question” → edge back to WaitForInput | FAQ loop without restarting the Run |

**Edges:** optionally — loop to WaitForInput or End.

---

### Step 6. Test in Runs

1. Scenario Builder → **Runs** → Chat preview.
2. Walk through: greeting → “Ask a question” → FAQ text → check `{{ai_answer}}` in the trace.
3. Question **outside** the FAQ → **fallback** must fire, not empty text.

## Acceptance criteria (self-check Runs)

- [ ] Question from the knowledge base → customer sees the AI answer in preview.
- [ ] Question outside the FAQ → **fallback** fires, not silence.
- [ ] Trace contains the `ai_answer` variable after a successful request.
- [ ] `agent_name` in the scenario matches the agent name in Fast Line Pro.
- [ ] Both edges (`main` and `fallback`) are connected on the canvas.
- [ ] Knowledge base is indexed (answers exist in Fast Line Pro “Testing”).
- [ ] *(Optional)* The same FAQ flow rebuilt via Instance Agent and verified in Runs ([rule](/en/learn/implementer/training/prerequisites.md#instance-agent-rule)).

## Common mistakes

| Symptom | Cause | What to do |
|---------|-------|------------|
| Bot “goes silent” after the question | No **fallback** edge | Connect fallback → MessageKeyboard |
| Empty answer | Wrong `agent_name` | Match the name in Fast Line Pro and `node_params` |
| `{{ai_answer}}` literally in the text | Variable not written | Check `save_response` and Runs trace |
| AI does not answer at all | KB not indexed, empty prompt, or FLP failure | Check “Testing” in Fast Line Pro without a scenario; then `agent_name` and fallback |

## Related documentation

- [Use action_fastline_pro](/en/fastlinepro/how-to/use-action-fastline-pro.md)
- [Test a scenario](/en/scenariobuilder/how-to/test-scenario.md)
- [Testing matrix — Use Case 1](/en/learn/implementer/training/reference/testing-matrix.md)
- [FAQ — Fast Line Pro](/en/learn/implementer/training/reference/faq.md)
- [Actions glossary](/en/learn/implementer/training/reference/actions-glossary.md)
- Next: [Use Case 2 — branching by choice](/en/learn/implementer/training/basic/use-case-02-menu-branching.md)
