\を含むスコープの深刻度およびAPI[イベントの手動呼び出し]について
完了以下のような一連の処理を作成しております。
・メール受信
・スコープで正規表現を使用して深刻度を作成、値を+1、変数(severityName)に深刻度名を代入
・ランブックを実行
・アクションでAPI[イベントの手動呼び出し]を実行、変数の深刻度名の値を「0」に変更
このような処理を作成したところ、
「\」が含まれる文字列に対しては、想定外の挙動だったためご教示いただきたく。
メールから深刻度を作成し、その値を変数に代入した結果が以下となりました。
■深刻度
①深刻度テスト『D:\』
②深刻度テスト『D:\\』
③深刻度テスト『D:\\\』
④深刻度テスト『D:\\\\』
■変数に代入後
①"severityName": "深刻度テスト『D:\\』",
②"severityName": "深刻度テスト『D:\\\\』",
③"severityName": "深刻度テスト『D:\\\\\\』",
④"severityName": "深刻度テスト『D:\\\\\\\\』",
また、この変数に対して以下のAPI[イベントの手動呼び出し]を実行したところ、
以下のような結果となりました。
■実行したリクエスト本文
{
"method": "set",
"severityName": "{{event.severityName}}",
"value": 0
}
■実行結果
①異常終了(400 Bad Request)
②深刻度テスト『D:\』 の値が0に変更
③異常終了(400 Bad Request)
④深刻度テスト『D:\\』 の値が0に変更
想定では①の深刻度を作成し、①の変数に対してAPIを実行した場合は①の深刻度の値に対して変更処理を行いたかったのですが、正しい対象に対してAPIの実行が行えませんでした。
これを解消する方法がありましたらご教示いただきたく。
ご確認のほど、よろしくお願いいたします。
-
お問い合わせありがとうございます。
「\」が含まれる文字列に対しては、想定外の挙動だったためご教示いただきたく。
API[イベントの手動呼び出し]でバックスラッシュを含む深刻度名を指定する場合、
バックスラッシュ は「エスケープ文字」として特別な意味を持つため、””(ダブルクォート)の中にそのまま書くと正しく解釈されずエラーとなります。
バックスラッシュ 1 文字表現するには 「\\」 とバックスラッシュを二重に記述する必要があります。つまり、深刻度を「深刻度テスト『D:\』」と指定したい場合は、次のように書く必要があります。
"severityName": "深刻度テスト『D:\\』"
一方で、以下のように書いた場合は不正な形式となり、APIは 400 エラーを返します。
"severityName": "深刻度テスト『D:\』" // バックスラッシュ不足
"severityName": "深刻度テスト『D:\\\』" // バックスラッシュが不完全ご提示いただいた深刻度①〜④を API で指定する場合は、それぞれ次のような指定をお試しいただけますでしょうか。
① 深刻度テスト『D:\』 → "深刻度テスト『D:\\』" ★1
② 深刻度テスト『D:\\』 → "深刻度テスト『D:\\\\』"
③ 深刻度テスト『D:\\\』 → "深刻度テスト『D:\\\\\\』"
④ 深刻度テスト『D:\\\\』 → "深刻度テスト『D:\\\\\\\\』"(補足)
ご提示いただいた通り、画面上で「深刻度テスト『D:\』」と表示されている深刻度は、ランブックの入力パラメータとしては次のように扱われます。
event {
...
"severityName": "深刻度テスト『D:\\』",
}この入力パラメータでランブックから Body が以下のように記述されているWebhook アクションを実行する場合、{{event.severityName}} は「深刻度テスト『D:\\』」となります。
これは上記 ★1 と同様のAPI呼び出しとなりますので、このアクションをトリガーきっかけのランブックから実行すると、結果、画面上「深刻度テスト『D:\』」と表示されている深刻度がゼロに設定されます。
{
"method": "set",
"severityName": "{{event.severityName}}", // 実際には "深刻度テスト『D:\\』" となる
"value": 0
}ご確認いただけますと幸いです。よろしくお願いいたします。
-
ご確認いただきありがとうございます。
仕様自体は理解しました。
以下のような処理を設定しており、
画像の通りに設定してもうまくいかない原因について、教えていただくことは可能でしょうか。
■処理のフロー
受信スロット⇒スコープ⇒ランブック
■設定内容
スコープの設定として、{{severityName}}という変数を作成し、この名称で深刻度の作成を行っております。
本設定で深刻度(深刻度テスト『D:\\』)の作成は行えました。"scopeSeverities": {
"深刻度テスト『D:\\』": 1
},
"event": {
"eventId": "xxx-xxx-xxx-xxx-xxx",
"severity": 1,
"previousSeverity": 0,
"scopeId": "yyy-yyy-yyy-yyy-yyy",
"severityName": "深刻度テスト『D:\\』",
"method": "increase",
"value": 1,
ランブックに与えられている深刻度名(scopeSeverities)および作成した変数(severityName)も
深刻度テスト『D:\\』となっており一致していることが確認できております。{
"method": "set",
"severityName": "{{event.severityName}}",
"value": 0
}
ランブック内でこの{{event.severityName}}を指定して、値を0に変更するような処理になっており、
変数(severityName)は深刻度テスト『D:\\』となっているため、説明いただいた内容だとリセットされる認識です。
ただし、実際には[400 Bad Request]として異常終了されてしまいます。
この原因について教えていただくことは可能でしょうか。 -
Webhookアクションのヘッダに「Content-Type: application/json」が追加されると、AlertHub はリクエスト本文のデータがJSON形式であると認識し、埋め込んだフィールド値({{event.severityName}} など)を展開する際に自動的に JSON エスケープを行います(今回ヘッダを追加いただくことで400エラーが解消されたのはこちらの挙動により本文内のバックスラッシュが \\ とされて、APIが実行されるようになったためです)。
また、Kompira cloud のAPIは基本的にリクエスト本文がJSON形式であることを期待したものとなっておりますので、本文でデータを送信する際は、ヘッダに「Content-Type: application/json」(=送受信されるデータがJSON形式であることを示しています)を追加してご利用いただければと思います。
よろしくお願いいたします。
サインインしてコメントを残してください。
コメント
7件のコメント