Dokumentation · Technische Dokumentation
Technische Hinweise zu Suchaufträgen
Dieses Dokument beschreibt die Funktion Suchauftrag / Smart Stock Alerts: wie Besucher gespeicherte Suchen abonnieren, wie der Double-Opt-In-Ablauf funktioniert, wo Abonnements gespeichert werden und wie die Matching-Engine nach jedem Import ausgelöst wird.
Wann Sie dieses Dokument verwenden sollten
Lesen Sie dieses Dokument, wenn Sie Folgendes tun müssen:
- Fehlende oder doppelte Bestätigungs-E-Mails für Abonnements diagnostizieren.
- Verstehen, wie der Abgleich durchgeführt wird und welche Kriterien unterstützt werden.
- Ein Datenbank-Backup oder eine Migration planen, die die Abonnement-Tabelle enthält.
- Datenschutz und Datenaufbewahrungsverhalten rund um gespeicherte Suchen überprüfen.
Übersicht
Die Funktion ist in AS24CI\Search_Agent implementiert und:
- Rendert ein Abonnement-Formular (normalerweise innerhalb des Suchfilter-Bereichs), das per POST an die AJAX-Aktion
as24ci_search_agent_subscribesendet. - Validiert die E-Mail und die ausgewählten Kriterien, generiert ein 64-Zeichen-Bestätigungs-Token und speichert eine Zeile mit dem Status pending (ausstehend).
- Sendet eine Bestätigungs-E-Mail mit einem One-Click-Link, der das Token enthält. Das Klicken auf den Link aktiviert das Abonnement.
- Gleicht bei jedem erfolgreichen Fahrzeugimport jedes aktive Abonnement mit dem neuen Fahrzeug ab und sendet eine Benachrichtigungs-E-Mail, wenn die Kriterien übereinstimmen.
- Stellt in jeder Benachrichtigungs-E-Mail One-Click-Abmeldelinks bereit.
Ein Bot-Honeypot-Feld (as24ci_hp_field) verwirft offensichtliche Bot-Einsendungen stillschweigend, während es eine Erfolgsantwort zurückgibt, damit Bots keine Diagnoseinformationen erhalten.
Datenbank-Tabelle
Abonnements werden in <prefix>as24ci_search_agents gespeichert:
| Spalte | Typ | Hinweise |
|---|---|---|
id | BIGINT UNSIGNED AUTO_INCREMENT | Primärschlüssel. |
name | VARCHAR(255) DEFAULT '' | Optionaler Kontaktname. |
email | VARCHAR(255) NOT NULL | Validiert über is_email(). |
criteria | TEXT | JSON-kodierte, bereinigte Kriterien. |
token | VARCHAR(64) NOT NULL | 32-Byte random_bytes() Hex. |
frequency | VARCHAR(20) DEFAULT 'daily' | Platzhalter für Benachrichtigungshäufigkeit. |
status | VARCHAR(20) DEFAULT 'pending' | pending, active, inactive, paused. |
created_at | DATETIME DEFAULT CURRENT_TIMESTAMP | Abonnement-Zeitpunkt. |
confirmed_at | DATETIME NULL | Wird gesetzt, wenn der Besucher auf den Bestätigungslink klickt. |
Indizes: (status), (token). Die Schema-Version ist in der Option as24ci_search_agent_db_version gespeichert und dbDelta() wird bei Bedarf angewendet.
Unterstützte Kriterien
Search_Agent::sanitize_criteria() akzeptiert nur diese Whitelist von Schlüsseln; alle anderen mit dem Formular übermittelten Felder werden verworfen:
makemodelbody_typedrive_typeconditioncolormin_pricemax_pricemileage_maxstatus
Leere Werte und die literale Zeichenkette all werden als "keine Einschränkung" behandelt und aus den gespeicherten Kriterien entfernt, damit die Matching-Engine nicht zu stark filtert.
Mindestens ein Kriterium muss nach der Bereinigung übrig bleiben; andernfalls antwortet der AJAX-Endpunkt mit HTTP 422 und einer Fehlermeldung.
Schritt für Schritt: Abonnement-Ablauf
- Der Besucher wählt Kriterien im Suchfilter aus und sendet seine E-Mail über das Suchauftrags-Formular ab.
- Das Frontend sendet einen POST-Request an
as24ci_search_agent_subscribemit dem Nonceas24ci_search_agent. Fehlgeschlagene Nonces geben HTTP403zurück. - Das Plugin validiert die E-Mail und die Kriterien, generiert ein Token, fügt eine Zeile mit dem Status pending ein und sendet die Bestätigungs-E-Mail.
- Der Besucher klickt auf den Link (
?as24ci_sa_action=confirm&token=<token>). Der Handlerinitüberprüft die Token-Länge (muss genau 64 Zeichen lang sein), aktualisiert die Zeile auf active und setztconfirmed_at. - Bei erfolgreicher Bestätigung wird der Besucher mit
?as24ci_sa_msg=confirmedauf die Startseite weitergeleitet. Der Abmelde-Ablauf verwendet denselben Weiterleitungsmechanismus mitunsubscribed.
Schritt für Schritt: Matching-Ablauf
- Der Importer löst nach jedem Erstellen oder Aktualisieren
as24ci_vehicle_importedaus. Search_Agent::on_vehicle_imported()läuft mit der Priorität20.- Aktualisierungen werden übersprungen – nur neu erstellte Fahrzeuge lösen Benachrichtigungen aus, um zu verhindern, dass Abonnenten mit Spam überhäuft werden, wenn sich ein bestehendes Fahrzeug ändert.
- Aktive Abonnements werden geladen und ihre Kriterien werden mit den Taxonomien und dem Post-Meta des Fahrzeugs abgeglichen.
- Jede Übereinstimmung führt zu einer Benachrichtigungs-E-Mail, die über
wp_mail()gesendet wird und den Fahrzeugtitel, den Link, eine Zusammenfassung der Kriterien sowie die Abmelde-URL enthält.
Konfigurations-Referenz
Die Suchauftrags-Funktion selbst wird über den Plugin-Funktionsschalter as24ci_feature_search_agent aktiviert oder deaktiviert. E-Mail-Vorlagen verwenden Klartext und sind übersetzbar. Das Token-Format ist fest vorgegeben (64 Hex-Zeichen aus random_bytes(32)).
Die vollständige Liste der Plugin-Optionen finden Sie unter Speicherung von Optionen und Einstellungen.
Betriebliche Hinweise
- Der Endpunkt ist öffentlich (
wp_ajax_nopriv_*ist registriert), sodass sich auch anonyme Besucher anmelden können. Die Authentifizierung basiert auf dem AJAX-Nonce und dem Honeypot. - Tokens sind kryptografisch zufällig und werden als reiner Hex-Wert gespeichert. Behandeln Sie die Tabelle so, als ob sie personenbezogene Daten enthält: Name, E-Mail und die gespeicherten Suchkriterien des Besuchers.
- Aktualisierungen lösen keine Benachrichtigungen aus. Re-Importe bestehender Fahrzeuge (Preissenkung, Kilometeraktualisierung usw.) bleiben absichtlich stumm. Überprüfen Sie dies anhand der aktuellen Plugin-Version, falls Sie dieses Verhalten ändern möchten.
- Die Spalte
frequencyist im Schema für eine zukünftige Verwendung enthalten; die aktuelle Matching-Engine sendet Benachrichtigungen sofort bei jeder neuen Übereinstimmung. - Die Bestätigungs- und Abmelde-Endpunkte werden über
?as24ci_sa_action=...-Query-Parameter auf der Startseiten-URL geroutet – es werden keine benutzerdefinierten Rewrite-Rules eingeführt. - Die Tabelle wird bei der Deinstallation gelöscht (unabhängig vom Schalter Daten bei Deinstallation löschen), da sie personenbezogene Daten enthält. Siehe Verhalten bei Deinstallation und Bereinigung.
Fehlerbehebung
- Keine Bestätigungs-E-Mail erhalten – Überprüfen Sie den Spam-Ordner und verifizieren Sie anschliessend die SMTP-/Mailer-Konfiguration. Das Plugin verwendet
wp_mail()für alle Abonnement-Nachrichten. - Bestätigungslink meldet nichts – Das Token war leer, entsprach nicht genau 64 Zeichen oder die Zeile wurde bereits bestätigt. Der Endpunkt bricht stillschweigend ab, wenn das Token fehlerhaft ist; dies verhindert Enumeration-Angriffe.
- Abonnent erhält auch nach einem passenden Import keine Benachrichtigungen – Stellen Sie sicher, dass das Fahrzeug neu angelegt wurde (Aktualisierungen benachrichtigen nicht), das Abonnement auf
activesteht und mindestens ein Kriterium restriktiv genug ist, um einem bekannten Meta-Key oder Taxonomie-Begriff zugeordnet zu werden. - Viele doppelte Benachrichtigungen während eines Re-Imports – Dies sollte nicht vorkommen, da Aktualisierungen herausgefiltert werden. Ein vollständiger Re-Import, bei dem Beiträge von Grund auf neu erstellt werden, würde jedoch Benachrichtigungen auslösen. Planen Sie vollständige Re-Importe in verkehrsarmen Zeiten und ziehen Sie in Erwägung, den Suchauftrags-Schalter vorübergehend zu deaktivieren.
- AJAX-Abonnement gibt auch bei fehlerhaften Daten immer Erfolg zurück – Das Honeypot-Feld wurde ausgelöst. Stellen Sie sicher, dass das Formular nicht versehentlich das versteckte Feld
as24ci_hp_fieldausgefüllt hat.