Comment Construire un Système de Ticketing Simple dans DokuWiki

Auteur(s): Louis Ouellet


Les systèmes de ticketing sont des outils précieux pour gérer les tâches, les problèmes ou les demandes d'assistance de manière organisée et efficace. Que vous gériez un service d'assistance ou que vous ayez simplement besoin d'un moyen pour suivre les problèmes internes, un système de ticketing fournit une méthode centralisée pour gérer la communication et résoudre les problèmes rapidement. Dans ce tutoriel, nous vous guiderons à travers la construction d'un système de ticketing simple en utilisant DokuWiki et le plugin Bureaucracy. Cette approche vous permet d'exploiter les capacités de gestion de contenu flexibles de DokuWiki tout en offrant un moyen facile aux utilisateurs de créer et de suivre les tickets.

À la fin de ce guide, vous disposerez d'un système de ticketing fonctionnel avec des pages pour créer, visualiser et gérer les tickets. Commençons !

Plugins Utilisés

Pour créer ce système de ticketing, nous utilisons les plugins suivants :

  • Bureaucracy : Pour gérer les soumissions de formulaire et automatiser la création de tickets.
  • Tag : Pour taguer et catégoriser les tickets par statut.
  • Tag Button : Pour ajouter des boutons interactifs pour changer le statut des tickets (ex. : Marquer comme Résolu).
  • Discussion : Pour ajouter des commentaires ou des notes aux tickets pour une collaboration.
  • Gallery : Pour ajouter des pièces jointes d'images liées au ticket.
  • Barcode : Pour ajouter un code-barres représentant l'identifiant du ticket pour une référence facile.
  • Wrap : Pour styliser différentes parties du contenu, comme des boutons et des encadrés.

Considérations de Sécurité

Il est important de mettre en place des Listes de Contrôle d'Accès (ACL) appropriées pour sécuriser le système de ticketing. Vous souhaitez que le formulaire de création de ticket soit accessible aux utilisateurs qui doivent soumettre des tickets. En même temps, les autres pages, comme les détails des tickets ou les modèles de gestion, ne doivent être accessibles qu'aux utilisateurs autorisés qui géreront les tickets.

Pour cela, nous allons :

Cette configuration garantira que les tickets peuvent être créés par les utilisateurs tout en empêchant l'accès non autorisé aux fonctionnalités de gestion des tickets.

Configuration du Système de Ticketing

Le système de ticketing est organisé en différentes pages et modèles qui remplissent des rôles spécifiques. Voici la structure du système :

tickets/
├── start.txt       (Ceci sert d'index principal)
├── labels.txt      (Contient les libellés pour notre formulaire)
├── mail.txt        (Contient le modèle d'email pour les tickets)
├── ticket.txt      (Contient le modèle de page pour chaque ticket)
└── new.txt         (Contient le formulaire pour créer de nouveaux tickets)

Chaque fichier a un objectif spécifique, et nous les passerons en revue chacun en détail.

Page Principale des Tickets (start.txt)

Le fichier start.txt est le point d'entrée de notre système de ticketing. Il fournit une liste des tickets classés par statut :

start.txt
~~NOCACHE~~
~~NOTOC~~
====== Tickets ======
 
<block centeralign>
<inline button>[[new|Nouveau Ticket]]</inline>
<inline button>[[ticket|Modèle]]</inline>
<inline button>[[mail|Email]]</inline>
<inline button>[[labels|Libellés]]</inline>
</block>
 
===== Ticket(s) le Plus Ancien =====
{{topic>.?ticket Ticket -priority -closed -solved -archived&table&nodesc&sort&date&user&nolinkbacks&tags&noimage&header&limit=5}}
 
===== Ticket(s) Critique(s) =====
{{topic>.?ticket Ticket -priority -closed -solved -archived +critical&table&nodesc&sort&date&user&nolinkbacks&tags&noimage&header}}
 
===== Ticket(s) Ouvert(s) =====
{{topic>.?ticket Ticket -priority -closed -solved -archived&table&nodesc&sort&date&user&nolinkbacks&tags&noimage&header}}
 
===== Ticket(s) Résolu(s) =====
{{topic>.?solved -priority -archived&table&nodesc&sort&date&user&nolinkbacks&tags&noimage&header}}
 
===== Ticket(s) Fermé(s) =====
{{topic>.?closed -priority -archived&table&nodesc&sort&date&user&nolinkbacks&tags&noimage&header}}
 
===== Ticket(s) Archivé(s) =====
{{topic>.?archived -priority&table&nodesc&sort&date&user&nolinkbacks&tags&noimage&header}}

Cette page agit comme le tableau de bord principal, permettant aux utilisateurs de voir les tickets organisés par statut, tels que Ouvert, Critique, Résolu, etc.

Étiquettes (labels.txt)

Le fichier labels.txt contient les étiquettes pour les champs du formulaire de notre système de ticketing, facilitant la gestion et la localisation du système :

labels.txt
====== Étiquettes ======
 
  * contact          = "Informations de contact"
  * issue            = "Problème"
  * files            = "Télécharger des images"
  * create           = "Créez votre ticket"
  * full_name        = "Nom complet"
  * email            = "E-mail"
  * phone            = "Téléphone"
  * priority         = "Priorité"
  * subject          = "Sujet"
  * description      = "Description"
  * attachments      = "Télécharger le(s) fichier(s)"
  * open             = "Ouvrir le ticket"

Ces étiquettes sont utilisées dans tout le système pour assurer une cohérence dans l'interface utilisateur.

Formulaire de Création de Ticket (new.txt)

Le fichier new.txt contient le formulaire que les utilisateurs utiliseront pour créer un nouveau ticket :

new.txt
====== Ouvrir un ticket ======
 
<form>
Labels .:labels
Action template .:tickets:ticket .:tickets:@@ticketid@@:index -
Action mail mail@domain.com @@email@@
Usemailtemplate .:mail
Subject "Ticket - @@ticketid@@ - @@priority@@ - @@subject@@"
Thanks "Merci, Nous avons bien reçu votre ticket. Notre équipe de support examinera le problème et vous contactera dès que possible."
 
Fieldset "Informations de contact"
Textbox  full_name
Textbox  email
Textbox  phone
 
Fieldset "Problème"
Select priority "Basse|Normale|Haute|Critique"
Textbox  subject
Textarea  description
Yesno attachments
 
Fieldset "Télécharger des images" attachments
File file1 ..: !
File file2 ..: !
File file3 ..: !
File file4 ..: !
File file5 ..: !
 
Fieldset "Créez votre ticket"
Hiddenautoinc ticketid
Hidden created "=%Y-%m-%d %H:%M"
Submit open
</form>

Ce formulaire recueille des informations essentielles de l'utilisateur, telles que Nom complet, E-mail, Priorité et une description détaillée du problème.

Modèle de Ticket (ticket.txt)

Le fichier ticket.txt est utilisé pour générer une nouvelle page de ticket lorsqu'un utilisateur soumet le formulaire :

ticket.txt
~~NOTOC~~
====== @@ticketid@@ - @@subject@@ ======
{{tag>Ticket @@priority@@ %Y %B}}
----
<block float-right>
{{tag-button>closed:error|Marquer comme fermé}}
{{tag-button>solved:success|Marquer comme résolu}}
{{tag-button>archived|Archiver}}
</block>
===== Informations sur le ticket =====
|  <barcode type="UPCA" scale="4" size="64px" value="@@ticketid@@" />  ||||
^ ID | @@ticketid@@ ^ Créé | @@created@@ |
^ Priorité | @@priority|@@ ||
 
===== Informations de contact =====
^ Nom | @@full_name|@@ |
^ E-mail | [[@@email|@@]] |
^ Numéro de téléphone | @@phone|@@ |
 
===== Galerie =====
{{gallery>.}}
 
===== Problème =====
<block box>
@@description|@@
</block>
 
~~DISCUSSION|Notes~~

Ce modèle structure les informations pour chaque page de ticket individuel, facilitant le suivi et la gestion de chaque problème.

Modèle de Courriel (mail.txt)

Le fichier mail.txt est utilisé pour générer un courriel de ticket lorsqu'un utilisateur soumet le formulaire :

mail.txt
====== Courriel ======
<code html>
<style>
  main.site-main {
    box-sizing: border-box;
    color: rgb(101, 101, 101);
    display: block;
    font-family: Montserrat, sans-serif;
    font-size: 16px;
    line-height: 24px;
    overflow-wrap: break-word;
    text-align: left;
    text-size-adjust: 100%;
    unicode-bidi: isolate;
  }
 
  main.site-main .center {
    text-align: center;
  }
 
  main.site-main .header {
    margin-bottom: 64px;
  }
 
  main.site-main img {
    max-height: 256px;
    max-width: 256px;
  }
 
  main.site-main h1, main.site-main h2 {
    box-sizing: border-box;
    color: rgb(48, 48, 48);
    display: block;
    font-family: Montserrat, sans-serif;
    margin: 0 0 20px 0;
    padding: 0;
    text-align: left;
    overflow-wrap: break-word;
    unicode-bidi: isolate;
  }
 
  main.site-main h1 {
    font-size: 32px;
    line-height: 38.4px;
  }
 
  main.site-main h2 {
    font-size: 24px;
    line-height: 31.2px;
  }
 
  main.site-main hr {
    background-color: rgb(245, 245, 245);
    height: 5px;
    margin: 8px 0 20px;
    box-sizing: border-box;
    border: none;
  }
 
  main.site-main .level1, main.site-main .level2, main.site-main .table {
    box-sizing: border-box;
    color: rgb(101, 101, 101);
    font-family: Montserrat, sans-serif;
    font-size: 16px;
    line-height: 24px;
    display: block;
    margin: 0;
    padding: 0;
    overflow-wrap: break-word;
    text-align: left;
    text-size-adjust: 100%;
    unicode-bidi: isolate;
  }
 
  main.site-main .table {
    overflow-x: auto;
    margin-bottom: 20px;
  }
 
  main.site-main table {
    width: 100%;
    background-color: rgb(245, 245, 245);
    border-collapse: separate;
    box-sizing: border-box;
    font-family: Montserrat, sans-serif;
    font-size: 16px;
    line-height: 24px;
  }
 
  main.site-main table th, main.site-main table td {
    padding: 10px;
    border-bottom: 1px solid rgb(229, 229, 229);
    box-sizing: border-box;
    text-align: left;
  }
 
  main.site-main table th {
    font-weight: 700;
    background-color: rgb(229, 229, 229);
  }
</style>
<main class="site-main group" role="main">
  <div class="center header">
    <img src="https://laswitchtech.com/_media/logo.png" alt="logo">
    <h1 class="center">LaswitchTech</h1>
  </div>
  <h1>Ticket - @@ticketid@@ - @@priority@@ - @@subject@@</h1>
  <div class="level1"><hr></div>
  <h2>Ticket Information</h2>
  <div class="level2">
    <div class="table sectionedit1">
      <table class="inline">
        <tbody>
          <tr class="row0">
            <th class="col0"> ID </th><td class="col1"> @@ticketid@@ </td><th class="col2"> Created </th><td class="col3"> @@created@@ </td>
          </tr>
          <tr class="row1">
            <th class="col0"> Priority </th><td class="col1" colspan="2"> @@priority@@ </td><td class="col3"></td>
          </tr>
        </tbody>
      </table>
    </div>
  </div>
  <h2>Contact Information</h2>
  <div class="level2">
    <div class="table sectionedit6">
      <table class="inline">
        <tbody>
          <tr class="row0">
            <th class="col0"> Name </th><td class="col1"> @@full_name@@ </td>
          </tr>
          <tr class="row1">
            <th class="col0"> Email </th><td class="col1"> @@email@@ </td>
          </tr>
          <tr class="row2">
            <th class="col0"> Phone Number </th><td class="col1"> @@phone|@@ </td>
          </tr>
        </tbody>
      </table>
    </div>
  </div>
  <h2>Issue</h2>
  <div class="level2">
    <div class="table sectionedit10">
      <table class="inline">
        <tbody>
          <tr class="row0">
            <th class="col0"> Subject </th><td class="col1"> @@subject@@ </td>
          </tr>
          <tr class="row1">
            <td class="col1" colspan="2"> @@description@@ </td>
          </tr>
        </tbody>
      </table>
    </div>
  </div>
</main>
</code>
 
<code text>
LaswitchTech
 
Ticket - @@ticketid@@ - @@priority@@
------------------------------------------------------------
Informations sur le ticket
------------------------------------------------------------
ID: @@ticketid@@    Créé: @@created@@
Priorité: @@priority@@
 
------------------------------------------------------------
Informations de contact
------------------------------------------------------------
Nom: @@full_name@@
E-mail: @@email@@
Numéro de téléphone: @@phone|@@
 
------------------------------------------------------------
Problème
------------------------------------------------------------
Sujet: @@subject@@
Description: @@description@@
</code>

Ce modèle structure les informations pour chaque ticket, notifiant les utilisateurs.

Conclusion

En suivant ce guide, vous avez mis en place un système de ticketing de base en utilisant DokuWiki et le plugin Bureaucracy. Ce système vous aidera à garder une trace des demandes, problèmes et tâches de manière organisée, facilitant la communication et la résolution. La flexibilité de DokuWiki en fait un excellent choix pour la mise en place rapide de tels outils internes.

N'hésitez pas à personnaliser les étiquettes, modèles et paramètres pour répondre à vos besoins spécifiques. La puissance de ce système de ticketing réside dans sa simplicité et son adaptabilité, ce qui en fait un choix parfait pour les petites équipes et projets.

Tags

Discussion

Entrer votre commentaire. La syntaxe wiki est autorisée:
H U P Y D