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

Решения · Онлайн-торговля

Ассистент, который читает цену и доступность в вашем магазине в тот же момент, когда это спрашивает клиент.

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

Уже построеноSe poate verifica din exterior, fără să ne întrebi pe noi. Punctul nostru de catalog livrat unui distribuitor răspunde 200 și spune „154 rezultate”, iar interfața publică a magazinului lui, interogată direct, întoarce antetul `x-wp-total: 154` — aceeași cifră, două surse independente, 06.09.2026. A doua implementare e funcția de catalog din platforma de asistenți: `storeCatalog.service.js` plus trei unelte încorporate pe care agentul le poate chema în timpul conversației. Rezerva pe care o spunem înainte de contract: mesajele din șablon WhatsApp nu există în codul platformei, deci nu promitem niciun mesaj proactiv în afara ferestrei de 24 de ore; iar traseul de catalog stă pe o ramură de dezvoltare care nu e unificată în trunchi — e livrat pentru magazinele pe care le-am conectat, nu pornit implicit pentru toți.

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

Наш выбор прост и имеет последствия: каталог не копируется, а читается. Для магазинов на WooCommerce интерфейс Store API публичен — значит, подключение выполняется по адресу сайта, без consumer key и без секрета. Когда клиент спрашивает о товаре, агент вызывает инструмент, инструмент спрашивает магазин, магазин отвечает актуальной ценой и доступностью. То, что появляется в разговоре, — это то, что есть в магазине, а не то, что было на момент интеграции.

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

Остальные ограничения исходят не от нас, а от каналов, и честнее знать их заранее: Meta отклоняет свободный текст вне окна 24 часа от последнего сообщения клиента, в Instagram вообще нет каруселей товаров, а фотография, присланная клиентом, отмечается в разговоре, а не прикрепляется автоматически к заказу. Каждое из этих предложений цитируется ниже с файлом и строкой.

Что входит

Что конкретно меняется в онлайн-торговле

Вопрос становится поиском в вашем каталоге, а не гаданием

У агента есть три встроенных инструмента поверх общего сервиса каталога: `store_catalog_search` для поиска, `store_catalog_match` для сопоставления формулировки клиента с конкретным товаром, `store_catalog_product` для полной карточки. Это не отдельные инструменты, написанные для каждого магазина, — это функция платформы. Практическая разница: когда мы исправляем что-то в сопоставлении, это исправляется сразу для всех подключенных магазинов.

Цена и остаток читаются из магазина в момент вопроса

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

Ответ выходит в том канале, где написал клиент

Шесть каналов имеют собственный код в платформе: Messenger, Instagram Direct, Telegram, виджет на странице, местная платформа объявлений и WhatsApp через Cloud API на Graph v22.0. Это не один «чат», переименованный шесть раз: у каждого канала свои правила формата и свои способы падения, и мы проверяем и плохой случай — истекший token страницы молча останавливает канал, если за ним не следят.

Подключение магазина на WooCommerce выполняется по его адресу, без ключей

Store API публична, поэтому мы не просим у вас `consumer_key` и `consumer_secret`. Это не удобство, а решение по риску: ручные инструменты, которые заменил этот маршрут, содержали, некоторые из них, ключи магазина, записанные открытым текстом в базе данных. Новый маршрут заменил 109 инструментов, написанных вручную, из которых 28 были скраперами поверх HTML — то есть интеграциями, которые ломались при первом изменении темы магазина.

Карусель товаров имеет условия, и они отличаются от канала к каналу

В Messenger карусель отображается только когда одновременно выполнены три условия; если одного не хватает, ответ остается текстом, а не ломается. В Instagram карусели товаров нет — у Meta нет generic templates в Instagram, поэтому никто не может доставить это там, независимо от того, что написано в оферте. Это тот тип предложения, который мы предпочитаем, чтобы вы услышали от нас до контракта.

24-часовое окно в WhatsApp, сказанное номером ошибки

Вне 24-часового окна после последнего сообщения клиента Meta отклоняет свободный текст с ошибкой 131047, а сообщение остаётся отмеченным как неудачное в платформе. Шаблонные сообщения — единственный законный способ написать первым после окна — в коде платформы отсутствуют: поиск по типу `template` возвращает ноль результатов, отправляется только тип `text`. То есть: восстановление брошенной корзины в WhatsApp через 48 часов мы не можем вам обещать сегодня.

Серии сообщений и дублированные сообщения обрабатываются, а не игнорируются

Webhook Meta действительно повторно отправляет одно и то же сообщение: дедупликация выполняется по идентификатору сообщения, с памятью на 120 секунд. А клиент, который пишет «bună», «aveți», «modelul negru» в три строки, получает один ответ на всё, что написал, а не три частичных ответа — сообщения собираются в буфер на 15 секунд. В коммерции это важнее, чем кажется: три частичных ответа на одно намерение выглядят точно как робот.

Передача человеку имеет состояние, это не обещание

У ветки диалога есть явное состояние `bot` или `human`. Журнал передачи знает три действия: передача человеку, возврат к боту, автоматическая реактивация. Отдельно у ветки есть состояние соблюдения времени ответа — `ok`, `warning`, `breached` — так видно, какой разговор остался без человеческого ответа, а не только сколько их было.

Что не решает ассистент магазина

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

Traseul

Как запрос проходит через систему.

01

Сначала проверяем, какой публичный вход есть у вашего магазина

Первая проверка, не последняя: запрашиваем каталог снаружи и считаем, что приходит обратно. Если магазин на WooCommerce с активным Store API, интеграции не нужны ключи. Если нет, переходим к аутентификации — и тогда ключ становится элементом, которым нужно управлять, со всеми вытекающими. Результат этой проверки мы выдаём письменно, в том числе когда ответ — что это невозможно.

02

Подключаем каталог и каналы, с проверкой неприятного сценария

Подключение Meta выполняется через Embedded Signup. Для каждого канала мы проверяем не только первое успешное сообщение, но и то, что происходит, когда истекает токен или когда магазин не отвечает. Мы сдаем подключенные каналы и письменный список поведения при каждом режиме отказа.

03

Пишем роль, инструменты и ограничение

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

04

Запускаем с активной передачей человеку и настраиваем пороги

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

1Întrebarea clientului2unealta de catalog3interfața publică amagazinului4preț șidisponibilitate deacum5răspuns pe canalul pecare a scrisMemorie temporară: zece minute. Nicio copie a catalogului la noi.
Traseul, în 5 pași

Данные

К чему прикасаемся, где оно лежит и сколько остаётся

Правила различаются от отрасли к отрасли. Это те, что применяются в онлайн-торговле.

Каталог не копируется к нам
Товары, цены и остатки остаются у вас. Через платформу проходит ответ на вопрос, который хранится во временной памяти десять минут. У нас нет базы с вашим каталогом, которую кто-то мог бы экспортировать, потому что экспортировать нечего.
Где хранятся разговоры
MySQL, на собственном сервере в Microsoft Azure. Схема содержит более 80 таблиц, смоделированных в Prisma, с отдельными таблицами для веток Meta, веток Telegram, веток с платформы объявлений, комментариев, меток, внутренних заметок и журнала аудита. Токен канала хранится в зашифрованном виде Fernet.
Данные заказа вводятся в свободное поле
В разговоре с магазином попадают имя, телефон, адрес доставки и, иногда, размер или медицинская проблема, для которой клиент покупает продукт. Технически это нельзя остановить. Это можно обрабатывать: определяется, что хранится, как долго, у кого есть доступ и чему команда обучена не запрашивать в канале. Реестр обработки внедрения составляется при внедрении, а не после.
Виджет на странице и список источников
У виджета есть список разрешенных источников для каждого ассистента, но нужно знать поведение по умолчанию: если список пуст, проверка проходит. Это выбор совместимости со старыми установками, записанный в коде как есть. На практике ограничение по домену вашего магазина настраивается явно при каждой реализации — оно не поставляется готовым.
Срок хранения
Это определяется для каждой реализации и записывается в опубликованную вами политику. Правило, которое мы применяем у себя и требуем в проектах: если изменение кода меняет то, что собирается, кому это попадает или как долго хранится, опубликованная политика изменяется в том же commit.

Случай

Каталог из 154 продуктов, проверенный с двух сторон

Ситуация

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

Что мы построили

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

Что получилось

Проверку можно сделать извне, не веря нам на слово: наша точка каталога отвечает 200 и сообщает 154 результата, а публичный интерфейс магазина, опрошенный напрямую, возвращает заголовок `x-wp-total: 154`. Та же цифра, два независимых источника, в один и тот же день.

Чего этот случай не говорит

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

Вопросы

Что спрашивает кто-то в электронной коммерции

Откуда я знаю, что он не говорит старую цену?

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

Что он отвечает, когда товар распродан?

То, что говорит магазин. Наличие приходит из того же ответа, что и цена. Чего он не делает — и это решение, а не упущение — так это не выдумывает дату пополнения. Если вы хотите, чтобы агент предлагал альтернативы, когда товара нет, это правило, которое мы явно прописываем в его роли и тестируем, а не что-то, что происходит само по себе.

Может ли он оформить заказ?

Не из чтения каталога. Публичный Store API — это канал чтения; запись заказа требует аутентифицированного пути к магазину, то есть отдельной работы, с ключами, которыми нужно управлять. Что делает сейчас: доводит клиента до правильного товара, с правильной ценой, и даёт ему ссылку или передаёт разговор человеку.

Может ли он первым написать клиенту, который бросил корзину?

В WhatsApp — нет, вне окна 24 часа. Meta отклоняет свободный текст с ошибкой 131047, а шаблонные сообщения не существуют в коде платформы. В Telegram и Messenger, в пределах правил каждого канала, есть запланированные автоматизации, которые возобновляют разговоры без ответа, с видимыми счётчиками того, сколько ушло и сколько было пропущено.

Работает с каруселью товаров в Instagram?

Нет. У Meta нет общих шаблонов в Instagram, поэтому карусели там ни для кого не существует. В Messenger она есть, но требует трёх условий одновременно; когда одного не хватает, ответ остаётся текстом. Мы предпочитаем, чтобы вы услышали это сейчас, а не на третьей неделе внедрения.

Мой магазин не на WooCommerce. Что меняется?

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

Клиент отправляет фото товара, который хочет. Что происходит?

Фотография помечается в разговоре и остаётся там для человека, который подхватит его. Она не прикрепляется автоматически к заказу, и из неё не генерируется ни один документ — для этого нет кода. Агент, который утверждал бы, что зарегистрировал заказ по фото, солгал бы, и это выяснится при доставке.

Что происходит, когда клиент пишет четыре сообщения подряд?

Он получает один ответ на всё, что написал. Сообщения собираются в буфер на 15 секунд перед отправкой модели. Отдельно, если платформа Meta повторно отправляет то же сообщение — а она это делает — дедупликация по идентификатору сообщения с памятью на 120 секунд предотвращает второй ответ.

Кто отвечает, когда агент не знает?

Человек из вашей команды, и передача видна в системе: ветка переходит из состояния `bot` в `human`, журнал передачи отмечает кто и когда, а состояние соблюдения времени ответа показывает, не повисла ли ветка. Без этого механизма «передать оператору» — это обещание, которое никто не сможет проверить через месяцы.

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

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

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