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

aichat.md — направление взаимодействий

Что происходит с сообщением, с той секунды, как оно поступает к нам, и до момента, когда кто-то отмечает его как решенное.

Ассистента, который хорошо отвечает, легко показать в демо. Трудно показать — и что на самом деле важно — это маршрут: как приходит сообщение, что делается, чтобы не ответить дважды, сколько ждем перед ответом, откуда берется информация, какой инструмент вызывается, где агент останавливается и кого вызывают вместо него. Ниже — реальный маршрут, с числами из кода. Включая часть с комментариями, которая ведет себя совершенно иначе, чем личное сообщение, — и должна вести себя иначе.

Traseul

Девять этапов, в порядке их выполнения

  1. 01

    1. Вход, по каналу, на котором написал человек

    Шесть каналов входа, с разными механизмами. Messenger, Instagram Direct и WhatsApp Cloud API приходят через webhook, через одну и ту же точку входа, разветвляясь по типу объекта. Виджет на сайте входит напрямую по собственному маршруту. Telegram не приходит через webhook, а через постоянный опрос. А 999.md не имеет ни webhook, ни постоянного опроса — у него есть часы, которые смотрят в ленты каждые двадцать секунд.

    Каждый прием записывается в журнал событий, со статусом криптографической подписи и с сырым содержимым, до того как что-либо будет обработано. Причина простая: когда сообщение «не дошло», первый вопрос — дошло ли оно до нас или нет, и ответ должен быть строкой в таблице, а не предположением. Маршрутизация канал → агент выполняется через таблицу соответствия между идентификатором страницы и сервисом, поэтому одна и та же учетная запись может обслуживать нескольких агентов на разных каналах.

  2. 02

    2. Дедупликация, прежде чем что-либо еще

    Идентификатор сообщения помещается в ключ Redis с условной записью — если ключ уже существует, сообщение является дубликатом и останавливается здесь. Срок жизни ключа — 24 часа. Если Redis не отвечает, переходят на локальную память с порогом очистки в 5.000 записей, так что дедупликация не исчезает, а лишь становится более кратковременной по памяти.

    Окно было 120 секунд до 10 июля 2026 года, когда его подняли до 24 часов после инцидента с дублирующимися ответами. Комментарий, объясняющий изменение, написан рядом со значением, в коде. Здесь же отбрасываются стикеры и кнопка «лайк», которые иначе стали бы вопросами, на которые агент пытался бы ответить.

  3. 03

    3. Буфер — три сообщения, написанные подряд, становятся одним вопросом

    Люди не пишут абзац. Они пишут «привет», потом «у меня вопрос», потом сам вопрос. Ассистент, который отвечает на каждую строку по очереди, раздражает и кажется глупым. Поэтому сообщения собираются в буфер по паре отправитель–страница, а таймер сбрасывается при каждом новом сообщении. Когда человек замолкает, ответ дается один раз, на всё.

    В Messenger и Instagram значение ожидания по умолчанию — 15 секунд; в WhatsApp — 5. Допускается максимум пять сообщений в буфере — шестое заменяет последнее — а объединенный текст обрезается до 2.000 символов. Значение ожидания задается на уровне агента, а не глобально: оно читается из конфигурации агента и может быть снижено до нуля для сценария, где скорость важнее связности. Непосредственно перед отправкой в базе еще раз проверяется, не поставлена ли переписка на паузу, потому что за эти 15 секунд мог войти человек.

  4. 04

    4. Чтение из ваших источников

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

    Количество фрагментов настраивается на уровне агента, от 1 до 20. Фрагменты при индексации обрезаются до 1.200 символов. Итоговый отбор делается по рангу, а не по абсолютному порогу сходства: они упорядочиваются по объединенному баллу и берутся первые. В конфигурации есть и поле порога, но в пути поиска фактический фильтр сохраняет любой фрагмент с баллом выше нуля и обрезает по позиции — мы это говорим, потому что это разница между тем, что написано в панели, и тем, что делает код. Каждый запрос можно журналировать с возвращенными фрагментами и их баллами, чтобы можно было ответить на «почему он это сказал».

  5. 05

    5. Инструменты — когда агент должен что-то сделать, а не только сказать

    Если ответ требует действия, модель вызывает инструмент. Инструмент бывает трех типов: webhook в вашу систему, фрагмент кода, запущенный изолированно, или встроенный в платформу. Цикл модель–инструмент–модель имеет максимум пять раундов, в обоих движках. После пяти он останавливается и отвечает тем, что есть.

    Максимальное время по умолчанию для инструмента — 15 секунд. Встроенные инструменты, которые есть сегодня: поиск на веб-странице, текущее время, калькулятор, запись в таблицу Google, уведомление о лиде в Telegram, отправка SMS, шесть инструментов записи на прием для внешней системы бронирования, и три для каталога магазина — поиск, сопоставление и карточка товара. Каталог читает в реальном времени, с буфером памяти на десять минут, до 30 страниц и с максимальным временем 20 секунд. Есть набор инструментов, помеченных как внутренние, результат которых никогда не попадает в текст, видимый клиентом.

  6. 06

    6. Ответ, с историей перед глазами

    Модель получает вопрос, найденные фрагменты, результаты инструментов и историю разговора — последние 25 сообщений на основном пути, 50 на новом движке. Вызов имеет максимальное время 120 секунд, с двумя повторными попытками; вызов после инструментов — 90 секунд. Ответ уходит в канал, откуда пришел вопрос, на языке, на котором он был задан.

    Новый движок агентов включается переключателем, на уровне агента, аккаунта или глобально — все не меняется сразу. Так можно сравнить старое поведение с новым на том же трафике, что является единственным честным способом сказать, что что-то лучше.

  7. 07

    7. Передача человеку

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

    Режим задается на уровне агента и по умолчанию выключен — выбирается между «выключен», «по ключевым словам» и «интеллектуальный». Когда он срабатывает: переписка переходит в «ожидает человека», записывается момент, клиент получает подтверждающее сообщение на своем языке, а агент замолкает. Он не отвечает параллельно, не дополняет, не извиняется. Он молчит, и всё. Есть и официальный протокол передачи Meta, который переводит контроль переписки в ящик страницы; резервный канал продолжает сохранять сообщения даже когда контроль у человека, чтобы в истории не было дырки.

  8. 08

    8. Когда оператор отвечает со страницы, агент останавливается сам

    Если человек пишет клиенту прямо из интерфейса Meta, платформа видит эхо этого сообщения и автоматически ставит поток на паузу, без того чтобы кто-то нажимал что-либо. Значение по умолчанию — 30 минут, настраивается от пяти минут до семи дней. Это самый легко упускаемый случай при проектировании ассистента: никто не нажимает кнопку принятия, человек просто отвечает, и если платформа этого не замечает, клиент получает два голоса одновременно.

    Возобновление идет по трем путям. Автоматическая реактивация через 30 минут без ответа человека — цикл проверяет каждую минуту и реактивирует пакетами не более 50 потоков, очищая также память разговора, чтобы агент не продолжал беседу, которую он не вел. Отдельно проверяется истечение паузы. И кнопка в панели: принять, решить, вернуть боту, полностью остановить бота.

  9. 09

    9. Закрытие — и что не закрывается само

    Поток помечается решенным вручную, из панели, с заметками о решении и с системным сообщением, записанным в историю. Автоматического закрытия по неактивности нет: открытый поток остается открытым. Мы предпочли сказать это вместо того, чтобы создавать впечатление, будто все само собой приводится в порядок.

    Самостоятельно все же закрываются два момента: реактивация агента через 30 минут, описанная выше, и эскалации, отправленные в Telegram, которые спустя 30 минут без ответа помечаются как просроченные и возвращают поток агенту, с указанной причиной. Над всем этим работает индикатор времени ответа: свыше часа становится предупреждением, свыше четырех часов становится превышением. Он окрашивает, но не закрывает.

Asistentul magazinuluiSe potrivește cu aparatul meu?Spune-mi modelul aparatului.Verific variantele din catalog.Catalog conectat · informație verificatăEchipa poate prelua conversația.
Schemă explicativă · mesaj, context, acțiune, predare

Comentarii

Комментарии: почему они не являются сообщениями и почему с ними не обращаются как с сообщениями

Личное сообщение имеет одного читателя. У комментария есть все читатели страницы, включая конкурентов, включая кого-то, кто ищет повод для скандала. Хороший ответ в личке может стать катастрофой публично — например, цена, доступность или подтверждение того, что кто-то действительно ваш клиент. Поэтому у комментариев отдельный маршрут, отдельные правила и значение по умолчанию, которое склоняется к дискретности.

Как комментарий попадает в систему

Страница подписывается на разные поля в двух сетях: в Facebook — на ленту страницы, в Instagram — явно на комментарии и на комментарии в прямых трансляциях. Они попадают в ту же точку входа, что и сообщения, но по отдельной ветке, распознаваемой по наличию списка изменений вместо списка сообщений. Формат отличается между сетями и определяется отдельно для каждой. Также читается родительский комментарий, чтобы знать, является ли это ответом на другой комментарий, и пост или материал, на котором он появился.

Только новые комментарии что-то запускают

Meta отправляет одно и то же событие для нескольких действий. Только добавление комментария запускает агент. Редактирование, удаление, скрытие и показ снова журналируются и останавливаются там. Изменение числа лайков игнорируется без следа, потому что иначе журнал был бы сплошным шумом.

Четыре фильтра, прежде чем агент увидит текст

Комментарии самой страницы отбрасываются — иначе агент отвечал бы сам себе бесконечно. Уже обработанные комментарии отбрасываются по уникальному идентификатору комментария, который имеет ограничение уникальности в базе. Пустые комментарии, комментарии длиной не более двух символов и комментарии, состоящие только из emoji, отбрасываются. А тексты, содержащие длинные номера телефонов или веб-адреса, проходят через спам-фильтр с четырьмя шаблонами и останавливаются, помеченные как таковые.

Публично или приватно: значение по умолчанию — приватно

У каждого агента есть четыре отдельных переключателя, два для Facebook и два для Instagram: публичный ответ включён или выключен, приватный ответ включён или выключен. Над ними находится общий режим с тремя позициями — выключен, автоматически, или с одобрением. Когда конфигурация отсутствует или её нельзя прочитать, запасное значение в коде — не «отвечать публично», а «не отвечать публично, отвечать в приватно». Это сознательный выбор: ошибка конфигурации не должна выводить текст на чью-то публичную стену.

Отключённый агент означает отключённые комментарии

Если ассистент архивирован, неактивен, деактивирован или поставлен на паузу, или если бот отключён из аккаунта клиента, режим комментариев автоматически становится «выключен», независимо от того, что написано в переключателях комментариев. Одно место для отключения, а не четыре, которые нужно помнить.

На что не отвечают публично, и насколько жёсткое правило

Инструкция, данная модели для публичного ответа, задана явно: максимум два предложения, короткий и дружелюбный тон, приглашение в личные сообщения для деталей и запрет давать подробную информацию или цены публично. Сверху — жёсткий лимит: публичный ответ обрезается до 300 символов. Над обоими — свободный текст, который вы пишете как собственные инструкции, отдельно для публичного и для приватного. Мы честно говорим, насколько жёсткое правило: это инструкция для промпта плюс ограничение длины, а не детерминированный фильтр, который мог бы гарантировать, что цена никогда не появится. Когда нужна жёсткая гарантия, публичный ответ отключается и остаётся только приватный, либо включается режим с одобрением.

Один раз каждые 30 секунд, в одной и той же публикации

Публичный ответ имеет счётчик на публикацию: максимум один раз в 30 секунд. Причина в том, что происходит, когда публикация «заходит» — тридцать комментариев за две минуты, а страница заполняется одинаковыми ответами робота под каждым. Счётчик очищается сам, сохраняя последние тысячу отслеживаемых публикаций.

Instagram не позволяет отправить личное сообщение на подкомментарий

Это правило платформы, а не наше, и оно проверяется в трёх разных местах в коде, по всем трём путям, по которым можно дойти до личного сообщения. Когда у комментария есть родитель и сеть — Instagram, отправка в личные сообщения пропускается, а в журнал записывается точная причина. Не происходит попытки с тихим сбоем — пропуск выполняется явно.

От комментария к разговору

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

Режим с одобрением: агент пишет, человек публикует

Когда режим — «с одобрением», сгенерированный ответ не отправляется дальше. Он сохраняется как черновик, в ожидании, и появляется в очереди в панели, со счётчиком. Оттуда его одобряют или отклоняют, по одному элементу за раз. Одобренная публикация проходит через внутренний мост, защищённый сравнением подписи в постоянное время — одобренный ответ нельзя внедрить извне.

Что может сделать человек вручную

Скрытие комментария, с механизмом, подходящим для каждой сети, и пометкой состояния в базе. Удаление, с пометкой удалённого. Массовое скрытие, максимум 25 комментариев в одной партии. Закрытие комментариев на материале Instagram. И скрытие комментариев из прямой трансляции, по отдельному маршруту. Это ручные действия, не автоматические. Не существует списка запрещённых слов, который бы сам скрывал комментарии, и мы не утверждаем, что он существует.

Predarea

Когда агенту больше нечего сказать

Эскалация — не сбой агента. Это его самая важная функция, потому что единственное, что хуже ассистента, который не знает, — это ассистент, который не знает и продолжает говорить. Далее — как выглядит передача, кто уведомляется, что происходит с ответом человека и как агент возвращается.

Карточка, которая уходит в группу Telegram

Встроенный инструмент отправляет случай в группу, с заголовком, который сразу показывает, что это за случай: срочность, запрос оператора, сообщение о злоупотреблении, эскалация от недовольного клиента, новый лид или новый разговор. Тип определяется по тексту, с отдельными шаблонами для каждого. Сообщение клиента прикрепляется к карточке дословно — человек, который принимает, видит ровно то, что написал клиент, а не краткое изложение.

Принятие — это гонка, и к нему относятся как к гонке

У карточки два состояния: открыта и заблокирована. Принятие выполняется через условную запись, которая меняет состояние только если оно всё ещё было открыто, а код фактически проверяет, сколько строк было изменено. Два оператора, которые нажимают в одну и ту же секунду, не принимают оба. Второй узнаёт, что случай уже принят, а не успевает писать параллельно.

Ответ оператора переписывается на язык клиента

Оператор пишет в группе, на своём языке и в своём стиле, иногда телеграфно. Перед доставкой текст переписывается на язык, на котором говорит клиент, и в тон агента, без добавления новых фактов. То, что говорит оператор, остаётся тем, что передаётся; меняется только форма. Маршрутизация ответа в нужный разговор выполняется по сообщению, на которое ответили, а если его нет — по единственному заблокированному случаю этого оператора — и явно отклоняется, если их два, вместо того чтобы угадывать.

Кого уведомляют, а что больше не уведомляют

Панель получает уведомление в реальном времени через постоянное соединение. Паузы, вызванные правилами, отправляют уведомление по email или в Telegram, на выбор — это единственные два канала, принятые в коде. Также скажем, что больше не работает: уведомление по email для нити, принятой человеком, было намеренно отключено в июле 2026, а внутренняя маршрутизация осталась как пустой ответ. Если вы полагаетесь на тот email, он не придёт. Мы предпочитаем, чтобы вы узнали это здесь.

Правила паузы, помимо ключевых слов

Можно писать правила, которые ставят поток на паузу при появлении номера телефона, адреса электронной почты, набора слов до ста, или при явном запросе человека. Сверху — два типа, оцениваемые моделью: намерение и тональность. Длительность паузы — от одной минуты до семи дней; значение ноль означает паузу, пока кто-то не снимет её вручную.

Каждая передача ответственности записывается

Есть журнал передач с шестью отдельными действиями: передача человеком, передача ботом, автоматическая реактивация, передача оператором, освобождение оператором и возобновление агентом. Это не колонка статуса, которая перезаписывается, — это история. Когда кто-то спрашивает «кто общался с клиентом в тот момент», ответ — строка, а не реконструкция.

Чего не существует, чтобы вы не опирались на то, чего нет

Не существует автоматической диспетчеризации курьерам или выездным командам; мы проверили весь код, и этого нет. Не существует автоматического закрытия разговоров из-за неактивности. Не существует глобального списка запрещённых слов для комментариев. Есть четыре триггера передачи, эскалация в Telegram с атомарной передачей, правила паузы и автоматическая реактивация через 30 минут.

Fiecare afirmație de pe această pagină a fost citită din codul platformei — 66 citări cu fișier și linie, păstrate în depozitul nostru. Le parcurgem împreună, la cerere.