Regole del flusso di lavoro
Automatizza i processi del tuo Helpdesk con regole del flusso di lavoro personalizzabili. Le regole del flusso di lavoro ti consentono di aggiornare automaticamente gli attributi del ticket, inviare notifiche e attivare azioni specifiche in base a eventi o condizioni definite. Questa funzionalita aiuta a ridurre il lavoro manuale, mantenere la coerenza e velocizzare i tempi di risposta.
Dopo l'installazione, Helpdesk MX crea automaticamente la regola del flusso di lavoro predefinita "Auto-change status to Waiting for Customer on agent reply".
Informazioni generali

- Nome Regola: definisci un nome descrittivo per la regola. Una denominazione chiara aiuta il tuo team a identificare facilmente cosa fa ogni regola.
- Attiva: abilita o disabilita la regola. Solo le regole attive vengono eseguite quando il loro evento e le condizioni sono soddisfatti.
- Evento: scegli l'evento che attiva la regola.
- Priorita / Ordine di Ordinamento: specifica l'ordine di elaborazione della regola. I numeri piu bassi vengono eseguiti per primi. Questo aiuta a controllare quali regole hanno la precedenza quando piu regole si applicano allo stesso evento.
- Interrompi Elaborazione Regole Successive: interrompe l'esecuzione delle regole con priorita inferiore una volta applicata questa regola. Utile quando vuoi che una regola specifica prenda il pieno controllo di un evento.
Eventi
Gli eventi definiscono quando la regola del flusso di lavoro viene valutata. Gli eventi disponibili includono:
- Nuovo Ticket — attivato quando viene creato un nuovo ticket.
- Nuova Risposta Cliente — attivato quando un cliente invia una nuova risposta.
- Nuova Risposta Staff — attivato quando un agente pubblica una risposta.
- Nuova Risposta Terza Parte — attivato quando una terza parte invia un messaggio.
- Ticket Assegnato — attivato quando un ticket viene assegnato a un utente.
- Ticket Aggiornato — attivato quando i campi del ticket vengono aggiornati.
- Cron Ogni Ora — attivato dal sistema ogni ora, consentendo azioni basate sul tempo.
Condizioni
Le condizioni definiscono quando una regola del flusso di lavoro deve essere eseguita. Puoi utilizzare una o piu condizioni, combinarle con logica TUTTE/QUALSIASI, e persino creare gruppi nidificati per un filtraggio avanzato. Lascia questa sezione vuota per far si che la regola venga eseguita ad ogni occorrenza dell'evento.

Campi disponibili
Puoi costruire condizioni utilizzando i seguenti campi:
- Oggetto — verifica parole o frasi nell'oggetto del ticket.
- Email Cliente — confronta l'indirizzo email del cliente.
- Nome Cliente — confronta il nome del cliente.
- Canale — filtra i ticket creati da fonti specifiche (es. email, modulo di contatto, API).
- Reparto — confronta il reparto corrente assegnato al ticket.
- Reparto (Prima della Modifica) — consente il confronto con il reparto prima di un evento di aggiornamento.
- Cartella — verifica a quale cartella appartiene attualmente il ticket.
- Cartella (Prima della Modifica) — verifica la cartella prima dell'ultima modifica.
- Proprietario — confronta l'agente assegnato.
- Proprietario (Prima della Modifica) — confronta il proprietario prima di un aggiornamento.
- Priorita — verifica la priorita corrente del ticket.
- Priorita (Prima della Modifica) — confronta la priorita prima che fosse aggiornata.
- Stato — verifica lo stato corrente del ticket.
- Stato (Prima della Modifica) — confronta lo stato precedente.
- Ultimo Messaggio — consente di verificare il contenuto nell'ultimo messaggio.
- Ultima Risposta Da — definisce chi ha risposto per ultimo (cliente, staff o terza parte).
- Ore dalla Creazione — tempo trascorso dalla creazione del ticket.
- Ore dall'Ultima Risposta — tempo dall'ultima risposta effettuata.
- Ore dall'Ultimo Aggiornamento — tempo dall'ultima modifica del ticket.
Operatori delle condizioni
Ogni condizione puo utilizzare uno dei seguenti operatori per definire come vengono confrontati i valori:
- Uguale — si attiva quando il valore del campo corrisponde esattamente al valore specificato.
- Diverso — si attiva quando il valore del campo differisce dal valore specificato.
- Maggiore Di — si attiva quando il valore e maggiore di quello specificato (principalmente usato con campi numerici o temporali).
- Maggiore o Uguale — si attiva quando il valore e maggiore o uguale a quello specificato.
- Minore Di — si attiva quando il valore e inferiore a quello specificato.
- Minore o Uguale — si attiva quando il valore e inferiore o uguale a quello specificato.
- Tra — si attiva quando il valore rientra tra due numeri specificati (utile per condizioni basate sul tempo).
- Corrisponde a Regex — confronta i valori dei campi utilizzando espressioni regolari per la corrispondenza di pattern avanzati.
- Inizia Con — si attiva se il campo inizia con il testo specificato.
- Termina Con — si attiva se il campo termina con il testo specificato.
- E Vuoto — si attiva quando il campo non ha valore.
- Non E Vuoto — si attiva quando il campo contiene qualsiasi valore.
- Contiene — si attiva quando il campo include il testo specificato.
- Non Contiene — si attiva quando il campo non include il testo specificato.
Azioni
Le azioni definiscono cosa accade una volta soddisfatte tutte le condizioni. Piu azioni possono essere combinate all'interno di una singola regola.

Le azioni disponibili includono:
- Imposta Stato — aggiorna lo stato del ticket.
- Imposta Priorita — cambia il livello di priorita.
- Imposta Reparto — riassegna il ticket a un altro reparto.
- Imposta Proprietario — assegna a un agente specifico.
- Cambia Cartella — sposta il ticket in una cartella specifica.
- Aggiungi Tag — aggiungi tag per la categorizzazione.
- Rimuovi Tag — elimina i tag esistenti dal ticket.
- Invia Email — invia notifiche email a destinatari specificati.
- Esegui Script — esegue codice JavaScript personalizzato per automazione avanzata.
Azione Invia Email
L'azione Invia Email consente di inviare notifiche email automatiche quando viene attivata una regola. Questo e utile per avvisare i membri del team, notificare i clienti o comunicare con parti esterne.
Opzioni disponibili:
- Invia al proprietario del ticket — notifica l'agente assegnato.
- Invia a tutti gli utenti del reparto — avvisa tutti i membri del reparto del ticket.
- Invia al cliente — informa il cliente sugli aggiornamenti.
- Invia ad altri indirizzi — specifica indirizzi email personalizzati.
- Oggetto Email — definisci l'oggetto dell'email (supporta variabili template Liquid).
- Corpo Email — componi il contenuto dell'email (supporta variabili template Liquid).
- Includi allegati — allega i file dall'ultimo messaggio.
Variabili Template
Puoi utilizzare variabili template Liquid nei campi Oggetto Email e Corpo Email per inserire dinamicamente informazioni su ticket, cliente e messaggio.
Variabili ticket:
| Variabile | Descrizione |
|---|---|
{{ ticket.code }} | Codice ticket (es. T-001) |
{{ ticket.subject }} | Oggetto del ticket |
{{ ticket.created_at }} | Timestamp di creazione del ticket |
{{ ticket.updated_at }} | Timestamp dell'ultimo aggiornamento |
{{ ticket.customer_name }} | Nome completo del cliente |
{{ ticket.customer_email }} | Indirizzo email del cliente |
{{ ticket.admin_url }} | Link diretto al ticket nel pannello admin |
{{ ticket.admin_last_message_text }} | Corpo dell'ultima risposta dell'agente (testo semplice) |
{{ ticket.admin_last_message_html }} | Corpo dell'ultima risposta dell'agente (HTML) |
{{ ticket.customer_last_message_text }} | Corpo dell'ultima risposta del cliente (testo semplice) |
{{ ticket.customer_last_message_html }} | Corpo dell'ultima risposta del cliente (HTML) |
Variabili proprietario/assegnatario:
| Variabile | Descrizione |
|---|---|
{{ owner.firstname }} | Nome dell'agente assegnato |
{{ owner.lastname }} | Cognome dell'agente assegnato |
{{ owner.email }} | Email dell'agente assegnato |
{{ owner.fullname }} | Nome completo dell'agente assegnato |
{{ owner.is_admin }} | Se il proprietario e un amministratore |
Variabili reparto:
| Variabile | Descrizione |
|---|---|
{{ department.name }} | Nome del reparto |
{{ department.sender_name }} | Nome mittente del reparto |
Variabili messaggio (quando attivato da eventi messaggio):
| Variabile | Descrizione |
|---|---|
{{ message.body_text }} | Contenuto del messaggio (testo semplice) |
{{ message.body_html }} | Contenuto del messaggio (HTML) |
{{ message.type }} | Tipo di messaggio |
{{ message.created_at }} | Timestamp di creazione del messaggio |
Variabili data/ora:
| Variabile | Descrizione |
|---|---|
{{ now }} | Timestamp corrente (RFC3339) |
{{ date }} | Data corrente (AAAA-MM-GG) |
{{ time }} | Ora corrente (HH:MM:SS) |
{{ year }} | Anno corrente |
Esempio di template email:
Oggetto: Nuova risposta sul ticket #{{ ticket.code }}
Ciao {{ owner.firstname }},
Un cliente ha risposto al ticket "{{ ticket.subject }}".
Cliente: {{ ticket.customer_name }} ({{ ticket.customer_email }})
Ultimo messaggio:
{{ ticket.customer_last_message_text }}
Visualizza ticket: {{ ticket.admin_url }}
Azione Esegui Script
L'azione Esegui Script consente di eseguire codice JavaScript personalizzato per implementare logica di automazione complessa che va oltre le semplici assegnazioni di campi. Gli script possono leggere i dati del ticket, prendere decisioni condizionali e aggiornare piu campi contemporaneamente.
Proprieta ticket disponibili (lettura):
| Proprieta | Descrizione |
|---|---|
ticket.id | Identificatore univoco del ticket |
ticket.subject | Oggetto del ticket |
ticket.folder | Cartella corrente (INBOX, ASSIGNED, SPAM, ecc.) |
ticket.tags | Array di tag |
ticket.status | Oggetto con id, code e name |
ticket.priority | Oggetto con id e name |
ticket.department | Oggetto con id e name |
ticket.owner | Oggetto con id, email, firstname, lastname |
ticket.customer | Oggetto con id, email, firstname, lastname, name |
ticket.<custom_field_code> | Valore del campo personalizzato tramite il suo codice |
Proprieta ticket disponibili (scrittura):
| Proprieta | Valore Atteso |
|---|---|
ticket.status | Codice stato (stringa) o ID stato |
ticket.priority | Nome priorita (stringa) o ID priorita |
ticket.department | Nome reparto (stringa) o ID reparto |
ticket.owner | Email utente (stringa) o ID utente |
ticket.folder | Nome cartella: "INBOX", "ASSIGNED", "SPAM", "ARCHIVE" |
ticket.tags | Array di stringhe tag |
ticket.<custom_field_code> | Valore corrispondente al tipo di campo personalizzato |
Funzioni helper:
| Funzione | Restituisce |
|---|---|
getStatuses() | Array di tutti gli stati disponibili |
getPriorities() | Array di tutte le priorita disponibili |
getDepartments() | Array di tutti i reparti disponibili |
getUsers() | Array di tutti gli utenti disponibili |
fetch(url, options) | Effettua richieste HTTP a API esterne |
Contesto messaggio (disponibile quando la regola viene attivata da un evento messaggio):
| Proprieta | Descrizione |
|---|---|
message.id | Identificatore univoco del messaggio |
message.body_text | Contenuto del messaggio (testo semplice) |
message.body_html | Contenuto del messaggio (HTML) |
message.createdAt | Timestamp di creazione del messaggio |
Esempi di script:
// Imposta la priorita in base alle parole chiave nell'oggetto
if (ticket.subject.toLowerCase().includes("urgent")) {
ticket.priority = "High";
}
// Instrada i ticket ai reparti in base al contenuto
if (ticket.subject.includes("billing") || ticket.subject.includes("invoice")) {
ticket.department = "Billing";
} else if (ticket.subject.includes("technical") || ticket.subject.includes("error")) {
ticket.department = "Technical Support";
}
// Gestione cliente VIP
if (ticket.customer && ticket.customer.email.endsWith("@enterprise.com")) {
ticket.priority = "High";
ticket.tags = ["vip", "enterprise"];
}
// Imposta il valore del campo personalizzato
ticket.order_id = "12345";
ticket.vip_customer = true;
ticket.order_amount = 99.99;
// Recupera dati cliente da API esterna e aggiorna il ticket
var response = fetch("https://api.example.com/customers/" + ticket.customer.email, {
headers: { "Authorization": "Bearer YOUR_API_KEY" }
});
if (response.ok && response.json) {
ticket.customer_tier = response.json.tier;
if (response.json.tier === "enterprise") {
ticket.priority = "High";
ticket.department = "Enterprise Support";
}
}
Note importanti:
- Gli script hanno un timeout di 10 secondi per prevenire cicli infiniti.
- Valori di campo non validi (stato, priorita, ecc. inesistenti) vengono ignorati in modo elegante.
- Gli errori degli script non influenzano altre regole o bloccano il sistema.
- I campi personalizzati sono referenziati tramite il loro codice, non il nome.
Notifiche
Puoi inviare notifiche email automatiche quando la regola viene eseguita per mantenere tutte le parti informate.

Le opzioni di notifica includono:
- Invia email al proprietario del ticket — notifica l'agente assegnato.
- Invia email a tutti gli utenti del reparto — avvisa tutti i membri del reparto.
- Invia email al cliente — informa il cliente delle modifiche.
- Invia email ad altri indirizzi — invia a destinatari esterni.
- Oggetto Email — specifica l'oggetto dell'email.
- Corpo Email — componi il contenuto dell'email.
- Allega file precedentemente allegati all'ultimo messaggio — includi gli allegati precedenti per contesto.
Esempi di regole del flusso di lavoro
Cambia stato alla risposta del cliente
Quando un cliente risponde, il sistema cambia automaticamente lo stato del ticket in In Attesa dell'Agente.
Tipo: Regola del Flusso di Lavoro
E Attiva: Si
Evento: Nuova Risposta Cliente
Condizioni: Stato Diverso da Chiuso
Azioni: Imposta Stato → In Attesa dell'Agente
Nuova risposta da Terza Parte
Quando una terza parte invia un messaggio, il sistema imposta lo stato su In Attesa dell'Agente e aggiunge un tag `third_party`.
Tipo: Regola del Flusso di Lavoro
E Attiva: Si
Evento: Nuova Risposta Terza Parte
Condizioni: Nessuna
Azioni:
Imposta Stato → In Attesa dell'Agente
Aggiungi Tag → third_party
Ticket assegnato allo staff
Quando un ticket viene assegnato a un membro dello staff, si sposta automaticamente nella cartella Assegnati e invia una notifica email.
Tipo: Regola del Flusso di Lavoro
E Attiva: Si
Evento: Ticket Assegnato
Condizioni: Nessuna
Azioni:
Cambia Cartella → Assegnati
Invia email al proprietario del ticket
Chiudi ticket dopo 72 ore senza risposta
Se non viene ricevuta alcuna risposta entro 72 ore, il ticket si chiude automaticamente.
Tipo: Regola del Flusso di Lavoro
E Attiva: Si
Evento: Cron Ogni Ora
Condizioni:
Stato Uguale a In Attesa del Cliente
Ore dall'Ultima Risposta Maggiore di 72
Azioni: Imposta Stato → Chiuso
Script: Instradamento e prioritizzazione basati sul dominio email del cliente
Instrada i clienti enterprise al supporto dedicato e imposta alta priorita.
Tipo: Regola del Flusso di Lavoro
E Attiva: Si
Evento: Nuovo Ticket
Condizioni: Nessuna
Azioni: Esegui Script
```javascript
if (ticket.customer && ticket.customer.email) {
var domain = ticket.customer.email.split("@")[1];
if (domain === "enterprise.com" || domain === "bigcorp.com") {
ticket.priority = "High";
ticket.department = "Enterprise Support";
ticket.tags = ["enterprise", "priority"];
}
}
```
Script: Categorizzazione automatica dei ticket tramite parole chiave nell'oggetto
Categorizza automaticamente i ticket e imposta i campi personalizzati in base al contenuto dell'oggetto.
Tipo: Regola del Flusso di Lavoro
E Attiva: Si
Evento: Nuovo Ticket
Condizioni: Nessuna
Azioni: Esegui Script
```javascript
var subject = ticket.subject.toLowerCase();
if (subject.includes("refund") || subject.includes("return")) {
ticket.department = "Billing";
ticket.category = "refund_request";
} else if (subject.includes("password") || subject.includes("login")) {
ticket.department = "Technical Support";
ticket.category = "account_access";
} else if (subject.includes("order") || subject.includes("shipping")) {
ticket.department = "Orders";
ticket.category = "order_inquiry";
}
```
Script: Escalation basata sull'analisi del contenuto del messaggio
Rileva parole chiave urgenti nei messaggi e auto-escalata i ticket.
Tipo: Regola del Flusso di Lavoro
E Attiva: Si
Evento: Nuova Risposta Cliente
Condizioni: Nessuna
Azioni: Esegui Script
```javascript
if (message && message.body_text) {
var body = message.body_text.toLowerCase();
var urgentKeywords = ["asap", "urgent", "critical", "down", "outage", "emergency"];
for (var i = 0; i < urgentKeywords.length; i++) {
if (body.includes(urgentKeywords[i])) {
ticket.priority = "High";
ticket.tags = ticket.tags.concat(["escalated"]);
break;
}
}
}
```