Workflow n8n

Automatisation Zammad avec n8n : synchronisation des utilisateurs

Ce workflow n8n a pour objectif de synchroniser les utilisateurs d'Entra avec ceux de Zammad, facilitant ainsi la gestion des utilisateurs dans votre système de support. Dans un contexte où les entreprises doivent gérer efficacement leurs équipes et leurs ressources, cette automatisation permet de s'assurer que les informations des utilisateurs sont toujours à jour, réduisant ainsi les erreurs humaines et le temps consacré à la gestion manuelle. Les cas d'usage incluent la mise à jour automatique des utilisateurs lors de leur ajout ou suppression dans Entra, garantissant que Zammad reflète toujours l'état actuel de votre équipe. Le workflow commence par un déclencheur manuel, permettant de tester le flux à la demande. Ensuite, il utilise une requête HTTP pour récupérer les groupes d'Entra, suivie d'une étape pour retirer les tableaux extérieurs. Une condition vérifie si le groupe par défaut de Zammad est sélectionné, avant de procéder à la récupération des utilisateurs de Zammad. Le flux continue avec des étapes de comparaison pour identifier les nouveaux utilisateurs et ceux à désactiver, en utilisant des opérations spécifiques sur les utilisateurs de Zammad. Enfin, les utilisateurs sont mis à jour ou créés selon les besoins, assurant ainsi une synchronisation fluide. Les bénéfices de cette automatisation n8n incluent une réduction significative du temps de gestion des utilisateurs et une diminution des erreurs liées à la saisie manuelle. En automatisant ce processus, les équipes peuvent se concentrer sur des tâches à plus forte valeur ajoutée, tout en maintenant une base de données d'utilisateurs précise et à jour. Tags clés : automatisation, Zammad, Entra.

Catégorie: Manual · Tags: automatisation, Zammad, Entra, synchronisation, workflow0

Vue d'ensemble du workflow n8n

Schéma des nœuds et connexions de ce workflow n8n, généré à partir du JSON n8n.

Détail des nœuds du workflow n8n

  • When clicking ‘Test workflow’

    Ce noeud déclenche le workflow lorsque l'utilisateur clique sur 'Test workflow'.

  • Note1

    Ce noeud affiche une note autocollante avec des informations personnalisées.

  • Get Groups from Entra

    Ce noeud effectue une requête HTTP pour obtenir des groupes depuis Entra.

  • Remove outer Array

    Ce noeud divise un tableau en supprimant les éléments extérieurs.

  • Select Entra Zammad default Group

    Ce noeud vérifie si les conditions spécifiées sont remplies pour sélectionner le groupe par défaut de Zammad.

  • Remove outer Array from Entra User

    Ce noeud retire les éléments extérieurs d'un tableau d'utilisateurs Entra.

  • Zammad Univeral User Object

    Ce noeud crée un objet utilisateur universel pour Zammad avec des valeurs définies.

  • Get Zammad Users

    Ce noeud récupère les utilisateurs de Zammad selon les filtres spécifiés.

  • Merge

    Ce noeud fusionne plusieurs ensembles de données selon les critères définis.

  • Get Members of the default group

    Ce noeud effectue une requête HTTP pour obtenir les membres du groupe par défaut.

  • Find new Zammad Users

    Ce noeud compare les ensembles de données pour identifier les nouveaux utilisateurs de Zammad.

  • Update Zammad User

    Ce noeud met à jour les informations d'un utilisateur Zammad existant.

  • Create Zammad User

    Ce noeud crée un nouvel utilisateur dans Zammad avec les champs spécifiés.

  • Deactivate Zammad User

    Ce noeud désactive un utilisateur existant dans Zammad.

  • Find removed Users

    Ce noeud compare les ensembles de données pour trouver les utilisateurs supprimés.

  • If

    Ce noeud évalue les conditions spécifiées pour déterminer le flux de données.

  • Select only active Users and entra_obect_type="user"

    Ce noeud filtre les utilisateurs actifs et ceux de type 'user' dans Entra.

Inscris-toi pour voir l'intégralité du workflow

Inscription gratuite

S'inscrire gratuitementBesoin d'aide ?
{
  "id": "KKCfXEpBjjhp1LC8",
  "meta": {
    "instanceId": "494d0146a0f47676ad70a44a32086b466621f62da855e3eaf0ee51dee1f76753",
    "templateCredsSetupCompleted": true
  },
  "name": "Entra User to Zammad User Sync",
  "tags": [],
  "nodes": [
    {
      "id": "0007443e-b0d4-4f98-a613-3ec7c2842aa3",
      "name": "When clicking ‘Test workflow’",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -2140,
        140
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "2b285a4f-7e39-411b-88b9-cb55c5cf62e3",
      "name": "Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1700,
        380
      ],
      "parameters": {
        "width": 1635.910561370123,
        "height": 329.7269624573379,
        "content": "## Select Entra Users in a named Entra Group that should be synced to Zammad\n\n\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "929e529e-a4a3-4663-b9dc-e2300a860fed",
      "name": "Get Groups from Entra",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -1660,
        480
      ],
      "parameters": {
        "url": "https://graph.microsoft.com/v1.0/groups",
        "options": {},
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "microsoftOAuth2Api"
      },
      "credentials": {
        "microsoftOAuth2Api": {
          "id": "U2E5p3lreqSi8v1N",
          "name": "ms365test.zammad.org"
        },
        "microsoftGraphSecurityOAuth2Api": {
          "id": "b09tqOxzkl0P8UQD",
          "name": "ms365test.zammad.org"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "3390b2ed-6070-429c-bc1a-f0ab324117c7",
      "name": "Remove outer Array",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        -1400,
        480
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "value"
      },
      "typeVersion": 1
    },
    {
      "id": "b0e9531a-7fc0-4de0-8ec5-4be476b18a26",
      "name": "Select Entra Zammad default Group",
      "type": "n8n-nodes-base.if",
      "notes": "Please enter the Entra group name of users to be synchronized.",
      "position": [
        -1120,
        480
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "2dbb2484-2424-4095-a5a2-76ab4e3aaae8",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.displayName }}",
              "rightValue": "ENTRA"
            }
          ]
        }
      },
      "notesInFlow": true,
      "typeVersion": 2.2
    },
    {
      "id": "1be2a745-aea3-46ec-ab84-be2e39358b95",
      "name": "Remove outer Array from Entra User",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        -700,
        460
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "value"
      },
      "typeVersion": 1
    },
    {
      "id": "3b1fc962-7546-4bad-b637-e018649a0652",
      "name": "Zammad Univeral User Object",
      "type": "n8n-nodes-base.set",
      "position": [
        -240,
        440
      ],
      "parameters": {
        "values": {
          "number": [
            {
              "name": "entra_key",
              "value": "={{ $json.id }}"
            }
          ],
          "string": [
            {
              "name": "email",
              "value": "={{ $json.userPrincipalName }}"
            },
            {
              "name": "lastname",
              "value": "={{ $json.surname }}"
            },
            {
              "name": "firstname",
              "value": "={{ $json.givenName }}"
            },
            {
              "name": "mobile",
              "value": "={{ $json.mobilePhone }}"
            },
            {
              "name": "phone",
              "value": "={{ $json.businessPhones[0] }}"
            },
            {},
            {}
          ]
        },
        "options": {},
        "keepOnlySet": true
      },
      "typeVersion": 1
    },
    {
      "id": "9e36e6a9-cf56-4548-a1af-b1e33dbc61dd",
      "name": "Get Zammad Users",
      "type": "n8n-nodes-base.zammad",
      "position": [
        -1020,
        140
      ],
      "parameters": {
        "filters": {},
        "operation": "getAll",
        "returnAll": true
      },
      "credentials": {
        "zammadTokenAuthApi": {
          "id": "fj5GuzcJuNLQeMxz",
          "name": "Zammad Token Auth account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "c9a342b1-b5f2-4d31-9737-15f145dc7318",
      "name": "Merge",
      "type": "n8n-nodes-base.merge",
      "position": [
        240,
        140
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "fieldsToMatchString": "email"
      },
      "typeVersion": 3
    },
    {
      "id": "a04ebfea-e5fe-4903-841a-8ef29d75ff1a",
      "name": "Get Members of the default group",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -880,
        460
      ],
      "parameters": {
        "url": "=https://graph.microsoft.com/v1.0/groups/{{ $json.id }}/members ",
        "options": {},
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "microsoftOAuth2Api"
      },
      "credentials": {
        "microsoftOAuth2Api": {
          "id": "U2E5p3lreqSi8v1N",
          "name": "ms365test.zammad.org"
        },
        "microsoftGraphSecurityOAuth2Api": {
          "id": "b09tqOxzkl0P8UQD",
          "name": "ms365test.zammad.org"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "2e68992e-3080-41fd-9aae-c44dc60dc3b0",
      "name": "Find new Zammad Users",
      "type": "n8n-nodes-base.compareDatasets",
      "position": [
        240,
        460
      ],
      "parameters": {
        "options": {},
        "mergeByFields": {
          "values": [
            {
              "field1": "email",
              "field2": "email"
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "86dc2c72-d54a-40a9-a64b-fc0bde9a2387",
      "name": "Update Zammad User",
      "type": "n8n-nodes-base.zammad",
      "position": [
        560,
        140
      ],
      "parameters": {
        "id": "={{ $json.id }}",
        "operation": "update",
        "updateFields": {
          "phone": "={{ $json.phone }}",
          "mobile": "={{ $json.mobile }}",
          "lastname": "={{ $json.lastname }}",
          "firstname": "={{ $json.firstname }}",
          "customFieldsUi": {
            "customFieldPairs": [
              {
                "name": "entra_key",
                "value": "={{ $json.entra_key }}"
              },
              {
                "name": "entra_object_type",
                "value": "user"
              }
            ]
          }
        }
      },
      "credentials": {
        "zammadTokenAuthApi": {
          "id": "fj5GuzcJuNLQeMxz",
          "name": "Zammad Token Auth account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "bc883c6d-ec53-4854-824a-bd76b28077d2",
      "name": "Create Zammad User",
      "type": "n8n-nodes-base.zammad",
      "position": [
        580,
        540
      ],
      "parameters": {
        "lastname": "={{ $json.lastname }}",
        "firstname": "={{ $json.firstname }}",
        "additionalFields": {
          "email": "={{ $json.email }}",
          "phone": "={{ $json.phone }}",
          "mobile": "={{ $json.mobile }}",
          "customFieldsUi": {
            "customFieldPairs": [
              {
                "name": "entra_key",
                "value": "={{ $json.entra_key }}"
              },
              {
                "name": "entra_object_type",
                "value": "user"
              }
            ]
          }
        }
      },
      "credentials": {
        "zammadTokenAuthApi": {
          "id": "fj5GuzcJuNLQeMxz",
          "name": "Zammad Token Auth account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "3b57e278-e755-407c-b261-7fe76ce82bb5",
      "name": "Deactivate Zammad User",
      "type": "n8n-nodes-base.zammad",
      "position": [
        600,
        840
      ],
      "parameters": {
        "id": "={{ $json.id }}",
        "operation": "update",
        "updateFields": {
          "phone": "={{ $json.phone }}",
          "active": false,
          "mobile": "={{ $json.mobile }}",
          "lastname": "={{ $json.lastname }}",
          "firstname": "={{ $json.firstname }}",
          "customFieldsUi": {
            "customFieldPairs": [
              {
                "name": "entra_key",
                "value": "={{ $json.entra_key }}"
              }
            ]
          }
        }
      },
      "credentials": {
        "zammadTokenAuthApi": {
          "id": "fj5GuzcJuNLQeMxz",
          "name": "Zammad Token Auth account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "cdaf8b51-9b4c-4ad0-b8f0-c6921849ed4c",
      "name": "Find removed Users",
      "type": "n8n-nodes-base.compareDatasets",
      "position": [
        240,
        880
      ],
      "parameters": {
        "options": {},
        "resolve": "preferInput1",
        "mergeByFields": {
          "values": [
            {
              "field1": "entra_key",
              "field2": "entra_key"
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "9b37b75e-d694-441e-b5a5-8abeccbf4ed7",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "position": [
        -500,
        460
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "15da9b4f-46fa-4e9b-bd33-40ae79b88cd5",
              "operator": {
                "type": "object",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ $json }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "13ac19a6-6689-4e75-86d4-02ec1c0c64cd",
      "name": "Select only active Users and entra_obect_type=\"user\"",
      "type": "n8n-nodes-base.if",
      "position": [
        -220,
        140
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "1c9ca19d-18e3-470e-84cd-593794613c59",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.entra_object_type }}",
              "rightValue": "user"
            },
            {
              "id": "9187eea8-48ec-4488-9bc9-45235ff88114",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "leftValue": "={{ $json.active }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "b726c830-9d26-4289-8f66-485850762df7",
  "connections": {
    "If": {
      "main": [
        [
          {
            "node": "Zammad Univeral User Object",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge": {
      "main": [
        [
          {
            "node": "Update Zammad User",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Zammad Users": {
      "main": [
        [
          {
            "node": "Select only active Users and entra_obect_type=\"user\"",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Find removed Users": {
      "main": [
        [
          {
            "node": "Deactivate Zammad User",
            "type": "main",
            "index": 0
          }
        ],
        [],
        []
      ]
    },
    "Remove outer Array": {
      "main": [
        [
          {
            "node": "Select Entra Zammad default Group",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Find new Zammad Users": {
      "main": [
        [],
        [],
        [],
        [
          {
            "node": "Create Zammad User",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Groups from Entra": {
      "main": [
        [
          {
            "node": "Remove outer Array",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Zammad Univeral User Object": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          },
          {
            "node": "Find new Zammad Users",
            "type": "main",
            "index": 1
          },
          {
            "node": "Find removed Users",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Get Members of the default group": {
      "main": [
        [
          {
            "node": "Remove outer Array from Entra User",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Select Entra Zammad default Group": {
      "main": [
        [
          {
            "node": "Get Members of the default group",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking ‘Test workflow’": {
      "main": [
        [
          {
            "node": "Get Zammad Users",
            "type": "main",
            "index": 0
          },
          {
            "node": "Get Groups from Entra",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Remove outer Array from Entra User": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Select only active Users and entra_obect_type=\"user\"": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          },
          {
            "node": "Find new Zammad Users",
            "type": "main",
            "index": 0
          },
          {
            "node": "Find removed Users",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Pour qui est ce workflow ?

Ce workflow s'adresse aux entreprises utilisant Zammad et Entra, notamment les équipes de support et de gestion des ressources humaines. Il est idéal pour les organisations de taille moyenne à grande qui cherchent à automatiser la gestion des utilisateurs sans nécessiter de compétences techniques avancées.

Problème résolu

Ce workflow résout le problème de la gestion manuelle des utilisateurs entre Entra et Zammad, qui peut entraîner des incohérences et des erreurs. En automatisant cette synchronisation, les entreprises éliminent les frustrations liées à la mise à jour des informations des utilisateurs, réduisent le risque d'erreurs humaines et améliorent l'efficacité opérationnelle. Les utilisateurs bénéficient d'une expérience plus fluide et d'une gestion des ressources humaines optimisée.

Étapes du workflow

Étape 1 : Le flux est déclenché manuellement. Étape 2 : Une requête HTTP récupère les groupes d'Entra. Étape 3 : Les tableaux extérieurs sont retirés pour simplifier les données. Étape 4 : Une condition vérifie le groupe par défaut de Zammad. Étape 5 : Les utilisateurs de Zammad sont récupérés. Étape 6 : Une comparaison des ensembles de données identifie les nouveaux utilisateurs. Étape 7 : Les utilisateurs sont mis à jour ou créés selon les besoins, et ceux désactivés sont également gérés.

Guide de personnalisation du workflow n8n

Pour personnaliser ce workflow, vous pouvez modifier l'URL de la requête HTTP pour récupérer les groupes d'Entra ou ajuster les filtres de recherche pour les utilisateurs de Zammad. Assurez-vous que les ID de groupe et les champs d'utilisateur correspondent à votre configuration. Vous pouvez également ajouter des étapes supplémentaires pour intégrer d'autres outils ou services selon vos besoins. Pour sécuriser le flux, vérifiez les paramètres d'authentification et surveillez les logs pour détecter d'éventuelles erreurs.