# RequestTracker
[RequestTracker][1] (RT) est un outil de tickets extrêmement puissant et flexible. Tellement flexible qu'on en vient à se prendre la tête pour faire des trucs de oufs.
Petit tour des trucs que j'ai mis en place sur un RT 4.4.0.
## Utiliser le *plus addressing*
De façon simple, pour que RT traite les tickets qui arrivent sur l'adresse email dédiée, on la met dans le `/etc/aliases` de sa machine. Ça fait un truc comme ça :
```
rt: "|/opt/rt4/bin/rt-mailgate --queue general --action correspond --url https://rt.example.org/"
rt-comment: "|/opt/rt4/bin/rt-mailgate --queue general --action comment --url https://rt.example.org/"
```
Vous noterez que cela met les mails à destination de cette adresse dans la *queue* (ou file) `general`. Or on utilise généralement plus d'une *queue* dans un système de ticket : cela permet de diriger automatiquement vers les personnes les plus à même d'y répondre.
Le problème avec ce système, c'est qu'il faudrait ajouter une adresse dédiée à chaque fois que l'on crée une nouvelle file. Ça peut vite devenir usant.
On va donc utiliser le *plus addressing*. Cette technique, toute bête, consiste à ajouter un discriminant à une adresse mail, précédé généralement d'un `+` (mais on peut configurer son serveur de mail pour utiliser n'importe quel caractère). `rt@example.org` aura alors pour alias (par exemple) `rt+file_bidule@example.org`.
Pour que RT puisse utiliser cette technique, il faut ajouter `--extension=queue` dans la commande du `/etc/aliases` :
rt: "|/opt/rt4/bin/rt-mailgate --extension=queue --queue general --action correspond --url https://rt.example.org/"
rt-comment: "|/opt/rt4/bin/rt-mailgate --extension=queue --queue general --action comment --url https://rt.example.org/"
Voilà ! Il ne vous reste plus qu'à créer vos files via l'interface web. Attention, créez-les avec un nom qui passera dans une adresse mail. Pas d'espace par exemple.
RT récupérera le nom de la file kivabien dans la partie entre le `+` et le `@` et placera automatiquement le ticket dans cette file, tout en gardant la file `general` par défaut.
## Les articles
Quoi de plus casse-pieds que de se répéter encore et encore en donnant toujours la même réponse ? Heureusement il y a les articles qui peuvent vous servir de réponses pré-enregistrées :-)
### Création des classes et des articles
Allez dans le menu `Administration > Articles > Classes > Ajouter`, créez vos classes (j'en ai créé une par file, n'ayant pas réussi à [assigner automatiquement des articles aux files][4]), cochez `Tous les articles de cette classe doivent être disponibles sous forme de liste sur la page de réponse d'un ticket`, décochez `Inclure le résumé de l'article` et `Inclure le nom de l'article` et cochez `Include le champs personnalisé 'Content' > Value` (oh la belle typo de traduction) qui apparaîtra après avoir enregistré la classe (pour ces trois derniers, vous faites comme vous le sentez hein).
Liez la classe à une file via le menu `S'applique à`.
Voilà, vous n'avez plus qu'à créer vos articles dans la classe que vous venez de créer via le menu `Articles > Ajouter`.
Et là, magie, lorsque vous répondez via l'interface web, vous pourrez choisir une réponse pré-enregistrée.
### Placement des articles dans la réponse
Je suis un grand fan du [*bottom-posting*][5], mais RT place l'article au-dessus de la citation du message précédent. Remédions à cela.
cd /opt/rt4
mkdir -p local/html/Elements/
cp share/html/Elements/MessageBox local/html/Elements/
vi local/html/Elements/MessageBox
Cherchez la ligne contenant
% $m->comp('/Articles/Elements/IncludeArticle', %ARGS) if $IncludeArticle;
et remplacez-la par
% if ($IncludeArticle) {
% my $article = $m->scomp('/Articles/Elements/IncludeArticle', %ARGS);
% $article =~ s{\n}{
}g;
% $article = RT::Interface::Email::ConvertHTMLToText($article);
% $Default .= $article unless ($Default =~ s/(.*)(-- .*)/$1$article$2/m);
% }
Hop ! votre article se trouve maintenant entre la citation et votre signature :-)
(un redémarrage de RT est peut-être nécessaire pour que cela soit pris en compte)
### Ajout des articles pertinents dans le mail de notification d'un nouveau message
Une des forces de RT est de permettre aux intervenants de répondre aux tickets par mail. Le problème est que cela empêche de piocher dans les réponses pré-enregistrées.
Qu'à cela ne tienne, ajoutons-les au mail de notification envoyé aux membres du support.
Allez dans `Administration > Global > Modèles > Choisir`. Il faut modifier le modèle `Notification de modification HTML` (oui, j'ai traduit le nom de mes modèles, mais il est simple à repérer, il est utilisé par les *scrips* 8 et 11).
Ajoutez ceci en bas du modèle :
{ my $hotlist = RT::Articles->new( RT->SystemUser );
$hotlist->LimitHotlistClasses;
$hotlist->LimitAppliedClasses( Queue => $Ticket->QueueObj );
my $content = "-- \n
Réponses pré-enregistrées pour cette catégorie de tickets:
"; if ($hotlist->Count) { while (my $article = $hotlist->Next) { $content .= ''.$article->Name.'
';
my $class = $article->ClassObj;
my $cfs = $class->ArticleCustomFields;
my %include = (Name => 1, Summary => 1);
$include{"CF-Title-".$_->Id} = $include{"CF-Value-".$_->Id} = 1 while $_ = $cfs->Next;
$include{$_} = not $class->FirstAttribute("Skip-$_") for keys %include;
while (my $cf = $cfs->Next) {
next unless $include{"CF-Title-".$cf->Id} or $include{"CF-Value-".$cf->Id};
my $values = $article->CustomFieldValues($cf->Id);
if ($values->Count == 1) {
my $value = $values->First;
if ($value && $include{"CF-Value-".$cf->Id}) {
$content .= '
';
my $c = $value->Content || $value->LargeContent;
$c =~ s/\r?\n/
/g;
$content .= $c;
}
} else {
my $val = $values->Next;
if ($val && $include{"CF-Value-".$cf->Id}) {
$content .= '
';
my $c = $value->Content || $value->LargeContent;
$c =~ s/\r?\n/
/g;
$content .= $c;
}
while ($val = $values->Next) {
if ($include{"CF-Value-".$cf->Id}) {
$content .= '
';
my $c = $value->Content || $value->LargeContent;
$c =~ s/\r?\n/
/g;
$content .= $c;
}
}
}
}
$content .= "
-----------