# WordPress / Contact Form 7 + ShinrAI

Ausgewählte Formularfelder und Anhänge vor dem Export an einen Webhook schützen. Das Plugin steht unter GPL-2.0-or-later und kann kostenlos installiert werden. Die ShinrAI-Verarbeitung benötigt einen API-Schlüssel und Guthaben. Direkte ZIP-Installation ist möglich; eine Marktplatzfreigabe ist noch offen.

## Installieren und verbinden

1. Contact Form 7 installieren. Danach `shinrai-cf7-0.1.0.zip` unter **Plugins → Installieren → Plugin hochladen** installieren und aktivieren. PHP ab 8.1 mit Sodium ist erforderlich.
2. **Einstellungen → ShinrAI** öffnen. ShinrAI-Schlüssel, HTTPS-Zieladresse und optional einen Bearer-Token des Ziels eintragen.
3. Für jedes gewünschte Formular die Exportfelder auswählen. Bei Anhängen zusätzlich den Export aktivieren und das entsprechende Dateifeld auswählen. Einstellungen speichern.
4. **Verbindung testen** und anschließend **Schutzbeispiel ausführen**. Das synthetische Beispiel verbraucht eine geringe Menge Serviceguthaben.
5. Ein Testformular absenden. Export-Warteschlange und Ziel prüfen. Erfolgreiche Exporte zeigen **Zugestellt**. Leere Schlüsselfelder behalten gespeicherte Zugangsdaten bei.

Geschützt werden ausschließlich die konfigurierten Webhook-Exporte. Normale Contact-Form-7-E-Mails, lokale Speicherung, andere Plugins und unabhängige KI-Verbindungen behalten ihr Verhalten. Soll eine E-Mail selbst geschützt sein, das Ziel aus dem geschützten Export versenden lassen und den separaten Versand mit Originaldaten in der Formularkonfiguration deaktivieren.

## Datenformat und Dokumente

Das Ziel erhält JSON mit `submission_id`, `form_id`, `protected_text` und `attachments`. Jeder Anhang enthält einen neutralen Dateinamen, `content_type: application/pdf` und `data_base64`. Originaldateinamen, Quellpfade, IP-Adressen, Browserkennungen und Zuordnungstabellen werden nicht exportiert. Ausgewählte Felder werden als beschrifteter Text zusammengeführt; die Ausgabe ist kein CRM-Datensatz mit einzeln erhaltenen Feldern.

Unterstützte Eingaben: TXT, PDF und DOCX, einschließlich unterstützter Scans und eingebetteter Bilder mit deutscher und englischer Texterkennung. Höchstens fünf Anhänge und insgesamt 10 MB Eingabe pro Formular; ausgewählter Text bis 125.000 Zeichen. Pro Dokument gelten zusätzlich 100 Seiten, fünf Minuten Verarbeitungszeit und 40 MB Ausgabe. PDF-Kopien sind abgeflacht. Nicht vollständig verarbeitbare Dokumente stoppen den Export. Originalanhänge werden nicht ersatzweise versendet.

## Zustellung und Wiederherstellung

Geplante WordPress-Aufgaben verarbeiten die Warteschlange. Bei wenig besuchten Websites einen System-Scheduler als WordPress-Dienstkonto einrichten, beispielsweise mit `wp --path=/pfad/zu/wordpress shinrai process --quiet` alle 5–60 Sekunden. Jeder Aufruf erledigt einen Schritt; der nächste setzt gespeicherten Fortschritt fort. Das Labor enthält einen eigenen Scheduler-Container.

Auch Formulartext wird über einen idempotenten Dokumentauftrag geschützt. Wiederholte Uploads und Ergebnisdownloads verursachen keine doppelte ShinrAI-Abrechnung. Die verschlüsselte Warteschlange bleibt bei Neustarts erhalten. Webhook-Zustellung kann wiederholt werden, wenn eine Antwort verloren geht. Das Ziel muss Wiederholungen anhand des Headers `Idempotency-Key` oder von `submission_id` erkennen und deduplizieren.

Vorübergehende Verbindungs-, Ratenlimit- und Serverfehler werden mit wachsendem Abstand bis zu achtmal pro Schritt versucht. Ungültige Schlüssel oder nicht verarbeitbare Dokumente erscheinen als Fehler. Schlüssel korrigieren und **Wiederholen** wählen; bestehende Aufträge benötigen dieselben Service- und Zieladressen. **Löschen** entfernt einen Export, sobald kein Schritt ihn bearbeitet. Nach Zustellung wird der Inhalt sofort gelöscht. Geplante Bereinigung entfernt unerledigte verschlüsselte Inhalte nach 24 Stunden und inhaltsfreie Statuszeilen nach sieben Tagen. Nach einem Scheduler-Ausfall setzt die Bereinigung beim Wiederanlauf fort. Höchstens 100 unerledigte Eingänge werden gespeichert.

Temporäre Inhalte und Zugangsdaten sind mit einem aus den WordPress-Authentifizierungsschlüsseln abgeleiteten Schlüssel verschlüsselt. Diese WordPress-Schlüssel mit der privaten Wiederherstellungskonfiguration aufbewahren. Ein Wechsel macht vorhandene verschlüsselte Einstellungen und Warteschlangeninhalte unlesbar. Der entfernte Service hat eigene verschlüsselte Aufbewahrung und authentifizierte Löschung.

## Fehlerbehebung

Vor Tests speichern. `http_401`/`http_403`: Schlüssel der fehlgeschlagenen Verbindung prüfen. `http_429`: Guthaben und Ratenlimits prüfen. `connection_failed`: Erreichbarkeit und Scheduler prüfen. `document_protection_failed`: Format, Lesbarkeit und Grenzen prüfen. `queue_full`: Offene Exporte bearbeiten. `invalid_encrypted_state`: Ursprüngliche WordPress-Authentifizierungsschlüssel wiederherstellen. Fehlermeldungen enthalten absichtlich keine Kundendaten.

Referenz: WordPress 7.1, Contact Form 7 6.1.7 und PHP 8.3, festgelegt in `lab.compose.yaml`. Die Abnahme läuft, bis Browser-, Anhangs-, Wiederholungs- und unabhängige Installationstests im QA-Bericht bestätigt sind. HTTP-Freigaben und E-Mail-Erfassung des Labors gehören nicht zur Kundeninstallation.

## Geprüftes Beispiel

Die [Screenshots](screenshots/) stammen aus der tatsächlich installierten Testumgebung mit synthetischen Daten. Ersatzwerte können bei jedem Lauf anders aussehen. Die gemeinsamen Beispieldateien und ein ausführbarer Verbindungstest liegen im Ordner `../fixtures/` des Downloadpakets.
