ИИ для сайта

Чат-бот говорит «в наличии» про товар, которого нет на складе: что не так с выгрузкой YML из Битрикса и как проверить свою

Эдгар Косулин 7 мин чтения

Серия «ИИ-консультант на сайте» · часть 8 из 8

Содержание

11 ноября в 09:29 по Москве к нашему ИИ-консультанту подключился интернет-магазин на 1С-Битрикс. Через минуту владелец сам дал ссылку на выгрузку каталога в формате YML: 13 518 товаров, 635 разделов, файл на 21 МБ. Каталог прочитался за 56 секунд.

Разбирая заявку, мы открыли выгрузку и сверили её с тем, что записал бот. Про 2 791 товар он был готов сказать покупателю «в наличии», хотя на складе их нет. Это каждый пятый товар каталога. Бот ничего не выдумал: так написано в файле.

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

Что было в выгрузке

В YML у каждого товара есть атрибут available: true или false. Программа, которая читает файл, понимает его как «товар есть» и «товара нет». В этой выгрузке available="true" стоял у всех 13 518 товаров. Тегов <count> (остаток в штуках) и <sales_notes> в файле не было.

Настоящий статус магазин писал в другом месте: обычной характеристикой «Доступность на складе», в одном ряду с цветом и весом.

«Доступность на складе» Товаров
В наличии 5 530
Под заказ 5 197
Нет в наличии 2 717
В пути 74

Упрощённо товар в файле выглядел так (название, цена и артикул условные):

<offer id="1001" available="true">
  <name>Товар, которого нет на складе</name>
  <price>4990</price>
  <param name="Доступность на складе">Нет в наличии</param>
  <param name="Производитель">Бренд</param>
  <param name="Артикул">A-1001</param>
</offer>

Человек видит в карточке на сайте «Нет в наличии» и всё понимает. Программа видит available="true" и строку текста среди характеристик.

Что из этого прочитал бот

Слова «под заказ» наша платформа искала в характеристиках и раньше, поэтому 5 197 заказных товаров были отмечены верно. Остальные 8 321 товар она записала «в наличии», по атрибуту. Из них на складе нет 2 791: это 2 717 «Нет в наличии» и 74 «В пути». Получается, каждый третий товар, про который бот сказал бы «есть», купить сразу было нельзя.

В статье о боте для магазина мы писали: если наличие в выгрузке неверное, бот будет повторять эту неправду. Здесь тот самый случай, только с цифрами. Наша недоработка в нём тоже есть: статус лежал в файле словами, а платформа из таких слов понимала только «под заказ».

Почему у всех товаров стоит true

Точно мы не знаем: настроек экспорта этого магазина мы не видели. По файлу видно одно. Атрибут available заполнен одинаково для всего каталога, а склад живёт в отдельном свойстве товара, и экспорт выгрузил это свойство как обычную характеристику.

От чего зависит available в вашей выгрузке, определяется тем, чем она собрана: штатным экспортом, модулем или своим скриптом. Это вопрос к тому, кто её настраивал. Результат можно проверить и без него, об этом ниже.

Выгрузку YML обычно делают для торговых площадок и рекламы, бот читает тот же формат. Уходит ли у этого магазина такой же файл куда-то ещё, мы не знаем. Но любой получатель читает атрибуты и теги, а знать про характеристику «Доступность на складе» он не обязан.

Бренд и артикул оказались там же

Тега <vendor> в выгрузке не было. Бренд лежал в характеристике «Производитель»: она заполнена у 13 515 товаров, разных значений 411. У получателя, который берёт бренд только из тега, список брендов магазина пуст. У нас он тоже был пуст.

С артикулом то же самое: тега <vendorCode> нет, номер записан характеристикой «Артикул». Найти товар по такому номеру бот может, характеристики участвуют в поиске. Но поле артикула в карточке товара у него пустое.

Что стоит выносить в <param>, а что в отдельные теги, разобрано в статье про тег <param> в YML.

Файл может оказаться вчерашним

В самом начале выгрузки, в теге yml_catalog, стоит атрибут date: когда файл собран. У этого магазина там было 10 ноября, 12:47, и к утру 11-го дата не изменилась. Пересобирается ли файл по расписанию, мы на тот момент не знали.

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

Что мы поменяли в боте

Правили движок, а не настройки одного магазина, чтобы правка досталась всем каталогам.

  • Слова магазина перевешивают голый available="true". «Нет в наличии», «Отсутствует», «Распродано»: товара нет.
  • «В пути», «Ожидается», «Предзаказ»: сейчас нет, но заказать можно. Бот говорит это словами магазина и срок не додумывает.
  • Слова ищутся только в характеристике, которая целиком названа наличием: «Наличие», «Доступность на складе», «Статус товара», «Остаток». Иначе «Наличие подсветки: нет» или «Гарантия: нет» превратили бы товар в отсутствующий.
  • Остаток в штуках главнее слов. Если в <count> стоит положительное число, товар есть, что бы ни было написано в характеристиках.
  • Бренд берётся из характеристики, когда тега <vendor> нет: «Бренд», «Производитель», «Торговая марка», «Марка». После правки бренд определился у 13 479 товаров этого магазина, брендов 410.

Артикул из характеристики мы пока не берём.

У правки есть граница. Список слов конечный, и магазин, который напишет статус своей формулировкой, останется для бота «в наличии», пока мы не посмотрим его выгрузку. Поэтому надёжнее поправить сам файл, чем рассчитывать, что каждый получатель догадается.

Как проверить свою выгрузку за десять минут

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

  1. Найдите товар, которого точно нет на складе. Поиском по названию или артикулу. Посмотрите, что стоит у него в available.
  2. Поищите available="false". Если таких товаров в файле нет совсем, а отсутствующие позиции у вас бывают, выгрузка говорит неправду.
  3. Проверьте, есть ли <count>. С остатком в штуках получателю не нужно ничего угадывать.
  4. Посмотрите, где бренд и артикул: в тегах <vendor> и <vendorCode> или среди <param>.
  5. Посмотрите дату сборки в начале файла, атрибут date, и сравните с сегодняшней.

Если под рукой есть терминал, то же самое делается несколькими командами:

curl -s -o feed.xml 'https://ваш-сайт.ru/адрес-выгрузки.xml'

head -c 300 feed.xml                            # начало файла, там дата сборки
grep -o 'available="true"' feed.xml | wc -l     # сколько товаров «в наличии»
grep -o 'available="false"' feed.xml | wc -l    # сколько «нет в наличии»
grep -o '<count>' feed.xml | wc -l              # у скольких есть остаток
grep -o '<vendor>' feed.xml | wc -l             # у скольких бренд записан тегом

# какие характеристики есть в файле и сколько раз каждая встречается
grep -o '<param name="[^"]*"' feed.xml | sort | uniq -c | sort -rn | head -30

Последняя команда печатает список характеристик. По нему видно, не лежат ли наличие, бренд и артикул среди <param>, как у магазина из этого разбора. Если вместо русских названий в выводе нечитаемые символы, файл сохранён в кодировке windows-1251. Тогда сначала перекодируйте его: iconv -f cp1251 -t utf-8 feed.xml > feed-utf8.xml.

Что исправить и что делать, если исправить нельзя

Лучше всего, когда выгрузка сама говорит правду. Задачу разработчику можно поставить так:

  • у товаров, которых нет на складе, стоит available="false";
  • остаток выгружается в <count>;
  • бренд лежит в <vendor>, артикул в <vendorCode>;
  • файл пересобирается по расписанию, не реже, чем меняются остатки.

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

Когда поправить файл нельзя, остаются два пути.

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

Не показывать наличие вовсе. У другого магазина, с которым мы работаем, остатки приходят из выгрузок поставщиков и бывают неверными. Там данные чинить не стали: на вопрос о наличии бот отвечает, что его нужно уточнить, и даёт телефон и почту магазина. Покупателю это лишний шаг, зато без уверенного «в наличии» по неверным данным.

Как это устроено на Siteko. ИИ-консультант берёт каталог из YML-выгрузки магазина и перечитывает его по расписанию источника, обычно раз в час. Ссылку на выгрузку вы даёте сами в кабинете: у магазина из этого разбора имя файла задал владелец, и наш осмотр сайта выгрузку не нашёл. С 11 ноября бот понимает статус наличия, записанный характеристикой, и берёт бренд из «Производителя», если тега <vendor> нет. Как подключить каталог и настроить частоту чтения, описано в справке об источниках.

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

Начните с первого пункта проверки: один товар, которого точно нет на складе, и его available. Если там true, вы уже знаете, почему тот, кто читает вашу выгрузку, обещает покупателю товар, которого у вас нет.

Серия

ИИ-консультант на сайте

  1. 1. Чат-бот для сайта: ИИ, сценарии или живой оператор
  2. 2. Чат-бот для интернет-магазина: подбор товаров, цены и наличие
  3. 3. Бесплатный чат-бот для сайта: какие бывают и где подвох
  4. 4. Как подключить ИИ-консультанта на сайт: пошагово
  5. 5. Разработка чат-бота для сайта или готовый сервис
  6. 6. Чат-бот не находит ответ, который есть на сайте: почему условия магазина тонут в каталоге
  7. 7. Покупатель просит менеджера, а вы не за компьютером: как ответить ему из Telegram или MAX
  8. 8. Чат-бот говорит «в наличии» про товар, которого нет на складе: что не так с выгрузкой YML из Битрикса и как проверить свою

Интернет-магазин

Поделиться: Telegram ВКонтакте

Новые статьи и разборы — в канале Siteko: Telegram MAX

Подписчикам: +30 дней к пробному хостингу, клиентам: +150 ₽ на баланс

Пошаговые инструкции по нашим услугам — в базе знаний

Ещё по теме

Как выглядит визит по ссылке из ChatGPT, почему аналитика принимает его за рекламную метку, сколько их было у нас с августа и что проверить у себя.

«Нейросети без магии», часть 4

ИИ для сайта 6 мин чтения

llms.txt: что это за файл и нужен ли он вашему сайту

Что такое файл llms.txt, чем он отличается от robots.txt и sitemap.xml, как выглядит внутри, что изменилось в версии 2 и работает ли он на самом деле, с честным ответом про поддержку у Google, OpenAI и Anthropic.

«Нейросети без магии», часть 3

ИИ для сайта 7 мин чтения

Как сделать сайт видимым для нейросетей

Как нейросети узнают про сайты, какие боты за это отвечают, как проверить, не закрыты ли они в robots.txt, почему сайт на JavaScript для них пустой и что можно сделать, не обещая себе гарантий.

«Нейросети без магии», часть 2