Skip to main content

Simple Telegram notification framework with plugin support

Project description

Telegrify

Simple, powerful Telegram notification framework with plugin support

Python 3.10+ License: MIT

Telegrify receives HTTP webhooks and forwards them as formatted Telegram messages. Perfect for alerts, order notifications, monitoring, CI/CD pipelines, and any system that needs to notify users via Telegram.

Features

  • 🚀 Simple - Install, configure, run in under 5 minutes
  • 🔌 Plugin System - Custom formatters without touching core code
  • 📱 All Chat Types - Private chats, groups, supergroups, channels
  • 📢 Broadcast - Send to multiple chats simultaneously
  • 🖼️ Rich Media - Single images, photo galleries (up to 10)
  • 🎹 Inline Keyboards - Interactive buttons with dynamic templates
  • 🤖 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, 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 telegrify

2. Create Project

telegrify 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"
telegrify 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 .env file:

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

CLI Commands

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

Custom Plugins

Create plugins/my_formatter.py:

from telegrify 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

# Clone the repository
git clone https://github.com/venopyx/telegrify.git
cd telegrify

# Run the setup script (creates venv, installs dependencies)
make install

# Or manually:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements-dev.txt

Development Commands

# Activate virtual environment
source .venv/bin/activate

# Run tests
make test

# Run linters
make lint

# Format code
make format

# Build package
make build

# Clean build artifacts
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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

telegrify-1.0.5.tar.gz (29.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

telegrify-1.0.5-py3-none-any.whl (25.9 kB view details)

Uploaded Python 3

File details

Details for the file telegrify-1.0.5.tar.gz.

File metadata

  • Download URL: telegrify-1.0.5.tar.gz
  • Upload date:
  • Size: 29.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.11

File hashes

Hashes for telegrify-1.0.5.tar.gz
Algorithm Hash digest
SHA256 82a2b483b4fbce59f57841f7377b68c5acab2c162f693d435d494469309c3eb2
MD5 be01b8b4c66bd49cc9dc416c13fb71f0
BLAKE2b-256 69949a5588100118b568044842a0da1fcfa221b0ca576d1af134db798bb577a5

See more details on using hashes here.

File details

Details for the file telegrify-1.0.5-py3-none-any.whl.

File metadata

  • Download URL: telegrify-1.0.5-py3-none-any.whl
  • Upload date:
  • Size: 25.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.11

File hashes

Hashes for telegrify-1.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 89f0cf5a83ce33b345f81acbc74ab4667648ab37fbb525e4df2afd1c98018c21
MD5 aae67f90c3d81b03afb0336420ec72d7
BLAKE2b-256 afa3d0e71d6b8d883a2cc3d2049bfbc00fc621f5a3dae3c9623f6014ae55a4cd

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page