Docs Platform
Telegram pipeline
How a Telegram post becomes a mood: ingestion, HD images, and the archive mirror.
This document describes the private Telegram ingestion pipeline for mood posts, HD images, and email notifications.
Scope
The Telegram pipeline affects:
POST https://api.buxx.me/webhooks/telegramhttps://buxx.me/api/v2/images/*- immediate email notify dispatch
- public mood pages that still consume Telegram content during this migration wave
Current Flow
Mermaid
flowchart TD
A["Telegram channel post"] --> B["Telegram calls https://api.buxx.me/webhooks/telegram"]
B --> C["Validate X-Telegram-Bot-Api-Secret-Token"]
C --> D["Resolve postId/imageIndex"]
D --> E["Fetch Telegram media bytes"]
E --> F["site-api writes originals and variants to R2"]
F --> G["Public reads use private image routes"]
B --> H["site-api enqueues notify dispatch job"]
H --> I["Queue consumer calls /v2/notify/dispatch"]
I --> J["Resend sends immediate notify emails"]
Responsibility Split
site-api
Responsibilities:
- validate Telegram webhook secrets
- parse
channel_post - resolve media-group image indexing
- ingest mood images into R2
- enqueue durable immediate notify dispatch jobs
- dispatch notification email through
/v2/notify/dispatch
Public site
Responsibilities:
- render mood feed and detail pages
- consume
/api/moodsand/api/commentsfromsite-api - use
PUBLIC_HD_IMAGE_URLfor primary image URLs - preserve
/static/...telegram CDN...fallback behavior
Key URLs
Canonical private URLs:
https://api.buxx.me/webhooks/telegramhttps://buxx.me/api/v2/images/*https://api.buxx.me/v2/notify/dispatch
Public compatibility:
https://buxx.me/api/*is directly routed tosite-api
Failure Modes
Webhook not configured. New posts do not enter private ingest, R2 objects do not update, and immediate notification dispatch does not run.
Image ingest fails. Public mood pages can use stored Telegram CDN fallbacks when site-api returns them, but email links cannot auto-fallback after delivery.
Notify queue handoff fails. The webhook should return a retryable failure so Telegram can redeliver the update.