Подписывайтесь:

Блог AST-SoftPro

Telegram-бот для приёма заявок клиентов: от сообщения до уведомления в чат команды

14.06.2026 6 мин чтения
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 Отправка сообщения в групповой чат
Email 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 для отслеживания заявок клиентом.

Такой бот можно создать за несколько часов и сразу запустить в работу.


AI-Помощник