Verarbeitung von E-Mails mit JSON-Inhalt#
Motivation#
Manche Unternehmen bieten ihren Kunden ein Kontaktformular an, über das sie schon vorab strukturiert Daten abfragen. Viele Organisationen wollen ihr Allegra-System aus Sicherheitsgründen nicht direkt zugänglich machen und verschicken die Formulardaten per E-Mail.
Allegra ist in der Lage, strukturierte Daten aus einer E-Mail zu extrahieren, wenn diese in einem bestimmten Format darin enthalten sind.
E-Mail JSON-Format#
Die vom Kontaktformular zusammengestellte E-Mail sollte die Daten im folgenden JSON-Format bereitstellen:
{
"item": {
"<itemAttributeNameOrLabel1>":"<attributeValue1>",
"<itemAttributeNameOrLabel2>":"<attributeValue2>",
"...": "..."
},
"person": {
"firstName":"<firstName>",
"lastName":"<lastName>",
"userEmail":"<e-mail>",
"userName":"<loginname>",
"disableEmailNotification":"<booleanTrueOrFalse>",
"department":"<departmentLabel>",
"company": "<company>",
"locale":"<localeStr>",
"phone":"<phone>",
"address1":"<address1>",
"address2":"<address2>",
"city":"<city>",
"zipcode":"<code>",
"country":"<countrylabel>",
"countryISOCode":"<two-lettercountryISOCode>"
},
"token":"<theTokenFromSettings>"
}
Das JSON kann drei Hauptbestandteile enthalten:
item: enthält die Attribute des Elements. Die Schlüssel sind entweder attributierte Namen oder Bezeichnungen, wie in der Konfiguration Anpassen -> Vorgangsattribute definiert.
Die Werte sind immer die sichtbaren Werte der Felder, d. h. für Attribute vom Typ Liste muss die Bezeichnung und nicht die ID angegeben werden.
person: enthält die personenbezogenen Attribute. Die Bezeichnungen dieser Attribute sind fest vorgegeben und können nicht über die Allegra-Benutzeroberfläche geändert werden.
Die meisten Personenattribute sind optional, aber entweder
firstName
undlastName
oderuserName
sind erforderlich.Jeder Attributwert sollte ein String sein. Das gilt auch für alle listenbasierten Attributen wie z.B. der Abteilungsbezeichnung. Eine Ausnahme stellt,
disableEmailNotification
dar, das auch ein boolescher Wert sein kann (true oder false).Das Attribut
locale
, falls vorhanden, sollte entwederbrowser
oder ein gültiger Java-Locale-String wiede
oderde_DE
sein.Die Attribute
country
undcountryISOCode
schließen sich gegenseitig aus; es sollte nur jeweils eines von beiden verwendet werden.countryISOCode`
sollte, falls vorhanden, der offizielle zweistellige ISO-Code eines Landes sein.token: ein String-Wert. Erläuterung weiter unten unter
item.emailReceived.isJSON.tokenValue
Konfigurieren der JSON-Verarbeitung#
Die folgenden Werte können unter Serverkonfiguration -> Sonstige -> „Erweiterte Einstellungen bearbeiten“ eingestellt werden, um die JSON-E-Mail-Verarbeitung anzupassen.
Attribut-Schlüssel |
Bemerkung |
---|---|
item.emailReceived.isJSON.subjectKeyword |
Das Schlüsselwort, das im E-Mail-Betreff enthalten sein muss, um als JSON-Inhalt verarbeitet zu werden |
item.emailReceived.isJSON.fromAddress |
Die Absenderadresse der E-Mail, die als JSON-Inhalt verarbeitet werden soll |
item.emailReceived.isJSON.addNotOnFormAttributes |
Ob auch die aus dem JSON identifizierten Attribute hinzugefügt werden sollen, die nicht im Formular für den neuen Eintrag vorhanden sind; Standardeinstellung ist false (vernachlässige Attribute nicht im Formular) |
item.emailReceived.isJSON.addNotOnFormAttributes |
Ob auch die aus dem JSON identifizierten Attribute hinzugefügt werden sollen |
item.emailReceived.isJSON.tokenValue |
Wenn ein solcher Eintrag in der Konfiguration vorhanden ist, sollte das übermittelte JSON einen Token mit diesem <tokenvalue> enthalten, andernfalls wird die E-Mail als Spam behandelt und verworfen. Dies ist eine Sicherheitsmaßnahme, um zu vermeiden, dass neue Elemente von anderen Orten als dem CMS des Kunden erstellt werden. Wenn kein solcher Eintrag in der Konfiguration angegeben ist, sollte das Token nicht im JSON angegeben werden. |
Personen werden durch ihre E-Mail-Adressen identifiziert. Wenn eine Person nicht per E-Mail gefunden werden kann und die Registrierung neuer Benutzer erlaubt ist, wird ein neuer Benutzer registriert. Diese Person wird als Ersteller des neu erstellten Eintrags festgelegt.
Hinweise für Entwickler#
Der folgende Code wird von der Standard-E-Mail-Empfangsverarbeitung aufgerufen:
JSONParserService jsonParserService = SpringApplicationContext.getBean(
DefaultJSONParserService.class);
jsonParserService.applyJSONContent(inputBinding, emailRejector, true);
Der Wert „true“ für validateJSONEmailCondition
stellt sicher, dass die
Funktion nur aufgerufen wird, wenn entweder ein Betreff-Schlüsselwort
(item.emailReceived.isJSON.subjectKeyword
) oder eine Absenderadresse
(item.emailReceived.isJSON.fromAddress
) übereinstimmt.
Wenn keine der JSON-Vorlagen übereinstimmt, kann der obige Code alternativ von
Skripten für Workflow-Aktivitäten aufgerufen werden, wobei validateJSONEmailCondition
auf „false“ gesetzt wird, wenn nach der Verarbeitung des JSON-Inhalts noch weitere
Nachbearbeitungen für das Element vor dem Speichern erforderlich sind.