Telegram-бот под ключ — ИИ-помощник нейросети Аливия, который пишет рабочего бота на Python и aiogram 3: запись клиентов, приём заявок, каталог, рассылка. Расскажите, что должен делать бот, какие нужны кнопки и куда отправлять заявки. Нейросеть соберёт ТЗ и выдаст проект по файлам, requirements.txt, шаблон .env и инструкцию запуска на VPS.
Работает онлайнРусский и другие языкиТест бесплатно, без регистрацииБез VPNДоступ 24/7Голосовой ввод и файлы
Зарегистрируйтесь и подтвердите почту — начислим ещё 30 000 символов на 30 дней.ЗарегистрироватьсяОнлайн
Программистам · ИИ-инструмент нейросети Аливия
Конструктор бота на aiogram
Опишите, что делает бот, — получите проект на aiogram 3 по файлам и запуск по шагам.
Ещё настройки
Запрос подставится в поле чата — его можно поправить перед отправкой.
Хорошо, давай создадим Telegram-бота для маникюрного салона с указанными требованиями. Сначала представлю структуру проекта, а затем предоставлю необходимые файлы.
Дерево папок проекта
manicure_bot/ │ ├── bot.py ├── handlers/ │ ├── __init__.py │ ├── booking.py │ └── menu.py ├── keyboards.py ├── db.py ├── config.py ├── requirements.txt └── .env.example
Содержимое файлов
bot.py
import logging
from aiogram import Bot, Dispatcher
from aiogram.fsm.storage.memory import MemoryStorage
from aiogram.utils import start_polling
from handlers.menu import router as menu_router
from handlers.booking import router as booking_router
import config
logging.basicConfig(level=logging.INFO)
bot = Bot(token=config.BOT_TOKEN)
storage = MemoryStorage()
dp = Dispatcher(storage)
dp.include_router(menu_router)
dp.include_router(booking_router)
if __name__ == '__main__':
start_polling(dp, skip_updates=True)handlers/__init__.py
# Пустой файл, чтобы сделать папку пакетом
handlers/menu.py
from aiogram import Router
from aiogram.filters import Command
from aiogram.types import Message, ReplyKeyboardMarkup, KeyboardButton
router = Router()
@router.message(Command("start"))
async def start_command(message: Message):
keyboard = ReplyKeyboardMarkup(
keyboard=[
[KeyboardButton(text="Записаться")],
[KeyboardButton(text="Цены")],
[KeyboardButton(text="Контакты")]
],
resize_keyboard=True
)
await message.answer("Добро пожаловать в наш маникюрный салон! Выберите действие:", reply_markup=keyboard)handlers/booking.py
from aiogram import Router
from aiogram.filters import Command
from aiogram.types import Message
from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import State, StatesGroup
from db import save_booking
import config
router = Router()
class Form(StatesGroup):
service = State()
master = State()
datetime = State()
name = State()
phone = State()
@router.message(Command("book"))
async def book_command(message: Message, state: FSMContext):
await message.answer("Выберите услугу:")
await state.set_state(Form.service)
@router.message(Form.service)
async def process_service(message: Message, state: FSMContext):
await state.update_data(service=message.text)
await message.answer("Выберите мастера (Мастер 1/Мастер 2):")
await state.set_state(Form.master)
@router.message(Form.master)
async def process_master(message: Message, state: FSMContext):
await state.update_data(master=message.text)
await message.answer("Введите дату и время:")
await state.set_state(Form.datetime)
@router.message(Form.datetime)
async def process_datetime(message: Message, state: FSMContext):
await state.update_data(datetime=message.text)
await message.answer("Введите ваше имя:")
await state.set_state(Form.name)
@router.message(Form.name)
async def process_name(message: Message, state: FSMContext):
await state.update_data(name=message.text)
await message.answer("Введите ваш телефон:")
await state.set_state(Form.phone)
@router.message(Form.phone)
async def process_phone(message: Message, state: FSMContext):
user_data = await state.get_data()
booking_info = f"Услуга: {user_data['service']}\nМастер: {user_data['master']}\nДата и время: {user_data['datetime']}\nИмя: {user_data['name']}\nТелефон: {user_data['phone']}"
await save_booking(booking_info)
await message.answer("Спасибо, ваша запись принята!")
# Отправка администратора
await bot.send_message(config.ADMIN_ID, booking_info)
await state.clear()keyboards.py
# Оставим этот файл пустым на данный момент
db.py
import aiosqlite
async def save_booking(booking_info: str):
async with aiosqlite.connect('bookings.db') as db:
await db.execute('CREATE TABLE IF NOT EXISTS bookings (info TEXT)')
await db.execute('INSERT INTO bookings (info) VALUES (?)', (booking_info,))
await db.commit()config.py
import os
from dotenv import load_dotenv
load_dotenv()
BOT_TOKEN = os.getenv("BOT_TOKEN")
ADMIN_ID = os.getenv("ADMIN_ID")requirements.txt
aiogram==3.13 aiosqlite python-dotenv
.env.example
BOT_TOKEN=ваш_токен_бота ADMIN_ID=ваш_идентификатор_пользователя
Инструкция по запуску на Ubuntu
- Установите необходимые пакеты:
sudo apt update sudo apt install python3-venv python3-pip
- Создайте виртуальное окружение:
mkdir manicure_bot cd manicure_bot python3 -m venv venv source venv/bin/activate
- Установите зависимости:
pip install -r requirements.txt
- Создайте файл
.envи заполните его:cp .env.example .env nano .env
- Создайте службу systemd:
sudo nano /etc/systemd/system/manicure_bot.service
Вставьте следующую конфигурацию:
[Unit] Description=Manicure Bot After=network.target [Service] User=your_user WorkingDirectory=/path/to/manicure_bot Environment="PATH=/path/to/manicure_bot/venv/bin" ExecStart=/path/to/manicure_bot/venv/bin/python3 bot.py Restart=always [Install] WantedBy=multi-user.target
- Запустите и включите службу:
sudo systemctl daemon-reload sudo systemctl start manicure_bot sudo systemctl enable manicure_bot
Теперь ваш бот должен быть запущен и работать!
Хорошо, давай разработаем техническое задание для Telegram-бота для студии ремонта квартир. Вот краткое описание структуры и функционала.
Назначение бота
Бот принимает заявки по анкете и отвечает на частые вопросы кнопками. Заявки отправляются в рабочую группу, где бот добавлен.
Команды и кнопки
- Главное меню:
- Оставить заявку
- Частые вопросы
- Наши работы
- Анкета (последовательность вопросов):
- Тип ремонта (текстовый ввод)
- Площадь, м² (числовой ввод)
- Район (текстовый ввод)
- Имя и телефон (текстовый ввод, с шагом согласия о обработке данных согласно 152-ФЗ)
Шаги диалога
- Пользователь нажимает кнопку Оставить заявку.
- Бот спрашивает: "Какой тип ремонта вам нужен?"
- Пользователь отвечает, бот сохраняет ответ.
- Бот спрашивает: "Какова площадь ремонта в м²?"
- Пользователь отвечает, бот сохраняет ответ.
- Бот спрашивает: "В каком районе вы находитесь?"
- Пользователь отвечает, бот сохраняет ответ.
- Бот спрашивает: "Как вас зовут и какой у вас телефон?"
- Пользователь отвечает, бот сохраняет ответ и запрашивает согласие на обработку данных.
- Бот подтверждает получение заявки и отправляет её в рабочую группу.
Состояния FSM
StateRepairType- ожидание типа ремонта.StateArea- ожидание площади.StateDistrict- ожидание района.StateNamePhone- ожидание имени и телефона.StateConsent- ожидание согласия на обработку данных.
Таблицы базы данных (SQLite)
- applications
id INTEGER PRIMARY KEY AUTOINCREMENTrepair_type TEXTarea REALdistrict TEXTname TEXTphone TEXTtimestamp DATETIME DEFAULT CURRENT_TIMESTAMP
Структура файлов
bot.py— основной файл с инициализацией бота и маршрутизаторами.handlers/— директория для обработки команд и сообщений.main.py— обработка главного меню.application.py— обработка анкеты и отправка заявок.
keyboards.py— определение клавиатур.states.py— описание состояний FSM.db.py— работа с базой данных (aiosqlite).requirements.txt— зависимости проекта..env.example— пример файла окружения с ключами (ID группы, токен бота).
Инструкция по запуску на Ubuntu с venv и systemd
- Установить Python 3.11 и необходимые библиотеки.
- Создать виртуальное окружение:
python3.11 -m venv venv source venv/bin/activate pip install -r requirements.txt
- Настроить
systemdдля автозапуска:- Создать файл
/etc/systemd/system/telegram_bot.serviceс содержимым:[Unit] Description=Telegram Bot Service [Service] ExecStart=/path/to/venv/bin/python /path/to/bot.py WorkingDirectory=/path/to/your/bot Restart=always [Install] WantedBy=multi-user.target
- Создать файл
- Активировать и запустить:
sudo systemctl enable telegram_bot sudo systemctl start telegram_bot
Замечания
- Тексты, услуги, цены, имена мастеров, адреса и часы – только из запросов пользователя.
- Поддерживать лимиты по символам и обрабатывать ошибки ввода.
Если все согласовано, я могу предоставить код для реализации.
Для создания Telegram-бота для домашней кондитерской на Python 3.12 и aiogram 3, выполните следующие шаги.
Структура проекта
my_cake_bot/ │ ├── bot.py ├── config.py ├── db.py ├── handlers/ │ ├── __init__.py │ ├── main_handlers.py │ └── payment_handlers.py ├── keyboards.py ├── requirements.txt ├── .env.example └── docker-compose.yml └── Dockerfile
Содержимое файлов
bot.py
import asyncio
import os
from aiogram import Bot, Dispatcher
from aiogram.webhook.aiohttp_server import SimpleRequestHandler, setup_application
from dotenv import load_dotenv
from config import WEBHOOK_URL, WEBHOOK_SECRET
load_dotenv()
TOKEN = os.getenv("TELEGRAM_TOKEN")
bot = Bot(token=TOKEN)
dp = Dispatcher()
async def on_startup(dp):
await bot.set_webhook(WEBHOOK_URL, secret_token=WEBHOOK_SECRET)
async def on_shutdown(dp):
await bot.delete_webhook()
if __name__ == "__main__":
from handlers import main_handlers, payment_handlers
dp.include_router(main_handlers.router)
dp.include_router(payment_handlers.router)
app = setup_application(dp)
asyncio.run(on_startup(dp))
import aiohttp
aiohttp.web.run_app(app, host='0.0.0.0', port=3000, shutdown_timeout=60, on_shutdown=on_shutdown)config.py
import os
WEBHOOK_URL = os.getenv("WEBHOOK_URL")
WEBHOOK_SECRET = os.getenv("WEBHOOK_SECRET")
PG_CONNECTION_STRING = os.getenv("DATABASE_URL")
ADMIN_ID = int(os.getenv("ADMIN_ID"))
PROVIDER_TOKEN = os.getenv("PROVIDER_TOKEN")db.py
import asyncpg
from config import PG_CONNECTION_STRING
async def init_db():
conn = await asyncpg.connect(PG_CONNECTION_STRING)
# Добавьте здесь SQL для создания таблиц
await conn.close()
async def add_order(order_data):
conn = await asyncpg.connect(PG_CONNECTION_STRING)
await conn.execute('''INSERT INTO orders(data) VALUES($1)''', order_data)
await conn.close()handlers/__init__.py
from .main_handlers import router as main_router from .payment_handlers import router as payment_router
handlers/main_handlers.py
from aiogram import Router
from aiogram.filters import Command
from aiogram.types import Message, ReplyKeyboardMarkup, KeyboardButton
from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import State, StatesGroup
router = Router()
class Form(StatesGroup):
name = State()
phone = State()
@router.message(Command("start"))
async def cmd_start(message: Message):
keyboard = ReplyKeyboardMarkup(keyboard=[
[KeyboardButton(text="Каталог")],
[KeyboardButton(text="Корзина")],
[KeyboardButton(text="Доставка")]
])
await message.answer("Добро пожаловать в нашу кондитерскую!", reply_markup=keyboard)
@router.message(Command("cart"))
async def cmd_cart(message: Message):
await message.answer("Ваша корзина пуста.")handlers/payment_handlers.py
from aiogram import Router
from aiogram.types import Message, InputInvoiceMessageContent
from aiogram.fsm.context import FSMContext
from aiogram.types import PreCheckoutQuery, SuccessfulPayment
from config import PROVIDER_TOKEN, ADMIN_ID
router = Router()
@router.message(Command("pay"))
async def cmd_pay(message: Message):
prices = [{"label": "Торт", "amount": 5000}]
await message.answer_invoice(
title="Заказ торта",
description="Описание заказа",
payload="unique-payload",
provider_token=PROVIDER_TOKEN,
currency="rub",
prices=prices
)
@router.pre_checkout_query()
async def pre_checkout_query_handler(pre_checkout_query: PreCheckoutQuery):
await pre_checkout_query.answer(ok=True)
@router.message(SuccessfulPayment)
async def successful_payment_handler(message: Message):
# Обработка успешной оплаты
await message.answer("Спасибо за ваш заказ!")keyboards.py
from aiogram.types import ReplyKeyboardMarkup, KeyboardButton
def main_menu_keyboard():
return ReplyKeyboardMarkup(keyboard=[
[KeyboardButton(text="Каталог")],
[KeyboardButton(text="Корзина")],
[KeyboardButton(text="Доставка")]
])requirements.txt
aiogram==3.13 asyncpg python-dotenv aiohttp
.env.example
TELEGRAM_TOKEN=your_telegram_token WEBHOOK_URL=your_webhook_url WEBHOOK_SECRET=your_webhook_secret DATABASE_URL=your_postgres_connection_string ADMIN_ID=your_admin_id PROVIDER_TOKEN=your_payment_provider_token
Dockerfile
FROM python:3.12 WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . CMD ["python", "bot.py"]
docker-compose.yml
version: '3.8'
services:
bot:
build: .
ports:
- "3000:3000"
env_file:
- .envИнструкция по запуску
- Создайте файл
.envна основе.env.exampleи заполните его необходимыми данными. - Убедитесь, что установлен Docker и Docker Compose.
- В корневом каталоге проекта выполните команду:
docker-compose up --build
- Бот будет доступен по адресу, указанному в
WEBHOOK_URL.
Таким образом, бот будет обрабатывать заказы на торты и принимать оплату, а также отправлять заявки администратору.
Для создания Telegram-бота языковой школы с использованием Python 3.12 и aiogram 3, предлагаю следующую структуру проекта и реализацию. Бот будет выполнять рассылку, отвечать на частые вопросы и хранить данные в PostgreSQL через asyncpg.
Дерево папок
language_school_bot/ │ ├── bot.py ├── handlers/ │ ├── __init__.py │ ├── admin_handlers.py │ └── user_handlers.py ├── keyboards.py ├── db.py ├── config.py ├── requirements.txt └── .env.example
Файл bot.py
import logging
from aiogram import Bot, Dispatcher, F
from aiogram.fsm import FSMContext
from aiogram.fsm.storage.memory import MemoryStorage
from config import load_config
from handlers import admin_handlers, user_handlers
logging.basicConfig(level=logging.INFO)
async def main():
config = load_config()
bot = Bot(token=config.bot.token)
storage = MemoryStorage()
dp = Dispatcher(storage=storage)
dp.include_router(admin_handlers.router)
dp.include_router(user_handlers.router)
await dp.start_polling(bot)
if __name__ == '__main__':
import asyncio
asyncio.run(main())Файл handlers/admin_handlers.py
from aiogram import Router, F
from aiogram import types
from aiogram.fsm.context import FSMContext
from db import Database
router = Router()
db = Database()
@router.message(F.command('send_message'))
async def send_message(msg: types.Message, state: FSMContext):
if msg.from_user.id in [int(id) for id in os.getenv('ADMIN_IDS').split(',')]:
await state.set_state('send_message')
await msg.answer("Введите сообщение для рассылки.")
else:
await msg.answer("У вас нет прав для этой команды.")
@router.message(F.state('send_message'))
async def process_send_message(msg: types.Message, state: FSMContext):
users = await db.get_all_users()
for user in users:
await msg.bot.send_message(user['chat_id'], msg.text)
await state.clear()
await msg.answer("Рассылка завершена!")Файл handlers/user_handlers.py
from aiogram import Router, F
from aiogram import types
from aiogram.fsm.context import FSMContext
from db import Database
router = Router()
db = Database()
@router.message(F.command('start'))
async def start(msg: types.Message):
await msg.answer("Добро пожаловать в нашу языковую школу! Чем можем помочь?")
@router.message(F.text)
async def handle_faq(msg: types.Message):
if msg.text.lower() in ['цены', 'услуги', 'расписание']:
await msg.answer("Вот информация о наших услугах...")
else:
await msg.answer("Извините, я не понимаю ваш запрос.")Файл keyboards.py
from aiogram.types import ReplyKeyboardMarkup, KeyboardButton
def get_main_keyboard():
return ReplyKeyboardMarkup(
keyboard=[
[KeyboardButton(text="Цены"), KeyboardButton(text="Услуги")],
[KeyboardButton(text="Расписание")]
],
resize_keyboard=True
)Файл db.py
import asyncpg
import os
class Database:
def __init__(self):
self.connection = None
async def connect(self):
self.connection = await asyncpg.connect(os.getenv('DATABASE_URL'))
async def get_all_users(self):
return await self.connection.fetch("SELECT chat_id FROM users")
async def close(self):
await self.connection.close()Файл config.py
import os
from dotenv import load_dotenv
class Config:
def __init__(self):
load_dotenv()
self.bot = BotConfig()
class BotConfig:
def __init__(self):
self.token = os.getenv('BOT_TOKEN')
def load_config():
return Config()Файл requirements.txt
aiogram==3.13.0 asyncpg==0.26.0 python-dotenv==1.0.0
Файл .env.example
BOT_TOKEN=your_bot_token DATABASE_URL=postgresql://user:password@localhost:5432/database ADMIN_IDS=your_admin_id
Инструкция по запуску на Ubuntu
- Установите Python 3.12 и pip, если еще не установлены.
- Установите
venv, если он не установлен:sudo apt install python3.12-venv
- Создайте виртуальное окружение и активируйте его:
python3.12 -m venv venv source venv/bin/activate
- Установите зависимости:
pip install -r requirements.txt
- Создайте файл
.envна основе.env.exampleи заполните его данными. - Создайте службу systemd для автозапуска бота:
sudo nano /etc/systemd/system/language_school_bot.service
Вставьте следующее:
[Unit] Description=Language School Bot After=network.target [Service] User=YOUR_USER WorkingDirectory=/path/to/language_school_bot ExecStart=/path/to/language_school_bot/venv/bin/python3 bot.py Restart=always [Install] WantedBy=multi-user.target
- Запустите службу:
sudo systemctl start language_school_bot sudo systemctl enable language_school_bot
Теперь ваш бот запущен и готов к работе!
Для создания Telegram-бота автосервиса с описанными функциональными возможностями, ниже представлено полное описание проекта, включая структуру файлов, код и инструкции по запуску.
Структура проекта
autoserivce_bot/ ├── handlers/ │ ├── __init__.py │ ├── main.py │ └── forms.py ├── db.py ├── bot.py ├── keyboards.py ├── config.py ├── requirements.txt └── .env.example
Содержимое файлов
1. bot.py
import asyncio
import logging
from aiogram import Bot, Dispatcher
from aiogram.fsm.storage.memory import MemoryStorage
from handlers.main import router
from config import BOT_TOKEN
logging.basicConfig(level=logging.INFO)
async def main():
bot = Bot(token=BOT_TOKEN)
storage = MemoryStorage()
dp = Dispatcher(storage=storage)
dp.include_router(router)
await dp.start_polling(bot)
if __name__ == '__main__':
asyncio.run(main())2. handlers/main.py
from aiogram import Router
from aiogram.filters import Command
from aiogram.types import Message
from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import StatesGroup, State
from keyboards import main_menu
from handlers.forms import Form
router = Router()
class Form(StatesGroup):
name = State()
year = State()
service = State()
day = State()
phone = State()
@router.message(Command("start"))
async def start_handler(message: Message, state: FSMContext):
await message.answer("Добро пожаловать в автосервис! Выберите действие:", reply_markup=main_menu())
await state.clear()
@router.message(Command("price"))
async def price_handler(message: Message):
await message.answer("Цены на услуги:\n1) ТО - 5000 руб.\n2) Ремонт - 3000 руб.")
@router.message(Command("address"))
async def address_handler(message: Message):
await message.answer("Мы находимся по адресу: ул. Примерная, 1")
@router.message(Command("record"))
async def record_handler(message: Message, state: FSMContext):
await message.answer("Введите марку и модель автомобиля:")
await state.set_state(Form.name)
@router.message(Form.name)
async def process_name(message: Message, state: FSMContext):
await state.update_data(name=message.text)
await message.answer("Введите год выпуска:")
await state.set_state(Form.year)
@router.message(Form.year)
async def process_year(message: Message, state: FSMContext):
await state.update_data(year=message.text)
await message.answer("Что надо сделать?")
await state.set_state(Form.service)
@router.message(Form.service)
async def process_service(message: Message, state: FSMContext):
await state.update_data(service=message.text)
await message.answer("Введите удобный день для записи:")
await state.set_state(Form.day)
@router.message(Form.day)
async def process_day(message: Message, state: FSMContext):
await state.update_data(day=message.text)
await message.answer("Введите ваш телефон:")
await state.set_state(Form.phone)
@router.message(Form.phone)
async def process_phone(message: Message, state: FSMContext):
user_data = await state.get_data()
name = user_data['name']
year = user_data['year']
service = user_data['service']
day = user_data['day']
phone = message.text
# Здесь будет логика отправки данных в Google Таблицу
await message.answer("Ваша заявка принята! Ожидайте звонка.")
await state.clear()3. handlers/forms.py (пока оставим этот файл пустым для будущих функций, связанных с формами)
# Логика для форм будет добавлена позже
4. db.py
import aiosqlite
async def init_db():
async with aiosqlite.connect('autoserivce.db') as db:
await db.execute(
"CREATE TABLE IF NOT EXISTS records (id INTEGER PRIMARY KEY, name TEXT, year TEXT, service TEXT, day TEXT, phone TEXT)"
)
await db.commit()5. keyboards.py
from aiogram.types import ReplyKeyboardMarkup, KeyboardButton
def main_menu():
keyboard = ReplyKeyboardMarkup(resize_keyboard=True)
buttons = [
KeyboardButton(text="Записаться на ТО"),
KeyboardButton(text="Узнать цену"),
KeyboardButton(text="Адрес")
]
keyboard.add(*buttons)
return keyboard6. config.py
import os
from dotenv import load_dotenv
load_dotenv()
BOT_TOKEN = os.getenv("BOT_TOKEN")7. requirements.txt
aiogram==3.13 aiosqlite==0.17.0 gspread==5.4.0 python-dotenv==1.0.0
8. .env.example
BOT_TOKEN=ваш_токен_бота
Инструкции по запуску
- Установка необходимых пакетов:
python3.11 -m venv venv source venv/bin/activate pip install -r requirements.txt
- Создание Google сервисного аккаунта:
- Создайте проект в Google Cloud Console.
- Включите Google Sheets API.
- Создайте сервисный аккаунт и получите JSON-ключ.
- Поделитесь Google таблицей с email вашего сервисного аккаунта.
- Настройка переменных окружения:
- Переименуйте
.env.exampleв.envи вставьте ваш токен.
- Переименуйте
- Запуск бота:
python bot.py
Теперь ваш бот готов к использованию!
Конечно! Давайте разработаем техническое задание (ТЗ) для Telegram-бота психотерапевта на Python 3.13 с использованием aiogram 3. Вот детальный план:
Техническое задание (ТЗ)
Назначение бота
Бот предназначен для записи клиентов к психологу, управления записями, приема платежей и отправки уведомлений администратору о новых записях.
Основные команды и кнопки
- Команды:
/start— Приветственное сообщение и меню./help— Информация о боте и его функциях./services— Список доступных услуг.
- Кнопки:
- Записаться на прием — Начало процесса записи.
- Оплатить услугу — Процесс оплаты.
- Проверить статус записи — Возможность уточнить статус записи.
Шаги диалога
- /start
- Бот приветствует пользователя и предлагает выбрать действие (Кнопки: Записаться на прием, Оплатить услугу, Проверить статус записи).
- Записаться на прием
- Запрос услуги (список услуг).
- Запрос даты и времени.
- Запрос контактных данных (имя и телефон).
- Подтверждение записи (вывод всех введенных данных).
- Отправка заявки администратору с данными клиента.
- Оплатить услугу
- Запрос услуги (список услуг).
- Запрос суммы.
- Генерация инвойса через
send_invoice. - Обработка
pre_checkout_queryиsuccessful_payment.
- Проверить статус записи
- Запрос информации о записи (имя и телефон).
- Ответ с текущим статусом (если имеется).
Состояния FSM
WaitingForService— Ожидание выбора услуги.WaitingForDateTime— Ожидание выбора даты и времени.WaitingForContact— Ожидание ввода контактных данных.WaitingForPayment— Ожидание платежа.
Куда уходят заявки
- Заявки с данными клиентов отправляются администратору (Telegram ID из переменных окружения).
Хранение данных
- Данные клиентов хранятся в памяти, после перезапуска они теряются. Структура данных может быть следующей:
clients = [
{
"service": "Услуга 1",
"date_time": "2023-10-01 14:00",
"contact": {"name": "Иван", "phone": "+79000000000"},
},
...
]Оплата
- Платежи осуществляется через Telegram API.
- Для физического товара и офлайн-услуг — использование токена из
.env. - Для цифровых услуг — использование Stars.
Структура файлов
/bot.py
/handlers/
├── __init__.py
├── commands.py
├── payments.py
├── fsm.py
/keysboards.py
/states.py
/db.py (если понадобится в будущем)
/requirements.txt
/.env.exampleИнструкция по запуску на Ubuntu
- Установите Python и необходимые пакеты:
sudo apt update sudo apt install python3-pip python3-venv
- Создайте виртуальное окружение:
python3 -m venv myenv source myenv/bin/activate pip install aiogram
- Создайте файл
.envс переменными окружения:TELEGRAM_TOKEN="ваш_токен" PROVIDER_TOKEN="ваш_токен_провайдера" ADMIN_ID="ваш_admin_id"
- Создайте файл службы systemd:
sudo nano /etc/systemd/system/telegram_bot.service
Пример содержимого:
[Unit] Description=Telegram Bot [Service] WorkingDirectory=/путь/к/вашему/боту ExecStart=/путь/к/вашему/боту/myenv/bin/python /путь/к/вашему/боту/bot.py Restart=always [Install] WantedBy=multi-user.target
- Запустите службу:
sudo systemctl daemon-reload sudo systemctl start telegram_bot sudo systemctl enable telegram_bot
Теперь у вас есть полное ТЗ для создания Telegram-бота психотерапевта. Если у вас есть вопросы или хотите перейти к коду, дайте знать!
Ответы получены 03.10.2026 в этом чате и приведены без правок. Выделено то, чего не было в запросе.
Что такое Telegram-бот под ключ и что вы получите
Telegram-бот под ключ — это готовый проект на Python, который можно запустить на своём сервере без доработки: код по файлам, список зависимостей, шаблон настроек и инструкция запуска. Вы описываете, что должен делать бот, а нейросеть Аливия собирает техническое задание и пишет проект на фреймворке aiogram 3.
Конструктор запроса под чатом ведёт по шагам: какие команды нужны, как идёт диалог с клиентом, какие кнопки показывать, где хранить данные и куда отправлять заявки. Из ответов складывается ТЗ, и модель выдаёт проект по файлам, requirements.txt, шаблон .env и инструкцию запуска на VPS. Отдельно приходит схема сценария: какое сообщение за каким следует и что происходит при каждой кнопке.
Почему aiogram 3 и где читать документацию
aiogram — асинхронный фреймворк для Telegram Bot API на Python. Актуальная ветка — aiogram 3 (в документации на октябрь 2026 года версия 3.31.0), она требует Python 3.10 или новее и поддерживает Bot API 10.3. Третья версия заметно отличается от второй: обработчики живут в роутерах, фильтры пишутся через магический объект F, а машина состояний вынесена в отдельный модуль. Код из старых статей под aiogram 2 в третьей версии без переделки не запустится, поэтому инструмент пишет только под актуальную ветку.
Первоисточник по возможностям ботов — официальная документация Telegram Bot API на core.telegram.org. Там описаны все методы, типы и ограничения. Если в ответе нейросети встретился метод, которого вы не знаете, проверьте его именно там: это быстрее, чем искать по форумам.
Из каких файлов состоит проект
bot.py— точка входа: создаёт бота и диспетчер, подключает роутеры, запускает получение обновлений.handlers/— обработчики команд и кнопок, разложенные по сценариям: запись, каталог, заявки.keyboards.py— обычные и инлайн-клавиатуры.states.py— состояния машины состояний (FSM) для пошаговых анкет.db.py— хранение данных: SQLite для старта или PostgreSQL для нагрузки.requirements.txtи.env.example— зависимости и шаблон настроек без секретов.
Токен бота никогда не пишется в код. Он хранится в файле .env, который не попадает в репозиторий. Шаблон .env.example показывает, какие переменные нужны: токен, ID чата для заявок, строка подключения к базе.
Состояния пошаговой анкеты по умолчанию хранятся в памяти процесса, и после перезапуска бот забывает, на каком шаге остановился клиент. Для рабочего бота надёжнее хранилище в Redis: в aiogram 3 оно подключается штатным классом RedisStorage. Если клиентов немного, а перезапуски редкие, хватит и памяти — конструктор спросит об этом и пропишет нужный вариант. Записи и заявки при этом всё равно сохраняются в базе, а не в состояниях.
Как сделать бота в Телеграм: от идеи до запуска
- Создайте бота у @BotFather — официального бота Telegram для создания и настройки ботов и сохраните выданный токен.
- В конструкторе под чатом выберите тип бота: запись клиентов, приём заявок, каталог, рассылка, оплата.
- Перечислите команды и кнопки, опишите диалог по шагам и укажите, куда пересылать заявки: в личный чат, группу менеджеров или таблицу.
- Получите проект по файлам и схему сценария. Попросите уточнить любой файл, если что-то непонятно.
- На сервере создайте виртуальное окружение, установите зависимости командой
pip install -r requirements.txtи заполните.env. - Запустите бота вручную, пройдите сценарий в Telegram, затем оформите автозапуск через systemd — инструкция придёт вместе с кодом.
Готовая формулировка запроса: «Бот для записи в барбершоп на aiogram 3. Клиент выбирает услугу, мастера, дату и время из свободных слотов, оставляет имя и телефон. Заявка уходит в группу администраторов с кнопками „Подтвердить“ и „Отменить“. Хранение в SQLite, запуск на Ubuntu через systemd».
Polling или вебхук: как бот получает сообщения
Бот получает обновления одним из двух способов. Telegram поддерживает long polling и вебхуки, но одновременно получать обновления через getUpdates при установленном вебхуке нельзя. Для первого запуска и небольших ботов проще polling, для работы под нагрузкой — вебхук.
| Критерий | Long polling | Вебхук |
|---|---|---|
| Как работает | Бот сам опрашивает сервер Telegram | Telegram отправляет обновления на ваш адрес |
| Что нужно на сервере | Только исходящий интернет | Домен, HTTPS и один из портов 443, 80, 88 или 8443 |
| Запуск на ноутбуке для теста | Работает сразу | Нужен публичный адрес |
| Хранение пропущенных обновлений | Telegram держит неполученные обновления не дольше 24 часов | |
| Когда выбирать | Старт, небольшой поток сообщений | Высокая нагрузка, несколько экземпляров бота |
По умолчанию инструмент пишет бота на polling: его можно запустить на любом VPS без настройки домена. Если нужен вебхук, укажите это в конструкторе — в проект добавятся веб-сервер и настройка сертификата.
Ограничения Bot API, которые стоит заложить сразу
У Telegram есть жёсткие лимиты, и о них лучше знать до запуска рассылки. Нейросеть учитывает их в коде, но вам стоит понимать, откуда берутся задержки.
- Текст одного сообщения — от 1 до 4096 символов после разбора разметки. Длинный прайс бот разбивает на части.
- Данные инлайн-кнопки callback_data — от 1 до 64 байт. Кириллица занимает больше байт, поэтому в кнопку кладут короткий ID, а не название услуги.
- В один чат не стоит отправлять больше одного сообщения в секунду, в группу — не больше 20 в минуту, а массовая рассылка ограничена примерно 30 сообщениями в секунду. Рассылку по базе клиентов бот отправляет с паузами.
Заявки и данные клиентов: о чём помнить
Бот для записи или заявок собирает имена и телефоны, а это персональные данные. Их обработку в России регулирует Федеральный закон № 152-ФЗ «О персональных данных»: нужны согласие клиента и понятная цель обработки. Инструмент может добавить в сценарий шаг с согласием и ссылкой на вашу политику, но юридическую сторону это не закрывает.
Не храните токен бота и пароли базы в коде и не отправляйте их в чат. Токен даёт полный доступ к боту: при утечке его нужно сразу перевыпустить у @BotFather. Требования 152-ФЗ к вашему бизнесу уточняйте у юриста — текст на этой странице справочный и не заменяет консультацию.
Как проверить бота перед запуском для клиентов
- Пройдите каждый сценарий в Telegram сами: все кнопки, возврат назад, отмену на середине анкеты.
- Отправьте боту неожиданное: фото вместо телефона, пустое сообщение, команду посреди анкеты. Бот не должен зависать в состоянии.
- Перезапустите сервер и проверьте, что записи сохранились, а бот поднялся сам.
- Посмотрите логи после первых реальных клиентов. Ошибку из лога вставьте в чат — нейросеть разберёт её в контексте вашего проекта.
Чем этот инструмент отличается от соседних
Если вы ещё не решили, что должен уметь бот, начните с подборки идей для Telegram-ботов — там нет кода, зато есть сценарии под нишу. Когда проект запущен и нужно добавить отдельную функцию, например выгрузку заявок, удобнее генератор кода на Python. Для подробного задания фрилансеру пригодится составление технического задания.
Полный проект из нескольких файлов — объёмный ответ, и на бесплатном доступе с дневным лимитом он может не поместиться целиком. На платных тарифах лимит больше, проект приходит за один-два ответа. Аливия работает без VPN из России, понимает голосовой ввод и принимает файлы: можно прислать прайс в Excel или PDF, и бот получит готовый каталог.
Telegram-бот под ключ: частые вопросы
Как создать Telegram-бота самому без программиста?
Где взять токен для бота?
/newbot. Храните его в файле .env, а не в коде, и не отправляйте в чат. Если токен утёк, перевыпустите его у @BotFather.Можно ли запустить бота бесплатно?
Почему aiogram 3, а не aiogram 2?
Как сделать бота для записи клиентов?
Куда бот может отправлять заявки?
.env. Для CRM пришлите ссылку на её документацию по API.Сколько сообщений бот может отправить при рассылке?
Можно ли принимать оплату через бота?
Что делать, если бот не отвечает после запуска?
.env верный и нет установленного вебхука при работе через polling. Посмотрите лог запуска. Вставьте ошибку в чат — нейросеть укажет причину.Чем отличается бот под ключ от идей для ботов?
Итог
Telegram-бот под ключ превращает описание задачи в рабочий проект на aiogram 3 с инструкцией запуска. Опишите сценарий, кнопки и куда отправлять заявки — нейросеть соберёт код по файлам. Перед запуском для клиентов пройдите все сценарии сами и уберите секреты из кода.