***

title: FAQBot
description: Answer frequently asked questions from a provided knowledge base using the FAQBot prefab agent, with optional category filtering and related question suggestions.
slug: /guides/faq-bot
max-toc-depth: 3
---------------------

For a complete index of all SignalWire documentation pages, fetch https://signalwire.com/docs/llms.txt

FAQBotAgent answers frequently asked questions from a provided knowledge base. It matches user questions to FAQs and optionally suggests related questions.

### Basic Usage

<Tabs>
  <Tab title="Python">
    ```python
    from signalwire.prefabs import FAQBotAgent

    agent = FAQBotAgent(
        faqs=[
            {
                "question": "What are your business hours?",
                "answer": "We're open Monday through Friday, 9 AM to 5 PM."
            },
            {
                "question": "Where are you located?",
                "answer": "Our main office is at 123 Main Street, Downtown."
            },
            {
                "question": "How do I contact support?",
                "answer": "Email support@example.com or call 555-1234."
            }
        ]
    )

    if __name__ == "__main__":
        agent.run()
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript
    import { FAQBotAgent } from 'signalwire-agents';

    const agent = new FAQBotAgent({
      faqs: [
        { question: 'What are your business hours?', answer: "We're open Monday through Friday, 9 AM to 5 PM." },
        { question: 'Where are you located?', answer: 'Our main office is at 123 Main Street, Downtown.' },
        { question: 'How do I contact support?', answer: 'Email support@example.com or call 555-1234.' },
      ],
    });

    agent.run();
    ```
  </Tab>
</Tabs>

### FAQ Format

| Field        | Type          | Required | Description                 |
| ------------ | ------------- | -------- | --------------------------- |
| `question`   | string        | Yes      | The FAQ question            |
| `answer`     | string        | Yes      | The answer to provide       |
| `categories` | list\[string] | No       | Category tags for filtering |

### Importing FAQBotAgent

| Language   | Import                                            |
| ---------- | ------------------------------------------------- |
| Python     | `from signalwire.prefabs import FAQBotAgent`      |
| TypeScript | `import { FAQBotAgent } from 'signalwire-agents'` |

### Constructor Parameters

```python
FAQBotAgent(
    faqs=[...],                # List of FAQ dictionaries (required)
    suggest_related=True,      # Suggest related questions
    persona=None,              # Custom personality description
    name="faq_bot",            # Agent name
    route="/faq",              # HTTP route
    **kwargs                   # Additional AgentBase arguments
)
```

### With Categories

Use categories to organize FAQs:

```python
from signalwire.prefabs import FAQBotAgent

agent = FAQBotAgent(
    faqs=[
        {
            "question": "How do I reset my password?",
            "answer": "Click 'Forgot Password' on the login page.",
            "categories": ["account", "security"]
        },
        {
            "question": "How do I update my email?",
            "answer": "Go to Settings > Account > Email.",
            "categories": ["account", "settings"]
        },
        {
            "question": "What payment methods do you accept?",
            "answer": "We accept Visa, Mastercard, and PayPal.",
            "categories": ["billing", "payments"]
        }
    ]
)
```

### Built-in Functions

FAQBot provides this SWAIG function automatically:

| Function      | Description                      |
| ------------- | -------------------------------- |
| `search_faqs` | Search FAQs by query or category |

### Custom Persona

Customize the bot's personality:

```python
agent = FAQBotAgent(
    faqs=[...],
    persona="You are a friendly and knowledgeable support agent for Acme Corp. "
            "You speak in a warm, professional tone and always try to be helpful."
)
```

### Complete Example

```python
#!/usr/bin/env python3
## product_faq_bot.py - FAQ bot for product questions
from signalwire.prefabs import FAQBotAgent

agent = FAQBotAgent(
    faqs=[
        {
            "question": "What is the warranty period?",
            "answer": "All products come with a 2-year warranty.",
            "categories": ["warranty", "products"]
        },
        {
            "question": "How do I return a product?",
            "answer": "Start a return within 30 days at returns.example.com.",
            "categories": ["returns", "products"]
        },
        {
            "question": "Do you ship internationally?",
            "answer": "Yes, we ship to over 50 countries.",
            "categories": ["shipping"]
        }
    ],
    suggest_related=True,
    persona="You are a helpful product specialist for TechGadgets Inc.",
    name="product-faq"
)

## Add language
agent.add_language("English", "en-US", "rime.spore")

if __name__ == "__main__":
    agent.run()
```

### Best Practices

#### FAQ Content

* Write questions as users would ask them
* Keep answers concise but complete
* Include variations of common questions
* Update FAQs based on actual user queries

#### Categories

* Use consistent category naming
* Limit to 2-3 categories per FAQ
* Use categories for related question suggestions

#### Scaling

* For large FAQ sets, consider native\_vector\_search skill
* FAQBot works best with 50 or fewer FAQs
* Use categories to help matching