Публичный endpoint без авторизации
POST /WebForm и GET /WebFormConfig с noAuth: true; conf-endpoint отдаёт только публичные настройки капчи.
Приём заявок с публичных лендингов в Lead с reCAPTCHA, honeypot, rate limit и дедупликацией.
POST /WebForm и GET /WebFormConfig с noAuth: true; conf-endpoint отдаёт только публичные настройки капчи.
OriginMatcher сверяет HTTP Origin с шаблонами вида https://*.crmp.kz; * становится regex [^/]+, не пропускает поддельный URL.
Скрытое поле website отбрасывает ботов; reCAPTCHA через Integration WebFormCaptcha и siteverify-API.
WebFormRateLimit с composite-индексом ipAddress+createdAt; ScheduledJob CleanupWebFormRateLimit ежедневно в 03:00.
При совпадении email или phone заявка пишется Note в ленту существующего Lead — без фрагментации истории клиента.
yamClientId, gid, utmSource/Medium/Campaign/LandingPage, referrer, siteSessionId; пишутся в Lead через hasAttribute + всегда в description.
Не добавляет полей в Lead, не меняет enum source, не трогает layout — работает одинаково на любой инсталляции.
Модуль BPM2B Web Form Receiver принимает формы со статических лендингов (типично — Astro) и создаёт Lead в платформе BPM2B. Из коробки — шесть слоёв защиты (Origin whitelist, honeypot, валидация, reCAPTCHA, rate limit, дедупликация), сохранение полного аналитического контекста и аккуратная работа с дубликатами без фрагментации истории клиента.
POST /WebForm (приём заявки) и GET /WebFormConfig (публичная часть настроек капчи без секретного ключа); регистрируются с noAuth: true в routes.json.OriginMatcher сверяет HTTP-заголовок Origin со списком масок из metadata (app.webFormReceiver.allowedOriginPatterns); * в маске превращается в regex [^/]+ — не пропустит хитрый https://evil.com/?x=crmp.kz.website) отбрасывает заполненные ботами формы; обязательны email, sourceSiteCode, name.WebFormCaptcha хранит captchaType (none / recaptcha), siteKey, secretKey; verify через https://www.google.com/recaptcha/api/siteverify; HTTP-вызовы идут через ApiRequest из bpm2bApiLog для логирования.WebFormRateLimit с составным индексом ipAddress + createdAt; параметры rateLimit.windowMinutes и rateLimit.maxRequests в metadata; ScheduledJob CleanupWebFormRateLimit ежедневно в 03:00 удаляет записи старше cleanupOlderThanHours.emailAddress ИЛИ phoneNumber новая заявка не создаёт второй Lead — вместо этого публикуется Note (type=Post) в ленту существующего Lead с JSON-дампом payload.hasAttribute (если поле существует на конкретной инсталляции) и всегда сохраняются в description как JSON.Lead.source (всегда «Web Site») и не трогает layout — на чистой инсталляции аналитика просто не записывается, зато всегда лежит в description.Модуль предназначен для случаев, когда лендинги живут отдельно от платформы (например, Astro-сайты на CDN), а заявки должны попадать в CRM как штатные Lead-ы — с защитой от ботов и накоплением аналитики. Зависит от bpm2bApiLog (логирование внешних HTTP-запросов к siteverify).
Покажем работу системы на ваших данных за 30 минут. Расскажем, как окупится в вашей отрасли, и подберём конфигурацию под ваши процессы.