サービスNow: XOps ストーリーとの統合の設定

Prev Next

概要

XOpsは、XOpsストーリーと外部サービス管理プラットフォーム間の双方向同期をサポートしています。 この統合は、プラットフォーム全体で調査活動を整合性させ、一方のプラットフォームでの更新が他方に反映されることを可能にします。

詳細については、サービス管理プラットフォームとの双方向統合の作成をご覧ください。

サービスNow 統合の設定

ServiceNowの統合を設定するには、以下のステップを完了します。

ステップ 1: カスタム項目の作成

Cato 管理アプリケーション (CMA) でチケットが発行された際に項目を作成します。

カスタム項目を作成するには:

  1. サービスNow プラットフォームにログインしてください。

  2. 任意のインシデントを開きます。

  3. 上部のバナーで、右クリックして設定 > フォームビルダーに移動します。

  4. 必要に応じて、フォームビルダーを試すことに同意し、デフォルトビューを選択します。

  5. インシデントテーブルに新しいフィールドを追加をクリックします。

  6. これらの項目を追加します:

    • CMA アカウント ID

      • 種類: 整数

      • プロパティ: 読み取り専用、必須、アクティブ

    • CMA ストーリー ID

      • 種類: 文字列

      • プロパティ: 読み取り専用、必須、アクティブ

ステップ 2: CMA でサービス API キーを作成する

サービス API キーは、外部ツールおよびサービスとのスケーラブルな統合を可能にします。このフォーマットで作成されます: R=<...>|K=<...>。 API キーの作成方法と詳細については、Cato API の API キー生成を参照してください。

サービス API キーを作成した後、それをコピーして保存し、サービスNow プラットフォームに入力できるようにします。

ステップ 3: API キーを安全なシステム プロパティに安全に保存する

サービスNow プラットフォームで、API キーを保存するセキュアなシステムプロパティを作成します。

安全なシステムプロパティを作成するには:

  1. https://<your instance>.service-now.com/sys_properties_list.doに移動

  2. 新規をクリックします。

  3. システムプロパティの新規レコードフォームに、この詳細を追加します:

    SN5.png

    • 名前: cma_prod_api_key

    • タイプ:パスワード

    • 値: ステップ 2 で作成したサービス API キー

  4. 送信するをクリックします。

ステップ 4: REST メッセージを作成する

ServiceNowのインシデントからCatoに詳細を送信するためにRESTメッセージを作成します:

RESTメッセージを作成するには:

  1. ServiceNow プラットフォームで、すべて>システム Web サービス > アウトバウンド > REST メッセージ に移動します。

  2. 新規をクリックします。

  3. RESTメッセージフォームに、この詳細を追加します:

    • 名前: REST メッセージの名前を追加します

    • エンドポイント: https://<your Cato account name>.cc.catonetworks.com/api/v1/graphql2

    • 認証の種類: 認証なし

    • HTTPメソッド:新規をクリックし、次の詳細を追加します:

      • 名前: 名前を追加

      • HTTP メソッド: POST

      • エンドポイント: https://<your Cato account name>.cc.catonetworks.com/api/v1/graphql2

  4. 送信するをクリックします。

ステップ 5: ビジネスルールを作成する

ビジネスルールを作成して REST メッセージをトリガーします。

ビジネスルールを作成するには:

  1. ServiceNow プラットフォームで、すべて > システム定義 > ビジネスルール に移動します。

  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: 空のコメント、スキップ " + 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: accountId/storyId がありません " + 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: 失敗:" + 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. 送信するをクリックします。

トラブルシューティング

問題やエラーを次のいずれかで特定することができます:

  • システムログ: システムログ > すべてに移動し、メッセージ GraphQL webhook を含むものを検索します。

  • ECC レコード: https://<instance>.service-now.com/sys_ecc_queue_list.do に移動し、ログに記録された ECC sys_id の ECC レコードを見つけます。

一般的な問題

これらは一般的な問題とその原因の一覧です:

問題

原因

コメントが送信されない

コメントが空

アカウントまたはストーリーIDが欠落

カスタム項目が入力されていない

API が 400 を返す

リクエスト形式が不正

API が 401 を返す

API キーが無効