Passa al contenuto principale

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​

Informazioni generaliInformazioni 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.

CondizioniCondizioni

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.

AzioniAzioni

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:

VariabileDescrizione
{{ 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:

VariabileDescrizione
{{ 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:

VariabileDescrizione
{{ department.name }}Nome del reparto
{{ department.sender_name }}Nome mittente del reparto

Variabili messaggio (quando attivato da eventi messaggio):

VariabileDescrizione
{{ 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:

VariabileDescrizione
{{ 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):

ProprietaDescrizione
ticket.idIdentificatore univoco del ticket
ticket.subjectOggetto del ticket
ticket.folderCartella corrente (INBOX, ASSIGNED, SPAM, ecc.)
ticket.tagsArray di tag
ticket.statusOggetto con id, code e name
ticket.priorityOggetto con id e name
ticket.departmentOggetto con id e name
ticket.ownerOggetto con id, email, firstname, lastname
ticket.customerOggetto con id, email, firstname, lastname, name
ticket.<custom_field_code>Valore del campo personalizzato tramite il suo codice

Proprieta ticket disponibili (scrittura):

ProprietaValore Atteso
ticket.statusCodice stato (stringa) o ID stato
ticket.priorityNome priorita (stringa) o ID priorita
ticket.departmentNome reparto (stringa) o ID reparto
ticket.ownerEmail utente (stringa) o ID utente
ticket.folderNome cartella: "INBOX", "ASSIGNED", "SPAM", "ARCHIVE"
ticket.tagsArray di stringhe tag
ticket.<custom_field_code>Valore corrispondente al tipo di campo personalizzato

Funzioni helper:

FunzioneRestituisce
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):

ProprietaDescrizione
message.idIdentificatore univoco del messaggio
message.body_textContenuto del messaggio (testo semplice)
message.body_htmlContenuto del messaggio (HTML)
message.createdAtTimestamp 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.

NotificheNotifiche

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;
}
}
}
```