К содержимому

Документация

Утренняя сводка: каталог, письмо и сравнение цен

Процесс связывает три события: сбор каталога в 05:00, прайс поставщика около 06:00 и сравнение после 07:00. Время московское. Если письмо задержалось, сводка ждёт до 08:00. Неполный каталог или непроверенное письмо не становятся основанием для отчёта.

Подготовьте два источника

Создайте источник каталога и отдельный источник для результатов сравнения. У каталога нужны поля sku (строка), price (дробное число), currency (строка). В сводке: sku, currency, best_source (строки), best_price (дробное число), complete (логическое), prices (JSON). Артикул используйте как ключ записи.

Оба прайса должны явно содержать валюту. Одинаковый артикул должен означать одинаковую товарную позицию и единицу продажи. Если поставщики используют разные артикулы, сначала задайте свою таблицу соответствия.

Настройте сценарии

Сценарий каталога получает одну HTML-таблицу, вызывает ai()->extract() и сохраняет записи. Для следующих сборов используется проверенное правило. Если источник отдаёт JSON или файл, используйте соответствующие методы SDK. Готовый пример для технической настройки: resources/workflows/catalog-prices.php.

Сценарий сводки читает входы catalog и supplier, выбирает одно вложение CSV/XLSX, извлекает прайс и сравнивает цены через sources()->comparePrices(). Пример: resources/workflows/daily-price-report.php. Оба сценария нужно проверить и опубликовать обычным способом.

Подключите письмо и расписание

Создайте входящий адрес, ограничьте отправителей нужным поставщиком. Для выбора прайсов используйте буквальную метку в теме, например [Прайс]. Служебное время поступления берётся из принятого системой письма, а не из заголовка Date отправителя.

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

Как обрабатываются задержки

В 07:00 система проверяет все обязательные входы. Каталог должен иметь полный успешный сбор, начатый после 05:00 этого дня. Письмо должно поступить после 06:00, пройти проверки и сохранять действующий срок хранения. До 08:00 система повторяет проверку раз в минуту, не занимая песочницу ожиданием.

Когда всё готово, закрепляется конкретный сбор и конкретное письмо. Два одновременных тика не создают две сводки за один день. Если вход отозван или обновился до чтения, выполнение останавливается. После 08:00 неготовый процесс отмечается как истёкший, выгрузка не создаётся. Успешный процесс получает CSV только с записями текущего прогона, без оставшихся строк вчерашней сводки.

Как читать результат

best_source показывает, где дешевле среди всех заданных источников. Если пара не найдена, complete=false, best_source и best_price пусты. Это повод проверить сопоставление товаров. Такая строка не утверждает, что единственный найденный продавец самый дешёвый.

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

Как проверить перед публикацией

Для сценария сводки откройте пробный запуск и передайте параметры из resources/workflows/daily-prices.preview.json. В них находятся пример каталога и небольшой CSV прайса. Пробный запуск читает только переданные вами примеры, не получает доступ к настоящим письмам и не записывает боевые результаты. После успешной проверки опубликуйте сценарий и подключайте ежедневный процесс.

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