Telegram-магазины — это удобный способ продавать товары и услуги прямо через мессенджер. Благодаря боту можно автоматизировать процесс продаж, принимать заказы и даже обрабатывать платежи без необходимости создания веб-сайта.
В этой серии статей мы разберем, как создать Telegram-магазин с использованием aiogram, одного из самых популярных асинхронных фреймворков для разработки ботов на Python.
Почему Telegram-магазин?
Создание магазина в Telegram имеет множество преимуществ:
- 📈 Большая аудитория — Telegram насчитывает сотни миллионов пользователей по всему миру.
- ⚡ Быстродействие — Бот обрабатывает заказы мгновенно, без задержек.
- 🛒 Интерактивность — Поддержка кнопок, форм заказов и даже встроенных платежей.
- 💰 Низкие затраты — Не требуется хостинг сайта или мобильное приложение.
- 🔐 Безопасность — Telegram предоставляет защиту данных на высоком уровне.
Почему именно aiogram?
aiogram — это асинхронный фреймворк для создания Telegram-ботов, который имеет ряд преимуществ перед другими библиотеками:
✅ Высокая производительность — работает на основе asyncio, что позволяет обрабатывать тысячи запросов одновременно.
✅ Гибкость — поддерживает сложные сценарии, например, работу с состояниями.
✅ Простота в использовании — удобный и понятный синтаксис.
✅ Официальная поддержка — активно обновляется и поддерживается сообществом.
Установка и настройка окружения
Перед тем как приступить к написанию кода, необходимо установить все зависимости и настроить окружение. Я буду использовать программу PyCharm. В ней при создании проекта окружение создается автоматически. Но если вы используете другие способы, то нужно установить виртуальное окружение.
Установка Python и виртуального окружения
- Убедитесь, что у вас установлен Python 3.8+.
python --version
Если Python не установлен, скачайте его с официального сайта.
- Создайте виртуальное окружение для проекта:
python -m venv venv
Активируйте окружение:
- Windows:
venv\Scripts\activate
- Mac/Linux:
source venv/bin/activate
- Windows:
Установка aiogram
Установите aiogram и библиотеку python-dotenv для работы с переменными окружения:
pip install aiogram python-dotenv
Регистрация бота в Telegram (BotFather)
Теперь нужно создать бота. В поиске приложения телеграм введите BotFather. Проверьте чтобы это был официальный бот @BotFather.
Откройте BotFather в Telegram и отправьте команду:
/newbot
Укажите имя, например: test_itsferapro_shop
Укажите username бота (username должен заканчиваться наbot
). Например: test_itsferapro_shop_bot
Скопируйте API-токен, который вам выдаст BotFather.
Создайте файл с расширением .env
и сохраните токен:
BOT_TOKEN=ВАШ_ТОКЕН_ОТ_BOTFATHER

Написание первого кода бота
Чтобы сделать код понятным и расширяемым, мы разделим его на несколько файлов:
Краткое описание файлов:
bot.py
– запускает бота и подключает обработчики.config.py
– загружает настройки, включая API-токен.keyboards.py
– содержит код для создания кнопок.handlers.py
– содержит обработчики команд, сообщений и callback-кнопок..env
– хранит API-токен бота, чтобы не раскрывать его в коде.
В файл config.py передадим наш токен:
import os
from dotenv import load_dotenv
# Загружаем переменные окружения из .env
load_dotenv()
# Читаем токен из окружения
BOT_TOKEN = os.getenv("BOT_TOKEN")
# Проверяем, загружен ли токен
if not BOT_TOKEN:
raise ValueError("BOT_TOKEN не найден! Проверьте файл .env")
Создадим файл bot.py и запишем туда код:
import asyncio
import os
from aiogram import Bot, Dispatcher, types
from aiogram.types import Message
from dotenv import load_dotenv
# Загружаем переменные окружения
load_dotenv()
# Получаем токен
BOT_TOKEN = os.getenv("BOT_TOKEN")
# Проверяем, есть ли токен
if not BOT_TOKEN:
raise ValueError("Ошибка: BOT_TOKEN не найден. Проверьте файл .env!")
# Создаем объекты бота и диспетчера
bot = Bot(token=BOT_TOKEN)
dp = Dispatcher()
# Обработчик команды /start
@dp.message()
async def start_command(message: Message):
if message.text == "/start":
await message.answer("Привет! Это тестовый Telegram-магазин.")
# Функция запуска бота
async def main():
print("Бот запущен...")
await bot.delete_webhook(drop_pending_updates=True) # Удаляем старые апдейты
await dp.start_polling(bot) # Запускаем бота
# Запуск асинхронного цикла
if __name__ == "__main__":
asyncio.run(main())
Разбор кода bot.py
После установки aiogram и создания бота в BotFather, мы написали код bot.py
, который отвечает за запуск Telegram-бота и обработку команд. Давайте разберем его по частям.
1. Импорт необходимых библиотек
Здесь мы:
- Импортируем asyncio — он нужен для асинхронной работы бота.
- Подключаем os для работы с переменными окружения.
- Импортируем классы из aiogram:
Bot
,Dispatcher
иMessage
. - Используем load_dotenv() для загрузки API-токена из файла
.env
.
2. Загрузка API-токена
# Загружаем переменные окружения
load_dotenv()
# Получаем токен из файла .env
BOT_TOKEN = os.getenv("BOT_TOKEN")
# Проверяем, найден ли токен
if not BOT_TOKEN:
raise ValueError("Ошибка: BOT_TOKEN не найден. Проверьте файл .env!")
Что здесь происходит:
- Загружается файл .env, где хранится
BOT_TOKEN
. - Переменная
BOT_TOKEN
получает значение токена из окружения. - Если токен отсутствует, программа выбрасывает ошибку.
3. Создание бота и диспетчера
# Создаем объект бота
bot = Bot(token=BOT_TOKEN)
# Создаем диспетчер для обработки сообщений
dp = Dispatcher()
bot = Bot(token=BOT_TOKEN)
— создаем объект бота и передаем ему API-токен.dp = Dispatcher()
— диспетчер управляет обработкой сообщений.
В aiogram 3.x Dispatcher
создается без аргументов (в отличие от aiogram 2.x
, где bot
передавался в Dispatcher(bot)
).
4. Обработка команды /start
@dp.message()
async def start_command(message: Message):
if message.text == "/start":
await message.answer("Привет! Это тестовый Telegram-магазин.")
@dp.message()
— декоратор, который ловит все текстовые сообщения от пользователей.message.text == "/start"
— проверяем, что пользователь отправил/start
.await message.answer("Привет! Это тестовый Telegram-магазин.")
— бот отвечает пользователю.
5. Основная функция для запуска бота
async def main():
print("Бот запущен...")
await bot.delete_webhook(drop_pending_updates=True) # Удаляем старые апдейты
await dp.start_polling(bot) # Запускаем бота
print("Бот запущен...")
— сообщение о запуске в консоли.await bot.delete_webhook(drop_pending_updates=True)
— удаляет старые сообщения, чтобы бот не обрабатывал их после перезапуска.await dp.start_polling(bot)
— запускает бесконечный цикл обработки входящих сообщений.
6. Запуск бота
if __name__ == "__main__":
asyncio.run(main())
- Проверяет, что файл запущен напрямую, а не импортирован в другой код.
asyncio.run(main())
— запускаетmain()
в асинхронном режиме.
Как запустить бота
Перед запуском убедитесь, что виртуальное окружение активировано:
venv\Scripts\activate # Windows
source venv/bin/activate # Mac/Linux
Запустите бота командой:
python bot.py
Этот бот обрабатывает команду /start
и отвечает пользователю. Если вы все сделали правильно, то при вводе команды /start в телеграм боте получите сообщение «Привет! Это тестовый Telegram-магазин.«. В следующей статье мы разберем добавление кнопок, меню и обработку товаров для магазина. 🚀
Пока нет комментариев. Будьте первым!