Разработка бота для автоматической публикации товаров из сайта в Telegram-канал
Бот берёт товары из каталога сайта и публикует их в Telegram-канал: с фотографией, описанием, ценой и кнопкой перехода на страницу товара. Подходит для магазинов, которые хотят использовать Telegram-канал как дополнительный канал продаж без ручного оформления каждого поста.
Архитектура
Scheduler (Cron/Celery Beat)
↓
ProductPublisher Service
↓ — выборка товаров для публикации
Database (products)
↓ — скачивание изображения
CDN / S3
↓ — отправка поста
Telegram Bot API (sendPhoto / sendMediaGroup)
↓ — отметка как опубликовано
Database (telegram_posts)
Формирование публикации
import httpx
from aiogram import Bot
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
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>"
)
keyboard = InlineKeyboardMarkup(inline_keyboard=[[
InlineKeyboardButton(
text="🛒 Купить",
url=f"https://example.com/products/{product['slug']}"
)
]])
if product.get('images'):
await bot.send_photo(
chat_id=CHANNEL_ID,
photo=product['images'][0]['url'],
caption=caption,
parse_mode='HTML',
reply_markup=keyboard
)
else:
await bot.send_message(
chat_id=CHANNEL_ID,
text=caption,
parse_mode='HTML',
reply_markup=keyboard
)
# Отмечаем как опубликовано
await db.execute(
'INSERT INTO telegram_posts (product_id, channel_id, published_at) VALUES ($1, $2, NOW())',
product['id'], CHANNEL_ID
)
Расписание публикации
Публикация нескольких постов подряд — плохой тон. Оптимально: 1–3 товара в день, в определённое время:
# 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),
},
}
Очередь публикации
Товары не выбираются случайно — формируется очередь:
- Приоритет по дате создания товара или ручной сортировке в админке
- Товары, уже опубликованные менее 30 дней назад, пропускаются
- Неактивные товары исключаются автоматически
- Оператор может пометить товар как «опубликовать следующим»
Сроки
Бот с расписанием публикации и очередью: 3–5 рабочих дней.







