Ein Aktionsflow ist ein benutzerdefinierter automatisierter Workflow. Jeder Aktionsflow besteht aus einem auslösenden Ereignis und einer oder mehreren Aktionen.
Mithilfe angepasster Codeschritte können Sie JavaScript-Code für komplexe Datentransformationen, Formatierungen und erweiterte Logik ausführen, die mit den vordefinierten Aktionen und Schritten nicht möglich sind. So können Sie mit einem angepassten Codeschritt beispielsweise Informationen aufnehmen, um sensible Teile einer E-Mail-Adresse zu maskieren, das Format einer E-Mail-Adresse oder Bestellnummer zu validieren oder sogar zukünftige Termine für Erinnerungsschreiben zu berechnen.
Hinzufügen und Konfigurieren von angepassten Codeschritten
Wenn Sie im Rahmen eines Aktionsflows Code ausführen müssen, können Sie einen angepassten Codeschritt hinzufügen. Welche Datentypen für die Ein- und Ausgaben angepasster Codeschritte unterstützt werden, erfahren Sie im Abschnitt Unterstützte Datentypen.
- Öffnen Sie den gewünschten Aktionsflow.
- Klicken Sie im Aktionsgenerator unter einem vorhandenen Schritt auf das Symbol Schritt hinzufügen (
). - Klicken Sie in der Schritt-Seitenleiste unter Aktionsflusssteuerung und Dienstprogramme auf Angepasster Code.
- Klicken Sie in der Schritt-Seitenleiste auf Eingabe hinzufügen, und fügen Sie Eingaben für den angepassten Code hinzu.
- Klicken Sie in der Seitenleiste auf Ausgabe hinzufügen, und fügen Sie mindestens eine Ausgabe hinzu.
- Geben Sie in der Schritt-Seitenleiste unter Code den angepassten JavaScript-Code ein.
- Klicken Sie auf Speichern.
Testen Sie den Aktionsflow, um sicherzustellen, dass er wie erwartet funktioniert. Falls Probleme auftreten, lesen Sie den Abschnitt Beheben von Fehlern in Aktionsflows.
Hinzufügen von Eingaben zu angepassten Codeschritten
Angepasste Codeschritte können maximal 25 Eingaben aufweisen.
- Öffnen Sie den gewünschten Aktionsflow.
- Klicken Sie im Aktionsgenerator auf einen vorhandenen angepassten Codeschritt, oder klicken Sie auf das Symbol Schritt hinzufügen (
) und fügen Sie einen angepassten Codeschritt hinzu. - Klicken Sie in der Schritt-Seitenleiste auf Eingabe hinzufügen.
- Wählen Sie unter Variable auswählen eine Variable aus einem früheren Schritt oder dem Aktionsflow-Auslöser aus.Hinweis: Der Datentyp der Eingabe wird aus der ausgewählten Variablen abgeleitet.
- Überprüfen Sie den Wert Name der Eingabe. Er wird automatisch basierend auf der ausgewählten Variable festgelegt, kann aber geändert werden. Eingabenamen müssen den hier aufgeführten Anforderungen entsprechen.
- Klicken Sie auf Speichern.
Hinzufügen von Ausgaben zu angepassten Codeschritten
- Öffnen Sie den gewünschten Aktionsflow.
- Klicken Sie im Aktionsgenerator auf einen vorhandenen angepassten Codeschritt, oder klicken Sie auf das Symbol Schritt hinzufügen (
) und fügen Sie einen angepassten Codeschritt hinzu. - Klicken Sie in der Schritt-Seitenleiste auf Ausgabe hinzufügen.
- Geben Sie einen eindeutigen Namen für die Ausgabe ein.
Er muss den hier aufgeführten Anforderungen entsprechen.
- Wählen Sie den Typ der ausgegebenen Daten aus.
- Klicken Sie auf Speichern.
Hinzufügen Ihres angepassten Codes
Der JavaScript-Code in angepassten Codeschritten muss eine Funktion exportieren, die ein Eingabeobjekt annimmt und ein Ausgabeobjekt zurückgibt. Jedes Mal, wenn Sie einen angepassten Codeschritt zu einem Aktionsflow hinzufügen, werden diese Vorgabewerte verwendet. Sie können die Vorgaben ändern, erweitern oder löschen und von Grund auf neu beginnen.
Obwohl der Schritt „Angepasster Code“ so benutzerfreundlich wie möglich gestaltet wurde, kann es vorkommen, dass ein Administrator bei der Implementierung technische Unterstützung benötigt.
- Der Code eines Schritts kann maximal 10.000 Zeichen umfassen.
- Der angepasste Code muss für jede im Schritt definierte Ausgabe einen Wert zurückgeben.
- Der in Aktionsflows verwendete Code muss schnell ausgeführt werden und darf nicht übermäßig viel Speicherplatz beanspruchen.
- Für JavaScript gelten folgende Einschränkungen:
- Die Funktion muss synchron sein. Das bedeutet, dass
async,awaitundpromisenicht unterstützt werden. - Netzwerkanfragen wie
fetch,XMLHttpRequestund jQuery AJAX werden nicht unterstützt. -
importundrequirekönnen nicht auf externe Bibliotheken oder Module angewendet werden.
- Die Funktion muss synchron sein. Das bedeutet, dass
- Öffnen Sie den gewünschten Aktionsflow.
- Klicken Sie im Aktionsgenerator auf einen vorhandenen angepassten Codeschritt, oder klicken Sie auf das Symbol Schritt hinzufügen (
) und fügen Sie einen angepassten Codeschritt hinzu. - Erweitern Sie unter Code das angegebene Beispiel und löschen Sie den Beispielcode. Schreiben Sie anschließend Ihre eigene Logik, oder lassen Sie den Code anhand eines KI-Prompts generieren.Der Code muss eine Funktion exportieren, die ein Eingabeobjekt annimmt und ein Ausgabeobjekt zurückgibt. Beispiel:
// In the Inputs section for this step, add an input named status. // In the Outputs section for this step, add a text output named message. module.exports = (inputs) => { // Access inputs using inputs.<name> const msg = 'Your text was ' + inputs.status + '.' // This return must include all outputs. return { message: msg } }Hinweis: Beim Schreiben des Codes schlägt der Editor gültige JavaScript-Operationen vor. Tippfehler und ungültiger Code werden mit einer roten Wellenlinie unterstrichen. Wenn Sie den Mauszeiger auf den unterstrichenen Abschnitt setzen, wird die entsprechende Fehlermeldung angezeigt. - Klicken Sie auf Speichern.
Unterstützte Datentypen für angepasste Codeingaben und -ausgaben
Für Eingaben und Ausgaben unterstützt der angepasste Codeschritt folgende Datentypen, die im Code jeweils als der entsprechende JavaScript-Typ erscheinen.
| Eingabetyp | JavaScript-Datentyp | Beispiel |
|---|---|---|
| Text | Zeichenfolge | "Hallo!" |
| Zahl | Zahl | 123, -5, 0 |
| Dezimal | Zahl | 12.67, 1.0, 0.0 |
| Wahr/falsch | Boolescher Wert | true, false |
| Datum* | Zeichenfolge | "2025-10-27" |
| Datum und Uhrzeit* | Zeichenfolge |
Datum und Uhrzeit in UTC: "2025-10-27T10:30:00Z" Datum und Uhrzeit mit Zeitzonenversatz: "2025-06-22T05:11:28+10:00" Datum und Uhrzeit in UTC mit Millisekunden: "2025-03-08T03:01:21.415Z" Datum und Uhrzeit mit Zeitzonenversatz und Millisekunden: "2025-07-23T13:33:17.031-3:00" |
| Text-Array | Array von Zeichenfolgen | ["Hallo!", "Wie geht es Ihnen?"] |
| Zahlen-Array | Array von Zahlen | [12, 34, 56, 0] |
| Dezimal-Array | Array von Zahlen | [2.1, 6.3, 6.01, 0.1] |
| Wahr/falsch-Array | Array von booleschen Werten | [true, true, false] |
| Datums-Array | Array von Zeichenfolgen | ["1997-08-29", "2004-07-25", "2011-04-21"] |
| Datetime-Array | Array von Zeichenfolgen | ["1977-05-25T12:45Z", "1980-05-21T15:00Z", "1983-05-25T19:30Z"] |
- Objekt
- Objekt-Array
- Gemischtes Array
- Array-Array
KI-Prompt-Vorlagen für angepassten JavaScript-Code in einem Aktionsflow-Schritt
Mit den folgenden Prompts können Sie Code für Ihren angepassten Codeschritt mit KI-Tools wie ChatGPT generieren. Die Prompts enthalten Hinweise zu den unterstützten Datentypen und der erforderlichen Struktur des Codes.
Prompt 1
Write a piece of JavaScript code. The code must export a function that takes an inputs object and returns an outputs object, for example:
module.exports = (inputs) => {
let msg = "Your text was " + inputs.inputText + "."
return {
outputMessage: msg
}
}
Supported data types:
Strings, numbers, booleans, dates (YY-MM-DD) and datetimes (YY-MM-DDTHH:mm:SSZ) are supported. Arrays of those are supported too.
Objects, arrays of arrays, and arrays of objects are not supported. When used as inputs or outputs they must be stringified and passed as strings.
Check for missing or invalid data, and ensure it is handled gracefully by returning a valid output:
for strings, output the empty string ""
for numbers, output -1
for booleans, output false
for arrays, output the empty array []
for objects, output the empty object {}
Comment the code:
Include a comment at the top which briefly describes what the code does.
Include comments directing the reader to create the inputs and outputs, for example: // Make sure to create the following inputs: field_tag (Text).
In comments, refer to variable types with the following friendly names:
string: use "Date" for dates, "Date and time" for datetimes, else use "Text"
number: use "Number” or "Decimal"
boolean: use "True/False"
array: use "Number array", "Text array" etc
The code should... <DESCRIBE WHAT YOU WANT YOUR CODE TO DO HERE>
Prompt 2
Write a piece of JavaScript code. The code must export a function that takes an inputs object and returns an outputs object, for example:
module.exports = (inputs) => {
let msg = "Your text was " + inputs.inputText + "."
return {
outputMessage: msg
}
}
Supported input and output data types:
Strings, numbers, booleans, dates (YY-MM-DD) and datetimes (YY-MM-DDTHH:mm:SSZ) are supported. Arrays of those are supported too.
Objects, arrays of arrays, and arrays of objects are not supported. When used as inputs or outputs they must be stringified and passed as strings.
Comment the code:
Include a comment at the top which briefly describes what the code does.
Include comments directing the reader to create the inputs and outputs, for example: // Make sure to create the following inputs: field_tag (Text).
In comments, refer to variable types with the following friendly names:
string: use "Date" for dates, "Date and time" for datetimes, else use "Text"
number: use "Number" or "Decimal"
boolean: use "True/False"
array: use "Number array", "Text array" etc
The code should... <DESCRIBE WHAT YOU WANT YOUR CODE TO DO HERE>
Beispiele für angepasste Codeschritte
- Formatieren grundlegender Ticketdetails als einen für Menschen lesbaren Kommentar
- Berechnen der auf den aktuellen Zeitpunkt folgenden Stunde
- Validieren der Formatierung einer E-Mail-Adresse
- Maskieren einer E-Mail Adresse
- Zuordnen einer internen Kennung zu einem für Menschen lesbaren Namen
- Prüfen einer Liste auf Elemente, die mit bestimmten Zeichen beginnen
- Vergleichen der Werte in zwei Listen
- Auffinden einer Bestellnummer in einem Text
- Generieren einer Zufallszahl
- Generieren von drei Zufallszahlen zwischen eins und sieben
Formatieren grundlegender Ticketdetails als einen für Menschen lesbaren Kommentar
module.exports = (inputs) => {
// This code takes text inputs 'status' and 'priority', and a number input 'ticket_id', and outputs a friendly message combining these values.
// Make sure to create the following inputs:
// status (Text)
// priority (Text)
// ticket_id (Number)
const message = `Ticket ${inputs.ticket_id} has status ${inputs.status} and priority ${inputs.priority}.`
// Make sure to create the following outputs:
// message (Text)
return {
message,
}
}
Berechnen der auf den aktuellen Zeitpunkt folgenden Stunde
In diesem Beispiel ist die aktuelle Uhrzeit 2025-10-27T09:17:00Z. Daher gibt der folgende Code den Wert 2025-10-27T10:00:00Z zurück.
module.exports = (inputs) => {
// This code calculates the next full hour from the current UTC time
// No inputs required
// Make sure to create the following outputs:
// nextHour (Date and time)
// Create a Date object for the current time
const nextHour = new Date()
// Round up to the next hour by:
// 1. Setting minutes, seconds, and milliseconds to 0
nextHour.setUTCMinutes(0, 0, 0)
// 2. Adding 1 hour
nextHour.setUTCHours(nextHour.getUTCHours() + 1)
return {
nextHour: nextHour.toISOString(),
}
}
Validieren der Formatierung einer E-Mail-Adresse
module.exports = (inputs) => {
// This code takes a text input 'emailAddress',
// uses regex to do a basic check whether it is a valid email format,
// and outputs a boolean 'emailIsValid'.
// Make sure to create the following inputs:
// emailAddress (Text)
// Simple email regex pattern
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
const emailIsValid = emailRegex.test(inputs.emailAddress)
// Make sure to create the following outputs:
// emailIsValid (True/False)
return {
emailIsValid
}
}
Maskieren einer E-Mail Adresse
In diesem Beispiel werden Teile einer E-Mail-Adresse durch Sternchen (*) ersetzt. Beispiel: „Bitte bestätigen Sie, dass Ihre E-Mail-Adresse d******n@zendesk.com lautet.“
// This code takes an email address input and returns a masked version where the local part is partially replaced with '*', preserving the first and last characters.
// Make sure to create the following input:
// emailToMask (Text)
// Make sure to create the following output:
// maskedEmail (Text)
module.exports = (inputs) => {
const [emailName, emailDomain] = inputs.emailToMask.split("@")
let maskedEmailName = emailName
if (emailName.length > 2) {
maskedEmailName = emailName[0]
maskedEmailName += "*".repeat(emailName.length-2)
maskedEmailName += emailName[emailName.length-1]
}
return {
maskedEmail: `${maskedEmailName}@${emailDomain}`
}
}
Zuordnen einer internen Kennung zu einem für Menschen lesbaren Namen
Mit solchen Zuordnungen lassen sich interne Kennungen wie das Stichwort eines Dropdown-Ticketfelds in benutzerfreundlichere Klarnamen umwandeln, die beispielsweise als Werte in einer Dropdownliste bereitgestellt werden können.
- Slack-Channel-IDs in Kanalnamen übersetzen
- Jira-Projekt-IDs in Projektnamen umwandeln
- Zendesk-Ticketstatus den entsprechenden Jira-Vorgangsstatus zuordnen
const optionMap = {
option_01_ivory: 'ivory',
option_02_cream: 'cream',
option_03_white: 'white',
option_04_bone: 'bone',
}
module.exports = (inputs) => {
// This code takes a text input 'optionTag',
// and outputs the corresponding 'optionName' based on a predefined mapping.
// If the input is missing or does not match any tag, it returns an empty string.
// Make sure to create the following inputs:
// optionTag (Text)
const optionName = optionMap[inputs.optionTag] || ''
// Make sure to create the following outputs:
// optionName (Text)
return {
optionName,
}
}
Prüfen einer Liste auf Elemente, die mit bestimmten Zeichen beginnen
In diesem Beispiel wird geprüft, ob Elemente in einer Liste mit bestimmten Zeichen beginnen. Wenn Sie beispielsweise nach Elementen suchen, die mit „customer“ beginnen, und die Liste die Stichwörter ["critical_bug", "customer_24601", "escalation"] enthält, wird das Ergebnis true zurückgegeben, weil „customer_24601“ mit „customer“ beginnt.
module.exports = (inputs) => {
// This code takes a text array 'tags' and a text string 'searchTerm',
// and outputs a boolean 'matchFound' indicating whether any tag begins with the searchTerm.
// Make sure to create the following inputs:
// tags (Text array)
// searchTerm (Text)
const matchFound = inputs.tags.some(tag => tag.startsWith(inputs.searchTerm))
// Make sure to create the following outputs:
// matchFound (True/False)
return {
matchFound
}
}
Vergleichen der Werte in zwei Listen
In diesem Beispiel werden zwei Listen miteinander verglichen und alle Werte aus der ersten Liste entfernt, die auch in der zweiten Liste enthalten sind.
Angenommen, eine Liste enthält Benutzer, die in einem Ticket auf CC gesetzt sind, und die andere Liste enthält nicht zugelassene Benutzer. In diesem Fall würden alle nicht zugelassenen Benutzer auf der CC-Liste von der Ausgabeliste (cleanCCs) ausgeschlossen. Mit dieser Methode können auch Stichwörter aus einem Ticket oder Benutzer herausgefiltert und anschließend entfernt werden.
module.exports = (inputs) => {
// This code takes two number arrays: ticketCCs and disallowedUsers,
// and outputs a number array cleanCCs which includes only those items from ticketCCs that are NOT in disallowedUsers.
// Make sure to create the following inputs:
// ticketCCs (Number array)
// disallowedUsers (Number array)
const cleanCCs = inputs.ticketCCs.filter(cc => !inputs.disallowedUsers.includes(cc))
// Make sure to create the following outputs:
// cleanCCs (Number array)
return {
cleanCCs,
}
}
Auffinden einer Bestellnummer in einem Text
In diesem Beispiel wird eine Bestellnummer aus der Textzeichenfolge eines Ticketkommentars extrahiert. Sie können den regulären Ausdruck (/GO-\d{8,9}/) an das von Ihnen verwendete Bestellnummernformat anpassen.
// Regex for order number: "GO-" followed by 8 or 9 digits
const ORDER_NUMBER_REGEX = /GO-\d{8,9}/
// Searches comment for order number and returns it if found.
const findOrderNumber = comment => comment.match(ORDER_NUMBER_REGEX)[0]
module.exports = (inputs) => {
// This code uses regex to look for an orderNumber with pattern "GO-" followed by 8 or 9 digits
// Make sure to create the following inputs:
// commentBody (Text)
const orderNumber = findOrderNumber(inputs.commentBody)
// Make sure to create the following outputs:
// orderNumber (Text)
// matchFound (True/False)
return {
orderNumber,
matchFound: Boolean(orderNumber),
}
}
Generieren einer Zufallszahl
In diesem Beispiel wird eine Zufallszahl innerhalb des von Ihnen angegebenen Bereichs generiert. Sie können den Wert 52 ändern, um die Obergrenze des Zahlenbereichs anzupassen.
module.exports = (inputs) => {
// This code outputs a random integer number between 1 and 52 inclusive.
// No inputs required.
// Make sure to create the following outputs:
// randomNumber (Number)
const randomNumber = Math.floor(Math.random() * 52) + 1
return {
randomNumber
}
}
Generieren von drei Zufallszahlen zwischen eins und sieben
module.exports = (inputs) => {
// This code outputs three unique random integer numbers between 1 and 7 inclusive.
// No inputs required.
// Make sure to create the following outputs:
// randomNumber1 (Number)
// randomNumber2 (Number)
// randomNumber3 (Number)
const numbers = []
while (numbers.length < 3) {
const candidate = Math.floor(Math.random() * 7) + 1
if (!numbers.includes(candidate)) {
numbers.push(candidate)
}
}
return {
randomNumber1: numbers[0],
randomNumber2: numbers[1],
randomNumber3: numbers[2]
}
}
module.exports = (inputs) => {
// This code outputs an array of three unique random numbers between 1 and 7 inclusive.
// No inputs required.
// Make sure to create the following outputs:
// randomNumbers (Number array)
const numbers = []
while (numbers.length < 3) {
const candidate = Math.floor(Math.random() * 7) + 1
if (!numbers.includes(candidate)) {
numbers.push(candidate)
}
}
return {
randomNumbers: numbers
}
}