Aller au contenu principal

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​

General informationInformations 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.

ConditionsConditions

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.

ActionsActions

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 :

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

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

VariableDescription
{{ department.name }}Nom du departement
{{ department.sender_name }}Nom de l'expediteur du departement

Variables de message (lorsque declenche par des evenements de message) :

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

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

ProprieteDescription
ticket.idIdentifiant unique du ticket
ticket.subjectLigne de sujet du ticket
ticket.folderDossier actuel (INBOX, ASSIGNED, SPAM, etc.)
ticket.tagsTableau de tags
ticket.statusObjet avec id, code et name
ticket.priorityObjet avec id et name
ticket.departmentObjet avec id et name
ticket.ownerObjet avec id, email, firstname, lastname
ticket.customerObjet avec id, email, firstname, lastname, name
ticket.<custom_field_code>Valeur du champ personnalise par son code

Proprietes de ticket disponibles (ecriture) :

ProprieteValeur attendue
ticket.statusCode de statut (chaine) ou ID de statut
ticket.priorityNom de priorite (chaine) ou ID de priorite
ticket.departmentNom de departement (chaine) ou ID de departement
ticket.ownerEmail utilisateur (chaine) ou ID utilisateur
ticket.folderNom de dossier : "INBOX", "ASSIGNED", "SPAM", "ARCHIVE"
ticket.tagsTableau de chaines de tags
ticket.<custom_field_code>Valeur correspondant au type de champ personnalise

Fonctions d'aide :

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

ProprieteDescription
message.idIdentifiant unique du message
message.body_textContenu du message (texte brut)
message.body_htmlContenu du message (HTML)
message.createdAtHorodatage 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.

NotificationsNotifications

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