Présentation
XOps prend en charge la synchronisation bidirectionnelle entre les histoires XOps et une plateforme de gestion des services externe. Cette intégration aide à maintenir l'alignement des activités d'enquête entre les plateformes, afin que les mises à jour effectuées sur une plateforme se reflètent sur l'autre.
Pour plus d'informations, consultez Créer des intégrations bidirectionnelles avec les plateformes de gestion des services.
Configurer l'intégration ServiceNow
Pour configurer l'intégration ServiceNow, complétez ces cinq étapes.
Étape 1 : Créer des champs personnalisés
Créez des champs à remplir lors d'un ticket dans l'application de gestion Cato (CMA).
Pour créer des champs personnalisés :
Connectez-vous à la plateforme ServiceNow.
Ouvrir n'importe quel incident.
Depuis la bannière supérieure, cliquez avec le bouton droit et naviguez vers Configurer > Constructeur de formulaire.
Si nécessaire, acceptez d'essayer le constructeur de formulaire et sélectionnez la vue par défaut.
Cliquez sur Ajouter un nouveau champ dans la Table des incidents.
Ajoutez ces champs :
ID de compte CMA
Type : Entier
Propriétés : Lecture seule, Obligatoire, Actif
ID d'histoire CMA
Type : Chaîne
Propriétés : Lecture seule, Obligatoire, Actif
Étape 2 : Créer une clé API de service dans la CMA
Les clés API de service permettent une intégration évolutive avec des outils et services externes et sont créées dans ce format : R=<...>|K=<...>. Pour plus d'informations et des informations détaillées sur la création d'une clé API de service, consultez Génération de clés API pour l'API Cato.
Une fois la clé API de service créée, copiez-la et enregistrez-la afin de pouvoir l'entrer dans la plateforme ServiceNow.
Étape 3 : Stocker la clé API de manière sécurisée dans une propriété du système sécurisé
Dans la plateforme ServiceNow, créez une propriété du système sécurisée pour stocker la clé API.
Pour créer une propriété du système sécurisée :
Accédez à https://<your instance>.service-now.com/sys_properties_list.do
Cliquez sur New.
Dans le formulaire Nouveau record de propriétés système, ajoutez ces détails :

Nom : cma_prod_api_key
Type : Mot de passe2
Valeur : La clé API de service que vous avez créée à l'étape 2
Cliquez sur Soumettre.
Étape 4 : Créer un message REST
Créez un message REST pour envoyer des détails des incidents ServiceNow à Cato :
Pour créer un message REST :
Dans votre plateforme ServiceNow, naviguez vers Tous > Services Web système > Sortant > Message REST.
Cliquez sur Ajouter un nouveau site.
Dans le formulaire Message REST, ajoutez ces détails :
Nom : Ajoutez un nom pour le message REST
Point de terminaison : https://<your Cato account name>.cc.catonetworks.com/api/v1/graphql2
Type d'authentification : Pas d'authentification
Méthodes HTTP : Cliquez sur Nouveau et ajoutez ces détails :
Nom : Ajoutez un nom
Méthode HTTP : POST
Point de terminaison : https://<your Cato account name>.cc.catonetworks.com/api/v1/graphql2
Cliquez sur Soumettre.
Étape 5 : Créer une règle métier
Créez une règle métier pour déclencher le message REST.
Pour créer une règle métier :
Dans votre plateforme ServiceNow, naviguez vers Tous > Définitions système > Règle métier.
Cliquez sur New.
Dans le formulaire Nouvelle record de règle métier, ajoutez ces détails :

Nom : Ajoutez un nom pour la règle métier
Table : Incident
Quand : Après
Mettre à jour : Vrai (Cochez la case)
Condition de filtre : Changements de commentaires
Dans l'onglet Avancé, ajoutez ce script :
(function executeRule(current, previous) { try { var lastComment = current.comments.getJournalEntry(1) || ''; lastComment = stripJournalHeader(lastComment); if (!lastComment) { gs.info("Webhook GraphQL : Commentaire vide, ignorer " + current.number); return; } var accountId = current.u_cma_account_id; var storyId = current.u_cma_story_id; gs.info("Webhook GraphQL : accountId " + accountId + " histoire " + storyId); if (!accountId || !storyId) { gs.error("Webhook GraphQL : Identifiant de compte/de récit manquant pour " + current.number); return; } var gqlQuery = "mutation CreateStoryComment($accountId: ID!, $input: AddStoryCommentInput!) {" + " xdr(accountId: $accountId) {" + " addStoryComment(input: $input) {" + " comment { id type __typename }" + " __typename" + " }" + " __typename" + " }" + "}"; var body = { query: gqlQuery, variables: { accountId: accountId.toString(), input: { type: "USER", storyId: storyId.toString(), text: lastComment } } }; var apiKey = gs.getProperty('cma_prod_api_key'); var r = new sn_ws.RESTMessageV2('Mettre à jour les commentaires de l'histoire XDR CMA Prod', 'post'); r.setRequestHeader('Content-Type', 'application/json'); r.setRequestHeader('Accept', 'application/json'); r.setRequestHeader('x-api-key', apiKey); r.setRequestBody(JSON.stringify(body)); //var response = r.execute(); // peut être changé en Async - seulement à des fins de débogage var eccSysId = r.executeAsync(); gs.info("Webhook GraphQL en file d'attente, ECC sys_id=" + eccSysId); var status = response.getStatusCode(); var responseBody = response.getBody(); // Journalisation sécurisée (voir la section suivante pour le masquage) gs.info("Webhook GraphQL : statut=" + status); gs.info("Webhook GraphQL : responseBody=" + responseBody); } catch (ex) { gs.info("Webhook GraphQL : Échec : " + ex.message); } function stripJournalHeader(text) { text = text || ''; if (text.indexOf('\n') > -1) { return text.split('\n').slice(1).join('\n').trim(); } return text.trim(); } })(current, previous);Cliquez sur Soumettre.
Résolution des problèmes
Vous pouvez identifier les problèmes et les erreurs à :
Journaux du système : Accédez à Journaux du système > Tout et recherchez les messages contenant
Webhook GraphQL.Enregistrement ECC : Accédez à https://<instance>.service-now.com/sys_ecc_queue_list.do et localisez l'enregistrement ECC avec le
ECC sys_idenregistré.
Problèmes courants
Voici une liste de problèmes courants et leur cause :
Problème | Cause |
|---|---|
Commentaire non envoyé | Texte du commentaire vide |
Identifiants de compte/récit manquants | Champs personnalisés non remplis |
L'API retourne 400 | Format de demande incorrect |
L'API retourne 401 | Clé API invalide |