AlertHubで、受信したメッセージの文中から取り出す値について

回答済み

コメント

7件のコメント

  • 正式なコメント
    Kompiraサポートチーム

    ご質問ありがとうございます。回答させていただきます。

    「\S」を使用するとスペース以外の文字にのみマッチしてしまうため、スペースを含めて値を抽出する場合は全ての文字にマッチする「.」を用いて

    変数名:\s*(.+)

    としていただくとうまく抽出できるのではないかと思います。

    踏み込んだ解説

    ここからの解説は少々難易度が高くなりますので、難しければ読み飛ばしていただいて構いません。

    「フィールドから正規表現によって値をひとつ取り出す」機能では、正規表現に「()」で囲われた部分がある場合はその部分にマッチした文字列を、そうでない場合は正規表現全体にマッチした文字列を取り出すようになっております。

    この仕様に照らし合わせて質問に記載していただいた正規表現の動きを見ていきます。

    変数名:\s*(\S+)

    こちらは「変数名:」のうしろに「0個以上のスペース(\s)」と「1個以上のスペース以外の文字(\S)」が続いた場合にマッチします。
    マッチした場合、カッコで囲われている「1個以上のスペース以外の文字(\S)」の部分が結果として抽出されます。

    例えば「変数名: abc def」という文章に対して処理を行うと、「abc」が抽出されます。

    変数名:\s*(\S+)( | )+

    こちらは「変数名:」のうしろに「0個以上のスペース(\s)」と「1個以上のスペース以外の文字(\S)」が続き、さらにその後に「1個以上の半角スペースまたは全角スペース」が続いた場合にマッチします。
    マッチした場合、1つめのカッコで囲われている「1個以上のスペース以外の文字(\S)」の部分が結果として抽出されます。

    例えば「変数名: abc def」という文章に対して処理を行うと、こちらも「abc」が抽出されます。

    変数名:.*

    こちらは「変数名:」のうしろに「0個以上の文字」が続いた場合にマッチします。
    カッコが含まれないため、マッチした場合は全体が結果として抽出されます。

    例えば「変数名: abc def」という文章に対して処理を行うと、その全体である「変数名: abc def」が抽出されます。

    コメントアクション パーマリンク
  • HM

    お世話になっております。ご回答ありがとうございました。

    試してみたのですが、残念ながら改善されず、状態は変わりません。
    ご教示いただいた  変数名:\s*(.+)  で指定したのですが。

    以下にいくつか画像を添付いたします。再度調査していただけますでしょうか?
    よろしくお願いします。

    ・トリガーの加工パラメータ指定(4つ目の error変数 が今回の事例です)

    受信したメッセージ

    連絡履歴で error変数の内容が半角スペースのところで切られております。

    0
    コメントアクション パーマリンク
  • Kompiraサポートチーム

    情報提供ありがとうございます。

    内容については追って確認させていただきますが、添付画像の中に個人情報等にあたる内容が確認されましたので、取り急ぎこちらでマスクをかけさせていただきました。

    本コミュニティへの投稿は他のユーザー様の目に触れる可能性がございますので、情報の取り扱いについては十分ご注意いただければと思います。

    よろしくお願いいたします。

    0
    コメントアクション パーマリンク
  • Kompiraサポートチーム

    お世話になっております。

    いただいた情報を確認してみたところ、トリガーを修正したスコープが「test4_本文が"回数"と等しい_半角全角空白含む」であるのに対し、実際に処理に使われたスコープは「回数テスト」であるようです。

    「回数テスト」の方は正規表現が「error:\s*(\S+)」のまま変えられていない様子なので、それが原因で挙動が変わらなかったものと考えられます。

    諸々の設定について、ご確認ください。
    よろしくお願いいたします。

    0
    コメントアクション パーマリンク
  • HM

    お世話になっております。

    ご担当者様。
    今回、こちらのミスに気付かず問い合わせをしてしまい、誠に申し訳ありませんでした。

    怪我の功名と申してはいけないかもしれませんが、おかげでご担当者様がどこからスコープの違いを見抜いてらっしゃるのか推測することができました。
    連絡履歴のパラメータ一覧の scope のところに Displayname と scopeId がありました。
    こちらから判別されたのではないでしょうか?
    (もし間違っていたら、どうやって見抜いたのかよければご教示ください)

    実は、現在テストをしていて困っていることが幾つかあります。
    業務分析がまだなせいもありますが、AlertHub/Pigeon の各命名ルール(どう運用するか)について悩んでいます。

    理由は以下のようなことです。


    1.連絡履歴から実行アクションが追えない
    (7/15に「そういう仕様だからアクション・コールフロー・ガイダンスの命名の対応付けなど工夫してください。」との回答をいただいていましたが、これは今回のことで追えることが分かりました。
    助かりました。

    2.ルールの処理フローによって実施が制御されているので、マッチング条件がUNIQUEでないとならない。弊社ではマッチング条件にコールフロー名を使うつもりですが、どのメールがどのコールフローと対応するかなどの分析はまだです。

    コールフロー毎に受信スロットを分ける運用にすべきか、御社とのオンラインミーティングでお尋ねしたところ、受信スロットは分けなくても、ルール次第でなんとかなる、とのお話でした。
    でも現在までのところ、やはり何らかのカテゴリーで受信スロットを分けておくことが肝心な気がしています。今は受信スロットは一つで行っていますが、すでに把握が難しくなってきているからです。
    また先日のオンラインセミナーの講師の方は受信スロットを分けていらっしゃいました。

    3.アクションやpigeonの設定は使いまわしができるとのアドバイスもいただきますが、2のことも考えるとよく考えて設計しないといけない気もしています。

    色々書いてしまって恐縮ですが、何か良いアドバイスか、良い導入事例などあれば教えていただけないでしょうか?
    ご迷惑をおかけした上で更にお尋ねして申し訳ありません。

    0
    コメントアクション パーマリンク
  • Kompiraサポートチーム

    連絡履歴のパラメータ一覧の scope のところに Displayname と scopeId がありました。
    こちらから判別されたのではないでしょうか?

    はい、今回はそちらを見てスコープが異なることに気付くことができました。

    連絡履歴から実行アクションが追えない
    (7/15に「そういう仕様だからアクション・コールフロー・ガイダンスの命名の対応付けなど工夫してください。」との回答をいただいていましたが、これは今回のことで追えることが分かりました。

    確かに、先日の回答ではこの点は見落としておりました。
    あくまでPigeon連絡を実行時のパラメーター情報、という見せ方のため使い勝手には欠けますが、表示されているID類は追跡に利用可能と思います。

    でも現在までのところ、やはり何らかのカテゴリーで受信スロットを分けておくことが肝心な気がしています。

    受信スロット分ける/分けないの選択に関しては、選べるの状況であれば分けたほうが良いと考えます。
    理由としては下記の通りです。

    • (ご理解の通り)受信スロットごとにルール・スコープ等をカテゴライズできる
    • 受信スロットが分かれることで、誤ったルール判定を通ってしまうリスクが減る
    • 1つの受信スロットから実行されるルールの数が少ないほうが、処理パフォーマンス上有利(極端に多いケースでなければ無視できますので、これは副次的メリットとお考えください)

    何か良いアドバイスか、良い導入事例などあれば教えていただけないでしょうか?

    AlertHubというよりはシステム開発での方法論由来の話になるのですが、いきなり設定を共通化・汎用化することを考えるよりも、まずは個別に分けた設定としてある程度作成を進めてみてからどこを共通化できるか考えるほうが上手くいくことが多いかと思います。

    分量が多いとこれはこれで大変な作業になってしまうのですが、少しでも参考になれば幸いです。

    よろしくお願いいたします。

    0
    コメントアクション パーマリンク
  • HM

    ご担当者様
    貴重なご意見をありがとうございました。
    参考にさせていただきます。

    取り急ぎ、御礼まで。

    0
    コメントアクション パーマリンク

サインインしてコメントを残してください。