서비스나우: XOps 스토리와의 통합 구성하기

개요

XOps는 XOps 스토리와 외부 서비스 관리 플랫폼 간의 양방향 동기화를 지원합니다. 이 통합은 플랫폼 간 조사 활동이 일치하도록 도와주며, 한 플랫폼에서 이루어진 업데이트가 다른 플랫폼에 반영되도록 합니다.

자세한 내용은 서비스 관리 플랫폼과의 양방향 통합 생성하기를 참조하십시오.

서비스나우 통합 구성하기

서비스나우 통합을 구성하려면, 다섯 가지 단계를 완료하십시오.

단계 1: 사용자 정의 필드 생성하기

Cato 관리 애플리케이션 (CMA)에서 티켓이 발행될 때 채워질 필드를 생성하십시오.

사용자 정의 필드를 생성하려면:

  1. 서비스나우 플랫폼에 로그인하십시오.
  2. 사건을 엽니다.
  3. 상단 배너에서 오른쪽 클릭하여 구성 > 양식 빌더로 이동하십시오.
  4. 필요시, 양식 빌더 사용에 동의하고 기본 보기를 선택하십시오.
  5. 사건 테이블에 새 필드 추가하기를 클릭하십시오.
  6. 이 필드를 추가하십시오:

    • CMA 계정 ID

      • 유형: 정수
      • 속성: 읽기 전용, 필수, 활성
    • CMA 스토리 ID

      • 유형: 문자열
      • 속성: 읽기 전용, 필수, 활성

단계 2: CMA에서 서비스 API 키 생성하기

서비스 API 키는 외부 도구와 서비스와의 확장 가능한 통합을 가능하게 하며 다음 형식으로 생성됩니다: R=<...>|K=<...>. 서비스 API 키 생성에 대한 정보와 세부 정보는 Cato API에 대한 API 키 생성하기를 참조하십시오.

서비스 API 키를 생성한 후, 이를 복사하고 저장하여 서비스나우 플랫폼에 입력할 수 있도록 하십시오.

단계 3: 안전한 시스템 속성에 API 키 안전하게 저장하기

서비스나우 플랫폼에서, API 키를 저장할 안전한 시스템 속성을 생성하십시오.

안전한 시스템 속성을 생성하려면:

  1. https://<작업 인스턴스>.service-now.com/sys_properties_list.do로 이동하십시오.
  2. 새로 만들기를 클릭하십시오.
  3. 새 시스템 속성 레코드 양식에서, 다음 세부 정보를 추가하십시오:

    SN5.png
    • 이름: cma_prod_api_key
    • 유형: Password2
    • 값: 2단계에서 생성한 서비스 API 키
  4. 제출을 클릭하십시오.

단계 4: REST 메시지 생성하기

서비스나우 사건에서 Cato로 세부 사항을 보내기 위한 REST 메시지를 생성하십시오:

REST 메시지를 생성하려면:

  1. 서비스나우 플랫폼에서, All>System Web Services > Outbound > REST Message로 이동하십시오.
  2. 새로 만들기를 클릭하십시오.
  3. REST 메시지 양식에서, 다음 세부 사항을 추가하십시오:

    • 이름: REST 메시지에 대한 이름 추가
    • 종점: https://<귀하의 Cato 계정 이름>.cc.catonetworks.com/api/v1/graphql2
    • 인증 유형: 인증 없음
    • HTTP 메서드: 새로 만들기를 클릭하여 다음 세부 내용을 추가하십시오:

      • 이름: 이름 추가
      • HTTP 메서드: POST
      • 종점: https://<귀하의 Cato 계정 이름>.cc.catonetworks.com/api/v1/graphql2
  4. 제출을 클릭하십시오.

단계 5: 비즈니스 규칙 생성하기

REST 메시지를 트리거하기 위한 비즈니스 규칙을 생성하십시오.

비즈니스 규칙을 생성하려면:

  1. 서비스나우 플랫폼에서, All > System Definitions > Business Rule로 이동하십시오.
  2. 새로 만들기를 클릭하십시오.
  3. 새 비즈니스 규칙 레코드 양식에서, 다음 세부 정보를 추가하십시오:

    SN6.png
    • 이름: 비즈니스 규칙에 대한 이름 추가
    • 테이블: 사건
    • 시기: 후
    • 업데이트: 참 (체크박스를 선택하십시오)
    • 필터 조건: 댓글 변경
  4. 고급 탭에서, 이 스크립트를 추가하십시오:

    (function executeRule(current, previous) {
      try {
        var lastComment = current.comments.getJournalEntry(1) || '';
        lastComment = stripJournalHeader(lastComment);
        if (!lastComment) {
          gs.info("GraphQL webhook: Empty comment, skipping " + current.number);
          return;
        }
        var accountId = current.u_cma_account_id;
        var storyId = current.u_cma_story_id;
            gs.info("GraphQL webhook: accountId " + accountId + " story " + storyId);
        if (!accountId || !storyId) {
          gs.error("GraphQL webhook: Missing accountId/storyId for " + 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('Update XDR story comments 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(); // can be changed to Async - only for debug purposes
            var eccSysId = r.executeAsync();
        gs.info("GraphQL webhook queued, ECC sys_id=" + eccSysId);
        var status = response.getStatusCode();
        var responseBody = response.getBody();
      // Safe logging (see next section for masking)
         gs.info("GraphQL webhook: status=" + status);
         gs.info("GraphQL webhook: responseBody=" + responseBody);
      } catch (ex) {
        gs.info("GraphQL webhook: Failed: " + 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. 제출을 클릭하십시오.

문제 해결

다음을 통해 문제와 오류를 식별할 수 있습니다.:

  • 시스템 로그: System Logs > All로 이동하여 GraphQL webhook이 포함된 메시지를 검색하십시오.
  • ECC 레코드: https://<작업 인스턴스>.service-now.com/sys_ecc_queue_list.do로 이동하여 기록된 ECC sys_id가 포함된 ECC 레코드를 찾아보십시오.

일반적인 문제

다음은 일반적인 문제와 그 원인 목록입니다:

문제 원인
댓글이 보내지지 않음 댓글 텍스트 비어 있음
계정/스토리 ID 누락 사용자 정의 필드 채워지지 않음
API가 400 반환 잘못된 요청 형식
API가 401 반환 잘못된 API 키

도움이 되었습니까?

0명 중 0명이 도움이 되었다고 했습니다.

댓글 0개