Розробка бота для автоматичної відповіді на 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, платежі через Приват24 та альтернативні способи оплати." | Автозакрито |
Бот успішно закриває 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. Отримайте консультацію прямо зараз.







