Блог AST-SoftPro
Telegram-бот для приёма заявок клиентов: от сообщения до уведомления в чат команды
Telegram-бот для бизнеса
Telegram-боты стали одним из самых эффективных каналов коммуникации с клиентами. Они позволяют автоматизировать приём заявок, собирать информацию и уведомлять команду о новых обращениях — всё это без создания отдельного сайта или приложения.
aiogram 3 — современная библиотека для создания Telegram-ботов на Python с поддержкой async/await и полного API Telegram Bot.
Установка и настройка
pip install aiogram python-dotenv
Минимальная структура проекта:
telegram_bot/ ├── main.py # Запуск бота ├── config.py # Токен и настройки ├── handlers/ │ ├── start.py # Команда /start │ └── application.py # Обработка заявок ├── database.py # Работа с SQLite └── .env # Токен бота
Создание бота и базовые хендлеры
import asyncio
import logging
from aiogram import Bot, Dispatcher, types, F
from aiogram.filters import Command
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
from dotenv import load_dotenv
import os
load_dotenv()
API_TOKEN = os.getenv('BOT_TOKEN')
ADMIN_CHAT_ID = int(os.getenv('ADMIN_CHAT_ID'))
bot = Bot(token=API_TOKEN)
dp = Dispatcher()
@dp.message(Command('start'))
async def cmd_start(message: types.Message):
keyboard = InlineKeyboardMarkup(inline_keyboard=[
[InlineKeyboardButton(text='📝 Оставить заявку', callback_data='new_application')],
[InlineKeyboardButton(text='ℹ️ О компании', callback_data='about_company')],
])
await message.answer(
'Добро пожаловать! Чем можем помочь?',
reply_markup=keyboard
)
@dp.callback_query(F.data == 'new_application')
async def process_new_application(call: types.CallbackQuery):
await call.answer()
await call.message.answer(
'Опишите вашу задачу или вопрос:\n\n'
'Например: "Нужен сайт для интернет-магазина"'
)
# Переводим бота в режим ожидания сообщения
await call.message.answer('Отправьте ваше сообщение:')
@dp.message(F.text)
async def echo_application(message: types.Message):
# Сохраняем заявку в базу данных
save_application(message.from_user.id, message.from_user.first_name, message.text)
await message.answer(
'✅ Заявка принята! Мы свяжемся с вами в ближайшее время.',
)
# Уведомление администратору
admin_text = (
f"🆕 Новая заявка\n"
f"👤 {message.from_user.first_name} "
f"(ID: {message.from_user.id})\n"
f"💬 {message.text}"
)
await bot.send_message(ADMIN_CHAT_ID, admin_text)
def save_application(user_id, name, text):
"""Сохранение заявки в SQLite."""
import sqlite3
conn = sqlite3.connect('applications.db')
cursor = conn.cursor()
cursor.execute(
'INSERT INTO applications (user_id, name, text, status) VALUES (?, ?, ?, ?)',
(user_id, name, text, 'new')
)
conn.commit()
conn.close()
async def main():
await dp.start_polling(bot)
if __name__ == '__main__':
asyncio.run(main())
Создание таблицы заявок
import sqlite3
def init_db():
conn = sqlite3.connect('applications.db')
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS applications (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER,
name TEXT,
text TEXT,
status TEXT DEFAULT 'new',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
''')
conn.commit()
conn.close()
init_db()
Автоматизация уведомлений
Для уведомлений команды можно использовать:
| Канал | Библиотека | Описание |
|---|---|---|
| Telegram-чат команды | aiogram | Отправка сообщения в групповой чат |
| Flask-Mail / smtplib | Рассылка на почту менеджерам | |
| Slack | slack_sdk | Уведомление в Slack-канал |
| Webhook | requests | Отправка данных в CRM-систему |
Статусы заявок и обработка
@dp.message(Command('status'))
async def check_status(message: types.Message):
conn = sqlite3.connect('applications.db')
cursor = conn.cursor()
cursor.execute(
'SELECT id, text, status, created_at FROM applications WHERE user_id = ? ORDER BY created_at DESC',
(message.from_user.id,)
)
apps = cursor.fetchall()
conn.close()
if not apps:
await message.answer('У вас пока нет заявок.')
return
response = 'Ваши заявки:\n\n'
for app in apps:
response += f"#{app[0]}: {app[1][:50]}...\nСтатус: {app[2]}\nДата: {app[3]}\n\n"
await message.answer(response)
Безопасность и ограничения
-
Токен бота — храните в .env, не коммитьте в репозиторий;
-
Rate limiting — Telegram ограничивает 30 сообщений в секунду на бота;
-
Валидация ввода — проверяйте длину сообщений и наличие вредоносного контента;
-
Логирование — используйте logging для отладки и аудита.
Заключение
Telegram-бот на aiogram 3 — простое и эффективное решение для приёма заявок. Ключевые компоненты:
-
Хендлеры для /start и обработки сообщений;
-
Сохранение заявок в SQLite;
-
Уведомления администратора в реальном времени;
-
Команда /status для отслеживания заявок клиентом.
Такой бот можно создать за несколько часов и сразу запустить в работу.