Überwachung von E-Commerce-Bestellungen: Ein E-Commerce-Unternehmen kann einen Webhook einrichten, der jedes Mal ausgelöst wird, wenn eine Bestellung eingeht. Sobald eine Bestellung eingegangen ist, kann das Unternehmen einen Workflow starten, der die Verarbeitung der Bestellung automatisiert.
Überwachung von Formulareingaben: Eine Marketing-Agentur kann einen Webhook einrichten, der jedes Mal ausgelöst wird, wenn ein Benutzer ein bestimmtes Formular auf ihrer Website ausfüllt. Sobald das Formular ausgefüllt wurde, kann die Agentur einen Workflow starten, der das eingegangene Lead automatisch in ihre CRM-Software einträgt.
Überwachung von Support-Tickets: Ein Support-Team kann einen Webhook einrichten, der jedes Mal ausgelöst wird, wenn ein Benutzer ein Support-Ticket öffnet. Sobald ein Ticket geöffnet wurde, kann das Support-Team einen Workflow starten, der das Ticket automatisch an den zuständigen Mitarbeiter zuweist.
Überwachung von Finanztransaktionen: Eine Finanz-App kann einen Webhook einrichten, der jedes Mal ausgelöst wird, wenn eine Transaktion stattfindet. Sobald eine Transaktion stattgefunden hat, kann die App einen Workflow starten, der den Benutzer automatisch über die Transaktion benachrichtigt.
Dies sind nur einige Beispiele für den Einsatz von Webhooks. In Wirklichkeit gibt es viele weitere Anwendungen, bei denen Webhooks eingesetzt werden können, um Workflows zu automatisieren und Anwendern bessere Kontrolle und Überwachung über Ereignisse in ihren Anwendungen und Systemen zu bieten.
Unser Workflow benötigt ein Formular, um einen Webhook oder API Aufruf zu empfangen, da jeder Prozess in Formular-bezogene Workflow-Schritte eingebettet ist. Das bedeutet, dass jede Ereignismeldung, die in unserem Workflow ausgelöst werden soll, zunächst über ein Formular aktiviert werden muss. Dies ermöglicht es uns, die Daten, die im Zusammenhang mit dem Ereignis erfasst werden, in einer strukturierten und übersichtlichen Form zu verarbeiten. Der Webhook oder API Aufruf wird genutzt, um Daten an brandsmill zu übertragen, und im weiteren Prozess verarbeitet zu werden. Ihr könnt das über ein Webformular gut vorbereiten und ohne aktive externe Einbindung testen.
Du benötigst von brandsmill:
zum Mandante die Nr. : für die clientID=??
findest du im Auswahlmenue zu: Adminstration Einstellungen unten links
zum Mandanten den WEB API Secure Token: für den apiSecureToken = ??
findest du über Adminstration Einstellungen im Unternehmen unter Zugriffsrechte unten links (wenn leer einen Token definieren)
die ID des Formulars: für die formID = ??
findest du unter BPM im Formular - Webformular unter selbigen Tab in der angzeigten URL die Nr. hinter id.
(nicht für den webhook aber für den API Aufruf )
die Formular Felder: für die formFields = ??
findest du unter BPM im Formular unter Layout
In den folgenden Beispielen wird ein Webhook eingerichtet per URL ( of als Webhook in Systemen konfigurierbar)
Um eine Ereignismeldung an brand's mill zu senden, muss die brand's mill Webhook URL als Empfänger in dem System (nicht bei brand's mill) hinterlegt werden, in dem das Ereignis ausgelöst wird. Die URL lautet: https://www.brandsmill.de/webhook?m=clientID&f=formID&t=apiSecureToken. Der Webhook wird gestartet und überträgt dann JSON-Daten mit den angegebenen Parametern. Beachte, dass der Inhalt nicht auf die Felder im Formular aufgeteilt wird. Stattdessen wird ein einziges Feld erstellt, das den gesamten Inhalt des JSON enthält. Dieses Feld "work$textContainer" kann im Workflow verarbeitet werden."
Beispiel die API übermittelt das JSON. So könntest Du deren Inhalt wie folgt lesen:
var json = JSON.parse(work$textContainer.replace(/'/g, '"'));
Ein Webhook in einem externen System könnte wie folgt programmiert sein. ... TypeScript Beispiel ohne Parameter
// StartFromJsonWebhookAPI.ts
export async function startFormJsonWebhookAPI() {
try {
let clientID = "??";
let apiSecureToken = "??";
let formID = "??";
let dataJSON = [];
dataJSON.push({name: "John Doe"});
dataJSON.push({email: "john.doe@example.com"});
let apiUrl = "http://www.brandsmill.de/webhook?m=" + clientID + "&f=" + formID + "&t=" + apiSecureToken;
try {
const response = await fetch(apiUrl, {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(dataJSON)
});
if (!response.ok) {
throw new Error(`Webhook call failed with status code ${response.status}`);
}
const result = await response.json();
console.log(`Webhook call succeeded: ${JSON.stringify(result)}`);
} catch (error) {
console.error(`Webhook call failed: ${error}`);
}
} catch (error) {
console.error("Error occurred while sending the form data:", error);
}
}
In den folgenden Beispielen wird die brandsmill API über TypeScript, JavaScript, Java angesprochen. So könnt Ihr Eur System, Website über die Programmierung einbinden.
// StartFormJsonAPI.ts
import axios from "axios";
export async function startFormJsonAPI(): Promise<void> {
try {
let clientID = "??";
let apiSecureToken = "??";
let formID = "??";
let formFields = [];
formFields.push({F279: "value for field F279.."});
formFields.push({F516: "value for field f52..."});
let apiUrl = "https://brandsmill.de/api";
const data = {
securetoken: apiSecureToken,
client: clientID,
form: formID,
fields: formFields
};
const axiosInstance = axios.create({
headers: {'Content-Type': 'application/json'}
});
const response = await axiosInstance.post(apiUrl, data);
if (response.status === 201) {
console.log("Workflow started.");
} else {
console.log(`Response status: ${response.statusText}`);
}
} catch (error) {
console.error("Error occurred while sending the form data:", error);
}
}
Die Funktion startFormJsonAPI nutzt die Axios-Bibliothek, um eine POST-Anfrage an eine API zu senden. Die Anfrage enthält Daten für ein Formular, dessen Workflow gestartet werden soll.
Die Funktion nimmt keine Parameter an.
Die Funktion liefert keinen expliziten Rückgabewert zurück, aber es wird ein Promise zurückgegeben, das void verspricht, wenn die Funktion erfolgreich ausgeführt wurde.
Die Funktion kann in einem anderen Teil des Codes wie folgt verwendet werden:
await startFormJsonAPI();
Die Funktion ist so konfiguriert, dass folgende Daten in der Anfrage enthalten sind: siehe ??
clientID: Ein String mit der ID des Clients.
apiSecureToken: Ein String mit dem Secure Token des Clients.
formID: Ein String mit der ID des BPM Webformulars.
formFields: Liste der Felder die im BPM Webformular gefüllt werden.
<script>
function startFormJsonAPI() {
let clientID = "??";
let apiSecureToken = "??";
let formID = "??";
let formFields = [];
formFields.push({F279: "value for field F279.."});
formFields.push({F516: "value for field f52..."});
let apiUrl = "https://brandsmill.de/api";
const data = {
securetoken: apiSecureToken,
client: clientID,
form: formID,
fields: formFields
};
const xhr = new XMLHttpRequest();
xhr.open("POST", apiUrl, true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.onreadystatechange = function() {
if (this.readyState === XMLHttpRequest.DONE && this.status === 201) {
console.log("Workflow started.");
} else {
console.log("Response status: " + this.statusText);
}
};
xhr.send(JSON.stringify(data));
}
</script>
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
public class FormJsonAPI {
public static void startFormJsonAPI() {
String clientID = "??";
String apiSecureToken = "??";
String formID = "??";
String[][] formFields = {{"F279", "value for field F279.."}, {"F516", "value for field f52..."}};
String apiUrl = "https://brandsmill.de/api";
try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
HttpPost request = new HttpPost(apiUrl);
request.setHeader("Content-Type", "application/json");
StringBuilder formFieldsString = new StringBuilder();
formFieldsString.append("{\"securetoken\":\"").append(apiSecureToken).append("\",");
formFieldsString.append("\"client\":\"").append(clientID).append("\",");
formFieldsString.append("\"form\":\"").append(formID).append("\",");
formFieldsString.append("\"fields\":[");
for (int i = 0; i < formFields.length; i++) {
formFieldsString.append("{\"").append(formFields[i][0]).append("\":\"").append(formFields[i][1]).append("\"}");
if (i < formFields.length - 1) {
formFieldsString.append(",");
}
}
formFieldsString.append("]}");
StringEntity entity = new StringEntity(formFieldsString.toString());
request.setEntity(entity);
HttpResponse response = httpClient.execute(request);
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 201) {
System.out.println("Workflow started.");
} else {
System.out.println("Response status: " + response.getStatusLine().getReasonPhrase());
}
} catch (IOException e) {
System.err.println("Error occurred while sending the form data:" + e.getMessage());
}
}
}