アクションで実行したAPIレスポンスを別のステップで使用する方法について
完了ただいま、アクションでPOST APIを実行⇒返ってきたレスポンス内の値を、別のステップで変数として使用 できるようなランブックを作成中です。
https://fixpoint.github.io/runbook-manual/exploit-other-step.html
上記のマニュアル参考に作成していますが、
レスポンス内容をJSON パース後、任意のフィールドに保存された結果から、指定の項目のみを取り出すにはどのように指定したらいいでしょうか。
例:
{
"webhook": {
"ID":"ID-example",
"host":"XXX.X.XXX.X",
"status":"error",
"trigger":"cpu"
}
}
上記フィールド内の「ID」部分の値だけを取得し、次のステップで使用。
現在、オペレーター「フィールドから正規表現によって値を一つ取り出す」を指定していますが、
bad request: srcField <フィールド名>is not string のエラーとなります。
また、実行結果の「入力値」部分を確認すると
メール詳細のmessageパラメータ等も付与されていますが、
必要なパラメータのみをAPI送信時に指定することは可能でしょうか。
-
正式なコメント
ご質問いただきありがとうございます。
以下の通り回答いたします。ご状況拝見したところ、正規表現で取り出そうとしているものが文字列ではないため、エラーとなっている可能性がございます。
詳細を確認させていただきたいため、アクションで情報を取得したステップの出力値を送付いただけますでしょうか。
こちらのコメント欄に貼り付けいただくか、内容が差し支えあるようでしたら営業経由でお送りいただけますと幸いです。入力値については、全てがアクションで送信されるものではなく、該当のステップにおいて受け取った情報が記載されたものとなります。
以上、よろしくお願いいたします。
コメントアクション -
ご回答ありがとうございます。
まず、POSTリクエストを送信するアクションの実行結果(アクション実行履歴)は以下です。
{
"actionId": "<アクションID>",
"status": "succeeded",
"response": {
"statusCode": 200,
"headers": {
"Access-Control-Allow-Credentials": "true",
"Access-Control-Allow-Headers": "DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization",
"Access-Control-Allow-Methods": "GET, PUT, POST, DELETE, PATCH, OPTIONS",
"Access-Control-Allow-Origin": "*",
"Access-Control-Max-Age": "1728000",
"Content-Length": "1031",
"Content-Type": "application/json",
"Date": "Tue, 20 Jun 2023 05:13:58 GMT",
"Request-Id": "xxx",
"Strict-Transport-Security": "max-age=15724800; includeSubDomains",
"X-Azure-Ref": "xxx",
"X-Cache": "CONFIG_NOCACHE",
"X-Powered-By": "Express"
},
"body": "<トークン>"
},
"retryCount": 0,
"maxRetry": 3,
"requestedAt": "2023-06-20T05:13:58.687174966Z",
"startedAt": "2023-06-20T05:13:59.070880084Z",
"updatedAt": "2023-06-20T05:13:59.797795978Z"
}今回はこのレスポンス内「body」の値<トークン>部分のみ、次のアクションで使用したいので、
次のステップで
「steps.<ステップID>.output.body」をJSONパースしてフィールド「response」に保存する
と指定しています。
そちらの実行結果は以下です。{
"message": {
"receiveSlotId": "xxx",
"receiveSlotKind": "email",
"content": {
"subject": "",
"text": "xxx",
"html": "xxx"
},
"metadata": {
"deliveredTo": "xxx",
"from": {
"name": "xxx",
"email": "xxx"
},
"to": [
{
"email": "xxx"
}
],
"date": "2023-06-20T14:13:45+09:00",
"headers": {
"Content-Type": "multipart/alternative; boundary=\"000000000000c67e6505fe88b784\"",
"Date": "Tue, 20 Jun 2023 14:13:45 +0900",
"Dkim-Signature": "xxx",
"From": "xxx",
"Message-Id": "xxx",
"Mime-Version": "1.0",
"Received": [
"xxx"
],
"Subject": "",
"To": "xxx",
"X-Gm-Message-State": "xxx",
"X-Google-Dkim-Signature": "xxx",
"X-Google-Smtp-Source": "xxx",
"X-Received": "xxx"
}
},
"receivedAt": "2023-06-20T05:13:57.006828111Z"
},
"relatedMessageCount": 0,
"space": {
"spaceId": "xxx",
"displayName": "xxx",
"domain": "xxx",
"createdAt": "xxx",
"createdBy": "xxx",
"updatedAt": "xxx",
"updatedBy": "xxx"
},
"scope": {
"scopeId": "xxx"
"displayName": "xxx",
"remarks": "",
"severity": 42,
"thresholds": {
"warning": 1,
"incident": 2
},
"status": "incident",
"muted": false,
"createdAt": "2023-06-06T00:58:33.9062Z",
"createdBy": "xxx",
"updatedAt": "2023-06-06T00:58:33.9062Z",
"updatedBy": "xxx"
},
"scopeSeverities": {
"hostname": 42,
"status": 0
},
"event": {
"eventId": "xxx",
"severity": 42,
"previousSeverity": 41,
"scopeId": "xxx",
"severityName": "xxx",
"method": "increase",
"value": 1,
"messageId": "xxx",
"createdAt": "2023-06-20T05:13:57.674082Z",
"createdBy": "xxx"
},
"trigger": {
"triggerId": "xxx"
},
"steps": {
"xxx": {
"output": {
"statusCode": 200,
"headers": {
"Access-Control-Allow-Credentials": "true",
"Access-Control-Allow-Headers": "DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization",
"Access-Control-Allow-Methods": "GET, PUT, POST, DELETE, PATCH, OPTIONS",
"Access-Control-Allow-Origin": "*",
"Access-Control-Max-Age": "1728000",
"Content-Length": "1031",
"Content-Type": "application/json",
"Date": "Tue, 20 Jun 2023 05:13:58 GMT",
"Request-Id": "xxx",
"Strict-Transport-Security": "max-age=15724800; includeSubDomains",
"X-Azure-Ref": "xxx",
"X-Cache": "CONFIG_NOCACHE",
"X-Powered-By": "Express"
},
"isBodyEncoded": false,
"body": "xxx"
}
}
},
"response"(作成したフィールド): {
"token": "<取得したい値>",
"xxx": {
"xxx": "xxx",
"xxx": "xxx",
"xxx": "xxx"
}
}
}この次のステップでは、「response.token」の値のみをHTTPヘッダに含めたリクエスト送信を行いたいです。ご確認お願いいたします。 -
早速のご返信および出力値をご提示いただきありがとうございます。
ステップでの値の指定について説明いたします。
まず、今回はすでに JSON 形式でリクエストボディを受け取っている状態のため、JSON パースや正規表現による値の取得は不要と思われます。
そのため、ほかのステップやアクションの中で今回対象としている値を指定する場合は、以下の通り指定します。steps.<トークンを取得するアクションのステップ ID>.output.body.token
ただ、恐れ入りますが webhook アクションにおいて任意の値を埋め込めるのは webhook URL とリクエスト本文のみとなっております。(https://fixpoint.github.io/alerthub-manual/notification-content.html)
HTTP ヘッダには埋め込むことができませんので、ご了承のほどお願いいたします。上記を踏まえ、HTTP ヘッダへトークンを含める方法は二点考えられます。
- AlertHub の API で HTTP ヘッダを含めてアクションの設定を編集し、さらにアクションステップを加え設定したアクションを実行する
- 最後に呼びたい API の認証方法を HTTP ヘッダにトークンを入れる方法から変更いただく
※こちらについては実現の可能性は低いかと思われますが、念のためお伝えさせていただきます
直接ご要望にお応えできず申し訳ありませんが、よろしくお願いいたします。
サインインしてコメントを残してください。
コメント
4件のコメント