76 lines
6.1 KiB
Plaintext
76 lines
6.1 KiB
Plaintext
=== CF7 Spam → Telegram ===
|
||
Contributors: vbryzgalov
|
||
Tags: contact-form-7, telegram, spam, flamingo
|
||
Requires at least: 6.0
|
||
Tested up to: 6.9
|
||
Requires PHP: 7.4
|
||
Stable tag: 1.2.1
|
||
License: GPLv2 or later
|
||
|
||
Пересылает в Telegram-группу submissions CF7, помеченные как спам, с эвристической оценкой «похоже клиент / неясно / похоже спам».
|
||
|
||
== Description ==
|
||
|
||
Решает узкую задачу: среди отсечённого Akismet/Honeypot спама иногда встречаются реальные заявки клиентов. Плагин пересылает всё содержимое таких submissions в общую TG-группу с пометкой классификации (🟢/🟡/🔴), причиной попадания в спам, IP/UA, UTM.
|
||
|
||
Требует установленных плагинов Contact Form 7 и Flamingo.
|
||
|
||
== Installation ==
|
||
|
||
1. Загрузите папку `cf7-spam-to-telegram` в `/wp-content/plugins/`.
|
||
2. Активируйте плагин в меню «Плагины».
|
||
3. Откройте «Настройки → CF7 Spam → TG», укажите Bot Token и Chat ID группы, сохраните.
|
||
4. Нажмите «Отправить тестовое сообщение», чтобы проверить.
|
||
|
||
== Changelog ==
|
||
|
||
= 1.2.1 =
|
||
* Fix: Cron-события `cf7stg_dispatch` / `cf7stg_cleanup` теперь самовосстанавливаются. `Plugin::boot()` на каждой загрузке вызывает `Activator::ensure_scheduled()` — если событие пропало (PUC self-update без `register_activation_hook`, ручной `wp_clear_scheduled_hook`, обрезанный wp_options.cron), оно немедленно пересоздаётся. До фикса очередь могла молча застревать на дни без признаков ошибки (sent-24h=0, failed=0).
|
||
* Fix: Подписан хук `upgrader_process_complete` — после plugin update WordPress повторно вызывает `Activator::install_table()`, `seed_silent_drop_options()` и `ensure_scheduled()`. Без guard_requirements (чтобы не убить admin при апгрейде).
|
||
|
||
= 1.2.0 =
|
||
* New: Self-hosted plugin updates from Gitea via Plugin Update Checker v5.6.
|
||
WordPress admin shows updates automatically (checked hourly). Source:
|
||
https://git.netranking.ru/bryzgalov/cf7-spam-to-telegram/raw/branch/main/wp-plugin-info.json
|
||
* Dev: release.sh — one-shot release script (bump → release commit → push →
|
||
build clean zip via git archive --worktree-attributes → Gitea release + asset
|
||
upload → regenerate wp-plugin-info.json with actual download_url → JSON commit
|
||
+ push). Two fast-forward commits per release, no force-push.
|
||
* Dev: .gitattributes export-ignore covers tests/, docs/, composer.*, phpunit.xml,
|
||
.beads/, .claude/, CLAUDE.md, AGENTS.md, release.sh, dist/, .git* — git archive
|
||
produces clean zip without dev files.
|
||
* Dev: .gitignore adds dist/ for local release build artifact.
|
||
|
||
= 1.1.0 =
|
||
* New: Silent drop — заявки, удовлетворяющие hard-rule (нет позитивных
|
||
сигналов + короткое латинское имя или ≥3 полей-плейсхолдеров) или
|
||
score ≤ -5, не отправляются в TG. По умолчанию при установке/апгрейде
|
||
включён dry-run режим (помечает сообщение «[БЫЛО БЫ DROPPED]»);
|
||
реальный дроп включается чекбоксом в настройках.
|
||
* New: Settings → блок «Silent drop» с переключателями dry-run, hard-rule,
|
||
score-порогом и статистикой счётчиков.
|
||
* New: Dashboard widget показывает количество дропов.
|
||
* New: filter `cf7stg_should_enqueue` для внешних override-правил.
|
||
* New: filter `cf7stg_hard_drop_rules` для точечного отключения hard-rules.
|
||
|
||
= 1.0.4 =
|
||
* Fix: PhoneParser больше не склеивает цифры из соседних полей при flatten через `\n` / `\t`.
|
||
* Fix: Flamingo `_from_email` используется как `your-email` только если содержит `@`; `_from_name` больше не маппится.
|
||
* New: `FieldDetector` — fallback-поиск имени и e-mail по значению, когда на форме нестандартные ключи полей (`text-211`, `name_user` и т.п.).
|
||
* UX: Dashboard-виджет «CF7 Spam → Telegram» отображается всегда (статус очереди), а не только при ошибках.
|
||
* UX: В ретроспективной выгрузке по умолчанию `0` дней (без ограничения по дате).
|
||
|
||
= 1.0.3 =
|
||
* Fix: Убрана `tel:`-кнопка в inline_keyboard (Telegram Bot API отклонял `tel:` URL с HTTP 400).
|
||
* Fix: HTTP 4xx ответы Telegram (кроме 429 rate-limit) теперь классифицируются как permanent — записи сразу помечаются failed, без 5 бесполезных retry.
|
||
* Fix: `FlamingoHelper::extract_fields` берёт значения из `_field_*` мета, а не из пустого `_fields`-массива.
|
||
|
||
= 1.0.2 =
|
||
* Fix: Activator регистрирует `cron_schedules` фильтр до `wp_schedule_event` — без этого кастомный интервал `cf7stg_every_minute` не существовал в момент активации и cron никогда не срабатывал.
|
||
* Fix: Autoloader корректно маппит классы с `_` (например, `Settings_Page`, `Interface_Spam_Source`) в файлы с дефисами.
|
||
* Fix: Поправлен неверный Punycode-пример в документации.
|
||
* Fix: Honeypot теперь hard override → label=spam (weighted -5 был недостаточен для перевеса положительных сигналов).
|
||
|
||
= 1.0.0 =
|
||
* Первый релиз.
|