h1. Конфигурация окружения (.env) h2. Назначение Описывает ключевые переменные окружения, используемые Rest1C-API. Полный список и значения по умолчанию см. в @.env.example@. h2. Режимы и общие параметры * @ARGUMENT@ — включает режим ArgumentDEV (схема свойств и HL-блоки для клиентов). * Если заданы @HL_CONTRAGENTS_ID@/@HL_ACCESS_RIGHTS_ID@ (или legacy @HL14_ID@/@HL15_ID@), включается HL-логика клиентов и связей в HL15. * При @ARGUMENT=false@ и заданных HL14/HL15 пользователи создаются через Bitrix CUser (без API регистрации), а связь с компанией фиксируется в HL15. * @API_URL@ — базовый URL для документации и интеграторов. * @ALLOWED_ORIGINS@ — список разрешённых Origin через запятую (опционально). * @APP_NAME@/@APP_ENV@/@APP_VERSION@/@APP_BUILD@/@APP_COMMIT@/@APP_DEPLOYED_AT@ — метаданные деплоя. h2. Логи и пути * @ERROR_LOG_PATH@ — путь к файлу логов ошибок. * @TEMP_IMAGE_PATH@ — временная папка для изображений. * @IMAGE_DOWNLOAD_PATH@ — источник изображений (URL/путь). * @LOGGING_ENABLED@ — включение логирования. * @LOGS_ALLOWED_UNITS@ — allowlist systemd-юнитов для internal log API. * @LOGS_DEFAULT_UNIT@ — unit по умолчанию для internal log API. * @LOGS_MAX_WINDOW_MINUTES@ — максимум минут в диапазоне поиска логов. * @LOGS_MAX_ENTRIES@ — максимум записей в ответе internal log API. * @LOGS_MAX_PAYLOAD_BYTES@ — максимум размера ответа internal log API. * @LOGS_TRACE_WINDOW_MINUTES@ — окно трассы для /internal/logs/request. * @LOGS_RATE_LIMIT@ — лимит запросов на окно. * @LOGS_RATE_WINDOW_SECONDS@ — окно rate-limit в секундах. h2. Bitrix: инфоблоки и HL-блоки * @PRODUCTS_IBLOCK_ID@ — инфоблок товаров. * @OFFERS_IBLOCK_ID@ — инфоблок торговых предложений (SKU). * @BRANDS_IBLOCK_ID@ — инфоблок брендов. * @MANAGERS_IBLOCK_ID@ — инфоблок менеджеров. * @DISCOUNTS_HLBLOCK_ID@ — HL-блок скидок. * Важный момент: в таблице скидок должен отсутствовать уникальный индекс @uf_user_product@; допустим только @uf_client_product@ (подробнее: @docs/explanation/discounts-table-indexes.textile@). * @HL_CONTRAGENTS_ID@ — HL-блок компаний (контрагентов). * @HL_ACCESS_RIGHTS_ID@ — HL-блок прав доступа пользователей. * @HL_DELIVERY_ADDRESS_ID@ — HL-блок адресов доставки пользователей. * @HL_CONSIGNEE_ID@ — HL-блок фиксации статуса обработки клиента (Consignee, таблица @hl_consignee@, поля @UF_CONTRAGENTID@/@UF_NAME@/@UF_XML_ID@/@UF_VERSION@). Fallback: legacy @HL32_ID@, по умолчанию @32@ (см. @clients/HL32.xml@). * @PRICE_GROUP_ID@ — ценовая группа для персональных цен. h3. Пояснение HL_CONTRAGENTS_ID и HL_ACCESS_RIGHTS_ID HL_CONTRAGENTS_ID — ID HL-блока компаний (контрагентов). В этом блоке хранится справочник компаний, которые приходят из 1С. Как читать данные: * Каждая строка — одна компания. * Основные поля: @UF_XML_ID@ (внешний идентификатор из 1С), @UF_NAME@ (название), @UF_INN@/@UF_KPP@, контакты и адреса. * Используется как источник для связей в HL15 и для обработки клиентов. HL_ACCESS_RIGHTS_ID — ID HL-блока прав доступа пользователей. Это таблица связей между пользователями Bitrix и компаниями из HL14. Как читать данные: * Каждая строка — связь «пользователь ↔ компания». * Основные поля: @UF_CONTRAGENTID@ (ID компании из HL14), @UF_USERID@ (ID пользователя Bitrix), @UF_ACCESSRIGHTS@ (права), @UF_ACTIVE@ (активность). h3. Пояснение HL_DELIVERY_ADDRESS_ID HL_DELIVERY_ADDRESS_ID — ID HL-блока адресов доставки пользователей. Хранит список адресов, привязанных к пользователю. Как читать данные: * Каждая строка — один адрес доставки пользователя. * Основные поля: @UF_USERID@ (ID пользователя Bitrix), @UF_TITLE@ (название адреса), @UF_ADDRESS@ (адрес, обязательный), @UF_XML_ID@ (внешний идентификатор), @UF_LATITUDE@/@UF_LONGITUDE@ (координаты). h3. Совместимость с legacy-именами Для обратной совместимости поддерживаются старые имена: * @HL14_ID@ → @HL_CONTRAGENTS_ID@ * @HL15_ID@ → @HL_ACCESS_RIGHTS_ID@ * @ADDRESS_HL_ID@ → @HL_DELIVERY_ADDRESS_ID@ * @HL32_ID@ → @HL_CONSIGNEE_ID@ h2. Авторизация и маппинги * @TOKEN@/@API_TOKEN@ — токен доступа. * @USER_ID@ — технический пользователь (обычно 1). * @STORE_MAPPING@ — JSON-маппинг XML_ID складов 1С во внутренние ID Bitrix. * @ORDER_PREFIX@ — префикс заказов при обмене. * @EXTERNAL_ORDER_NUMBER_PREFIXES@ — JSON-объект или CSV-маппинг @source:prefix@ для видимых номеров внешних заказов в @ACCOUNT_NUMBER@. Пример JSON: @{"old_portal":"OLD","phone":"TEL"}@. Пример CSV: @old_portal:OLD,phone:TEL@. * @EXTERNAL_ORDER_DEFAULT_NUMBER_PREFIX@ — fallback-префикс для внешнего заказа, если источник в payload отсутствует. * @EXTERNAL_ORDER_SOURCE@ — fallback-источник внешнего заказа, если payload 1С не передал source. h3. Нумерация заказов * Внутренний технический идентификатор Bitrix — @b_sale_order.ID@. * Канонический видимый номер заказа — @b_sale_order.ACCOUNT_NUMBER@. * GUID интеграции с 1С — @b_sale_order.XML_ID@. * Для внешних заказов Rest1C-API формирует @ACCOUNT_NUMBER@ в формате @-<1C_NUMBER>@. * @ORDER_PREFIX@ используется только в запросах к 1С по обычному номеру заказа и не должен использоваться вместо внешнего префикса @ACCOUNT_NUMBER@. * Если для источника внешнего заказа не найден префикс в @EXTERNAL_ORDER_NUMBER_PREFIXES@ и не задан fallback, импорт внешнего заказа завершается ошибкой, чтобы не создавать конфликтную или неоднозначную нумерацию. h2. RabbitMQ * @RABBITMQ_HOST@/@RABBITMQ_PORT@/@RABBITMQ_USER@/@RABBITMQ_PASSWORD@/@RABBITMQ_VHOST@. * Имена exchange/queue/routing key вычисляются автоматически через @RabbitTopology::for(entity, 1, APP_NAME)@. * Основные сущности очередей: @products@, @orders_create@, @orders_sync@, @delivery_points@, @discounts@, @discounts_human@, @properties_type@. * Реестр задач воркеров хранится в @config/workers.php@ и используется как единый source of truth для запуска процессов. * Основной entrypoint воркеров: @php bin/worker --task=@. * Список задач для эксплуатации: @php bin/worker --list@. * Валидация конфигурации перед деплоем: @php bin/worker --validate-config@. * Автосинхронизация systemd-инстансов с реестром: @bin/workers-sync-systemd --apply@ (или @--dry-run@ для проверки). * Legacy-переменные с явными именами очередей (@RABBITMQ_EXCHANGE@/@RABBITMQ_QUEUE@/@RABBITMQ_ROUTING_KEY@, @RABBITMQ_DISCOUNT_*@, @RABBITMQ_HUMAN_DISCOUNT_*@) больше не используются в runtime-коде. * Параметры воркера @rest1c-discounts-human.service@ (@/discounts/Manual_Start.php@) задаются через @RABBITMQ_DISCOUNT_PREFETCH@, @RABBITMQ_DISCOUNT_SQL_CHUNK@, @DISCOUNTS_REQUEUE_ON_ERROR@ и @MANUAL_START_*@. * @RABBITMQ_HUMAN_DISCOUNT_BATCH@ — общий размер батча скидок для отправки в human-очередь (по умолчанию для @/products/@ и @/clients/@). * @RABBITMQ_HUMAN_DISCOUNT_BATCH_CLIENTS@ — размер батча скидок клиентов для @/clients/@ (если задан, перекрывает общий). * @RABBITMQ_DISCOUNT_PREFETCH@ — prefetch для воркера скидок @/discounts/rabbit.php@ (по умолчанию 50). * @RABBITMQ_DISCOUNT_WAIT_TIMEOUT@ — таймаут ожидания @wait@ в AMQP-цикле скидочного воркера (сек, по умолчанию 5). * @RABBITMQ_DISCOUNT_SQL_CHUNK@ — стартовый лимит размера SQL-пакета (в байтах) для записи скидок (по умолчанию 200000). * @RABBITMQ_DISCOUNT_SQL_CHUNK_MIN@ — нижняя граница авто-роста чанка (по умолчанию 200000). * @RABBITMQ_DISCOUNT_SQL_CHUNK_MAX@ — верхняя граница авто-роста чанка (по умолчанию 1000000). * @RABBITMQ_DISCOUNT_SQL_CHUNK_STEP@ — шаг авто-роста/снижения чанка (по умолчанию 50000). * @RABBITMQ_DISCOUNT_SQL_CHUNK_SLOW_SEC@ — порог медленной вставки для снижения чанка (сек, по умолчанию 8). * @RABBITMQ_DISCOUNT_IDLE_TIMEOUT@ — таймаут простоя до выхода воркера скидок (сек). @0@ — не выходить по idle (рекомендуется для systemd @Restart=always@). * @DISCOUNTS_TRUNCATE_ON_START@ — выполнять TRUNCATE HL-таблицы скидок в начале обработки (по умолчанию true). * @DISCOUNTS_TRUNCATE_LOCK_TIMEOUT@ — таймаут ожидания MySQL lock для TRUNCATE (сек, по умолчанию 120). * @DISCOUNTS_REQUEUE_ON_ERROR@ — возвращать сообщение в очередь при ошибке обработки (по умолчанию true). * @MANUAL_START_IDLE_TIMEOUT@ — таймаут простоя для @/discounts/Manual_Start.php@ (сек, по умолчанию 0). @0@ — long-running режим без выхода по idle (рекомендуется для @Restart=always@). * @MANUAL_START_WAIT_TIMEOUT@ — таймаут ожидания в @/discounts/Manual_Start.php@ (сек, по умолчанию 5). Должен быть > 0. * @APP_NAME@ — используется для генерации имён очередей торговых точек (APP_NAME + entity). * @RABBITMQ_DELIVERY_POINTS_PREFETCH@ — prefetch для воркера торговых точек. * @DELIVERY_POINTS_QUEUE_BATCH_SIZE@ — размер батча при постановке торговых точек в очередь из @/sync.php@. * @RABBITMQ_PRODUCTS_PREFETCH@ — prefetch для воркера @products@ (по умолчанию 1). * @RABBITMQ_PRODUCTS_MAX_ATTEMPTS@ — лимит попыток обработки @products@ перед отправкой в DLQ. * @RABBITMQ_PRODUCTS_RETRY_DELAYS@ — CSV-задержки retry для @products@ (секунды). * @PRODUCTS_HYDRATION_MAX_ATTEMPTS@ — лимит batched hydration-попыток для очереди @products_hydration@ перед отправкой в DLQ (по умолчанию 3). * @PRODUCTS_HYDRATION_BATCH_SIZE@ — стартовый размер батча для bulk-догрузки товаров в @products_hydration@. Если не задан, worker ограничивает hydration безопасным значением @100@, даже если общий @ONEC_PRODUCTS_BATCH_SIZE@ выше. * @PRODUCTS_HYDRATION_BATCH_SIZE_MIN@ — нижняя граница авто-дробления батча для @products_hydration@ (по умолчанию @25@). * @PRODUCTS_HYDRATION_BATCH_SIZE_MAX@ — верхний предел adaptive growth для @products_hydration@; worker может постепенно увеличивать batch вплоть до этого значения (но не выше @1000@). * @PRODUCTS_HYDRATION_GROWTH_FACTOR@ — множитель роста hydration-batch после серии успешных циклов. * @PRODUCTS_HYDRATION_GROWTH_SUCCESS_STREAK@ — сколько полных успешных циклов подряд нужно для следующего роста hydration-batch. * @PRODUCTS_HYDRATION_GROWTH_MAX_CYCLE_SECONDS@ — максимальная длительность одного bulk-fetch цикла, при которой разрешён рост hydration-batch. * @PRODUCTS_HYDRATION_GROWTH_MAX_PEAK_MB@ — memory peak в MB, выше которого worker не увеличивает hydration-batch. * @PRODUCTS_HYDRATION_SHRINK_PEAK_MB@ — memory peak в MB, при котором worker уменьшает hydration-batch после успешного цикла. * @PRODUCTS_HYDRATION_DEDUP_TTL_SECONDS@ — TTL Redis-дедупликации hydration-задач по ключу @xml_id + needs_hydration_reason + hydration_source_version@. * @PRODUCTS_HYDRATION_SPLIT_QUEUES@ — включить split очередей @products_hydration_structural@ и @products_hydration_lightweight@ вместо legacy @products_hydration@. * @PRODUCTS_HYDRATION_TASK_CLASS@ — какой класс hydration-очереди обслуживает @products/HydrationRabbit.php@ при split-режиме (@structural@ по умолчанию). * @PRODUCTS_HYDRATION_ADMISSION_CONTROL@ — включить backlog-aware admission control перед постановкой в hydration. * @PRODUCTS_HYDRATION_ADMISSION_MAX_READY@ — лимит @ready@ сообщений в целевой hydration-очереди, после которого non-critical enqueue suppress-ится. * @PRODUCTS_HYDRATION_ADMISSION_MAX_TOTAL@ — лимит @total@ сообщений в целевой hydration-очереди, после которого non-critical enqueue suppress-ится. * @PRODUCTS_HYDRATION_ADMISSION_ALWAYS_ALLOW_REASONS@ — CSV-список @needs_hydration_reason@, которые разрешено публиковать даже при переполненном backlog. * @PRODUCTS_HYDRATION_QUEUE_STATE_CACHE_SECONDS@ — TTL кэша queue-state для admission control, чтобы не делать passive declare на каждое сообщение. * @PRODUCTS_HYDRATION_REDIS_REQUIRED_CONSUMER@ — fail-safe правило для @products/HydrationRabbit.php@: без доступного Redis worker не стартует. * @PRODUCTS_HYDRATION_LOCK_TTL_SECONDS@ — TTL distributed lock по @XML_ID@ для hydration consumer. * @PRODUCTS_HYDRATION_VERSION_TTL_SECONDS@ — TTL Redis registry для coarse-grained hydration version. * @PRODUCTS_HYDRATION_COUNTER_WINDOW_SECONDS@ — окно Redis admission counters (в секундах). * @PRODUCTS_HYDRATION_ADMISSION_RATE_LIMIT_GLOBAL@ — global rate-limit публикаций в hydration за окно; @0@ отключает ограничение. * @PRODUCTS_HYDRATION_ADMISSION_RATE_LIMIT_STRUCTURAL@ / @PRODUCTS_HYDRATION_ADMISSION_RATE_LIMIT_LIGHTWEIGHT@ — per-task-class rate-limit публикаций в hydration за окно. * @PRODUCTS_HYDRATION_BREAKER_ENABLED@ — включает circuit breaker для запросов @get_products/Info@ из hydration worker. * @PRODUCTS_HYDRATION_BREAKER_FAIL_THRESHOLD@ — сколько подряд breaker-significant ошибок нужно для перехода в @open@. * @PRODUCTS_HYDRATION_BREAKER_OPEN_SECONDS@ — cooldown breaker в состоянии @open@. * @PRODUCTS_HYDRATION_BREAKER_HALF_OPEN_MAX_PROBES@ — сколько probe-запросов разрешено в @half_open@ окне. * @PRODUCTS_HYDRATION_BREAKER_SUCCESS_THRESHOLD@ — сколько успешных probe-запросов нужно для возврата breaker в @closed@. * @PRODUCTS_HYDRATION_BREAKER_ALWAYS_ALLOW_REASONS@ — CSV-список critical hydration-причин, которые сохраняются в backlog даже при @breaker=open@. * @PRODUCTS_DB_RECONNECT_ON_GONE_AWAY@ — пересоздавать Bitrix DB connection при @MySQL server has gone away@ (по умолчанию true). * @PRODUCTS_DB_ERROR_BACKOFF_SECONDS@ — пауза после DB reconnect перед новой попыткой (секунды). * Для @products/Rabbit.php@ и @products/bypass.php@ переменные @PRODUCTS_IBLOCK_ID@ и @APP_ENV@ обязательны. Если @PRODUCTS_IBLOCK_ID <= 0@ или @APP_ENV@ пустой, product runtime считается невалидным: worker завершает процесс до чтения очереди, а bypass возвращает ошибку конфигурации без записи в Bitrix. * @PRODUCTS_WORKER_MEMORY_SOFT_LIMIT_MB@ — soft watermark памяти для controlled recycle @products@ worker после handled message boundary (по умолчанию @192@). * @PRODUCTS_WORKER_MAX_MESSAGES@ — необязательный лимит сообщений на один lifecycle @products@ worker; @0@ отключает лимит. * @PRODUCTS_WORKER_MEMORY_LOG_INTERVAL@ — интервал memory checkpoint в сообщениях для @products@ worker (по умолчанию @50@). * @PRODUCTS_WORKER_FORCE_GC@ — выполнять @gc_collect_cycles()/gc_mem_caches()@ после каждого обработанного сообщения в @products@ worker (по умолчанию @true@). * @RABBITMQ_ORDER_SYNC_PREFETCH@ — prefetch для воркера @orders_sync@. * @RABBITMQ_ORDER_SYNC_MAX_ATTEMPTS@ — лимит попыток обработки @orders_sync@. * @RABBITMQ_ORDER_SYNC_RETRY_DELAYS@ — CSV-задержки retry для @orders_sync@ (секунды). * @REDIS_HOST@/@REDIS_PORT@/@REDIS_DB@/@REDIS_PASSWORD@ — Redis для idempotency/dedup в @orders_sync@. * @ORDERS_SYNC_DEDUP_TTL_SECONDS@ — TTL ключа обработанного @XML_ID@. * @ORDERS_SYNC_LOCK_TTL_SECONDS@ — TTL lock-ключа при обработке @XML_ID@. * @MANUAL_START_CACHE_LIMIT@ — лимит элементов кэшей воркера @/discounts/Manual_Start.php@ (по умолчанию 5000). * @MANUAL_START_SYNC_CLIENTS@ — включать синхронизацию клиентов через 1С в @/discounts/Manual_Start.php@ (по умолчанию false). * @DISCOUNTS_DEBUG_CLIENT_XML_ID@ — включить точечный лог скидок для компании по @UF_XML_ID@ (HL14). * @DISCOUNTS_DEBUG_PRODUCT_IDS@ — список ID товаров через запятую для точечного лога скидок. h2. 1С интеграция * @ONEC_BASE_URL@ — legacy/fallback база. * @ONEC_GET_BASE_URL@/@ONEC_POST_BASE_URL@ — отдельные базы для GET/POST. * @ONEC_USER@/@ONEC_PASSWORD@ — учётные данные. * @ONEC_RESPONSE_ZIP_ENABLED@ — включать query @responseFormat=ZIP@ для методов из @ONEC_ZIP_METHODS@ (по умолчанию @true@). * @ONEC_ZIP_METHODS@ — CSV-список методов 1С для ZIP-ответа (по умолчанию @users/Info,clients/Info,delivery_points/Info,get_products/Info,brands/Info@). * @ONEC_USERS_BATCH_SIZE@/@ONEC_PRODUCTS_BATCH_SIZE@/@ONEC_CLIENTS_BATCH_SIZE@/@ONEC_DELIVERY_POINTS_BATCH_SIZE@/@ONEC_BRANDS_BATCH_SIZE@/@ONEC_SECTIONS_BATCH_SIZE@ — стартовые размеры батчей запросов к 1С (по умолчанию @1000@). * @ONEC_USERS_BATCH_SIZE_MIN@/@ONEC_PRODUCTS_BATCH_SIZE_MIN@/@ONEC_CLIENTS_BATCH_SIZE_MIN@/@ONEC_DELIVERY_POINTS_BATCH_SIZE_MIN@/@ONEC_BRANDS_BATCH_SIZE_MIN@/@ONEC_SECTIONS_BATCH_SIZE_MIN@ — нижняя граница авто-дробления батча при ошибке 1С (по умолчанию @50@). * Очередь @products_hydration@ может использовать отдельные @PRODUCTS_HYDRATION_BATCH_SIZE@/@PRODUCTS_HYDRATION_BATCH_SIZE_MIN@. Если они не заданы, hydration worker применяет безопасный cap @100/25@ поверх общих @ONEC_PRODUCTS_BATCH_SIZE@/@ONEC_PRODUCTS_BATCH_SIZE_MIN@. * При включённом adaptive-ramp hydration worker стартует с @PRODUCTS_HYDRATION_BATCH_SIZE@, растёт до @PRODUCTS_HYDRATION_BATCH_SIZE_MAX@ только после успешных циклов и уменьшает batch при высоком memory peak или ошибке bulk-fetch. * Для @products_hydration@ 1С считается last-resort источником после @payload -> Bitrix snapshot@. Сообщение очереди содержит @needs_hydration_reason@ и coarse-grained @hydration_source_version@; повторная публикация suppress-ится Redis-дедупликацией, если доступен Redis. * Если @PRODUCTS_HYDRATION_SPLIT_QUEUES=true@, producer маршрутизирует задачи по @task_class@ в @products_hydration_structural@ или @products_hydration_lightweight@; без флага сохраняется legacy очередь @products_hydration@. * Admission control для hydration работает на producer-стороне и ориентируется на @ready/total@ целевой очереди. При переполнении backlog suppress-ятся non-critical причины, а allowed-list из @PRODUCTS_HYDRATION_ADMISSION_ALWAYS_ALLOW_REASONS@ продолжает публиковаться. * При replay hydrated payload в очередь @products@ worker выполняет version-aware no-op: если @hydration_source_version@ уже совпадает с текущим @DATA_HASH@ товара в Bitrix, enriched payload повторно не применяется. * Stage 3 добавляет Redis coordination plane: producer использует Redis registry/counters opportunistically и может жить в degraded mode, а consumer-side @HydrationRabbit@ требует Redis обязательно. * Redis registry хранит advisory-state по @xml_id@, coarse-grained @source_version@ и последнему применённому @DATA_HASH@. Source of truth не меняется: финальное решение остаётся за Bitrix runtime-state. * Circuit breaker действует только на hydration-запросы в 1С. При @open@ non-critical hydration suppress-ится, а причины из @PRODUCTS_HYDRATION_BREAKER_ALWAYS_ALLOW_REASONS@ переносятся в delayed backlog до закрытия breaker. * @ONEC_BATCH_SIZE@/@ONEC_BATCH_SIZE_MIN@ — legacy fallback для старого bulk-кода; для новых вызовов рекомендуется использовать доменные ключи выше. * @ONEC_SECTIONS_SOURCE@ — переопределение query-параметра @source@ для исходящих запросов @sections/Info@. * @SYNC_STRICT_CANON_ENABLED@ — строгая канонизация запросов к 1С в @/sync.php@ (без fallback-переспросов users/Info). * @SYNC_STRICT_CANON_DROP_REASON_LOG@ — логировать причины подавления обращений в strict-режиме. * @SYNC_USERS_FALLBACK_ENABLED@ — включить fallback по users/Info для missing пользователей (игнорируется при @SYNC_STRICT_CANON_ENABLED=true@). * @ONEC_USERS_MISSING_FALLBACK@ — legacy-переменная fallback (сохранена для обратной совместимости). * @ONEC_USERS_MISSING_FALLBACK_LIMIT@ — лимит missing пользователей для fallback. * @SYNC_RATE_LIMIT@/@SYNC_RATE_WINDOW_SECONDS@ — rate-limit для @/sync.php@ (по токену+IP). * @SYNC_MAX_CLIENT_RELOAD_ITEMS@ — лимит элементов @clients.reload=true@ в одном запросе @/sync.php@. * @SYNC_MAX_USER_RELOAD_ITEMS@ — лимит элементов @users.reload=true@ в одном запросе @/sync.php@. * @SYNC_MAX_TOTAL_ONEC_CALLS_PER_REQUEST@ — общий бюджет обращений к 1С за один запрос @/sync.php@. * @SYNC_REDIS_DEDUP_TTL_SECONDS@ — TTL межзапросного дедупа @sync.php@ в Redis (clients/users/delivery_points). * @DELIVERYPOINT_ONEC_CANON_TTL_SECONDS@ — TTL канонического кэша ответов 1С (@users/Info@/@clients/Info@) для @/deliverypoint/@. * @DELIVERYPOINT_ONEC_NEGATIVE_TTL_SECONDS@ — TTL канонического отрицательного кэша (not_found) для @/deliverypoint/@. * @DELIVERYPOINT_ONEC_BATCH_SIZE@ — стартовый размер ZIP-батча запросов @users/Info@/@clients/Info@ в @/deliverypoint/@ (по умолчанию @1000@). * @DELIVERYPOINT_ONEC_BATCH_SIZE_MIN@ — нижняя граница авто-дробления батча в @/deliverypoint/@ (по умолчанию @50@). * @DELIVERYPOINT_USER_PROVISION_PREFETCH@ — включить batch-prefetch пользователей перед автосозданием в @/deliverypoint/@. * @DELIVERYPOINT_CLIENT_PROVISION_PREFETCH@ — включить batch-prefetch клиентов перед автосозданием в @/deliverypoint/@. h2. SMTP и уведомления * @MAIL_HOST@/@MAIL_PORT@/@MAIL_USERNAME@/@MAIL_PASSWORD@. * @MAIL_FROM_ADDRESS@/@MAIL_FROM_NAME@. * @MAIL_SMTP_AUTH@/@MAIL_SMTP_AUTOTLS@. * @NOTIFY_EMAIL@ — общий fallback-получатель уведомлений. * @CLIENTS_ERROR_NOTIFY_EMAIL@ — получатель email только об ошибках для @/clients/@. * @MANAGERS_ERROR_NOTIFY_EMAIL@ — получатель email только об ошибках для @/managers/@. * @DELIVERYPOINT_ERROR_NOTIFY_EMAIL@ — получатель email только об ошибках для @/deliverypoint/@. h2. Restboard * @RESTBOARD_ENDPOINT@ — URL Restboard. * @RESTBOARD_SITE@ — идентификатор сайта (включает отправку событий). * @RESTBOARD_TOKEN@ — токен для авторизации запросов в Restboard (если требуется). Если не задан, используется @API_TOKEN@/@TOKEN@. * @AUTO_NOTIFY_DISABLE@ — выключает автоматические уведомления. * @AUTO_NOTIFY_PAYLOAD_LIMIT@ — лимит данных в письмах. h2. Как проверить * Сверьте @.env@ с @.env.example@ и убедитесь, что заполнены обязательные @APP_*@ и @TOKEN@/@API_TOKEN@. * Вызовите @/version.php@ и убедитесь, что нет ошибок конфигурации. * Выполните @php bin/worker --validate-config@ и убедитесь, что конфигурация воркеров валидна. * Выполните @php bin/worker --list@ и убедитесь, что вывод содержит ожидаемые задачи. * Для @products@ дополнительно проверьте startup-лог worker: он должен содержать @task=products@, @pid@, @products_iblock_id@ и @app_env@; при invalid config исправьте deployment/env до любого @DLQ@ replay. * Для диагностики OOM проверьте, что в логах @products@ появляются @Products worker memory checkpoint@ и при достижении watermark процесс завершает lifecycle через @Products worker recycle requested@, а не через hard @Allowed memory size exhausted@.