【初心者向け】mitoco X 2.0 を使って ServiceNow × Salesforce 連携フローを構築してみた

mitoco X 2.0 を使い、ServiceNow のインシデント情報を Salesforce(ケース)へ自動同期する手順を解説!認証設定から JavaScript でのデータ整形、動作確認までを初心者目線で分かりやすくまとめています。

はじめに

こんにちは!新卒2年目のMです。
今回は mitoco X 2.0 を使って、ServiceNow と Salesforce の自動連携に挑戦しました!
連携初心者が実際に作成した手順を、設定画面や実行ログとともにステップ順に紹介します。

各システムの役割まとめ

★ServiceNow(連携元)
社内エンジニアやIT部門が利用するITSMツール。
今回はトラブル情報である「インシデント(incident)」データを取得します。

★mitoco X 2.0(iPaaS / ハブ)
異なるクラウドシステム同士をコードを書かずに繋ぐデータ連携基盤。
API連携やデータフォーマットの変換を行います。

★Salesforce(連携先)
営業やCSが顧客対応で利用するCRMツール。
連携されたデータは「ケース(Case)」オブジェクトへ登録されます。

今回連携するデータ項目の整理

今回の連携では、ServiceNow のインシデントテーブルから主要な 3 つの項目を取得し、mitoco X 2.0 を経由して Salesforce の「ケース」オブジェクトへ以下のようにマッピングして一括登録します。
ServiceNow 側(取得元) Salesforce 側(登録先:ケース) 備考
number(インシデント番号) ServiceNowNumber__c(ServiceNowID) カスタム項目
short_description(件名) Subject(件名) 標準項目
description(説明) Description(説明) 標準項目
これらをSalesforce の「ケース」レコードから、ServiceNowのインシデント情報を確認できるようにすることを今回のゴールとします!​

事前準備:接続・認証設定(OAuth 2.0)

各システムと mitoco X 2.0 を安全に接続するため、まずは OAuth 2.0 による認証設定と接続設定を行います。

ServiceNow 接続設定

ServiceNow 側での OAuth アプリ登録
ServiceNow の検索窓より、 「Application Registry」 を開き、新規作成で mitoco X 用の OAuth クライアントを作成します。

・Name:mitocoX_Integration
・Redirect URL:mitoco X の認証トークン作成時に発行されるコールバックURL
・Active:True

設定保存後、画面上に表示される Client ID と Client Secret を手元に控えておきます。

mitoco X 側での認証トークン作成
mitoco X のステージ詳細画面から「認証トークン」を新規登録します。

・トークン名:ServiceNow_OAuth_Token
・プラグイン:REST
・認可方式:認可コード (Authorization Code Flow)
・クライアントID:ServiceNow で取得した Client ID
・クライアントシークレット:ServiceNow で取得した Client Secret
・認可エンドポイント URL:https://<インスタンスドメイン>/oauth_auth.do
・トークンエンドポイント URL:https://<インスタンスドメイン>/oauth_token.do
・クライアント認証方式:Client Secret Post

保存後、「トークン取得」ボタンを押して ServiceNow へログイン・認可を行い、ステータスが 「準備完了」 になることを確認します。

mitoco X 側での接続設定作成
プロジェクト詳細の「接続設定」から、フローで呼び出す接続を定義します。

・接続名:ServiceNow_OAuth  
・接続タイプ:REST  
・URL:https://<インスタンス名>.service-now.com  
・認証方式:OAuth認証  
・OAuthトークン:先ほど作成した ServiceNow_OAuth_Token を選択

これで ServiceNow との通信準備は完了です!

Salesforce 接続設定

続いて、連携先となる Salesforce の接続設定を行います。

mitoco X 側での認証トークン作成

・トークン名:Salesforce_DE_Token
・プラグイン:Salesforce
・認可方式:クライアント資格情報 (Client Credentials Flow)
・クライアントID:Salesforce の「外部クライアントアプリケーションマネージャー」で取得した Client ID
・クライアントシークレット:Salesforce の「外部クライアントアプリケーションマネージャー」で取得した Consumer Key
・トークンエンドポイント URL:https://<インスタンスドメイン>/oauth_token.do
・クライアント認証方式:Client Secret Post

保存すると即座に認証が行われ、ステータスが 準備完了 に変わります。

mitoco X 側での接続設定作成

・接続名:Salesforce_DE
・接続タイプ:Salesforce
・ログインURL:https://<インスタンス名>.my.salesforce.com
・APIバージョン:60.0
・OAuth認証有効化:True
・OAuthトークン:先ほど作成した Salesforce_DE_Token を選択

「認証テスト」を実行し、成功することを確認して保存します。

mitoco X 2.0 での連携フロー構築

認証準備が整ったので、データ連携を行うフローを作成していきます。

全体のフロー構成

連携フローの全体像は以下の通りです。4つのコンポーネントを一直線に繋ぐシンプルな構成です。

① API リクエスト送信(RestSendRequest_1)

ServiceNow の Table API エンドポイントを呼び出し、インシデント一覧のデータ(JSON)を取得します。

・接続設定:作成した ServiceNow 接続設定
・メソッド:GET
・パス:/api/now/table/incident

② データ整形とテーブル型変換(expression_1)

API で取得した JSON 配列を後続のマッパーコンポーネントで受けるため、あらかじめフロー変数(テーブル型)を定義し、JavaScript で型変換を行います。

1. フロー変数の作成
フロー設定の「フロー変数」から、以下のように変数を作成します。
・名前:var_table_data
・変数型:テーブル

2. JavaScript コードの実装
スクリプト > JavaScript コンポーネントを配置し、TypeCast ユーティリティを活用して JSON 配列をテーブルデータ形式へ変換して $var_table_data に流し込みます。
// 1. レスポンスの取得とJSONオブジェクト化
const rawString = TypeCast.toString($RestSendRequest_1.get("output"));
const jsonObj = JSON.parse(rawString);

// 2. データ抽出
let resultArray = [];
if (jsonObj && jsonObj.result) {
  resultArray = jsonObj.result;
}

// 3. マッピング項目抽出
const flatArray = resultArray.map(item => ({
  short_description: String(item.short_description || ""), 
  description: String(item.description || ""), 
  number: String(item.number || "") 
}));
console.log("★データ件数: " + flatArray.length + "件");

// 4. TableData へ変換
const arrayString = JSON.stringify(flatArray);
const fileData = TypeCast.toFileData(arrayString);
$var_table_data = TypeCast.toTableData(fileData);
console.log("★テーブルデータへの変換完了");
JavaScript

③ 項目マッピング(Mapper_1)

マッパー > マッパー (テーブル) コンポーネントを使用し、入力データに作成した $var_table_data を指定します。
画面上で、ServiceNow の各フィールドと Salesforce ケースの項目を線で繋ぎます。

・short_description ➔ Subject(件名)
・description ➔ Description(説明)
・number ➔ ServiceNowNumber__c(ServiceNowID:カスタム項目)

④ Salesforce へのレコード追加(SalesforceInsertRecord_1)

マッパーから受け取ったデータを、Salesforce のケース(Case)オブジェクトへバッチ登録します。

・接続設定:作成した Salesforce_DE
・入力データ:$Mapper_1.get("output")
・オブジェクト名:Case
・入力スキーマ定義
 ⇒Subject(件名)
 ⇒Description(説明)
 ⇒ServiceNowNumber__c(ServiceNowID)
・バッチサイズ:200

連携結果の確認

構築したフローを実行し、正常にデータが連携されたかを確認します。

実行ログの確認

mitoco X の実行ログ詳細画面を確認すると、各ステップの処理ログが順に記録されています。
JavaScript 内に仕込んだ console.log の出力により、「★データ件数: 61件」「★テーブルデータへの変換完了」というログメッセージが確認できます。
最終ステータスも Flow execution completed(正常完了)となり、処理が最後まで到達したことがわかります。

Salesforce 画面でのデータ確認

続いて Salesforce の画面に移動し、「ケース(Case)」オブジェクトのレコードを確認します。

Salesforce の画面から、ServiceNowのインシデント情報を確認できました!!!

今回のまとめ

今回は、iPaaS ツール「mitoco X 2.0」を活用し、ServiceNow のインシデント情報を Salesforce のケースオブジェクトへ自動同期する仕組みを構築しました。

OAuth 2.0 による接続設定や、API の JSON レスポンスをテーブル形式へ変換する簡単な JavaScript を挟むことで、UI上でスムーズにデータ連携フローを実現することができました。

手動での転記作業を減らし、リアルタイムな情報共有を行いたい場合に非常に強力な仕組みです。
この記事が、これから mitoco X 2.0 で連携構築に挑戦する方の参考になれば幸いです!