Как сделать бота поддержки в Telegram с передачей оператору
Практика3 минРедакция Innovialabs
Коротко
Бот сначала закрывает типовые вопросы через FAQ, а если ответа нет, создает обращение и пересылает переписку в группу сотрудников с отдельной темой на каждого клиента или в helpdesk; ответ оператора бот копирует обратно клиенту, так что клиент общается только с ботом.
Короткий ответ
Бот поддержки с оператором работает в три слоя:
- Самообслуживание. FAQ на кнопках закрывает типовые вопросы без участия человека.
- Обращение. Если ответа нет, бот создает тикет: номер, категория, описание, контакт.
- Оператор. Переписка уходит в группу сотрудников или helpdesk, ответ оператора бот доставляет клиенту.
Клиент все время общается только с ботом. Личные аккаунты сотрудников не светятся, а вся история хранится в одном месте.
Слой 1. FAQ-сценарии
- Соберите реальные частые вопросы из переписки поддержки, а не придуманные.
- Сгруппируйте их в 4-6 разделов на кнопках: оплата, доставка, аккаунт, возврат.
- Ответ должен быть конечным: инструкция, ссылка или действие. После ответа — кнопки «Помогло» и «Нужен оператор».
- Кнопка «Связаться с оператором» доступна на любом шаге. Если ее спрятать, люди начнут писать в другие каналы.
- Свободный текст можно сопоставлять с FAQ по ключевым словам или через поиск по базе знаний, но при неуверенном совпадении лучше сразу предложить оператора.
Слой 2. Создание обращения
Перед передачей человеку бот собирает минимум данных, чтобы оператор не начинал с вопросов:
- категория (кнопками);
- описание проблемы текстом, можно со скриншотом;
- номер заказа или аккаунта, если он нужен для категории;
- контакт, если клиент не идентифицирован.
Бот создает запись в базе: ID тикета, Telegram ID клиента, статус (open, in_progress, waiting_customer, closed), назначенный оператор, время создания. Клиенту сразу приходит номер обращения и честное ожидание по времени ответа в рабочие часы.
Слой 3. Маршрутизация к оператору
| Вариант | Как работает | Когда подходит |
|---|---|---|
| Группа с темами | Супергруппа с включенными темами, отдельная тема на клиента | Небольшая команда, работа прямо в Telegram |
| Группа с reply | Бот пересылает сообщение, оператор отвечает реплаем | Совсем простой поток |
| Helpdesk | Тикеты создаются в системе поддержки через API, ответы приходят вебхуком | Нужны SLA, отчеты, несколько каналов |
Группа с темами — самый удобный вариант для старта. Бот добавляется в супергруппу администратором с правом управлять темами, создает тему на каждое обращение и копирует туда сообщения клиента. Оператор пишет в тему, бот копирует ответ клиенту.
from aiogram import Bot, F, Router
from aiogram.types import Message
router = Router()
@router.message(F.chat.type == "private")
async def from_customer(message: Message, bot: Bot):
ticket = await tickets.get_open(message.from_user.id)
if ticket is None:
ticket = await tickets.create(message.from_user.id)
topic = await bot.create_forum_topic(
chat_id=STAFF_CHAT_ID,
name=f"#{ticket.id} {message.from_user.full_name}",
)
ticket = await tickets.attach_thread(ticket.id, topic.message_thread_id)
await message.copy_to(STAFF_CHAT_ID, message_thread_id=ticket.thread_id)
@router.message(F.chat.id == STAFF_CHAT_ID, F.message_thread_id, ~F.forum_topic_created)
async def from_operator(message: Message):
ticket = await tickets.by_thread(message.message_thread_id)
if ticket and not (message.text or "").startswith("/"):
await message.copy_to(ticket.user_id)
Почему copyMessage, а не пересылка: копия не показывает автора, поэтому клиент не видит имя оператора, а сотрудники получают сообщение без лишних меток.
Служебные команды в теме, например /close, бот не отправляет клиенту, а меняет статус тикета и закрывает тему.
Возврат ответа и закрытие
- Ответ оператора приходит клиенту от имени бота. При желании бот добавляет подпись вида «Оператор поддержки».
- Когда оператор закрывает тикет, бот сообщает клиенту об этом и предлагает оценить помощь кнопками.
- Если клиент пишет после закрытия, создается новое обращение или переоткрывается старое — решите это правило заранее.
- Обращения без ответа клиента дольше заданного срока закрываются автоматически с уведомлением.
Частые ошибки
- Бот в группе без прав администратора: он не видит сообщения операторов из-за режима приватности.
- Одна общая лента для всех клиентов: ответы уходят не тому человеку.
- Нет нерабочего режима: клиент ждет ответа ночью и не знает, что поддержка утром.
- Хранение связки «тема — клиент» только в памяти процесса: после перезапуска ответы теряются.
- Отправка операторам вложений без проверки типа и размера.
Детали о темах в группах — в документации Bot API.