PhoneSpamDetect — валидация телефонов в формах MODX без API-ключей

Коллеги, знакомая картина: в форму прилетает «телефон» вроде 12345, 00000000000 или номер из другой страны — а FormIt его спокойно проглатывает. Менеджер перезванивает в пустоту, CRM засоряется, в отчётах красивые цифры, а реальных заявок меньше.
PhoneSpamDetect — дополнение для MODX Revolution 3.x, которое проверяет телефон до отправки формы. Под капотом — Google libphonenumber: та же логика, что используют крупные сервисы, но локально на вашем сервере. Без API-ключей, без внешних запросов и без ежемесячных лимитов.
Один preHook для FormIt — и контактные формы, заявки на звонок и лид-магниты перестают принимать явный мусор.
Что умеет
Локальная валидация
Проверяются формат номера, его валидность для региона и нормализация в E.164. Библиотека уже входит в пакет — на продакшене не нужен composer install.
Один preHook — phoneSpamBlock
Добавляете в &preHooks FormIt. Работает с обычными формами, FetchIt и SendIt — везде, где на сервере вызывается FormIt.
Фильтр по странам
По умолчанию разрешён RU. Нужны несколько рынков — укажите список ISO-кодов: RU,KZ,BY. Нужен международный сайт — оставьте настройку пустой: пройдут любые валидные номера.
Нормализованный номер в плейсхолдерах
Сниппет isSpamPhone отдаёт E.164, регион, причину блокировки и нормализованный номер — удобно для писем, CRM и отладки.
Настраиваемое сообщение и лог
Текст для пользователя при блокировке — в системных настройках. Заблокированные попытки можно писать в журнал MODX.
Как подключить за минуту
[[!FormIt?
&preHooks=`phoneSpamBlock`
&hooks=`email,redirect`
&validate=`name:required,phone:required,email:required:email`
]]
Если поле телефона называется не phone, задайте имя в настройке phonespamdetect_phone_field или параметром phoneField у preHook.
Хотите и ботов отсечь, и телефоны проверить — ставьте вместе с CrawlerDetect:
&preHooks=`crawlerDetectBlock,phoneSpamBlock`
Что блокируется
- номера с невалидным форматом или длиной;
- номера из страны, которой нет в phonespamdetect_allowed_regions;
- мусорные заявки до отправки письма и записи в CRM.
Настройки (namespace phonespamdetect)
- phonespamdetect_allowed_regions — RU или RU,KZ,BY;
- phonespamdetect_default_region — регион для номеров без «+» (по умолчанию RU);
- phonespamdetect_phone_field — имя поля формы;
- phonespamdetect_block_message — текст при блокировке;
- phonespamdetect_log_blocked — логирование попыток.
Стек
- MODX Revolution 3.x
- PHP 8.2+
- FormIt
- giggsey/libphonenumber-for-php (встроен в пакет)
Если тестировали на своих формах — делитесь в комментариях, какие кейсы ещё стоит закрыть в следующих версиях.
Поблагодарить автора
Отправить деньги
0