概要
XOpsは、XOpsストーリーと外部サービス管理プラットフォーム間の双方向同期をサポートしています。 この統合は、プラットフォーム全体で調査活動を整合性させ、一方のプラットフォームでの更新が他方に反映されることを可能にします。
詳細については、サービス管理プラットフォームとの双方向統合の作成をご覧ください。
サービスNow 統合の設定
ServiceNowの統合を設定するには、以下のステップを完了します。
ステップ 1: カスタム項目の作成
Cato 管理アプリケーション (CMA) でチケットが発行された際に項目を作成します。
カスタム項目を作成するには:
サービスNow プラットフォームにログインしてください。
任意のインシデントを開きます。
上部のバナーで、右クリックして設定 > フォームビルダーに移動します。
必要に応じて、フォームビルダーを試すことに同意し、デフォルトビューを選択します。
インシデントテーブルに新しいフィールドを追加をクリックします。
これらの項目を追加します:
CMA アカウント ID
種類: 整数
プロパティ: 読み取り専用、必須、アクティブ
CMA ストーリー ID
種類: 文字列
プロパティ: 読み取り専用、必須、アクティブ
ステップ 2: CMA でサービス API キーを作成する
サービス API キーは、外部ツールおよびサービスとのスケーラブルな統合を可能にします。このフォーマットで作成されます: R=<...>|K=<...>。 API キーの作成方法と詳細については、Cato API の API キー生成を参照してください。
サービス API キーを作成した後、それをコピーして保存し、サービスNow プラットフォームに入力できるようにします。
ステップ 3: API キーを安全なシステム プロパティに安全に保存する
サービスNow プラットフォームで、API キーを保存するセキュアなシステムプロパティを作成します。
安全なシステムプロパティを作成するには:
https://<your instance>.service-now.com/sys_properties_list.doに移動
新規をクリックします。
システムプロパティの新規レコードフォームに、この詳細を追加します:

名前: cma_prod_api_key
タイプ:パスワード
値: ステップ 2 で作成したサービス API キー
送信するをクリックします。
ステップ 4: REST メッセージを作成する
ServiceNowのインシデントからCatoに詳細を送信するためにRESTメッセージを作成します:
RESTメッセージを作成するには:
ServiceNow プラットフォームで、すべて>システム Web サービス > アウトバウンド > REST メッセージ に移動します。
新規をクリックします。
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
送信するをクリックします。
ステップ 5: ビジネスルールを作成する
ビジネスルールを作成して REST メッセージをトリガーします。
ビジネスルールを作成するには:
ServiceNow プラットフォームで、すべて > システム定義 > ビジネスルール に移動します。
新規をクリックします。
ビジネスルールの新規レコードフォームに、この詳細を追加します:

名前: ビジネスルールの名前を追加します
テーブル: インシデント
タイミング: 後
更新: 真(チェックボックスにチェックを入れます)
フィルター条件: コメントの変更
高度な設定タブで、このスクリプトを追加します:
(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);送信するをクリックします。
トラブルシューティング
問題やエラーを次のいずれかで特定することができます:
システムログ: システムログ > すべてに移動し、メッセージ
GraphQL webhookを含むものを検索します。ECC レコード: https://<instance>.service-now.com/sys_ecc_queue_list.do に移動し、ログに記録された
ECC sys_idの ECC レコードを見つけます。
一般的な問題
これらは一般的な問題とその原因の一覧です:
問題 | 原因 |
|---|---|
コメントが送信されない | コメントが空 |
アカウントまたはストーリーIDが欠落 | カスタム項目が入力されていない |
API が 400 を返す | リクエスト形式が不正 |
API が 401 を返す | API キーが無効 |