ServiceNow: Configurando Integración con Historias de XOps

Resumen

XOps admite sincronización bidireccional entre historias de XOps y una plataforma externa de gestión de servicios. Esta integración ayuda a mantener la actividad de investigación alineada entre plataformas, de modo que las actualizaciones realizadas en una plataforma se reflejan en la otra.

Para más información, vea Creando Integraciones Bidireccionales con Plataformas de Gestión de Servicios.

Configurando la Integración de ServiceNow

Para configurar la integración de ServiceNow, complete estos cinco pasos.

Paso 1: Crear Campos Personalizados

Crear campos para ser rellenados cuando se emita un ticket en la Aplicación de Gestión de Cato (CMA).

Para crear campos personalizados:

  1. Inicie sesión en la plataforma de ServiceNow.
  2. Abra cualquier Incidente.
  3. Desde el banner superior, haga clic derecho y navegue a Configurar > Constructor de Formularios.
  4. Si es necesario, acepte probar el Constructor de Formularios y seleccione la vista Predeterminada.
  5. Haga clic en Agregar un nuevo campo en la Tabla de Incidentes.
  6. Agregue estos campos:

    • ID de Cuenta CMA

      • Tipo: Entero
      • Propiedades: Solo Lectura, Obligatorio, Activo
    • ID de la Historia CMA

      • Tipo: Cadena
      • Propiedades: Solo Lectura, Obligatorio, Activo

Paso 2: Crear una Clave API de Servicio en CMA

Las claves API de servicio permiten la integración escalable con herramientas y servicios externos y se crean en este formato: R=<...>|K=<...>. Para más información y detalles sobre cómo crear una clave API de Servicio, vea Generación de Claves API para la API de Cato.

Una vez que haya creado la clave API de servicio, cópiela y guárdela para que pueda ser ingresada en la Plataforma de ServiceNow.

Paso 3: Almacenar la Clave API de Forma Segura en una Propiedad de Sistema Segura

En la plataforma de ServiceNow, cree una propiedad de sistema segura para almacenar la clave API.

Para crear una propiedad de sistema segura:

  1. Navegue a https://<su instancia>.service-now.com/sys_properties_list.do
  2. Haga clic en Nuevo.
  3. En el formulario Nuevo Registro de Propiedades del Sistema, agregue estos detalles:

    SN5.png
    • Nombre: cma_prod_api_key
    • Tipo: Password2
    • Valor: La clave API de servicio que creó en el paso 2
  4. Haga clic en Enviar.

Paso 4: Crear un Mensaje REST

Cree un mensaje REST para enviar detalles de los incidentes de ServiceNow a Cato:

Para crear un mensaje REST:

  1. En su plataforma de ServiceNow, navegue a Todo > Servicios Web del Sistema > Saliente > Mensaje REST.
  2. Haga clic en Nuevo.
  3. En el formulario Mensaje REST, agregue estos detalles:

    • Nombre: Agregue un nombre para el mensaje REST
    • Punto final: https://<nombre de su cuenta Cato>.cc.catonetworks.com/api/v1/graphql2
    • Tipo de autenticación: Sin autenticación
    • Métodos HTTP: Haga clic en Nuevo y agregue estos detalles:

      • Nombre: Agregue un nombre
      • Método HTTP: POST
      • Punto final: https://<nombre de su cuenta Cato>.cc.catonetworks.com/api/v1/graphql2
  4. Haga clic en Enviar.

Paso 5: Crear una Regla de Negocio

Cree una regla de negocio para activar el mensaje REST.

Para crear una regla de negocio:

  1. En su plataforma de ServiceNow, navegue a Todo > Definiciones del Sistema > Regla de Negocio.
  2. Haga clic en Nuevo.
  3. En el formulario Nuevo Registro de Regla de Negocio, agregue estos detalles:

    SN6.png
    • Nombre: Agregue un nombre para la Regla de Negocio
    • Tabla: Incidente
    • Cuando: Después
    • Actualizar: Verdadero (marque la casilla)
    • Condición de Filtro: Cambios en comentarios
  4. En la pestaña Avanzado, agregue este script:

    (function executeRule(current, previous) {
      try {
        var lastComment = current.comments.getJournalEntry(1) || '';
        lastComment = stripJournalHeader(lastComment);
        if (!lastComment) {
          gs.info("GraphQL webhook: Comentario vacío, omitiendo " + current.number);
          return;
        }
        var accountId = current.u_cma_account_id;
        var storyId = current.u_cma_story_id;
            gs.info("GraphQL webhook: accountId " + accountId + " historia " + storyId);
        if (!accountId || !storyId) {
          gs.error("GraphQL webhook: Falta accountId/storyId para " + current.number);
          return;
        }
        var gqlQuery =
          "mutación CreateStoryComment($accountId: ID!, $input: AddStoryCommentInput!) {" +
          "  xdr(accountId: $accountId) {" +
          "    addStoryComment(input: $input) {" +
          "      comentario { id tipo __typename }" +
          "      __typename" +
          "    }" +
          "    __typename" +
          "  }" +
          "}";
        var body = {
          consulta: gqlQuery,
          variables: {
            accountId: accountId.toString(),
            input: {
              tipo: "USER",
              storyId: storyId.toString(),
              texto: lastComment
            }
          }
        };
            var apiKey = gs.getProperty('cma_prod_api_key');
        var r = new sn_ws.RESTMessageV2('Actualizar comentarios de historia de 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(); // puede cambiarse a Async - solo para propósitos de depuración
            var eccSysId = r.executeAsync();
        gs.info("GraphQL webhook en cola, ECC sys_id=" + eccSysId);
        var status = response.getStatusCode();
        var responseBody = response.getBody();
      // Registro seguro (ver siguiente sección para enmascaramiento)
         gs.info("GraphQL webhook: estado=" + status);
         gs.info("GraphQL webhook: cuerpo de respuesta=" + responseBody);
      } catch (ex) {
        gs.info("GraphQL webhook: Fallido: " + 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);
  5. Haga clic en Enviar.

Resolución de problemas

Puede identificar problemas y errores en cualquiera de los siguientes lugares:

  • Registros del sistema: Navegue a Registros del Sistema > Todos y busque mensajes que contengan GraphQL webhook.
  • Registro ECC: Navegue a https://<instance>.service-now.com/sys_ecc_queue_list.do y localice el registro ECC con el ECC sys_id registrado.

Problemas comunes

Aquí hay una lista de problemas comunes y sus causas:

Problema Causa
Comentario no enviado Texto del comentario vacío
IDs de cuenta/historia faltantes Campos personalizados no rellenados
API devuelve 400 Formato de solicitud incorrecto
API devuelve 401 Clave API inválida

¿Fue útil este artículo?

Usuarios a los que les pareció útil: 0 de 0

0 comentarios