Un flusso di azioni è un workflow automatizzato definito dall’utente. Ogni flusso di azioni è costituito da un trigger del flusso di azioni, che avvia il flusso, e da una o più azioni.
I passaggi del codice personalizzato consentono di eseguire JavaScript personalizzato per eseguire trasformazioni di dati complesse, formattazione e logica avanzata che non sono possibili con le azioni e i passaggi predefiniti di trascinamento della selezione. Ad esempio, puoi usare un passaggio del codice personalizzato per acquisire informazioni per mascherare parti sensibili di un indirizzo email, convalidare il formato di un’email o dell’ID ordine o persino calcolare le date future per i promemoria di follow-up.
Aggiunta e configurazione di passaggi del codice personalizzato
Se devi eseguire codice come parte di un flusso di azioni, puoi aggiungere un passaggio del codice personalizzato. Consulta Tipi di dati supportati per informazioni sui tipi di dati supportati per gli input e gli output dei passaggi del codice personalizzati.
- Apri un flusso di azioni.
- In Creazione azioni, sotto un passaggio esistente, fai clic sull’icona Aggiungi passaggio (
). - Nella barra laterale dei passaggi, in Controllo di flusso e utilità, fai clic su Codice personalizzato.
- Nella barra laterale dei passaggi, fai clic su Aggiungi input per aggiungere input per il codice personalizzato.
- Nella barra laterale dei passaggi, fai clic su Aggiungi output per aggiungere almeno un output.
- Nella barra laterale dei passaggi, in Codice, inserisci il codice JavaScript personalizzato.
- Fai clic su Salva.
Per assicurarti che il codice personalizzato funzioni come previsto, prova il flusso di azioni. In caso di problemi, consulta Risoluzione dei problemi relativi ai passaggi relativi al codice personalizzato.
Aggiunta di input ai passaggi del codice personalizzato
I passaggi del codice personalizzato possono avere un massimo di 25 input.
- Apri un flusso di azioni.
- In Creazione azioni, fai clic su un passaggio del codice personalizzato esistente oppure fai clic sull’icona Aggiungi passaggio (
) per aggiungere un passaggio del codice personalizzato. - Nella barra laterale dei passaggi, fai clic su Aggiungi input.
- In Seleziona variabile, seleziona una variabile da un passaggio precedente o il trigger del flusso di azioni.Nota: Il tipo di dati dell’input viene dedotto dalla variabile selezionata.
- Verifica il valore Nome dell’input, che viene compilato automaticamente in base alla variabile selezionata ma può essere modificato. I nomi inseriti devono soddisfare questi requisiti.
- Fai clic su Salva.
Aggiunta di output ai passaggi del codice personalizzato
- Apri un flusso di azioni.
- In Creazione azioni, fai clic su un passaggio del codice personalizzato esistente oppure fai clic sull’icona Aggiungi passaggio (
) per aggiungere un passaggio del codice personalizzato. - Nella barra laterale dei passaggi, fai clic su Aggiungi output.
- Inserisci un nome univoco per l’output.
Deve soddisfare questi requisiti.
- Seleziona il tipodi dati dell’output .
- Fai clic su Salva.
Aggiunta del codice personalizzato
Il codice JavaScript nei passaggi del codice personalizzato deve esportare una funzione che accetta un oggetto di input e restituisce un oggetto di output . Ogni volta che aggiungi un passaggio del codice personalizzato a un flusso di azioni, questo viene precompilato con questo framework, che puoi modificare, espandere o eliminare e ricominciare da capo.
Sebbene il passaggio del codice personalizzato sia progettato per essere il più intuitivo possibile, gli amministratori potrebbero comunque aver bisogno assistenza tecnica per l’implementazione di questi passaggi.
- Il codice di un passaggio può contenere un massimo di 10.000 caratteri.
- Il codice personalizzato deve restituire un valore per ciascun output definito per il passaggio.
- Il codice usato nei flussi di azioni deve essere eseguito rapidamente e usare una quantità ragionevole di memoria.
- Si applicano le seguenti limitazioni JavaScript:
- La funzione deve essere sincrona. Ciò significa
async,await, epromisenon sono supportati. - Richieste di rete, come
fetch,XMLHttpRequeste jQuery AJAX non sono supportati. - Non puoi
importorequirelibrerie o moduli esterni.
- La funzione deve essere sincrona. Ciò significa
- Apri un flusso di azioni.
- In Creazione azioni, fai clic su un passaggio del codice personalizzato esistente oppure fai clic sull’icona Aggiungi passaggio (
) per aggiungere un passaggio del codice personalizzato. - In Codice, espandi l’esempio fornito, elimina l’esempio e scrivi la tua logica oppure usa un prompt AI per generare codice personalizzato.Il codice deve esportare una funzione che accetta un oggetto di input e restituisce un oggetto di output . Ad esempio:
// 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 } }Nota: Mentre scrivi il codice, l’editor offre suggerimenti utili per operazioni JavaScript valide. Gli errori di battitura e il codice non valido sono contrassegnati da una sottolineatura rossa ondulata. Posiziona il cursore del mouse sulla sezione sottolineata per visualizzare il messaggio di errore. - Fai clic su Salva.
Tipi di dati supportati per input e output di codice personalizzati
Il passaggio Codice personalizzato accetta e restituisce i seguenti tipi di dati, ognuno dei quali appare nel codice come tipo JavaScript equivalente.
| Tipo di immissione | Tipo di dati JavaScript | Esempio |
|---|---|---|
| Testo | stringa | "Salve!" |
| Numero | numero | 123, -5, 0 |
| Decimale | numero | 12.67, 1.0, 0.0 |
| Vero/falso | booleano | vero, falso |
| Data* | stringa | "2025-10-27" |
| Data e ora* | stringa |
Data e ora UTC "2025-10-27T10:30:00Z" Una data e un’ora con un fuso orario diverso: "2025-06-22T05:11:28+10:00" Data e ora UTC con millisecondi: "2025-03-08T06:01:21.415Z" Una data e un’ora con fuso orario e millisecondi:"2025-07-23T13:33:17.031-3:00" |
| Array testo | array di stringhe | ["Ciao!", "Come stai"] |
| Array numero | matrice di numeri | [12, 34, 56, 0] |
| Array decimale | matrice di numeri | [2.1, 6.3, 6.01, 0.1] |
| Array vero/falso | array di booleani | [vero, vero, falso] |
| Array data | array di stringhe | ["1997-08-29", "2004-07-25", "2011-04-21"] |
| Matrice DateTime | array di stringhe | ["1977-05-25T12:45Z", "1980-05-21T15:00Z", "1983-05-25T19:30Z"] |
- Oggetto
- Array di oggetti
- Array misto
- Array array
Modelli di prompt AI per la generazione di codice JavaScript personalizzato per il passaggio del flusso di azioni
I seguenti prompt possono essere usati con gli strumenti AI , come ChatGPT, per generare codice per il passaggio del codice personalizzato. I pompt includono indicazioni sui tipi di dati supportati e sulla struttura richiesta per il codice.
Richiesta 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>
Esempi di passaggi del codice personalizzato
- Formattazione dei dettagli di base del ticket in un commento leggibile
- Calcolo dell’ora successiva
- Convalida della formattazione di un indirizzo email
- Mascheramento di un indirizzo email
- Mappatura di un identificatore interno a un nome leggibile
- Verifica se gli elementi in un elenco iniziano con caratteri specifici
- Confronto di due elenchi di valori
- Ricerca di un ID ordine all’interno del testo
- Generazione di un numero casuale
- Generazione di tre numeri casuali compresi tra uno e sette
Formattazione dei dettagli di base del ticket in un commento leggibile
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,
}
}
Calcolo dell’ora successiva
Nell’esempio, l’ora è attualmente 2025-10-27T09:17:00Z. Pertanto, il codice seguente restituisce 2025-10-27T10:00:00Z.
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(),
}
}
Convalida della formattazione di un indirizzo email
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.email)
// Make sure to create the following outputs:
// emailIsValid (True/False)
return {
emailIsValid
}
}
Mascheramento di un indirizzo email
Questo esempio sostituisce parti di un indirizzo email con un asterisco. Ad esempio, "Potresti confermare che il tuo indirizzo email è d******n@zendesk.com?"
// 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}`
}
}
Mappatura di un identificatore interno a un nome leggibile
Le mappature come questa sono utili per convertire gli ID interni, come il tag di un campo ticket a discesa, in nomi più facili da usare, come un valore mostrato in un menu a discesa.
- Traduzione degli ID dei canali Slack in nomi dei canali
- Conversione degli ID progetto JIRA in nomi progetto
- Mappatura degli stati dei ticket Zendesk agli stati dei problemi JIRA corrispondenti
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,
}
}
Verifica se gli elementi in un elenco iniziano con caratteri specifici
Questo esempio verifica se gli elementi in un elenco iniziano con caratteri specifici. Ad esempio, se stai cercando elementi che iniziano con “cliente” e il tuo elenco di tag contiene [“critical_bug”, “customer_24601”, “escalation”], il risultato sarebbe true perché “customer_24601” inizia con “customer”.
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
}
Confronto di due elenchi di valori
Questo esempio confronta due elenchi e rimuove dal primo elenco tutti i valori presenti anche nel secondo.
Ad esempio, dato un elenco di CC dei ticket e un elenco di utenti non consentiti, tutti gli utenti non consentiti trovati nell’elenco CC saranno esclusi dall’elenco di output (cleanCCs). Questo metodo può essere usato anche per filtrare i tag che devono essere rimossi da un ticket o da un utente.
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,
}
}
Ricerca di un ID ordine all’interno del testo
Questo esempio estrae un ID ordine da una stringa di testo, come un commento a un ticket. Puoi modificare l’espressione regolare (/GO-\d{8,9}/) in base alle esigenze in modo che corrisponda al formato dell’ID ordine specifico.
// 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),
}
}
Generazione di un numero casuale
Questo esempio genera un numero casuale entro i limiti specificati. Puoi cambiare il valore 52 per impostare il limite massimo desiderato per il numero casuale.
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
}
}
Generazione di tre numeri casuali compresi tra uno e sette
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
}
}
Avvertenza sulla traduzione: questo articolo è stato tradotto usando un software di traduzione automatizzata per fornire una comprensione di base del contenuto. È stato fatto tutto il possibile per fornire una traduzione accurata, tuttavia Zendesk non garantisce l'accuratezza della traduzione.
Per qualsiasi dubbio sull'accuratezza delle informazioni contenute nell'articolo tradotto, fai riferimento alla versione inglese dell'articolo come versione ufficiale.