Разработка бота для автоматического ответа на FAQ Битрикс24
Половина входящих обращений в чат поддержки — это одни и те же вопросы: «Как вернуть товар?», «Где мой заказ?», «Какие условия доставки?». Оператор тратит время на рутину, а бизнес теряет деньги на необработанных сложных запросах. Интернет-магазин с 500 заказами в день получал 200 обращений, из которых 80% были типовыми. После внедрения бота время ответа сократилось с 5 минут до мгновенного, а операторы сосредоточились на сложных кейсах. Экономия на поддержке составила 40% в первый месяц — без потери качества.
Мы разрабатываем бота, который автоматически отвечает на типовые вопросы и передаёт нестандартные живому оператору. Решение работает прямо в открытых линиях Битрикс24 — без сторонних сервисов. В основе — либо быстрый ключевой поиск, либо семантический RAG на эмбеддингах.
Как бот подключается к открытым линиям?
Открытые линии Битрикс24 — основная точка входа. Бот регистрируется как первый оператор линии. Когда клиент пишет в онлайн-чат, Telegram или VK, обращение попадает боту. Если бот отвечает — оператор не беспокоится. Если нет — передаёт человеку.
Регистрация бота в открытых линиях выполняется через REST API Битрикс24:
POST /rest/imopenlines.bot.register
{
"CODE": "faq_bot",
"EVENT_HANDLER": "https://your-server.com/openline/event",
"OPENLINE": "Y"
}
— источник: документация REST API
Как бот определяет, что ответить? Два подхода к сопоставлению вопросов
Подход 1: Поиск по ключевым словам
Вопросы и ключевые слова хранятся в базе, бот ищет совпадения в тексте сообщения. Просто в реализации, понятно в обслуживании. Идеально для 50–200 типовых вопросов.
CREATE TABLE custom_faq_entries (
id SERIAL PRIMARY KEY,
question TEXT NOT NULL,
answer TEXT NOT NULL,
keywords TEXT NOT NULL,
category VARCHAR(100),
hits INT DEFAULT 0,
is_active TINYINT DEFAULT 1
);
function findFaqAnswer(string $userMessage): ?array {
$words = array_filter(explode(' ', mb_strtolower($userMessage)));
$results = [];
$faqs = getFaqEntries();
foreach ($faqs as $faq) {
$keywords = explode(',', mb_strtolower($faq['keywords']));
$score = 0;
foreach ($keywords as $kw) {
$kw = trim($kw);
if ($kw && (mb_stripos($userMessage, $kw) !== false)) {
$score += mb_strlen($kw);
}
}
if ($score > 0) {
$results[] = ['faq' => $faq, 'score' => $score];
}
}
if (empty($results)) return null;
usort($results, fn($a, $b) => $b['score'] <=> $a['score']);
return $results[0]['faq'];
}
Подход 2: Векторный поиск (RAG)
Вопросы индексируются как эмбеддинги (OpenAI text-embedding-3-small, Yandex GPT Embeddings). При новом вопросе — поиск ближайших соседей в векторной БД (pgvector, Qdrant). Работает на семантически похожих формулировках без точного совпадения слов.
| Критерий | Ключевой поиск | Векторный поиск (RAG) |
|---|---|---|
| Объём базы | До 200 вопросов | От 200 вопросов |
| Точность на синонимах | Низкая | Высокая — RAG лучше в 3–4 раза на перефразированных запросах |
| Сложность реализации | Низкая | Средняя (нужна модель и векторная БД) |
| Скорость | Мгновенно | <1 сек для баз до 10 000 |
| Обслуживание | Правка ключевых слов | Добавление вопросов без правки кода |
Выбор: для 50–200 FAQ хватает ключевых слов. Для большой базы знаний с вариативными формулировками — RAG. RAG лучше справляется с синонимами и опечатками, но требует настройки модели.
Примеры типовых вопросов и ответов бота
Реальные сценарии из практики интернет-магазина:
| Вопрос клиента | Ответ бота | Результат |
|---|---|---|
| "Как вернуть товар?" | "Возврат возможен в течение 14 дней. Товар должен быть неиспользованным, в оригинальной упаковке. Заполните форму возврата в личном кабинете." | Автозакрыто |
| "Сколько стоит доставка в Москву?" | "Стандартная доставка в Москву — 300 руб., срок 3–5 рабочих дней. Бесплатная доставка от 5000 руб." | Автозакрыто |
| "Где отследить заказ?" | "Ссылка на отслеживание отправлена на email. Трек-номер: {номер}. Приблизительная дата доставки: {дата}." | Автозакрыто |
| "Принимаете ли карты?" | "Мы принимаем Visa, MasterCard, Maestro, платежи через ЯндексКассу и альтернативные способы оплаты." | Автозакрыто |
Бот успешно закрывает 60–70% обращений без участия оператора.
Требования к интеграции и предварительная настройка
Для успешного запуска FAQ-бота нужны:
- Доступ к REST API Битрикс24 — требуется Admin-аккаунт и генерация OAuth-токена.
- HTTPS-сервер для приёма вебхуков от открытых линий (очень важно, Б24 работает только по защищённому протоколу).
- Хранилище FAQ — SQL-база (PostgreSQL, MySQL) или CMS-специфичное (например, модуль в 1С-Битрикс).
- В случае RAG — подписка на OpenAI API, Yandex GPT Embeddings или локальная модель (например, nomic-embed-text).
- Система мониторинга — логирование ошибок обработки сообщений, отслеживание упущенных вопросов.
Обработка события в открытой линии
$event = json_decode(file_get_contents('php://input'), true);
if ($event['event'] === 'ONIMBOTMESSAGEADD') {
$sessionId = $event['data']['PARAMS']['SESSION_ID'];
$dialogId = $event['data']['PARAMS']['DIALOG_ID'];
$text = $event['data']['PARAMS']['MESSAGE'];
$chatId = $event['data']['PARAMS']['CHAT_ID'];
$faq = findFaqAnswer($text);
if ($faq) {
$b24->callMethod('imopenlines.session.message.send', [
'SESSION_ID' => $sessionId,
'MESSAGE' => $faq['answer'],
]);
incrementFaqHits($faq['id']);
$b24->callMethod('imopenlines.session.close', ['SESSION_ID' => $sessionId]);
} else {
$b24->callMethod('imopenlines.session.transfer', [
'SESSION_ID' => $sessionId,
'QUEUE_ID' => 1,
]);
$b24->callMethod('imopenlines.session.message.send', [
'SESSION_ID' => $sessionId,
'MESSAGE' => 'Соединяю с менеджером, пожалуйста, подождите...',
]);
}
}
Логика эскалации и передачи оператору
Бот передаёт обращение оператору по нескольким критериям:
- Низкая уверенность — оценка совпадения < порога (например, <0.7 для RAG или <5 для ключевых слов).
- Явный запрос жалобы — если клиент использует слова "жалоба", "претензия", "не сработало".
- Комплексный вопрос — обращение содержит несколько тем одновременно.
- Личные данные — запрос о пароле, реквизитах банка (бот должен отказать и передать оператору).
- Timeout — если конверсация с клиентом длится > 3 оборотов, бот предлагает менеджера.
Уточняющие вопросы
Если совпадений несколько — бот показывает варианты:
if (count($topResults) > 1 && $topResults[0]['score'] < 10) {
$options = array_slice($topResults, 0, 3);
$message = "Уточните, пожалуйста, что вас интересует:\n";
foreach ($options as $i => $r) {
$message .= ($i + 1) . ". {$r['faq']['question']}\n";
}
$message .= "0. Другое (подключить менеджера)";
$redis->set("faq_choice:{$sessionId}", json_encode($options), 300);
}
Административный интерфейс для управления базой FAQ
Контент-менеджер должен управлять FAQ без правки кода. Разрабатываем административный раздел в /bitrix/admin/ или как приложение в Б24:
- CRUD для вопросов и ответов.
- Категории (Доставка, Оплата, Возврат, Технические вопросы).
- Статистика: сколько раз вопрос был закрыт ботом (
hits), сколько передано операторам. - Просмотр сессий, где бот не нашёл ответ — это приоритет для пополнения базы.
Хотите сократить нагрузку на поддержку? Получите консультацию по вашему проекту — оценим архитектуру и предложим оптимальный подход.
Почему важна аналитика эффективности?
Аналитика показывает реальную отдачу от бота. Без неё невозможно понять, какие вопросы бот обрабатывает хорошо, а какие нужно дорабатывать.
Для оценки эффективности мы считаем процент автоматически закрытых сессий. Целевой показатель автозакрытия для зрелой базы FAQ — 60–70%. Наши клиенты достигают этого за 2–3 недели после запуска.
Мониторинг и постоянное улучшение бота
После запуска бот требует регулярного обслуживания:
- Еженедельный анализ пропущенных вопросов — просмотр сессий, которые были передачи оператору, выявление гэпов в базе FAQ.
- Обновление ключевых слов (при ключевом поиске) или переобучение эмбеддингов (при RAG) на основе новых вопросов.
- A/B-тестирование ответов — какие формулировки приводят к меньшему числу повторных вопросов от клиентов.
- Мониторинг времени отклика — анализ задержек при передаче сообщений и выявление bottleneck'ов.
Инструмент автоматически предлагает контент-менеджеру варианты для добавления в FAQ, если одно и то же нераспознанное слово повторяется более 10 раз в неделю.
Пример сессии с ботом
- Клиент: "Где мой заказ?"
- Бот: "Ваш заказ находится в статусе 'В пути'. Ожидаемая дата доставки — 5 декабря."
- Оператор не привлекался.
Что входит в работу
- Регистрация и настройка бота в открытых линиях Битрикс24.
- Проектирование структуры базы FAQ (ключевые слова или эмбеддинги).
- Разработка логики: поиск ответа, передача оператору, уточняющие вопросы.
- Создание административного интерфейса для управления базой.
- Реализация аналитики и отчётов (автозакрытие, популярные вопросы).
- Наполнение базы типовыми вопросами (до 100 записей) и тестирование.
- Документация по эксплуатации и обучение контент-менеджера.
Сроки и опыт
Мы на рынке уже более 5 лет, разработали 50+ проектов на Битрикс24. Работаем с 1С-Битрикс и Битрикс24 с момента основания.
| Этап | Срок |
|---|---|
| Регистрация бота в открытых линиях, базовая интеграция | 1–2 дня |
| Структура БД FAQ, поиск по ключевым словам | 2–3 дня |
| Логика передачи оператору, уточняющие вопросы | 2–3 дня |
| Административный интерфейс (CRUD FAQ) | 2–3 дня |
| Аналитика и отчёты | 1–2 дня |
| Наполнение базы + тестирование | 2–3 дня |
Итого: 1.5–2.5 недели без учёта наполнения базы. Наполнение — отдельная работа, зависит от объёма документации.
Закажите разработку сейчас
Оценим ваш проект за 1 день. Расскажите о ваших типовых вопросах — подберём оптимальный подход. Свяжитесь с нами через форму на сайте или напишите в Telegram. Получите консультацию прямо сейчас.







