Skip to main content

FastBotty

Lightning-fast, super-simple Python bot framework for building powerful, interactive bots in under a minute using a single, clean YAML configuration file.

Python 3.10+ License: MIT

FastBotty is a modern, webhook-driven bot framework built on FastAPI, designed for effortless creation of rich, interactive notification bots. Currently, it supports Telegram (via python-telegram-bot), with plans to expand to other platforms.

Receive HTTP webhooks from any source, transform payloads intelligently, and deliver beautifully formatted messages with full support for inline keyboards and media—all configured in one intuitive config.yml file.

Ideal for:

  • Real-time alerts
  • E-commerce order notifications
  • Monitoring systems
  • CI/CD pipeline updates
  • Server health reporting
  • Any integration requiring instant, engaging bot deliveries

✨ Features

  • 🚀 Simple: Install, configure, and run in under 5 minutes.
  • 🔌 Plugin System: Custom formatters without touching core code.
  • 📱 All Chat Types: Private chats, groups, supergroups, and channels.
  • 📢 Broadcast: Send to multiple chats simultaneously.
  • 🖼️ Rich Media: Single images, photo galleries (up to 10), documents, videos, audio, and voice messages.
  • 📍 Location Sharing: Send GPS coordinates with optional live tracking.
  • 🎹 Inline Keyboards: Interactive buttons with dynamic templates.
  • 💳 Payment Support: Send invoices with pay buttons for Telegram Stars and other providers.
  • ⌨️ Reply Keyboards: Custom keyboards with buttons for contacts, locations, and more.
  • 🤖 Command Handlers: Respond to /start, /help, etc.
  • 🌐 Environment Variables: Universal ${VAR} support in all config fields.
  • 🏷️ Custom Labels: Map order_id → 🆔 Order ID.
  • 🔀 Field Mapping: Map nested JSON fields with dot notation.
  • 📝 Jinja2 Templates: Conditionals, loops, and filters.
  • 🎨 Formatters: Plain text, Markdown, or custom plugins.
  • 🔒 Secure: API key authentication.
  • 🌍 CORS Ready: Configurable CORS for web frontends.
  • ♻️ Reliable: Automatic retries with exponential backoff.
  • 🐳 Docker Ready: Easy containerized deployment.

🛠️ Quick Start

1. Install

pip install fastbotty

2. Create Project

fastbotty init my_notifier
cd my_notifier

3. Configure

Edit config.yaml:

bot:
  token: "${TELEGRAM_BOT_TOKEN}"
endpoints:
  - path: "/notify/orders"
    chat_id: "-1001234567890"
    formatter: "plain"

4. Run

export TELEGRAM_BOT_TOKEN="your-bot-token"
fastbotty run

5. Send Notification

curl -X POST http://localhost:8000/notify/orders \
  -H "Content-Type: application/json" \
  -d '{"message": "New order received!", "order_id": 123}'

📚 Documentation


🔧 Configuration Reference

Bot Configuration

bot:
  token: "${TELEGRAM_BOT_TOKEN}" # Bot token (supports env vars)
  test_mode: false # Log instead of sending (for testing)
  webhook_url: "${WEBHOOK_URL}" # Public URL for receiving updates
  webhook_path: "/bot/webhook" # Webhook endpoint path

Templates

templates:
  order_received: |
    🛒 *New Order \#{{ order_id }}*

    Customer: {{ customer }}
    Total: {{ total }}

Endpoint Configuration

endpoints:
  - path: "/webhook/orders" # HTTP endpoint path
    chat_id: "8345389653" # Single chat ID
    chat_ids: # Or multiple chat IDs
      - "8345389653"
      - "-1001234567890"
      - "@my_channel"
    formatter: "markdown" # plain, markdown, or plugin name
    template: "order_received" # Use template instead of formatter
    parse_mode: "MarkdownV2" # Telegram parse mode
    labels: # Custom display labels
      order_id: "🆔 Order"
      customer: "👤 Customer"
    field_map: # Map incoming fields
      image_url: "product.photo" # Supports dot notation
      image_urls: "product.gallery"

Server Configuration

server:
  host: "0.0.0.0"
  port: 8000
  api_key: "${API_KEY}" # Optional authentication
  cors_origins: ["*"] # CORS allowed origins
logging:
  level: "INFO" # DEBUG, INFO, WARNING, ERROR

🌐 Environment Variables

All config fields support ${VAR} syntax with optional defaults:

bot:
  token: "${TELEGRAM_BOT_TOKEN}"
  webhook_url: "${WEBHOOK_URL}"
server:
  port: "${PORT:-8000}" # Use PORT or default to 8000
  cors_origins: ["${CORS_ORIGIN:-*}"]

Create a .env file:

TELEGRAM_BOT_TOKEN=your_bot_token
WEBHOOK_URL=https://yourapp.onrender.com
PORT=3000

Note: All CLI commands (run, validate, webhook) automatically load environment variables from a .env file in the current directory if it exists. You can use either exported environment variables or a .env file.


⚙️ CLI Commands

fastbotty init <name> # Create new project
fastbotty run # Start server
fastbotty run --reload # Start with auto-reload (dev)
fastbotty validate # Validate config file
fastbotty webhook setup # Register webhook with Telegram
fastbotty webhook info # Show webhook status
fastbotty webhook delete # Remove webhook
fastbotty --version # Show version

🔌 Custom Plugins

Create plugins/my_formatter.py:

from fastbotty import IPlugin

class MyFormatter(IPlugin):
    @property
    def name(self):
        return "my_formatter"

    def format(self, payload: dict, config: dict) -> str:
        prefix = config.get("prefix", "📢")
        return f"{prefix} {payload.get('message', '')}"

Use in config:

endpoints:
  - path: "/notify"
    chat_id: "123456789"
    formatter: "my_formatter"
    plugin_config:
      prefix: "🔔 Alert:"

📡 API Response

Success:

{
  "status": "sent",
  "message_id": 123,
  "chat_id": "8345389653"
}

Error (structured JSON):

{
  "detail": {
    "error": "invalid_api_key",
    "message": "Invalid or missing API key"
  }
}

Error codes: invalid_api_key, formatter_not_found, send_failed


🛠️ Development

Setup Development Environment

git clone https://github.com/venopyx/fastbotty.git
cd fastbotty
make install

Development Commands

source .venv/bin/activate
make test
make lint
make format
make build
make clean

Publishing

See docs/PUBLISHING.md for detailed release instructions.

Quick release:

make release version=1.0.4 notes=docs/RELEASE_NOTES.md

🔍 Getting Your Chat ID

  1. Message @userinfobot on Telegram.
  2. Or send a message to your bot and check:
    curl https://api.telegram.org/bot<TOKEN>/getUpdates
    

📜 License

MIT License – see LICENSE for details.

Metadata

Release files for fastbotty 0.0.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fastbotty 0.0.4
File Size Uploaded Provenance Actions
fastbotty-0.0.4.tar.gz 38.6 kB Without provenance Details for fastbotty-0.0.4.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for fastbotty 0.0.4
File Interpreter ABI Platform Actions
fastbotty-0.0.4-py3-none-any.whl Python 3 none any Details for fastbotty-0.0.4-py3-none-any.whl

Total release size: 69.4 kB

Release files / fastbotty-0.0.4.tar.gz

Download URL fastbotty-0.0.4.tar.gz
Size 38.6 kB
Tags Source
SHA-256 checksum
How to use checksums
27301fa266209872b1d37c8affe05f68324f44ae15de3b9347643bdb7c802df4
BLAKE2b-256 checksum
How to use checksums
93c2937c84d4ad13d1c51584ad2985e0258c4e016a987495a9145a34fb2b2415
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.11

Release files / fastbotty-0.0.4-py3-none-any.whl

Download URL fastbotty-0.0.4-py3-none-any.whl
Size 30.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a6d9405f446639ed20020c1915376d47fcbd9939fc0cf4b1ab9346894f642af0
BLAKE2b-256 checksum
How to use checksums
291111bca831d394103e5ce115d743d808db326f3601be917d146809c4e04311
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.11

Security for fastbotty 0.0.4

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page