Centre de Services Partagés (CSP) avec GLPI

Comment transformer GLPI en Centre de Services Partagés pour les RH, le Juridique, les Services généraux et la Finance : la décision entre entité et catégorie, le SLA par domaine, le cron externe et l'erreur de visibilité courante.

Dans cet article6 sections

GLPI n'a pas à rester enfermé dans l'informatique. Avec des entités, des catégories et des règles métier bien conçues, la même instance sert les RH, le Juridique, les Services généraux et la Finance comme un Centre de Services Partagés (CSP). Ce qui distingue un CSP qui fonctionne d'un tas de tickets, c'est la décision d'architecture prise avant le premier formulaire.

Décision d'architecture : une entité par service ou une catégorie par service ?

C'est le premier choix et le plus coûteux à annuler. Dans GLPI, une entité est une frontière multi-locataire : elle isole les données, les SLA, les profils et le catalogue. Une catégorie ITIL n'est qu'une étiquette de classification à l'intérieur d'une entité. Une entité par service donne un isolement fort mais exige de l'administration ; les catégories gardent tout simple mais dépendent des groupes et des règles pour router et protéger les données.

CritèreUne entité par serviceUne catégorie par service
Isolement des donnéesFort (un profil non récursif ne voit pas les services voisins)Faible (dépend du groupe et de la règle)
SLA indépendant par domaineNatifManuel, via règle + SLA par catégorie
Rapport consolidéExige un profil récursif ou l'entité racineTrivial (une seule entité)
Effort d'administrationÉlevé (profils, droits, cron)Faible
Recommandé pourRH et Juridique (données confidentielles)Services généraux et Finance (faible confidentialité)

Règle pratique : utilisez des entités lorsqu'il existe une réelle exigence de confidentialité (les RH et le Juridique en ont souvent une) ou des SLA et profils très distincts. Utilisez des catégories lorsque les domaines partagent le même pool d'agents et que la confidentialité est faible. Une conception hybride est fréquente : une entité séparée pour les RH et le Juridique, les Services généraux et la Finance en catégories dans l'entité de l'entreprise.

Pas à pas pour le premier service hors informatique

  1. Modélisez la frontière : choisissez entité ou catégorie avec la matrice ci-dessus avant de créer quoi que ce soit.
  2. Créez l'entité (Administration > Entités) ou l'arbre de catégories (Configuration > Catégories de tickets), en activant toujours la visibilité récursive lorsque la structure est partagée.
  3. Créez un groupe d'agents par domaine (Administration > Groupes) et cochez "Peut être affecté à des tickets".
  4. Définissez le SLA/OLA du domaine (Configuration > Niveaux de service) avec des délais de réponse et de résolution réalistes.
  5. Configurez des règles métier (Règles > Règles métier pour les tickets) pour affecter automatiquement le groupe, la catégorie et le SLA selon l'origine du ticket.
  6. Montez le catalogue : formulaires natifs (GLPI 11) ou le plugin Formcreator (GLPI 10) avec les champs du domaine.
  7. Ajustez les profils et les droits : un agent RH ne doit pas voir la file de l'informatique, et inversement.
  8. Activez le cron externe (section suivante) avant d'annoncer le service.

Diagnostic : qui utilise vraiment le centre

Mesurez avant et après l'extension. La requête ci-dessous lit directement la base de données et montre le volume et le temps jusqu'à la résolution par entité et catégorie sur les 30 derniers jours. Exécutez-la sur une réplique ou hors des heures de pointe.

-- Volume et temps jusqu'a la resolution par entite/categorie (30 jours)
SELECT e.completename                                   AS entite,
       IFNULL(c.completename, '(sans categorie)')       AS categorie,
       COUNT(t.id)                                      AS tickets,
       ROUND(AVG(TIMESTAMPDIFF(HOUR, t.date, t.solvedate)), 1) AS heures_jusqu_resolution
FROM glpi_tickets t
JOIN glpi_entities e            ON e.id = t.entities_id
LEFT JOIN glpi_itilcategories c ON c.id = t.itilcategories_id
WHERE t.date >= NOW() - INTERVAL 30 DAY
  AND t.is_deleted = 0
GROUP BY e.completename, c.completename
ORDER BY tickets DESC;

Si de nombreuses lignes affichent "(sans categorie)", c'est le signe d'un catalogue incomplet ou d'agents ouvrant des tickets sans les classer - le premier symptôme d'un CSP sur le point de perdre sa traçabilité.

Cron externe : pourquoi le SLA des RH ne se déclenche pas à l'heure

Dans le support quotidien d'environnements multi-domaines, le schéma qui échoue le plus silencieusement est l'entité sans cron externe. L'informatique, à fort trafic, déclenche le cron interne à chaque chargement de page et personne ne remarque le problème. L'entité Juridique, avec quelques visites par jour, accumule des escalades de SLA qui ne s'exécutent que lorsque quelqu'un ouvre l'interface. Le ticket qui nous parvient est souvent "les e-mails d'échéance du Juridique arrivent tous par lot vers 9 h" - exactement au moment où le premier utilisateur se connecte et où le cron interne traite enfin la file en attente. La correction consiste toujours à déplacer l'exécution vers le cron du système d'exploitation (MODE_EXTERNAL) et à réduire la dépendance au déclencheur par chargement de page.

# /etc/cron.d/glpi - cron externe de GLPI (execute par l'utilisateur du serveur web)
# Declenche notifications, escalade de SLA et cloture automatique.
* * * * * www-data /usr/bin/php /var/www/glpi/front/cron.php &>/dev/null

Après l'avoir planifié, allez dans Configuration > Actions automatiques et vérifiez que les tâches critiques (envoi de notifications, escalade de SLA et clôture des tickets) s'exécutent en mode CLI et non "GLPI" (exécution au chargement de page). Dans un environnement multi-domaines, les laisser en mode interne est la cause numéro 1 de "l'échéance est passée mais personne n'a été prévenu".

L'erreur courante : catégorie non récursive et visibilité cassée

L'erreur que nous voyons le plus en support est subtile : une catégorie créée dans l'entité racine sans activer la visibilité pour les entités enfants n'apparaît tout simplement pas dans le formulaire du service. Sans la bonne catégorie, l'agent ouvre le ticket en "Incident" générique ou saisit la classification dans le titre - et le rapport du domaine naît faussé. Il en va de même pour les profils : un agent RH avec une portée de profil non récursive ne voit que l'entité exacte où il se trouve, pas les sous-entités. En créant des catégories à la racine, activez "Entités enfants" (visible dans les sous-entités), avec entities_id = 0 et is_recursive = 1 ; en créant des profils de domaine, décidez délibérément si la portée est récursive.

Gouvernance : évitez l'explosion des catégories

  • Limitez l'arbre à 2 niveaux par domaine ; au-delà, personne ne classe correctement.
  • Nommez les catégories par l'action du demandeur ("Demander un remboursement"), pas par le jargon interne.
  • Revoyez chaque trimestre les lignes "(sans categorie)" du diagnostic.
  • Un responsable par domaine, en charge du catalogue et des SLA.
  • Ne répliquez pas la même catégorie sur plusieurs entités à la main ; rendez-la récursive depuis la racine.

Commencez par l'informatique, déjà habituée au service desk, puis étendez progressivement. Chaque nouveau domaine entre avec une frontière définie, un groupe de support, un SLA et un cron externe validé - pas avec un catalogue improvisé.

Besoin de dessiner la frontière entre entités et catégories avant de faire évoluer votre CSP ? NexTool déploie et maintient GLPI multi-domaines pour des clients B2B, de la modélisation des entités au cron et aux règles de routage.


Révisé par l'équipe NexTool Solutions.

Questions fréquentes

Cela dépend de la confidentialité. Utilisez une entité lorsqu'il existe une réelle exigence de confidentialité (RH, Juridique) ou des SLA et profils très distincts, car l'entité isole les données nativement. Utilisez une catégorie lorsque les domaines partagent la même équipe d'agents et que la confidentialité est faible (Services généraux, Finance). Les conceptions hybrides sont fréquentes et recommandées.

Avec les entités, affectez l'agent à l'entité du domaine avec une portée de profil non récursive afin qu'il ne voie pas les entités voisines. Au sein d'une même entité, utilisez des groupes de support et des règles métier pour router chaque ticket uniquement vers le groupe responsable, en restreignant la visibilité par groupe.

Presque toujours parce que le cron de GLPI est en mode interne (exécuté au chargement de page). Les domaines à faible trafic, comme le Juridique, accumulent la file jusqu'à ce que quelqu'un accède à l'interface. La correction consiste à configurer le cron externe du système d'exploitation appelant front/cron.php et à mettre les actions automatiques critiques en mode CLI.

Oui. Avec les entités, chaque domaine définit ses propres niveaux de service nativement. Avec les catégories, vous appliquez le SLA via une règle métier selon la catégorie du ticket. Les Services généraux peuvent avoir 4 h pour 'climatisation en panne' tandis que le Juridique a 5 jours ouvrés pour 'révision de contrat'.

Via la recherche native de GLPI, en regroupant par entité ou catégorie, ou via une requête SQL directe sur glpi_tickets jointe à glpi_entities et glpi_itilcategories. La requête révèle aussi les lignes '(sans categorie)', qui indiquent un catalogue incomplet ou des agents ouvrant des tickets sans les classer.

Besoin d'aide ?