Regles de workflow
Automatisez vos processus Helpdesk avec des regles de workflow personnalisables. Les regles de workflow vous permettent de mettre a jour automatiquement les attributs des tickets, d'envoyer des notifications et de declencher des actions specifiques en fonction d'evenements ou de conditions definis. Cette fonctionnalite aide a reduire le travail manuel, a maintenir la coherence et a accelerer les temps de reponse.
Apres l'installation, Helpdesk MX cree automatiquement la regle de workflow par defaut "Auto-change status to Waiting for Customer on agent reply".
Informations generales

- Rule Name : definissez un nom descriptif pour la regle. Une denomination claire aide votre equipe a identifier facilement ce que fait chaque regle.
- Active : activez ou desactivez la regle. Seules les regles actives sont executees lorsque leur evenement et leurs conditions sont remplis.
- Event : choisissez l'evenement qui declenche la regle.
- Priority / Sort Order : specifiez l'ordre de traitement de la regle. Les numeros plus bas sont executes en premier. Cela aide a controler quelles regles ont la priorite lorsque plusieurs regles s'appliquent au meme evenement.
- Stop Further Rules Processing : arretez d'executer les regles avec une priorite plus faible une fois que cette regle a ete appliquee. Utile lorsque vous voulez qu'une regle specifique prenne le controle total d'un evenement.
Evenements
Les evenements definissent quand la regle de workflow est evaluee. Les evenements disponibles incluent :
- New Ticket - declenche lorsqu'un nouveau ticket est cree.
- New Customer Reply - declenche lorsqu'un client envoie une nouvelle reponse.
- New Staff Reply - declenche lorsqu'un agent poste une reponse.
- New Third Party Reply - declenche lorsqu'un tiers envoie un message.
- Ticket Assigned - declenche lorsqu'un ticket est assigne a un utilisateur.
- Ticket Updated - declenche lorsque les champs du ticket sont mis a jour.
- Cron Every Hour - declenche par le systeme toutes les heures, permettant des actions basees sur le temps.
Conditions
Les conditions definissent quand une regle de workflow doit etre executee. Vous pouvez utiliser une ou plusieurs conditions, les combiner avec une logique ALL/ANY et meme creer des groupes imbriques pour un filtrage avance. Laissez cette section vide pour que la regle s'execute a chaque occurrence de l'evenement.

Champs disponibles
Vous pouvez construire des conditions en utilisant les champs suivants :
- Subject - verifie les mots ou phrases dans le sujet du ticket.
- Customer Email - correspond a l'adresse email du client.
- Customer Name - compare le nom du client.
- Channel - filtre les tickets crees a partir de sources specifiques (par ex., email, formulaire de contact, API).
- Department - correspond au departement actuellement assigne au ticket.
- Department (Before Change) - permet la comparaison avec le departement avant un evenement de mise a jour.
- Folder - verifie a quel dossier le ticket appartient actuellement.
- Folder (Before Change) - verifie le dossier avant le dernier changement.
- Owner - correspond a l'agent assigne.
- Owner (Before Change) - compare le proprietaire avant une mise a jour.
- Priority - verifie la priorite actuelle du ticket.
- Priority (Before Change) - compare la priorite avant qu'elle ne soit mise a jour.
- Status - verifie le statut actuel du ticket.
- Status (Before Change) - compare le statut precedent.
- Last Message - permet de verifier le contenu dans le dernier message.
- Last Reply By - definit qui a repondu en dernier (client, personnel ou tiers).
- Hours Since Created - temps ecoule depuis la creation du ticket.
- Hours Since Last Reply - temps depuis la derniere reponse.
- Hours Since Updated - temps depuis la derniere modification du ticket.
Operateurs de condition
Chaque condition peut utiliser l'un des operateurs suivants pour definir comment les valeurs sont comparees :
- Equals - se declenche lorsque la valeur du champ correspond exactement a la valeur specifiee.
- Not Equals - se declenche lorsque la valeur du champ differe de la valeur specifiee.
- Greater Than - se declenche lorsque la valeur est superieure a celle specifiee (principalement utilise avec des champs numeriques ou temporels).
- Greater Than or Equals - se declenche lorsque la valeur est superieure ou egale a celle specifiee.
- Less Than - se declenche lorsque la valeur est inferieure a celle specifiee.
- Less Than or Equals - se declenche lorsque la valeur est inferieure ou egale a celle specifiee.
- Between - se declenche lorsque la valeur se situe entre deux nombres specifies (utile pour les conditions basees sur le temps).
- Matches Regex - compare les valeurs de champ en utilisant des expressions regulieres pour une correspondance de motif avancee.
- Starts With - se declenche si le champ commence par le texte specifie.
- Ends With - se declenche si le champ se termine par le texte specifie.
- Is Empty - se declenche lorsque le champ n'a pas de valeur.
- Is Not Empty - se declenche lorsque le champ contient une valeur.
- Contains - se declenche lorsque le champ inclut le texte specifie.
- Does Not Contain - se declenche lorsque le champ n'inclut pas le texte specifie.
Actions
Les actions definissent ce qui se passe une fois que toutes les conditions sont remplies. Plusieurs actions peuvent etre combinees dans une seule regle.

Les actions disponibles incluent :
- Set Status - mettre a jour le statut du ticket.
- Set Priority - changer le niveau de priorite.
- Set Department - reassigner le ticket a un autre departement.
- Set Owner - assigner a un agent specifique.
- Change Folder - deplacer le ticket vers un dossier specifique.
- Add Tags - ajouter des tags pour la categorisation.
- Remove Tags - supprimer des tags existants du ticket.
- Send Email - envoyer des notifications email a des destinataires specifies.
- Run Script - executer du code JavaScript personnalise pour une automatisation avancee.
Action Send Email
L'action Send Email vous permet d'envoyer des notifications email automatisees lorsqu'une regle est declenchee. Ceci est utile pour alerter les membres de l'equipe, notifier les clients ou communiquer avec des parties externes.
Options disponibles :
- Send to ticket owner - notifier l'agent assigne.
- Send to all department users - alerter tous les membres du departement du ticket.
- Send to customer - informer le client des mises a jour.
- Send to other addresses - specifier des adresses email personnalisees.
- Email Subject - definir la ligne de sujet de l'email (prend en charge les variables de modele Liquid).
- Email Body - composer le contenu de l'email (prend en charge les variables de modele Liquid).
- Include attachments - joindre des fichiers du dernier message.
Variables de modele
Vous pouvez utiliser des variables de modele Liquid dans les champs Email Subject et Email Body pour inserer dynamiquement les informations du ticket, du client et du message.
Variables de ticket :
| Variable | Description |
|---|---|
{{ ticket.code }} | Code du ticket (par ex., T-001) |
{{ ticket.subject }} | Ligne de sujet du ticket |
{{ ticket.created_at }} | Horodatage de creation du ticket |
{{ ticket.updated_at }} | Horodatage de derniere mise a jour |
{{ ticket.customer_name }} | Nom complet du client |
{{ ticket.customer_email }} | Adresse email du client |
{{ ticket.admin_url }} | Lien direct vers le ticket dans le panneau d'administration |
{{ ticket.admin_last_message_text }} | Corps de la derniere reponse de l'agent (texte brut) |
{{ ticket.admin_last_message_html }} | Corps de la derniere reponse de l'agent (HTML) |
{{ ticket.customer_last_message_text }} | Corps de la derniere reponse du client (texte brut) |
{{ ticket.customer_last_message_html }} | Corps de la derniere reponse du client (HTML) |
Variables proprietaire/assigne :
| Variable | Description |
|---|---|
{{ owner.firstname }} | Prenom de l'agent assigne |
{{ owner.lastname }} | Nom de l'agent assigne |
{{ owner.email }} | Email de l'agent assigne |
{{ owner.fullname }} | Nom complet de l'agent assigne |
{{ owner.is_admin }} | Si le proprietaire est un administrateur |
Variables de departement :
| Variable | Description |
|---|---|
{{ department.name }} | Nom du departement |
{{ department.sender_name }} | Nom de l'expediteur du departement |
Variables de message (lorsque declenche par des evenements de message) :
| Variable | Description |
|---|---|
{{ message.body_text }} | Contenu du message (texte brut) |
{{ message.body_html }} | Contenu du message (HTML) |
{{ message.type }} | Type de message |
{{ message.created_at }} | Horodatage de creation du message |
Variables de date/heure :
| Variable | Description |
|---|---|
{{ now }} | Horodatage actuel (RFC3339) |
{{ date }} | Date actuelle (AAAA-MM-JJ) |
{{ time }} | Heure actuelle (HH:MM:SS) |
{{ year }} | Annee actuelle |
Exemple de modele d'email :
Sujet : Nouvelle reponse sur le ticket #{{ ticket.code }}
Bonjour {{ owner.firstname }},
Un client a repondu au ticket "{{ ticket.subject }}".
Client : {{ ticket.customer_name }} ({{ ticket.customer_email }})
Dernier message :
{{ ticket.customer_last_message_text }}
Voir le ticket : {{ ticket.admin_url }}
Action Run Script
L'action Run Script vous permet d'executer du code JavaScript personnalise pour implementer une logique d'automatisation complexe qui va au-dela des simples affectations de champs. Les scripts peuvent lire les donnees des tickets, prendre des decisions conditionnelles et mettre a jour plusieurs champs a la fois.
Proprietes de ticket disponibles (lecture) :
| Propriete | Description |
|---|---|
ticket.id | Identifiant unique du ticket |
ticket.subject | Ligne de sujet du ticket |
ticket.folder | Dossier actuel (INBOX, ASSIGNED, SPAM, etc.) |
ticket.tags | Tableau de tags |
ticket.status | Objet avec id, code et name |
ticket.priority | Objet avec id et name |
ticket.department | Objet avec id et name |
ticket.owner | Objet avec id, email, firstname, lastname |
ticket.customer | Objet avec id, email, firstname, lastname, name |
ticket.<custom_field_code> | Valeur du champ personnalise par son code |
Proprietes de ticket disponibles (ecriture) :
| Propriete | Valeur attendue |
|---|---|
ticket.status | Code de statut (chaine) ou ID de statut |
ticket.priority | Nom de priorite (chaine) ou ID de priorite |
ticket.department | Nom de departement (chaine) ou ID de departement |
ticket.owner | Email utilisateur (chaine) ou ID utilisateur |
ticket.folder | Nom de dossier : "INBOX", "ASSIGNED", "SPAM", "ARCHIVE" |
ticket.tags | Tableau de chaines de tags |
ticket.<custom_field_code> | Valeur correspondant au type de champ personnalise |
Fonctions d'aide :
| Fonction | Retourne |
|---|---|
getStatuses() | Tableau de tous les statuts disponibles |
getPriorities() | Tableau de toutes les priorites disponibles |
getDepartments() | Tableau de tous les departements disponibles |
getUsers() | Tableau de tous les utilisateurs disponibles |
fetch(url, options) | Effectuer des requetes HTTP vers des API externes |
Contexte de message (disponible lorsque la regle est declenchee par un evenement de message) :
| Propriete | Description |
|---|---|
message.id | Identifiant unique du message |
message.body_text | Contenu du message (texte brut) |
message.body_html | Contenu du message (HTML) |
message.createdAt | Horodatage de creation du message |
Exemples de scripts :
// Definir la priorite en fonction des mots-cles du sujet
if (ticket.subject.toLowerCase().includes("urgent")) {
ticket.priority = "High";
}
// Router les tickets vers les departements en fonction du contenu
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";
}
// Gestion des clients VIP
if (ticket.customer && ticket.customer.email.endsWith("@enterprise.com")) {
ticket.priority = "High";
ticket.tags = ["vip", "enterprise"];
}
// Definir la valeur du champ personnalise
ticket.order_id = "12345";
ticket.vip_customer = true;
ticket.order_amount = 99.99;
// Recuperer les donnees client depuis une API externe et mettre a jour le 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";
}
}
Notes importantes :
- Les scripts ont un timeout de 10 secondes pour eviter les boucles infinies.
- Les valeurs de champ invalides (statut, priorite, etc. inexistants) sont ignorees gracieusement.
- Les erreurs de script n'affectent pas les autres regles ni ne plantent le systeme.
- Les champs personnalises sont references par leur code, pas leur nom.
Notifications
Vous pouvez envoyer des notifications email automatisees lorsque la regle s'execute pour tenir toutes les parties informees.

Les options de notification incluent :
- Send email to ticket owner - notifier l'agent assigne.
- Send email to all department users - alerter tous les membres du departement.
- Send email to customer - informer le client des changements.
- Send email to other addresses - envoyer a des destinataires externes.
- Email Subject - specifier la ligne de sujet.
- Email Body - composer le contenu de l'email.
- Attach files previously attached to the last message - inclure les pieces jointes precedentes pour le contexte.
Exemples de regles de workflow
Changer le statut lors de la reponse du client
Lorsqu'un client repond, le systeme change automatiquement le statut du ticket en Waiting for Agent.
Type : Regle de workflow
Est actif : Oui
Evenement : New Customer Reply
Conditions : Status Not Equals Closed
Actions : Set Status -> Waiting for Agent
Nouvelle reponse d'un tiers
Lorsqu'un tiers envoie un message, le systeme definit le statut sur Waiting for Agent et ajoute un tag `third_party`.
Type : Regle de workflow
Est actif : Oui
Evenement : New Third Party Reply
Conditions : Aucune
Actions :
Set Status -> Waiting for Agent
Add Tags -> third_party
Ticket assigne au personnel
Lorsqu'un ticket est assigne a un membre du personnel, il se deplace automatiquement vers le dossier Assigned et envoie une notification email.
Type : Regle de workflow
Est actif : Oui
Evenement : Ticket Assigned
Conditions : Aucune
Actions :
Change Folder -> Assigned
Send email to ticket owner
Fermer le ticket apres 72 heures sans reponse
Si aucune reponse n'est recue dans les 72 heures, le ticket se ferme automatiquement.
Type : Regle de workflow
Est actif : Oui
Evenement : Cron Every Hour
Conditions :
Status Equals Waiting for Customer
Hours Since Last Reply Greater Than 72
Actions : Set Status -> Closed
Script : Router et prioriser en fonction du domaine email du client
Router les clients entreprise vers un support dedie et definir une priorite elevee.
Type : Regle de workflow
Est actif : Oui
Evenement : New Ticket
Conditions : Aucune
Actions : Run 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 : Auto-categoriser les tickets par mots-cles du sujet
Categoriser automatiquement les tickets et definir des champs personnalises en fonction du contenu du sujet.
Type : Regle de workflow
Est actif : Oui
Evenement : New Ticket
Conditions : Aucune
Actions : Run 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 : Escalader en fonction de l'analyse du contenu du message
Detecter les mots-cles urgents dans les messages et auto-escalader les tickets.
Type : Regle de workflow
Est actif : Oui
Evenement : New Customer Reply
Conditions : Aucune
Actions : Run 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;
}
}
}
```