プッシュコネクタとの統合

  • リリースバージョン: Xanadu
  • 更新日 2024年08月01日
  • 所要時間:6分
  • プッシュコネクタと統合して外部イベントソースに接続します。プッシュコネクターは、収集されたイベントメッセージを処理し、必要なイベント形式に変換します。

    始める前に

    イベント管理 コネクタ (sn_em_connector) プラグインがインストールされていることを確認します。

    必要なロール:evt_mgmt_admin

    注:
    Paris 以前の Now Platform インスタンスをアップグレードする場合は、従来のリスナー変換スクリプトを使用できます。詳細については、「従来のリスナー変換スクリプトの使用」を参照してください。

    このタスクについて

    プッシュコネクターは、外部イベントソースによって生成されるイベントメッセージを受け入れます。

    外部イベントソースをリッスンするようにコネクターを構成します。カスタムプッシュコネクターを使用して、MID サーバー またはインスタンスを介してイベントメッセージを送信します。

    注:
    汎用 JSON ターゲット URL https:/<<インスタンス>>/api/sn_em_connector/em/inbound_event?source=genericJson を使用してイベントを収集できます。この URL はそのまま使用できますが、イベントルールを構成する必要があります。

    手順

    1. 移動先 すべて > イベント管理 > 統合 > プッシュコネクター.
    2. [新規] をクリックするか、変更するプッシュコネクター ([AWS] や [Azure] など) をクリックします。
    3. フォームのフィールドに入力します。
      フィールド 説明
      名前 このプッシュコネクターを簡単に識別するための一意の名前。
      説明 プッシュコネクターの使用に関する説明を入力します。
      ヘッダー名 値を設定するヘッダーの名前 (Set-Header など) を指定します。
      ヘッダー値 値を設定するヘッダー (Set-Header など) の値。
      タイプ イベントをインスタンスまたは MID のいずれに送信するかを選択します。どの場合も、選択したタイプの URL を使用します。[URL パラメーター値] フィールドの説明を参照してください。
      アクティブ 選択すると、この外部イベントソースからイベントをプルできるようになります。
      順序 同じタイプのイベントに対して複数のルールが定義されている場合に、イベントルールが評価される順番。イベントルールは昇順で評価されます。
      URL パラメーター値
      • イベントをインスタンスに送信します。

        すべてのコネクターで使用する URL の形式:https://<<インスタンス>>/api/sn_em_connector/em/inbound_event?source={URL_parameter_value}

      • MID サーバー を介してイベントを送信します。

        使用する URL の形式:http://{MID_Server_IP}:{MID_Web_Server_Port}/api/mid/em/inbound_event?Transform={Transform_script}

        注:
        MID サーバー にイベントを送信するには、MID Web サービスイベントリスナー拡張を事前に構成しておく必要があります。
    4. [スクリプト] セクションで、以下を実行します。
      • [タイプ] フィールドで選択された値が [MID] の場合、[変換スクリプト] フィールドが表示されます。このフィールドでは、必要な外部イベントソースで生成されるイベントメッセージ、およびスクリプトで必要なイベント形式に解析されるイベントメッセージを受け入れる MID スクリプトインクルードの名前を指定または検索します。スクリプトは TransformEvents_<your source> という命名規則に従います。
      • [タイプ] フィールドで選択された値が [インスタンス] の場合、[スクリプト] エディターが表示されます。[スクリプト] エディターで、必要な外部イベントソースで生成されるイベントメッセージ、およびスクリプトで必要なイベント形式に解析されるイベントメッセージを受け入れる、カスタムスクリプトを入力します。
      次の例 は、変換されて、イベントフォームに追加されるフィールドを示しています。
      (function process(/*RESTAPIRequest*/ request, body) {
      	/*Function that receives a JSON object, adding all its fields to the Additional information object. The field name is a concatenation of the field key and the parent field key if it exists.*/
      	function updateAdditionalInfo(event, field,jsonObject,additionalInfo) {
              for (var key in jsonObject) {
                  var newKey = key;
                  if (field != "") {
                      newKey = field + '_' + key;
                  }
      			// You can do some transformation here and set fields on the event
      			//if(key == "MySource")
      			//   event.source = jsonObject[key];
                  additionalInfo[newKey] = jsonObject[key];
              }
          }
          
          try
      	{		
              gs.info("TransformEvents_generic received body:" + body);
      		var jsonObject = JSON.parse(body);
              var event = new GlideRecord('em_event');
      		event.source = "GenericJson"; //TODO: Need to define
              event.event_class = "GenericJsonClass"; //TODO: Need to define
              event.severity = "5";
      		
              var additionalInfo = {};
              updateAdditionalInfo(event, "",jsonObject,additionalInfo);
      		/*Iterates over Additional information JSON object and adds all nested objects' fields as fields of the Additional information object*/
              var notDone = true;
              while (notDone) {
                  notDone = false;
                  for (var key in additionalInfo) {
                      if (Object.prototype.toString.call(additionalInfo[key]) == '[object Object]') {
                          notDone = true;
                          updateAdditionalInfo(event, key,additionalInfo[key],additionalInfo);
      					additionalInfo[key] = "";
                      }
                  }
              }
      		gs.info("TransformEvents_generic generated additional information:" + JSON.stringify(additionalInfo));
              event.additional_info = JSON.stringify(additionalInfo);
              event.insert();
      	}
      	catch(er){
      		gs.error(er);
      		status=500;
      		return er;
      	}
      	return "success";
      })(request, body);