Перейти до основного вмісту
megapromotingПоговорімо

Експертиза · AI-асистенти

Асистенти, які відповідають у каналах, де пишуть ваші клієнти, з вашої інформації, і які передають розмову людині, коли виходять за межі ролі.

Ми впроваджуємо текстових асистентів на нашій платформі, aichat.md, яка працює в продакшені. Робота означає підключені канали з власним кодом, проіндексовану базу знань, інструменти, що виконують дії у ваших системах, і зафіксований у базі даних шлях передачі людині.

Вже збудованоСервіс спирається на власну платформу, що перебуває в продакшні, а не на обіцянку. `https://aichat.md` публічно відповідає (307 на `/ro`, перевірено 06.09.2026), а поведінки, описані нижче, зчитані зі схеми бази даних і маршрутів платформи, з файлом і рядком: пороги пошуку, типи інструментів і їхній максимальний час, стани нитки розмови, журнал передавання. Друга цитована власна реалізація — це функція каталогу магазину (`storeCatalog.service.js` плюс три вбудовані інструменти), написана як функція платформи замість інструментів окремо для кожного клієнта. Те, що докази не підтверджують, ми кажемо так само прямо: повідомлення з шаблону WhatsApp не існують у коді, тож ми не обіцяємо проактивних повідомлень поза вікном у 24 години.

Корисний асистент — не той, хто гарно пише, а той, хто підключений до реальної інформації бізнесу і знає, де зупинитися. Наша робота починається з каналу, де пишуть ваші клієнти, і закінчується на людині, яка бере розмову, коли асистенту вже нічого сказати. Між цим ми ставимо знання, інструменти і межі.

Платформа, на якій ми будуємо, — це aichat.md, зроблена нами і така, що працює в продакшені. Це змінює природу сервісу: ми не інтегруємо чужу чорну скриньку, а налаштовуємо систему, у якій можемо читати будь-який поріг і змінювати будь-яку поведінку. Коли ми кажемо, що відповідь за замовчуванням використовує п’ять фрагментів із ваших документів, із порогом схожості 0,70 і 30% ваги на збіг слів, це значення зі схеми бази даних, а не опис із брошури.

Канали з власним кодом, перевірені 06.09.2026, — шість: Facebook Messenger, Instagram Direct, Telegram, 999.md, віджет на сайті та WhatsApp Business через Cloud API на Graph v22.0. Кожен має власний модуль, а не одну позначену галочку — і відмінності між ними мають практичне значення: Messenger може показувати карусель продуктів, Instagram — ні, бо Meta не надає універсальних шаблонів в Instagram.

Частину, яку клієнти недооцінюють, — це передавання людині. В aichat це не обіцянка, а стан у базі даних: нитка є `bot` або `human`, журнал передавання розрізняє передавання людині, повернення до бота і автоматичну реактивацію, а нитка окремо має стан дотримання часу відповіді — `ok`, `warning`, `breached`. Можна показати наприкінці місяця, скільки розмов було передано і за який час.

Що входить

Робота, за складовими

Підключаємо канал і перевіряємо, що відбувається, коли він мовчить

Шість каналів мають власний код у платформі: Messenger, Instagram Direct, Telegram, 999.md, вебвіджет і WhatsApp Business Cloud API на Graph v22.0. Підключення Meta відбувається через Embedded Signup. Для кожного каналу ми перевіряємо і поганий випадок, а не лише перше вдале повідомлення: прострочений токен сторінки зупиняє канал мовчки, а не з видимою помилкою, тому платформа має моніторинг токенів і сповіщення про завершення строку дії.

Індексуємо знання і фіксуємо пороги, за якими шукає

Документи і сторінки ріжуться на фрагменти з hash вмісту та embedding `text-embedding-3-small`. Значення за замовчуванням, з якими ми запускаємо і потім налаштовуємо: п’ять фрагментів на запит, поріг схожості 0,70, гібридний пошук, вага 0,30 на збіг слів, вмикнене прив’язування джерела. Кожен запит можна журналювати з повернутими фрагментами, оцінками і часом — отже, на питання «чому він відповів саме так» є відповідь із даними, а не з припущень.

Зв’язуємо інструменти з системами, що виконують

Інструмент може бути webhook до вашої системи, з методом і заголовками на вибір, фрагментом JavaScript-коду, виконуваним платформою, або вбудованим у платформу інструментом. Кожен має максимальний час виконання, за замовчуванням 15 секунд. Практичний наслідок, сказаний до контракту, а не після: інтеграцію, що відповідає за 40 секунд, треба робити асинхронною, а не змушувати її працювати в розмові.

Живий каталог, під’єднаний до адреси магазину

Для магазинів є три вбудовані інструменти — `store_catalog_search`, `store_catalog_match`, `store_catalog_product` — поверх спільного сервісу каталогу. Для WooCommerce Store API є публічним, тож магазин під’єднується за адресою сайту, без ключів доступу. Раніше каталог писався як окремий інструмент для кожного клієнта; він став функцією платформи саме тому, що варіант з інструментами, написаними на ім’я клієнта, неможливо було підтримувати.

Передача людині, з обліком

Тред має явний стан `bot` або `human`. Журнал приймання знає три дії: приймання людиною, повернення до bot і автоматична реактивація. Окремо тред має стан дотримання часу відповіді: `ok`, `warning`, `breached`. Модуль приймання в платформі має чергу та ролі. Ми визначаємо з першої розмови, хто приймає і за який час, бо цей стан вимірюється від першого треду, а не додається пізніше.

Голос у письмовій розмові

Голосову нотатку, отриману у WhatsApp або Telegram, транскрибуємо з `whisper-1` і додаємо в розмову як текст. Відповідь може піти назад голосом, через `tts-1` або через ElevenLabs, із налаштуваннями стабільності та подібності для кожного голосу. Для тих, хто диктує замість того, щоб писати — майстер на об’єкті, водій — це різниця між каналом, яким можна користуватися, і декоративним каналом.

Переклад у розмові, сьогодні в один бік

Відповідь оператора може бути переписана мовою клієнта, з тоном агента і без додавання фактів. Зворотний сенс — повідомлення клієнта, перекладене для оператора — у коді на дату перевірки відсутній, тож оператор читає оригінал. Ми це кажемо, бо це різниця між командою, яка може обслуговувати російськомовного або англомовного клієнта, і тією, що думає, ніби може.

Поведінка при подвійних повідомленнях і під час серій

Webhook Meta справді надсилає те саме повідомлення повторно: дедуплікація виконується за ідентифікатором повідомлення, з пам’яттю на 120 секунд. А коли хтось пише три рядки один за одним, вони збираються в буфер на 15 секунд і отримують одну відповідь на все, що написала людина, а не три часткові відповіді.

Модель не прив’язана до постачальника

Виклики проходять через власний gateway на `api.megapromoting.com/v1`, який для всіх постачальників ззовні говорить форматом OpenAI. Модель обирається для кожного асистента окремо і може змінюватися без переписування інтеграції. Для embedding використовуємо `text-embedding-3-small`.

Як це виглядає

Шлях, крок за кроком.

01

Обираємо канал і людину, що приймає

Один канал, одна аудиторія, один відстежуваний результат. У тій самій розмові визначається, хто приймає треди, позначені `human`, і за який час. Поставляємо: перелік сценаріїв, які покриває асистент, і явний перелік тих, які він не покриває.

02

Під’єднуємо джерела і перевіряємо, що з них виходить

Документи й сторінки входять як джерела знань. У каталогах перевіряємо витягнуті товари по одному там, де важлива ціна. Поставляємо: проіндексовані джерела, пороги пошуку, налаштовані для вашого випадку, і набір контрольних запитань із отриманими відповідями.

03

Під’єднуємо інструменти й тестуємо повільний випадок

Webhook до CRM або ERP, код для власних перетворень, вбудований інструмент для того, що вже існує. Тестуємо повільний випадок і випадок помилки, а не лише щасливий, бо саме ліміт 15 секунд вирішує. Поставляємо: налаштовані інструменти та задокументовану поведінку при перевищенні ліміту.

04

Відкриваємо канал із увімкненим моніторингом

Канал запускається з активним моніторингом токена та з відпрацьованою передачею людині щонайменше один раз на реальному кейсі. Доставляємо: доступ до панелі, процедуру передачі та точки, в яких система зупиняється сама.

05

Ми читаємо журнали й налаштовуємо

Після перших реальних розмов дивляться журнал запитів: що знайшов, з яким балом, за який час. Від цього налаштовують поріг, кількість фрагментів або текст джерела. Доставляємо: список внесених змін і причину кожної.

Шлях одного повідомлення1canal conectat2dedublare peідентифікатор іtampon de 15 secunde3пошук у джерелахtale (5 fragmente,prag 0,70)4інструмент з лімітом на15 secundeвідповідь із джерелом, абоtrecere pe stareahuman cu jurnal depreluare
Шлях одного повідомлення

Дані

Чого торкаємося, де воно лежить і скільки лишається

Запитання, які ставить кожен, у кого є відповідальний за захист даних, — поставлені тут раніше, ніж їх поставить він.

Де зберігаються розмови
MySQL, на власному сервері в Microsoft Azure. Схема має понад 80 таблиць, змодельованих у Prisma, з окремими таблицями для гілок Meta, гілок Telegram, гілок 999.md, коментарів, міток, внутрішніх нотаток і журналу аудиту.
Токени каналу зберігаються зашифрованими
Токен WhatsApp зберігається зашифрованим Fernet, з поверненням до простого тексту лише для старих записів. Повідомлення мають власний модуль шифрування в сервісі каналів. Є моніторинг токенів і сповіщення про закінчення терміну дії.
Що бачить віджет і звідки
Віджет має список дозволених джерел для кожного асистента. Потрібно знати поведінку за замовчуванням: якщо список порожній, перевірка проходить — це вибір сумісності зі старими встановленнями, записаний у коді саме так. Це означає, що обмеження за доменом налаштовується явно для кожної реалізації, яка цього вимагає; ми його налаштовуємо, а не припускаємо.
Які персональні дані входять без вашого запиту
Вільне поле розмови може містити будь-що — номер телефону, адресу, медичну проблему. Технічно це не можна зупинити, але можна обробити: визначається, що зберігається, як довго, хто має доступ і чого команду навчають не просити в каналі. Реєстр обробок впровадження пишеться одночасно з впровадженням, а не після.
Строк зберігання
Він визначається для кожного впровадження і записується в оприлюдненій політиці клієнта. Правило, яке ми застосовуємо у себе і вимагаємо в проєктах: якщо зміна коду змінює те, що збирається, кому надходить або як довго зберігається, оприлюднена політика змінюється в тому самому коміті.

Випадок

Питання про ціну, що починається в Instagram і закінчується на людині

Ситуація

Один магазин з онлайн-каталогом отримував питання про ціну в DM Instagram і в Messenger. Одні й ті самі п’ять питань, цілий день, а правильна відповідь уже була на сайті.

Що ми збудували

Ми під’єднали два канали, проіндексували джерела й зв’язали каталог через вбудовані інструменти магазину, які для WooCommerce читають публічний Store API — тобто без ключів доступу в платформі. Ми налаштували буфер конкатенації, щоб три повідомлення, написані підряд, ставали одним питанням, і явно прописали, чого асистент не має права робити. У Messenger ми запустили карусель продуктів із трьома умовами, від яких вона залежить; в Instagram ми залишилися на тексті плюс фото, бо Meta там не надає загальних шаблонів.

Що вийшло

Питання про ціну та доступність отримують відповідь із показаним продуктом і посиланням. Те, що виходить за межі каталогу, переходить у стан `human` і надходить призначеній людині, разом із усім контекстом розмови. Журнал запитів показує, що знайшов асистент, з яким балом і за який час, тож налаштування робиться на даних.

Чого цей випадок не каже

Результат залежить від якості каталогу. Неправильна ціна на сайті стає неправильною ціною в розмові — асистент читає джерело, а не виправляє його. І ми не вимірювали зменшення обсягу роботи команди, тож не стверджуємо це як результат.

Питання

Про що нас питають, перш ніж зателефонувати

Чи може він написати першим у WhatsApp клієнту, який не писав уже тиждень?

Ні. І причина в Meta плюс реальна відсутність у нас, обидві названі. Поза вікном 24 години від останнього повідомлення клієнта Meta відхиляє вільний текст із помилкою 131047, а платформа позначає повідомлення як невдале й показує помилку замість того, щоб удавати, ніби воно пішло. Надсилання поза вікном потребує повідомлень із шаблону, схвалених Meta, а таких у нашому коді немає — пошук за типом `template` по всьому коду повертає нуль результатів. Отже: відповідь у вікні 24 години — так; проактивна кампанія у WhatsApp — ні, доки не буде впроваджено шаблони.

На яких каналах це реально працює сьогодні?

Шість, із власним кодом, перевіреним на 06.09.2026: Facebook Messenger, Instagram Direct, Telegram, 999.md, вебвіджет і WhatsApp Business Cloud API. Давніший внутрішній аудит знайшов код і для SMS та e-mail; ми не перевіряли це повторно на цю дату, тож не вказуємо їх як доступні без перевірки на конкретному впровадженні. Канал, що з’явився згодом, не вважається під’єднаним.

Чи є інтеграція з 999.md офіційною?

Це не партнерська інтеграція з публічним API. Вона працює з сесією вашого облікового запису: платформа просить значення cookie сесії з вашого браузера і використовує його, щоб читати та відповідати на повідомлення. Практичний наслідок, сказаний наперед: якщо 999.md змінить механізм сесії, інтеграція зупиняється і її треба буде підключити знову. Хто не приймає цей ризик, не повинен запускати цей канал.

Звідки знає відповідь і що робить, коли не знає її?

Шукає у ваших джерелах за допомогою гібридного пошуку — за замовчуванням п’ять фрагментів, поріг 0,70, 30% ваги на слова, решта семантика — і може додати джерело до відповіді. Коли не знаходить, спроєктований шлях — передача людині: потік переходить у стан `human`, а журнал фіксує, хто взяв і коли. Є також автоматичне повернення до бота, теж як зафіксована дія.

Може показувати товари з фото і ціною?

У Messenger — так: карусель карток. В Instagram — ні: Meta не надає загальних шаблонів в Instagram, тож там лишається текст плюс фото. Карусель вимагає трьох речей одночасно: щоб її було увімкнено в конфігурації асистента, щоб інструмент повернув щонайменше два товари, і щоб інструкція асистента вимагала список із ціною та посиланням — бо детектор дивиться на текст агента, а не лише на дані. Якщо бракує будь-якої з трьох, карусель не будується. Ми налаштовуємо всі три, але корисно знати, чому.

Хто відповідає клієнту, який пише російською команді, що говорить румунською?

Відповідь оператора може автоматично переписуватися мовою клієнта, зберігаючи тон агента і не додаючи фактів — це працює. Зворотний сенс, повідомлення клієнта, перекладене для оператора, у коді на дату перевірки відсутнє. Практично: клієнт отримує відповідь своєю мовою, але оператор читає оригінальне повідомлення. Якщо вам потрібен і зворотний сенс, це робота, яку треба зробити, а не налаштування, яке можна просто позначити.

Що відбувається, якщо клієнт надсилає те саме повідомлення двічі?

Він не отримує дві відповіді. Дублікати фільтруються за ідентифікатором повідомлення, з пам’яттю на 120 секунд — webhook Meta справді пересилає ще раз. А повідомлення, написані одне за одним, збираються в буфер на 15 секунд і отримують одну відповідь на все.

Якою моделлю AI відповідає і що буде, якщо я захочу іншу?

Виклики проходять через власний gateway на `api.megapromoting.com/v1`, який говорить у форматі OpenAI для всіх постачальників позаду; модель обирається для кожного асистента окремо. Зміна моделі не потребує переписування інтеграції. Для embedding використовуємо `text-embedding-3-small`; зміна моделі embedding, натомість, вимагає переіндексації джерел — це не одне й те саме.

Чого не робить цей сервіс?

Не робить голос по телефону — це інша наша платформа, Kallina, і це інша робота. Не надсилає proactive-повідомлення у WhatsApp, з тієї ж причини. Не генерує PDF і не прикріплює отримані фотографії до замовлення — на дату перевірки отримане фото лише позначається. І ми не гарантуємо відсотки зменшення обсягу роботи: ми не маємо вимірювання, тож не стверджуємо цього.

На чому ґрунтуються твердження вище (21 джерел)
  1. aichat.md відповідає публічно — 307 на https://aichat.md/rohttps://aichat.md · 2026-09-06

20 з них — це код і файли з наших репозиторіїв. Ми не публікуємо їхні назви чи номери рядків: разом, на одній сторінці, це надто точно описало б, як побудовані системи, які належать не лише нам. Ми проходимо їх разом із вами, у репозиторії, за запитом — перевірка залишається можливою, просто вона відбувається в розмові.

Що вам хотілося б налагодити?

Розкажіть про свій процес. Разом визначимо, що варто збудувати, що можна підключити і як перевіримо результат.

Поговорімо