{{KEY}}, которые multi-agent генератор
наполняет контентом от агентов (scout/serp/content/designer/cro). На каждый сайт выбирается
один шаблон (по умолчанию случайный из активных).
| Шаблон | Статус | Размер | Описание | Действия |
|---|---|---|---|---|
| Загрузка... | ||||
multi-agent-build через POST /api/pipeline/run. Лог пишется в /data/pipeline-logs/<slug>.log (каждая строка log() функции). UI делает incremental fetch через GET /api/pipeline/log/<slug>?offset=N каждые 1.5 сек - получает только новые байты, никакого JSON парсинга.
Лог пуст. Введи запрос и жми Запустить.
{{KEY}} → источник → значение. Endpoint: /api/macros-debug/values/<slug>
{{KEY}}Все макросы реально подставляются в scripts/template-builder-v3.js (функция buildFromTemplate). Если значения в content.json нет - используется fallback (показан после "→ default:").
{{TITLE}} ← content.meta_title → default: "{HERO_H1} - {CITY}"{{META_DESCRIPTION}} ← content.meta_description → default: generic{{CANONICAL}} ← config.canonical_url{{YEAR}} ← текущий год{{COMPANY_NAME}} ← content.company_name || config.contacts.company{{BRAND_INITIAL}} ← первая буква компании{{PHONE}}, {{PHONE_RAW}}, {{PHONE_DISPLAY}} ← config.contacts{{EMAIL}}, {{WHATSAPP}}, {{TELEGRAM}}{{ADDRESS}}, {{CITY}}{{SITE_ID}}, {{SITE_SLUG}}{{COLOR_PRIMARY}}, {{COLOR_ACCENT}}, {{COLOR_COOL}} - только из 4 вариантов: purple (#7c3aed), blue (#2563eb), green (#10b981), orange (#f97316). Берётся из config.color_variant.{{HERO_EYEBROW}} ← content.hero.eyebrow{{HERO_H1}} ← content.hero.h1{{HERO_SUB}} ← content.hero.subtitle{{CTA_PRIMARY}}, {{CTA_SECONDARY}}{{HERO_OFFER_BADGE}}, {{HERO_OFFER_BADGE_SUB}}{{METRIC_1_VAL/LABEL}}, {{METRIC_2_VAL/LABEL}}, {{METRIC_3_VAL/LABEL}} ← content.stats.items[0..2]{{CLIMATE_ID/TEMP/DESC}} - виджет в правом углу hero{{HERO_VISUAL_HTML}} ← buildHeroVisualHtml() - визуал hero (генерится из _design){{PAIN_TITLE/SUB}}, {{SOLUTION_TITLE/SUB}}, {{PRODUCTS_TITLE/SUB}}, {{FEATURES_TITLE/SUB}}, {{PROCESS_TITLE/SUB}}{{COMPARISON_TITLE/SUB}}, {{COMPARISON_COL_FEATURE}} (хардкод "Параметр"), {{COMPARISON_COL_THEM}} (хардкод "Типичный исполнитель"), {{CASES_TITLE/SUB}}, {{TEAM_TITLE/SUB}}, {{GEO_TITLE/SUB}}, {{TECH_TITLE/SUB}}{{GUARANTEE_TITLE/SUB}}, {{TESTIMONIALS_TITLE/SUB}}, {{CERT_TITLE/SUB}}, {{PRICING_TITLE/SUB}}{{EXPERT_TITLE/SUB}}, {{CALC_TITLE/SUB}}, {{FAQ_TITLE/SUB}}, {{BLOG_TITLE/SUB}}, {{CTA_TITLE/SUB}}{{TRUST_ITEMS}} ← buildTrustItems(content.trust_bar){{TRUST_BADGES_HTML}} ← buildTrustBadgesHtml(content.trust_badges){{PAIN_CARDS}} ← buildPainCards(content.pain_points){{SOLUTION_CARDS}} ← buildSolutionSteps(content.solution){{PRODUCT_CARDS}} ← buildProductCards(content.products){{FEATURE_CARDS}} ← buildFeatureCards(content.features){{PROCESS_STEPS}} ← buildProcessSteps(content.how_it_works || content.process){{STATS_CARDS}} ← buildStatsCards(content.stats){{COMPARISON_ROWS}} ← buildComparisonRows(content.comparison){{CASE_CARDS}} ← buildCaseCards(content.cases){{TEAM_CARDS}} ← buildTeamCards(content.team){{GEO_ITEMS}} ← buildGeoItems(content.geography){{TECH_CARDS}} ← buildTechCards(content.technology){{GUARANTEE_CARDS}} ← buildGuaranteeCards(content.guarantee){{TESTIMONIAL_CARDS}} ← buildTestimonials(content.testimonials){{CERT_CARDS}} ← buildCertCards(content.certs || content.certificates){{PRICING_CARDS}} ← buildPricingCards(content._site_offers || content.pricing){{EXPERT_ARTICLE_HTML}} ← content.expert_article.html (long-form EEAT){{CALCULATOR_SECTION}} ← buildCalculatorSection(content.calculator){{MULTI_STEP_FORM_SECTION}} ← buildMultiStepFormSection(content.multi_step_form){{FAQ_ITEMS}} ← buildFaqItems(content.faq){{BLOG_CARDS}} ← buildBlogCards(content.blog){{SCHEMA_FAQ}} ← buildSchemaFAQ(content.faq) - FAQPage JSON-LD для Google rich results{{SCHEMA_PRODUCTS}} ← buildSchemaProducts(content.products) - ItemList JSON-LD{{NAV_CTA_TEXT}}, {{MOBILE_CTA_TEXT}}, {{CTA_BUTTON}} ← content.cta.button_text{{FOOTER_ABOUT}} ← content.footer.about{{FOOTER_SERVICES}} ← content.footer.services (массив){{FOOTER_CITIES}} ← content.footer.cities (массив){{EXIT_POPUP_EYEBROW}}, {{EXIT_POPUP_TITLE}}, {{EXIT_POPUP_SUBTITLE}}, {{EXIT_POPUP_BUTTON}} ← content.lead_magnetСекции обёрнутые в <!-- SKIP-IF-EMPTY:KEY -->...<!-- /SKIP-IF-EMPTY:KEY --> автоматически удаляются если их CARDS пустые. Применяется к: FEATURE_CARDS, CASE_CARDS, TEAM_CARDS, GEO_ITEMS, TECH_CARDS, GUARANTEE_CARDS, TESTIMONIAL_CARDS, CERT_CARDS, BLOG_CARDS, COMPARISON_ROWS, EXPERT_ARTICLE_HTML.
Бэкенд: POST /api/pipeline/run → файл в /data/queue/ → pipeline-watcher.js (локально) подхватывает каждые 10 сек → запускает multi-agent-build.js. Прогресс пишется в /opt/webtrust-data/pipeline-status/<slug>.json на Hetzner, читается через GET /api/pipeline/realtime.
/tmp/multi-agent-build/<slug>/scout.jsonserp.jsoncontent.jsondesign.jsoncro.jsonmerged.jsontemplate-builder-v3.js подставляет ВСЕ макросы в _tpl-main/index.htmlpage-builder.js/tmp/multi-agent-build/<slug>/site/ → /opt/sites/ready/<slug>/ на Hetznerhttps://webtrust.top/sites/<slug>/visual-audit.js прогоняет визуальные проверкиaudits.json в той же папке
Не участвуют в pipeline (заняты другими задачами): aso (ASO), media (PPC), analytics (метрики), deploy (прод. инфра). Все доступны через assign_task.
template-builder-v3.js и page-builder.js - не агенты, а скрипты, которые подставляют макросы и собирают финальный HTML.