1. Как создать свой Telegram-бот для SMM с помощью aiogram 3
    1. …
    2. Как создать свой Telegram-бот для SMM с помощью aiogram 3
    AdvancedTelegram

    Как создать свой Telegram-бот для SMM с помощью aiogram 3

    Полный гайд по созданию Telegram-бота на aiogram 3: установка окружения, хендлеры, клавиатуры, FSM для заказов и деплой на сервер.

    25 min0 vuesAdvanced

    Tutoriel texte

    Полный гайд по созданию Telegram-бота для SMM на aiogram 3: установка, хендлеры, клавиатуры, FSM для заказов, деплой на сервер.

    Как создать свой Telegram-бот для SMM с помощью aiogram 3

    aiogram 3 — современный асинхронный фреймворк для Telegram-ботов на Python. В этом туториале создадим полноценного SMM-бота с приёмом заказов, FSM для многошаговых сценариев и интеграцией с SMM-панелью по API. Подходит для разработчиков с опытом Python. Полный код можно развернуть за 2–3 часа.

    Установка окружения

    Требуется Python 3.11+ и виртуальное окружение:

    python -m venv venv
    source venv/bin/activate  # Linux/Mac
    # или venv\\Scripts\\activate на Windows
    
    pip install aiogram==3.13.1 pydantic aiosqlite aiohttp
    

    Создайте структуру проекта:

    smm_bot/
    ├── bot.py
    ├── config.py
    ├── handlers/
    │   ├── __init__.py
    │   ├── start.py
    │   └── order.py
    ├── keyboards/
    │   ├── __init__.py
    │   └── reply.py
    └── states/
        └── order.py
    

    Базовая структура бота

    # config.py
    import os
    from dataclasses import dataclass
    
    @dataclass
    class Config:
        bot_token: str = os.getenv("BOT_TOKEN", "")
        admin_id: int = int(os.getenv("ADMIN_ID", "0"))
        smm_api_url: str = "https://smmboost.io/api/v2"
        smm_api_key: str = os.getenv("SMM_API_KEY", "")
    
    config = Config()
    
    # bot.py
    import asyncio
    import logging
    from aiogram import Bot, Dispatcher
    from aiogram.client.default import DefaultBotProperties
    from aiogram.enums import ParseMode
    from aiogram.fsm.storage.memory import MemoryStorage
    from config import config
    from handlers import start, order
    
    async def main():
        logging.basicConfig(level=logging.INFO)
        bot = Bot(
            token=config.bot_token,
            default=DefaultBotProperties(parse_mode=ParseMode.HTML)
        )
        dp = Dispatcher(storage=MemoryStorage())
        
        dp.include_router(start.router)
        dp.include_router(order.router)
        
        await bot.delete_webhook(drop_pending_updates=True)
        await dp.start_polling(bot)
    
    if __name__ == "__main__":
        asyncio.run(main())
    

    Хендлеры команд

    # handlers/start.py
    from aiogram import Router, types, F
    from aiogram.filters import CommandStart
    from keyboards.reply import main_menu
    
    router = Router()
    
    @router.message(CommandStart())
    async def cmd_start(message: types.Message):
        await message.answer(
            "👋 Привет! Я SMM-бот.\\n"
            "Здесь вы можете заказать подписчиков, лайки и просмотры.\\n\\n"
            "Выберите услугу:",
            reply_markup=main_menu()
        )
    
    @router.message(F.text == "📋 Мои заказы")
    async def my_orders(message: types.Message):
        # здесь запрос к БД или API панели
        await message.answer("У вас пока нет заказов. Создайте первый!")
    

    Клавиатуры

    # keyboards/reply.py
    from aiogram.types import ReplyKeyboardMarkup, KeyboardButton
    from aiogram.utils.keyboard import ReplyKeyboardBuilder
    
    def main_menu() -> ReplyKeyboardMarkup:
        builder = ReplyKeyboardBuilder()
        builder.add(KeyboardButton(text="📷 Instagram"))
        builder.add(KeyboardButton(text="✈️ Telegram"))
        builder.add(KeyboardButton(text="▶️ YouTube"))
        builder.add(KeyboardButton(text="🎵 TikTok"))
        builder.add(KeyboardButton(text="📋 Мои заказы"))
        builder.add(KeyboardButton(text="💼 Баланс"))
        builder.adjust(2, 2, 2)
        return builder.as_markup(resize_keyboard=True)
    

    FSM для заказов

    FSM (Finite State Machine) — для многошаговых сценариев:

    # states/order.py
    from aiogram.fsm.state import State, StatesGroup
    
    class OrderFSM(StatesGroup):
        platform = State()
        service = State()
        link = State()
        quantity = State()
        confirm = State()
    
    # handlers/order.py
    from aiogram import Router, types, F
    from aiogram.fsm.context import FSMContext
    from states.order import OrderFSM
    
    router = Router()
    
    @router.message(F.text == "📷 Instagram")
    async def start_order(message: types.Message, state: FSMContext):
        await state.set_state(OrderFSM.service)
        await message.answer(
            "Выберите услугу:\\n"
            "1. Подписчики\\n2. Лайки\\n3. Просмотры Reels\\n4. Комментарии"
        )
    
    @router.message(OrderFSM.service)
    async def process_service(message: types.Message, state: FSMContext):
        await state.update_data(service=message.text)
        await state.set_state(OrderFSM.link)
        await message.answer("Отправьте ссылку на профиль/пост:")
    
    @router.message(OrderFSM.link)
    async def process_link(message: types.Message, state: FSMContext):
        if "instagram.com" not in message.text:
            await message.answer("❌ Неверная ссылка. Попробуйте снова.")
            return
        await state.update_data(link=message.text)
        await state.set_state(OrderFSM.quantity)
        await message.answer("Укажите количество (от 100 до 100000):")
    
    @router.message(OrderFSM.quantity)
    async def process_quantity(message: types.Message, state: FSMContext):
        if not message.text.isdigit():
            await message.answer("❌ Введите число.")
            return
        qty = int(message.text)
        if not (100 <= qty <= 100000):
            await message.answer("❌ Допустимо от 100 до 100000.")
            return
        data = await state.get_data()
        price = qty * 0.08  # 80 ₽ за 1000
        await state.update_data(quantity=qty, price=price)
        await state.set_state(OrderFSM.confirm)
        await message.answer(
            f"📋 Заказ:\\nУслуга: {data['service']}\\nСсылка: {data['link']}\\n"
            f"Количество: {qty}\\nСтоимость: {price:.2f} ₽\\n\\nПодтвердить? (Да/Нет)"
        )
    
    @router.message(OrderFSM.confirm, F.text.lower() == "да")
    async def confirm_order(message: types.Message, state: FSMContext):
        data = await state.get_data()
        # здесь вызов API SMM-панели
        order_id = await create_smm_order(data)
        await state.clear()
        await message.answer(f"✅ Заказ #{order_id} создан! Статус можно проверить в «Мои заказы».")
    
    async def create_smm_order(data: dict) -> str:
        # интеграция с API панели
        import aiohttp
        from config import config
        async with aiohttp.ClientSession() as session:
            payload = {
                "key": config.smm_api_key,
                "action": "add",
                "service": 12,  # ID услуги
                "link": data["link"],
                "quantity": data["quantity"]
            }
            async with session.post(config.smm_api_url, data=payload) as resp:
                result = await resp.json()
                return result.get("order", "unknown")
    

    Деплой

    Для продакшена используйте systemd на VPS или Docker:

    # Dockerfile
    FROM python:3.12-slim
    WORKDIR /app
    COPY requirements.txt .
    RUN pip install --no-cache-dir -r requirements.txt
    COPY . .
    CMD ["python", "bot.py"]
    
    # Запуск на VPS через systemd
    sudo nano /etc/systemd/system/smmbot.service
    
    [Unit]
    Description=SMM Telegram Bot
    After=network.target
    
    [Service]
    User=deploy
    WorkingDirectory=/home/deploy/smm_bot
    ExecStart=/home/deploy/smm_bot/venv/bin/python bot.py
    Restart=always
    RestartSec=10
    
    [Install]
    WantedBy=multi-user.target
    
    sudo systemctl enable smmbot && sudo systemctl start smmbot
    

    Тестирование и отладка

    Перед запуском бота в продакшен проведите тестирование:

    1. Локальное тестирование. Запустите бота на тестовом аккаунте (создайте второго бота через BotFather с токеном для тестов). Пройдите все сценарии: /start, выбор услуги, ввод ссылки, количества, подтверждение, оплата.

    2. Проверка edge-cases. Что будет, если пользователь введёт текст вместо числа? Неверную ссылку? Нажмёт «Назад» в середине сценария? Обработайте все эти случаи — иначе бот «упадёт» с ошибкой.

    3. Тестирование под нагрузкой. Если ожидаете 100+ одновременных пользователей — протестируйте через locust или pytest-asyncio. aiogram держит 1000+ RPS на одном процессе.

    4. Логирование. Подключите Sentry для отслеживания ошибок:

    import sentry_sdk
    sentry_sdk.init(dsn="YOUR_SENTRY_DSN", traces_sample_rate=1.0)
    

    5. Мониторинг. Настройте уведомления в админ-чат при падении бота. Проверяйте раз в день — systemctl status smmbot.

    6. Резервное копирование. Если используете SQLite/PostgreSQL — настройте ежедневный бэкап через cron.

    Итог

    За 2–3 часа вы получаете полноценного Telegram-бота для SMM на aiogram 3 с FSM для заказов, клавиатурами и интеграцией с панелью по API. Для продакшена замените MemoryStorage на RedisStorage (для сохранения состояния при рестарте), добавьте базу данных (SQLite/PostgreSQL) для хранения заказов и пользователей, и настройте логирование через Sentry для отслеживания ошибок.

    Что дальше

    • Добавьте оплату через ЮKassa или крипту (CryptoBot API)
    • Реализуйте реферальную систему с начислением бонусов
    • Подключите админ-панель для операторов (отдельный чат с командами)
    • Добавьте уведомления о смене статуса заказа через webhook
    • Интегрируйте с Google Analytics 4 через Measurement Protocol
    • Настройте A/B тестирование сообщений для повышения конверсии

    Cela vous a-t-il été utile ?

    Vos retours nous aident à améliorer nos tutoriels.

    Ce que les gens cherchent aussi

    • panneau smm
    • panneau smm nakrytka
    • panneau smm france 2026
    • panneau smm fiable paris
    • panneau smm france europe
    • panneau smm belgique 2026
    • panneau smm nakrytka paris
    • panneau smm nakrytka france
    • panneau smm fiable belgique
    • panneau smm belgique france
    • panneau smm europe toulouse
    • panneau smm vs agence suisse
    • panneau smm définition france
    • panneau smm pas cher marseille
    • panneau smm pas cher vs premium
    • meilleur panneau smm 2024 canada
    • qu'est-ce qu'un panneau smm suisse
    • comment utiliser panneau smm france
    • panneau smm pas cher vs premium 2026
    • panneau smm pas cher vs premium paris
    • panneau smm pas cher vs premium canada
    • comment gagner argent panneau smm canada
    • panneau smm vs croissance organique paris
    • panneau smm vs croissance organique suisse

    Ce que d’autres demandent

    comment fonctionne panneau smm
    Oui, le service fonctionne — c’est la méthode standard qu’utilisent agences, blogueurs et marketeurs. Effet visible quelques minutes après le démarrage.
    comment fonctionne panneau smm paris
    Oui, le service fonctionne — c’est la méthode standard qu’utilisent agences, blogueurs et marketeurs. Effet visible quelques minutes après le démarrage.
    comment fonctionne panneau smm france
    Oui, le service fonctionne — c’est la méthode standard qu’utilisent agences, blogueurs et marketeurs. Effet visible quelques minutes après le démarrage.
    comment utiliser panneau smm
    La réponse est dans /faq et /services. Sinon, contactez le support — on répond en 1 heure.
    comment gagner argent panneau smm
    La réponse est dans /faq et /services. Sinon, contactez le support — on répond en 1 heure.

    Panneau SMM nouvelle génération — 2026. Abonnés, likes et vues pour plus de 30 plateformes sociales. Démarrage automatique, prix bas, support 24/7.

    Services

    Sections

    Support

    Recevez les actus, les réductions et les guides SMM. Pas de spam.

    Mentions légales

    © 2026 NAKRYTKA.VIP. Tous droits réservés. Fait avec ❤ SMM.

    Support 24/7

    Recherche globale

    Trouvez services, articles, guides et pages