Chatbots and FastAPI

Joël-Steve N.
3 min readJul 5, 2024

--

Integrating FastAPI with Chatbots

Chatbots have become an essential tool for customer interaction, support, and automation. FastAPI, with its high performance and ease of use, is an excellent choice for developing the backend of a chatbot. In this article, we will explore how to integrate FastAPI with a chatbot platform, specifically focusing on a simple example using Telegram.

Project Structure

Let’s start by defining the project structure for our chatbot application:

fastapi_chatbot/
├── app/
│ ├── __init__.py
│ ├── main.py
│ └── bot.py
├── requirements.txt
└── README.md

1. Setting Up Your Environment

First, create a virtual environment and install FastAPI, Uvicorn, and the python-telegram-bot library:

python -m venv venv
source venv/bin/activate # On Windows use `venv\Scripts\activate`
pip install fastapi uvicorn python-telegram-bot

2. Creating a Simple Telegram Bot

We’ll start by creating a simple Telegram bot. To do this, you’ll need to create a bot on Telegram and get the API token. You can create a bot by talking to BotFather on Telegram.

Example: bot.py

from telegram import Update, Bot
from telegram.ext import Updater, CommandHandler, CallbackContext

TOKEN = "YOUR_TELEGRAM_BOT_API_TOKEN"

bot = Bot(TOKEN)
updater = Updater(TOKEN, use_context=True)
dispatcher = updater.dispatcher

def start(update: Update, context: CallbackContext):
update.message.reply_text('Hello! Welcome to the FastAPI Chatbot.')

start_handler = CommandHandler('start', start)
dispatcher.add_handler(start_handler)

3. Creating the FastAPI Application

Next, we create a FastAPI application to handle webhook events from Telegram.

Example: main.py

from fastapi import FastAPI, Request, BackgroundTasks
from app.bot import updater, bot, TOKEN

app = FastAPI()

@app.on_event("startup")
async def startup_event():
updater.start_polling()

@app.post("/webhook")
async def webhook(update: dict, background_tasks: BackgroundTasks):
updater.dispatcher.process_update(update)
return "ok"

@app.get("/")
async def read_root():
return {"message": "Hello, this is the FastAPI Chatbot server."}

4. Setting Up the Webhook

Set up the webhook for your Telegram bot. This is done by sending an HTTP request to Telegram with the webhook URL.

Example: set_webhook.py

import requests

TOKEN = "YOUR_TELEGRAM_BOT_API_TOKEN"
WEBHOOK_URL = "https://yourdomain.com/webhook"

url = f"https://api.telegram.org/bot{TOKEN}/setWebhook?url={WEBHOOK_URL}"
response = requests.get(url)

if response.status_code == 200:
print("Webhook set successfully")
else:
print("Failed to set webhook")

5. Running the Application

To run the application, use the following command:

uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

Navigate to http://127.0.0.1:8000 in your browser to see your FastAPI application in action.

6. Testing Your Chatbot

Once your webhook is set up, your bot should start receiving messages from users and responding based on the commands defined. Open Telegram, search for your bot, and send the /start command to see the bot's response.

7. Extending the Bot

You can extend the bot by adding more handlers for different commands and messages. Here’s an example of adding a /help command:

Example: bot.py

from telegram import Update, Bot
from telegram.ext import Updater, CommandHandler, CallbackContext

TOKEN = "YOUR_TELEGRAM_BOT_API_TOKEN"

bot = Bot(TOKEN)
updater = Updater(TOKEN, use_context=True)
dispatcher = updater.dispatcher

def start(update: Update, context: CallbackContext):
update.message.reply_text('Hello! Welcome to the FastAPI Chatbot.')

def help_command(update: Update, context: CallbackContext):
update.message.reply_text('Send /start to start the bot.')

start_handler = CommandHandler('start', start)
help_handler = CommandHandler('help', help_command)
dispatcher.add_handler(start_handler)
dispatcher.add_handler(help_handler)

Conclusion

Integrating FastAPI with chatbots provides a powerful combination for building scalable and high-performance chatbot backends. In this article, we demonstrated how to create a simple Telegram bot and integrate it with FastAPI. You can extend this example to support more complex interactions and other chatbot platforms.

--

--

Joël-Steve N.
Joël-Steve N.

Written by Joël-Steve N.

Senior Back-End Developer (Python, JavaScript, Java) | Community Manager & Tech Leader

Responses (2)