Бот поддержки принимает обращения клиентов в Telegram, отвечает по FAQ и при необходимости передаёт диалог оператору. Разбираем, как это устроено и что учесть при заказе или настройке такого бота.
Зачем нужен бот поддержки
Он снижает нагрузку на менеджеров за счёт автоответов на типичные вопросы, собирает заявки в одном месте и даёт возможность обрабатывать обращения по тикетам с назначением ответственного. Для реализации удобно использовать aiogram и Telegram Bot API.
Автоответы и FAQ
В боте задаются типичные вопросы и ответы: «Как оформить заказ?», «Условия доставки» и т.п. По ключевым словам бот отправляет готовый текст или предлагает кнопки с разделами помощи. Так клиент быстро получает ответ без ожидания оператора.
Пример простого FAQ на aiogram: по ключевым словам выбираем ответ из словаря и при отсутствии совпадения предлагаем кнопку «Связаться с оператором».
from aiogram import Bot, Dispatcher, types, F
from aiogram.filters import Command
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
FAQ = {
"доставка": "Доставка по РФ 2–5 дней. СДЭК, Боксберри, почта.",
"оплата": "Оплата: карта, СБП, при получении. Без предоплаты.",
"возврат": "Возврат в течение 14 дней. Напишите нам — оформим.",
}
@dp.message(Command("start"))
async def cmd_start(message: types.Message):
kb = InlineKeyboardMarkup(inline_keyboard=[
[InlineKeyboardButton(text="Доставка", callback_data="faq:доставка")],
[InlineKeyboardButton(text="Оплата", callback_data="faq:оплата")],
[InlineKeyboardButton(text="Возврат", callback_data="faq:возврат")],
[InlineKeyboardButton(text="Связаться с оператором", callback_data="ticket_new")],
])
await message.answer("Выберите тему или напишите вопрос:", reply_markup=kb)
@dp.message(F.text)
async def faq_answer(message: types.Message):
text = message.text.strip().lower()
for key, answer in FAQ.items():
if key in text:
await message.answer(answer)
return
# Повторно показываем кнопки, если ответ не найден
kb = InlineKeyboardMarkup(inline_keyboard=[
[InlineKeyboardButton(text="Связаться с оператором", callback_data="ticket_new")],
])
await message.answer("Ответ не найден. Нажмите кнопку ниже.", reply_markup=kb)
В этом примере FAQ — словарь «ключевое слово → ответ». Для совпадения используется проверка key in text; при необходимости можно заменить на более умный поиск или отдельную БД.
Тикеты и передача оператору
Если вопроса нет в базе, пользователь нажимает «Связаться с оператором». Создаётся тикет: диалог привязывается к заявке, можно назначить ответственного и менять статус (открыт, в работе, закрыт). Операторы видят очередь в группе поддержки или админ-панели.
Пример: при нажатии кнопки создаётся запись тикета в БД (db.create_ticket возвращает ticket_id). Когда оператор в группе поддержки отвечает на сообщение пользователя (reply), бот пересылает этот ответ в личку пользователю. get_user_id_from_reply — ваша функция: из пересланного сообщения или из текста (например «User: 123») достаёте user_id.
SUPPORT_CHAT_ID = -1001234567890 # ID группы поддержки (узнать: переслать боту сообщение из группы — см. update)
@dp.callback_query(F.data == "ticket_new")
async def create_ticket(callback: types.CallbackQuery):
ticket_id = db.create_ticket(user_id=callback.from_user.id) # в БД: tickets(id, user_id, status)
await callback.message.edit_text(
f"Тикет #{ticket_id} создан. Опишите вопрос — оператор ответит здесь."
)
await callback.answer()
# Пересылка ответа оператора пользователю (оператор отвечает reply на сообщение)
@dp.message(F.chat.id == SUPPORT_CHAT_ID, F.reply_to_message)
async def forward_reply_to_user(message: types.Message):
user_id = get_user_id_from_reply(message) # из reply_to_message.forward_from или из БД по сообщению
if user_id:
await message.bot.send_message(user_id, message.text)
Что важно при внедрении
- База знаний — актуальные ответы на частые вопросы, чтобы автоответы не вводили в заблуждение.
- Эскалация — чёткий момент, когда бот передаёт диалог человеку (по кнопке, по ключевому слову или при отсутствии подходящего ответа).
- История — сохранение переписки по тикету, чтобы оператор видел контекст.
Итоги
Бот поддержки сочетает автоответы по FAQ и тикетную систему с передачей диалога оператору. Так вы разгружаете менеджеров и при этом не теряете обращения, которые требуют живого общения.