Перейти к основному содержимому
megapromotingДавайте обсудим

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

Ассистенты, которые отвечают в тех каналах, где пишут ваши клиенты, на основе вашей информации, и передают разговор человеку, когда выходят за пределы роли.

Мы внедряем текстовых ассистентов на нашей платформе, aichat.md, которая работает в продакшене. Работа означает подключённые каналы с собственным кодом, индексированную базу знаний, инструменты, которые выполняются в ваших системах, и путь передачи человеку, зафиксированный в базе данных.

Уже построеноСервис опирается на собственную платформу, находящуюся в production, а не на обещание. `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, web-виджет и WhatsApp Business Cloud API на Graph v22.0. Подключение Meta выполняется через Embedded Signup. Для каждого канала мы проверяем и плохой случай, а не только первое успешное сообщение: истёкший page token останавливает канал молча, без видимой ошибки, поэтому платформа имеет мониторинг токенов и уведомление об истечении.

Индексируем знания и фиксируем пороги, после которых идёт поиск

Документы и страницы режутся на фрагменты с content 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`. Журнал передачи знает три действия: передача человеку, возврат к боту и автоматическая реактивация. Отдельно у потока есть состояние соблюдения времени ответа: `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, с возвратом к простому тексту только для старых записей. Сообщения имеют собственный модуль шифрования в сервисе каналов. Есть мониторинг токенов и уведомление по истечении срока.
Что видит виджет и откуда
У виджета есть список разрешённых источников для каждого ассистента. Нужно знать поведение по умолчанию: если список пустой, проверка проходит — это выбор совместимости со старыми установками, записанный в коде как есть. Это означает, что ограничение по домену настраивается явно для каждой реализации, которой оно нужно; мы настраиваем его, а не предполагаем.
Какие персональные данные попадают без вашего запроса
Свободное поле разговора может содержать что угодно — номер телефона, адрес, медицинскую проблему. Технически это нельзя остановить, но можно обрабатывать: определяется, что хранится, сколько, у кого есть доступ и чему команду инструктируют не запрашивать в канале. Реестр обработок внедрения пишется одновременно с внедрением, а не после.
Срок хранения
Он определяется для каждого внедрения и записывается в опубликованную политику клиента. Правило, которое мы применяем у себя и требуем в проектах: если изменение кода меняет то, что собирается, кому попадает или сколько хранится, опубликованная политика изменяется в том же commit.

Случай

Вопрос о цене, который начинается в 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, web-виджет и 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, и это другая работа. Не отправляет проактивные сообщения в WhatsApp, по указанной выше причине. Не генерирует PDF и не прикрепляет полученные фотографии к заказу — на момент проверки полученная фотография только помечается. И мы не гарантируем проценты снижения объема работы: у нас нет измерения, поэтому мы этого не утверждаем.

На чём основаны утверждения выше (21 источников)
  1. aichat.md отвечает публично — 307 на https://aichat.md/rohttps://aichat.md · 2026-09-06

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

Что вы хотели бы наладить?

Расскажите о своём процессе. Вместе определим, что стоит построить, что можно подключить и как проверим результат.

Давайте обсудим