LINEから送信した内容の種類でトリガーを操作する（Power Automate / Azure Logic Apps）

こんにちわ、 [のりじ](https://x.com/nori790822) です。

LINE Messaging APIは、LINEアプリと外部システムを連携させるためのAPIです。
これを使うことで、LINEを通じて自動的にメッセージを送信したり、ユーザーからのメッセージを受信して処理したりできます。また、「テキスト」「スタンプ」「画像」などいろいろな形式を利用することができます。

LINE Messaging APIは、Power Automate / Azure Logic Appsを使うと、をノーコードで利用することが可能です。
Power Automate / Azure Logic Appsを利用する場合、「テキスト形式のときだけPower Automateで処理を行う」のように、送られてくるメッセージの種類によってトリガーの操作ってできるのか？と気になったので検証してみました。

結論から言うと  **できました！！**
方法を記載しておきます。

:::note info
今回はPower Automateを利用した説明ですが、Azure Logic Appsでも同様の設定ができます。
:::

# 1. Power AutomateでLINE Messaging APIを使う

Power AutomateでLINE Messaging APIを使う場合、「HTTP 要求の受信時」トリガーを利用します。

![20240901_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103396/fd75aa9f-0294-f4a7-91ad-37819bd8cba5.jpeg)

「要求本文のJSONスキーマ」には、以下を利用します。

```
{
    "type": "object",
    "properties": {
        "events": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "type": {
                        "type": "string"
                    },
                    "replyToken": {
                        "type": "string"
                    },
                    "source": {
                        "type": "object",
                        "properties": {
                            "userId": {
                                "type": "string"
                            },
                            "type": {
                                "type": "string"
                            }
                        }
                    },
                    "timestamp": {
                        "type": "integer"
                    },
                    "mode": {
                        "type": "string"
                    },
                    "message": {
                        "type": "object",
                        "properties": {
                            "type": {
                                "type": "string"
                            },
                            "id": {
                                "type": "string"
                            },
                            "text": {
                                "type": "string"
                            }
                        }
                    },
                    "richMenuId": {
                        "type": "string"
                    }
                },
                "required": [
                    "type",
                    "replyToken",
                    "source",
                    "timestamp",
                    "mode",
                    "message",
                    "richMenuId"
                ]
            }
        },
        "destination": {
            "type": "string"
        }
    }
}
```
このJSONは、LINEプラットフォームから受信するイベントデータの形式を定義するスキーマです。
JSONスキーマ自体は受信するデータの形式を定義するものなので、Power Automateのトリガー制御には直接関与しません。
そこで、送られてくるメッセージの種類によってトリガーの操作をしたい場合は、Power Automate側でフィルタリングを行う必要があります。

# 2. LINE Messaging APIの結果

「HTTP 要求の受信時」トリガーの出力結果を見てみます。

![20240901_3-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103396/6f79331c-0d42-b2eb-6548-75258e6dac46.jpeg)


上図の赤枠内の「Type」の部分が受信した内容によって「Type」の種類が変わりました。
テキスト、スタンプ、画像を送ったときのTypeの結果はこちら

- テキスト：text
- スタンプ：sticker
- 画像：image

この結果を利用すると「テキスト形式のときだけPower Automateで処理を行う」が実現できそうです！

# 3. トリガーの条件

Power Automateのトリガーでは、「トリガーの条件」を設定できます。

- [トリガー条件を使用してフロー実行を削減する](https://learn.microsoft.com/ja-jp/power-automate/triggers-introduction?tabs=classic-designer#use-trigger-conditions-to-reduce-flow-runs)

この設定を利用します。

![20240901_3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103396/39e21018-3818-8fd5-3275-8f20afa72c22.jpeg)

「HTTP要求の受信時」トリガーの「・・・」をクリックし「設定」をクリックします。

![20240901_4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103396/93d7f549-6efe-3e2e-62fa-27f5c4b32b7a.jpeg)

以下の内容をコピペします。

```
@equals(triggerBody()?['events'][0]?['message']?['type'], 'text')
```

このトリガー条件は「テキストが送信された場合にトリガーを実行する」という内容です。
スタンプや画像を判定したい場合は、「text」の部分を置き換えると対応できます。

# 4. さいごに

今回の方法は「フロー実行を削減したい」場合に活用できるかと思います。
また、LINE Messaging APIを「HTTP 要求の受信時」トリガーで受信した場合の結果に「送信内容のTypeが含まれている」ことを確認できたのがよかったです。
今回はトリガー条件に利用しましたが、フロー内の判定条件にも使えるので出来ることが増えそうです！