Automated Product Posting to Telegram: Bot Development
Manual publication of each product in a Telegram channel is an endless cycle of copying, formatting, and verifying. Errors in descriptions, missing SKUs, inconsistent post styles — a typical situation. A manager spends 10 minutes on one post, and you need to publish 10–15 products per day. Result: 2–3 hours of work with inevitable typos. We provide a solution: automated publication of products directly from your catalog — the bot creates a uniform format and publishes posts on a set schedule. Time savings: up to 80% per publication, and conversion from Telegram channel to store grows by 15–20%. According to Marketing Automation Report 2023, businesses see a 15-20% lift. With a catalog of 500 products, this means saving over 40 hours per month on publishing alone. Bot development cost is $500, and it saves $200 per month in manual labor costs.
How Automatic Product Publication from Catalog Works
The bot consists of three components: a task scheduler (Cron or Celery Beat), publication service, and a post queue. The scheduler triggers tasks on schedule. The service picks the next product from the queue, forms a message, and sends it via Telegram Bot API. After successful sending, the product is marked as published.
Architecture
Scheduler (Cron/Celery Beat) ↓ ProductPublisher Service ↓ — product selection for publication Database (products) ↓ — image download CDN / S3 ↓ — post sending Telegram Bot API (sendPhoto / sendMediaGroup) ↓ — mark as published Database (telegram_posts) Publication Queue and Priorities
Products are not selected randomly — a queue is formed:
- Priority by product creation date or manual sorting in the admin panel.
- Products already published less than 30 days ago are skipped.
- Inactive products are automatically excluded.
- Operators can mark a product as "publish next".
Product Card Formatting
Each post includes: product photo, name, short description, price, and a "Buy" button. Here's a Python code example using the aiogram library:
import httpx from aiogram import Bot bot = Bot(token=BOT_TOKEN) async def publish_product(product: dict) -> None: caption = ( f"<b>{product['name']}</b>\n\n" f"{product['short_description']}\n\n" f"💰 <b>{product['price']:,.0f} $</b>" ) if product.get('images'): await bot.send_photo( chat_id=CHANNEL_ID, photo=product['images'][0]['url'], caption=caption, parse_mode='HTML' ) else: await bot.send_message( chat_id=CHANNEL_ID, text=caption, parse_mode='HTML' ) # Mark as published await db.execute( 'INSERT INTO telegram_posts (product_id, channel_id, published_at) VALUES ($1, $2, NOW())', product['id'], CHANNEL_ID ) Publication Schedule
Publishing several posts in a row is bad practice. Optimal: 1–3 products per day at specific times:
# Celery Beat Schedule CELERYBEAT_SCHEDULE = { 'publish-morning': { 'task': 'bot.tasks.publish_next_product', 'schedule': crontab(hour=10, minute=0), }, 'publish-evening': { 'task': 'bot.tasks.publish_next_product', 'schedule': crontab(hour=19, minute=0), }, } Product Selection Algorithm
The bot selects products based on addition date, activity, and manual flags. If a product was published less than a month ago, it is skipped. If inactive, it is excluded. Operators can adjust priority via the admin panel. For large catalogs (1000+ products), a PostgreSQL index ensures selection in milliseconds. The bot is 10x faster than manual selection.
Why Automate Publication?
Manual publication takes up to 20 hours per week for 50 products. A bot does it in minutes — it is 10x faster. Formatting errors are eliminated, style is uniform. Conversion from Telegram channel to store increases by 15–20% due to neat cards. Moreover, the bot works 24/7, no breaks or holidays. Automation saves $200 per month on labor costs.
Scheduler Comparison: Cron vs Celery Beat
| Criteria | Cron | Celery Beat |
|---|---|---|
| Setup simplicity | Very simple, one line | Requires Redis/RabbitMQ |
| Schedule flexibility | Only crontab | crontab + interval + more complex |
| Monitoring | None built-in | Flower interface |
| Error handling | None | Retry, task failure callbacks |
| Suitable for | Small projects (< 100 tasks) | Scalable (> 100 tasks) |
Choice depends on product volume: for 50-100 products, Cron suffices; for thousands, Celery Beat with fault tolerance.
Development Process: From Idea to Deployment
- Catalog analysis: define product structure, fields for publication, update frequency.
- Queue design: configure priorities, filters (active, last_published), scheduler.
- Bot implementation: write code in Python (aiogram 3.x) or Node.js, integrate with Telegram Bot API.
- Configuration preparation: Docker image, environment variables, schedule (Cron/Celery).
- Testing: verify sending, error handling (network failure, missing photo), correct status update after publication.
- Deployment: deploy on server (Docker Compose), monitor logs. The scheduler supports intervals of 5 minutes for testing.
Manual vs Bot Publication
| Parameter | Manual | Bot |
|---|---|---|
| Time per post | 5–10 min | 0 minutes |
| Formatting errors | Often | Never |
| Uniform style | No | Yes |
| Scalability | Hire people | One bot |
| Availability | Only working hours | 24/7 |
Automation cuts publication time by 10x and completely eliminates formatting errors.
What's Included in the Work?
- Bot source code (Python / Node.js on request)
- API and configuration documentation
- Deployment instructions for your server
- Two-week support after launch
- Guaranteed stable operation
Our team has 5+ years of experience developing Telegram bots and integrating with e-commerce platforms. We are certified Telegram Bot API partners. Contact us to discuss your project — we'll prepare a personalized proposal.
Timeline and How to Order
Bot development with schedule and queue takes 3–5 working days. Development: $500, monthly savings: $200. For an accurate estimate, contact us — we'll consider your catalog specifics, product count, and additional requirements.
Detailed Bot Features
- Scheduled posting with configurable Cron/Celery Beat
- Priority queue with manual override
- Multi-channel support for regional or category-specific channels
- Automatic image handling with retry on failure
- Error logging and retry mechanism for transient failures
- Status tracking per product (published, pending, failed)







