Webhooks

    Mithilfe der Webhooks hat man die Möglichkeit, direkten Einfluss auf den Anfrage-Versand zu nehmen. Dafür bietet das Bakehouse bestimmte Hook Events, die nach dem Validieren, vor dem Versenden und nach dem Versenden aufgerufen werden.

    PreSend

    Mithilfe des preSend Hook kann man vor dem Versenden der Anfrage eingreifen.
    Er wird kurz vor dem Versand der Anfrage aufgerufen, wo die Daten bereits erfolgreich validiert wurden. Beispielsweise können durch preSend Hooks Attachements generiert und dem Mail hinzugefügt werden.

    Typoscript
    plugin.tx_bh.settings.contentElements.bhAnfrage.forms.[FORMKEY] { preSendWebhooks { [HOOKNAME] { # exakte Angabe der absoluten URL - bei einem Redirect werden die POST Parameter nicht mitgenommen # (z.B. passiert, wenn hier www weggelassen wird und in der .htaccess ein redirect auf www passiert) url = https://www.domainXY/schnittstelleXY.php # gibt an, ob URL ein Attachement zurückliefert addAttachements = 1 # (optional) 0 = produktiv, 1 = debug -> es werden die gesendeten Daten inklusive RückgabgeWerte, StatusCodes und Fehlermeldungen ausgegeben debug = 1 # (optional) wenn benötigt kann man den Request auch authorisiren auth { # momentan wird BasicAuth unterstützt type = basic username = [USERNAME] password = [PASSWORD] } # (optional) zusätzliche Daten als Key Value Pairs additionalData { [DATAKEY] = [DATAVALUE] } } #... weitere optionale Hooks } preSendConfirmationWebhooks { # Hook wird vor dem Versand des Confirmation Mails aufgerufen [HOOKNAME] } # Webhooks registrieren hooks { preSend { TYPO3\CooQuickanfrage\Hooks\HttpPostHook = preSend } } }

    Funktionsweise

    Sobald die Webhooks registriert sind, werden vor dem Versand alle registrierten Hooks (preSendWebhooks) aufgerufen und es wird ein POST Request an die angegebene URL gemacht. Mit addAttachements kann man bestimmen, dass die zurückgesendeten Daten in ein Attachement hinzugefügt werden sollen. Damit das Attachement gespeichert wird, braucht es drei Bedingungen, die auf Integrationsseite erfüllt werden sollen:

    • HTTP Status Code sollte 200 oder 201 sein (ist im Debug-Modus erkenntlich)
    • HTTP Content Type sollte entsprechend gesetzt sein
    • HTTP Content-Disposition sollte als type attachment angeben und den Dateinamen mitsenden
    PHP
    // Beispiel XML header( 'Content-Type: text/xml' ); header( 'Content-Disposition: attachment; filename="DateiXY.xml"' ); // hier entsteht der PHP Code für das Generieren der XML Datei return $myXML; // Beispiel JSON header( 'Content-Type: application/json' ); header( 'Content-Disposition: attachment; filename="test.json"' ); $arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5); echo json_encode($arr); // Beispiel PDF header( 'Content-Type: application/pdf' ); header( 'Content-Disposition: attachment; filename="test.pdf"' ); echo file_get_contents("test.pdf");

    Im Debug-Modus werden die Daten sowie Fehler und Warnungen ausgegeben. Das generierte Attachment wird auch angezeigt. Im Production Modus werden bei Fehler und Warnungen die Anhänge nicht an das Mail hinzugefügt.

    PostSend

    Setzt einen POST Request auf die angegebene URL ab. Mitgeliefert werden alle Formular Felder. Zusätzlich kann man noch weitere Felder in den Settings mitgeben. Das kann hilfreich sein, um Werte mitzugeben, die nicht für die Besucher:innen des Online-Projekts sichtbar sein sollen, wie zum Beispiel eine Interne ID der Gegenseite.

    Typoscript
    plugin.tx_bh.settings.contentElements.bhAnfrage.forms.[FORMKEY] { webhooks { [HOOKNAME] { # exakte Angabe der absoluten URL - bei einem Redirect werden die POST Parameter nicht mitgenommen # (z.B. passiert, wenn hier www weggelassen wird und in der .htaccess ein redirect auf www passiert) url = https://www.example.com/api/collectInquiriy.php # (optional) wenn benötigt kann man den Request auch authorisiren auth { # momentan wird BasicAuth unterstützt type = basic username = [USERNAME] password = [PASSWORD] } # (optional) zusätzliche Daten als Key Value Pairs additionalData { [DATAKEY] = [DATAVALUE] } # (optional) 0 = produktiv, 1 = es werden die gesendeten Daten inklusive dem Rückgabewert ausgegeben debug = 0 } #... weitere optionale Hooks } # Webhooks registrieren hooks { postSend { TYPO3\CooQuickanfrage\Hooks\HttpPostHook = onSend } } }

    Receiverlist - Hook

    Wenn das Anfrage-E-Mail aufgrund eines bestimmten Wertes an verschiedene Empfänger gesendet werden soll, kann das mittels TypoScript konfiguriert werden:

    Typoscript
    plugin.tx_bh.settings.contentElements.bhAnfrage.forms.[FORMKEY] { receiverlist { # wenn 1 wird die E-Mail Adresse im Settingsformular NICHT verwendet overrideReceiverFromSettings = 1 fields { # Feldname eines Feldes im Anfrageformular auf das geprüft werden soll [FIELDNAME] { values { # wenn ein Wert im angegebenen Feld übereinstimmt, werden diese E-Mail-Adressen verwendet [VALUE] = email@example.com; test@example.com [ANOTHERVALUE] = email@example.com } } [ANOTHERFIELDNAME] { values { [ANOTHERVALUE] = [EMAIL/EMAILS] [ANOTHERVALUE] = [EMAIL/EMAILS] } } } } hooks { postValidation { TYPO3\CooQuickanfrage\Hooks\ReceiverListHook = postValidation } } }