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

  • USAGE.md - Complete usage guide with examples
  • FUTURE.md - Roadmap and planned features

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

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.1.tar.gz (19.4 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.1-py3-none-any.whl (23.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: telegrify-1.0.1.tar.gz
  • Upload date:
  • Size: 19.4 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.1.tar.gz
Algorithm Hash digest
SHA256 abf2c1e544fd5ee42bec44712ba93c7d74a7d7aba671400fbfbebd6565859f43
MD5 b6bb4c84f912aaed833432bd59225e32
BLAKE2b-256 da288a820192004ccaf964541ba0c84df2813337fffd3b833c9d2d63d1f6451e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: telegrify-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 23.6 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 4aeda6c340ca23b12414cfbb0b41fe99bec3ef683ba17d1d2cf37ed8d3c923d2
MD5 fdeb2f9bb03f65adc315cf59ae72c33a
BLAKE2b-256 2675581c2e49355fd327bf1482b10558624e17721553b89e966a0860d7b935e7

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