Repository navigation
Product Search
Подсистема, из которой торговый ассистент берёт цены, артикулы, наличие и сроки. Главный принцип: ассистент не выдумывает позиции. Если поиск ничего не нашёл — он так и говорит и предлагает передать запрос менеджеру. Это сделано кодом, а не просьбой в промпте, поэтому обойти нельзя.
| Источник | Что даёт | Объём | Обновление |
|---|---|---|---|
| Каталог сайта (WooCommerce) | название, артикул, розничная цена, характеристики, ссылка, наличие и срок по части позиций | 30 163 позиции | автоматически, каждую ночь |
| Прайсы поставщиков (xlsx/xls/pdf) | закупочная цена, остаток у поставщика | 7 поставщиков, вкл. Промситех | автоматически, каждую ночь — из папки на Google Диске или из папки на сервере |
| EKF IMS (API) | — | не подключено | — |
Закупочные цены — конфиденциальны. Их видит только менеджер в админском чате; виджет сайта, WhatsApp и Telegram получают исключительно розничные цены каталога, без упоминания поставщиков.
Это самая тонкая часть. Магазин не ведёт собственный складской учёт — у всех 30 163 товаров учёт остатков в WooCommerce выключен, а статус «в наличии» стоит по умолчанию у всех подряд. Принимать его за наличие нельзя: ассистент бы отвечал «✅ В наличии» про любую позицию каталога.
Настоящие данные о наличии приходят из двух мест — остатков поставщиков в карточке товара и прайсов поставщиков:
| Формулировка ассистента | Что за ней стоит | Сколько позиций |
|---|---|---|
| в наличии N шт., срок поставки до X дн. | в карточке заполнен остаток конкретного поставщика — известны и количество, и его собственный срок | ~1 300 |
| есть у поставщика — уточнить только срок | артикул найден в прайсе поставщика, и поставщик подтверждает остаток | зависит от свежести прайсов |
| есть в прайсе поставщика — уточнить срок | артикул в прайсе есть, остаток не указан | — |
| наличие уточняется | позиция в каталоге есть, подтверждения остатка нет ни от сайта, ни от поставщиков | остальные |
| НЕТ в наличии | явно указанный нулевой остаток | редко |
Важное правило: «остаток не указан» ≠ «нет в наличии». Файлы остатков перечисляют только то, что у поставщика ЕСТЬ, поэтому отсутствие строки означает «не знаем», а не «нет». Раньше это путалось, и ассистент отказывал клиентам по 20 тысячам позиций, которые на самом деле поставляются.
То же и с карточкой: если все поставщики, чьи остатки магазин ведёт, показывают ноль, это ещё не отказ — позицию может возить тот, чьих данных на сайте нет.
Магазин хранит остаток и срок отдельно по каждому поставщику, и сроки у них разные: у одного день, у другого 1–2 дня, у третьего 3–4. Ассистент называет срок того поставщика, у которого позиция действительно в наличии, и всегда верхнюю границу: «3-4 дня» он озвучит как «до 4 дней». Обещать быстрее, чем подтвердил поставщик, нельзя.
Если товар лежит у нескольких — выбирается самый быстрый из них, и показывается именно его остаток, а не сумма всех складов. Иначе «12 шт., срок до 2 дней» означало бы, что за два дня приедут и те семь, что лежат у поставщика с четырёхдневной доставкой.
Почему не общая сводка на карточке. В карточке есть ещё сводный блок наличия, но после смены темы магазина (28.09.2026) он разошёлся с исходными данными: срок в нём проставлен один и тот же — «1-2 дня» — всем поставщикам подряд, хотя у части доставка занимает 3–4 дня, а количество расходится с реальными остатками. Ассистент его не использует, кроме одного поставщика (ПРОМСИТЕХ), у которого своих полей нет, — и срок оттуда не берёт.
Поиск точный, по словам и артикулам — не «по смыслу». Для коммерческого предложения это принципиально: цена и артикул должны совпадать с прайсом буквально.
Что умеет поиск:
- артикул — точное совпадение важнее частичного, частичное важнее совпадения по названию;
- номинальный ток — на запрос «контактор 20 А» позиция на 225 А не обгонит 18-амперную: для электротехники номинал определяющий;
- сам товар выше аксессуара к нему — «катушка управления для контактора» не подменяет контакторы (но найдётся, если просят именно катушку);
- аббревиатуры — ЧРП, ПЧ, частотник → преобразователь частоты; УЗО, УПП, дифавтомат;
- запрос строится из диалога, а не из последней реплики — на уточнение «модульный не подходит, нужен промышленный» ассистент не станет искать по слову «модульный», то есть по тому, что клиент только что отверг;
- позиции с ценой держатся в выдаче — у части каталога цена не заполнена, и такие строки не должны вытеснять те, по которым можно назвать цифру.
Для смысловых вопросов («чем запитать насос 5,5 кВт») подключается описательная часть каталога — она помогает понять задачу, но цены, артикулы и наличие берутся только из точного поиска.
Ассистент собирает черновик КП: таблица позиций, итог без НДС / НДС 16 % / с НДС, курс доллара с датой (если в позиции валютный прайс), строка про доставку по факту веса и габаритов, срок действия цен. Поставщики клиенту не раскрываются. Позиции с нулевой маржой в итог автоматически не идут — помечаются для директора. Любое КП — черновик на подтверждение, не финальный документ.
- В админке: Настройки → Google — подключите аккаунт, которому расшарена папка с прайсами.
- База знаний → вкладка Google Drive → «Подключить папку или файлы».
- Выберите папку (раздел «Доступные мне» — там лежат папки, расшаренные вам другими) или вставьте ссылку на неё. Можно отметить отдельные файлы.
- Назначение — «Прайсы поставщиков» (или «Прайсы + база знаний»). Оставьте галочку «Проверять изменения раз в сутки».
Дальше поставщики могут просто заменять файлы в папке на Диске. Каждую ночь, прямо перед пересчётом цен, секретарь сверяет даты файлов: если что-то поменялось — скачивает и пересчитывает, если нет — ничего не трогает. Кнопка ↻ обновляет сразу.
Замена идёт по поставщику: старый файл убирается в архив (_archive/<дата>/), только когда пришёл новый для того же поставщика. Прайсы поставщиков, которых в папке на Диске нет, остаются как были. Если папка вдруг опустела или доступ закрыли — текущие прайсы не трогаются.
После каждой синхронизации под источником виден отчёт: какой файл какому поставщику достался и сколько позиций разобрано. Жёлтое предупреждение — файл не подошёл ни одному поставщику (его никто не читает, цены этого поставщика остаются старыми); красное — файл подошёл сразу двум.
Скачивание идёт от имени того пользователя админки, который создал источник, — у него должен быть подключён Google-аккаунт с доступом к папке.
Положить новый файл в папку прайсов на сервере — ночью система перечитает её сама. Если файлов одного поставщика несколько, берётся самый новый.
По имени файла, без учёта регистра и разницы «пробел / подчёркивание»: «Диллер…» и «ОСТАТКИ 15.10…» — SunWell/EKF, «аксима…» / «axima…» — Аксима, «Остатки и доступность…» — Chint, «Остатки от …xls» — Промситех, «X-Trade…», «Электрокомплект…», «Сталкер прайс…». Столбцы у Аксимы и Промситеха находятся по заголовкам, так что сдвиг колонок в новой выгрузке из 1С ничего не ломает; остатки суммируются по всем складам.
Если файла поставщика нет вообще, он просто пропускается — остальные разберутся как обычно.
Промситех: цена из файла идёт клиенту как есть, без наценки; закупочная цена поставщиком не раскрывается, поэтому менеджер видит «закуп не раскрывается».
- Автоматической выгрузки прайсов из почты пока нет: свежесть зависит от того, как быстро новый файл попадёт в папку на Google Диске.
- У 11 378 позиций каталога (38 %) цена в магазине не заполнена. Прайсами поставщиков они не покрыты, поэтому назвать цену неоткуда — такие запросы уходят менеджеру.
- Интеграция с EKF по API не подключена.
- WooCommerce — синхронизация каталога
- CRM — разбор входящих заявок
- Widget, WhatsApp — каналы, где работает ассистент