Azure Bot Service不要！Power AutomateとCopilot Studioで「博多弁LINEボット」を作成してみた話

:::note info
今回の記事は、[Power Automate Advent Calendar 2024](https://qiita.com/advent-calendar/2024/powerautomate)の12月15日担当分の記事です。
:::

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

Microsoft Copilot Studioを何かしらのサービスと連携させる場合、通常であれば「チャネル」の設定をしてAzure Bot Serviceを利用する手順となります。

- [エージェント をAzure Bot Serviceチャンネルに公開します](https://learn.microsoft.com/ja-jp/microsoft-copilot-studio/publication-connect-bot-to-azure-bot-service-channels)

Azure Bot Serviceを使うのって結構ハードル高いな、と個人的に思っているのですが。
Power Automate（クラウドフロー）のコネクタ郡を眺めていたら、気になるコネクタを見つけました。

![ad20241215-01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103396/8a28b924-f294-272c-abcb-6e477fa0f2f1.jpeg)

プレビュー表記はついていますが「Microsoft Copilot Studio」を実行できるコネクタっぽい？です。

このコネクタを見つけた瞬間、わたし思ったんです。
「もしかして、LINE Messaging APIとこのコネクタを使ったら、Copilot Studioと連携させてめちゃくちゃ簡単にLINEボット作れるんじゃない？」と。
それくらいの気軽な気持ちで検証を始めたんですが。

結果、**めちゃくちゃ大変でした・・・。**

また今回は、Copilot Studioをゴリゴリ検証しまくっている [じゅんじゅん](https://x.com/KodamaJn)さん に相談したところ快く協力いただけまして、そのおかげで何とか記事にできるところまで検証できました。
**じゅんじゅんさん、マジでありがとうー！！！（五体投地）**

というわけで、じゅんじゅんさんに記事化OKの許可もいただいたので書き残しておきます。

# 1. 今回やりたいこと

ざっくり図解すると、こんな感じ。

![ad20241215-02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103396/84b629e2-e84c-d24d-c661-a269cd96952d.jpeg)

LINEでメッセージを送信したら、メッセージ内容に対する返答をCopilot Studioで作成し、処理結果をリプライする、という形です。
とてもシンプルなLINEボットですが、LINEで送信するメッセージは内容・文字数とも自由です。

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

Power AutomateでLINE Messaging APIを使う場合、「HTTP 要求の受信時」トリガーを利用する必要があります。
「HTTP 要求の受信時」トリガーで、LINEに投稿されたテキストとリプライに必要なreplyTokenを取得し、後続の処理で利用します。

![ad20241215-03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103396/31d2abaa-c799-2dd2-7a08-130405338afd.jpeg)

「Who can trigger the flow?」は「Anyone」を選択しておきます。
「要求本文の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"
                            }
                        },
                        "required": [
                            "userId",
                            "type"
                        ]
                    },
                    "timestamp": {
                        "type": "integer"
                    },
                    "message": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "type": {
                                "type": "string"
                            },
                            "text": {
                                "type": "string"
                            }
                        },
                        "required": [
                            "id",
                            "type",
                            "text"
                        ]
                    }
                },
                "required": [
                    "type",
                    "replyToken",
                    "source",
                    "timestamp",
                    "message"
                ]
            }
        }
    },
    "required": [
        "events"
    ]
}
```

本記事ではLINE Deveropers側の作成や設定については省力しますが、公式ドキュメントがとてもわかりやすいです！ぜひ一度、確認してみてください。

- [LINE Developersコンソールへのログイン](https://developers.line.biz/ja/docs/line-developers-console/login-account/)

## 1-2. Power AutomateでCopilot Studioを使う場合

スキルコネクタを利用する方法でドキュメントには記載されています。

![ad20241215-04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103396/dac2f8d0-a055-5376-3db1-a1dff9d23b46.jpeg)

- [Power Automate フローを Copilot Studio で使用する](https://learn.microsoft.com/ja-jp/microsoft-copilot-studio/advanced-flow-create)

しかしながら、今回はLINE Messaging APIからの入力内容を使いたいので、トリガーの問題でこの方法は使えません。
というわけで、Power Automate側とCopilot Studio側を力技で連携させていきます。

# 2. Power Automate：フローの作成

Power Automateのフロー全体図はこのような形になります。

![ad20241215-05.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103396/6c1559b3-faaf-be3a-5acc-c128ce3e21b3.jpeg)

「HTTP要求の受信時」トリガーでLINE Messaging APIからメッセージを受け取り、その内容をCopilot Studioに渡します。

![ad20241215-06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103396/9059acad-26ee-f909-dc68-123950609bd2.jpeg)

「Copilot の実行（プレビュー）」アクションは、以下の設定にします。

1. Copilot：連携させたい「エージェント名」を選択
※Power AutomateのフローとCopilot Studioのエージェントは同じ「環境」に作成すること
2. message：トリガーの動的なコンテンツ「replyToken」「Text」を設定
※必ずこの順番に配置すること（のちほど理由を説明）

以上でPower Automateの作成は完了です！

# 3. Microsoft Copilot Studioの設定

Microsoft Copilot Studioの詳しい操作などは本記事では省略します。
イチから知りたい方は、MS Learnにラーニングパスがあるので、参考にされてください。

- [Microsoft Copilot Studio でエージェントを作成する](https://learn.microsoft.com/ja-jp/training/paths/create-extend-custom-copilots-microsoft-copilot-studio/?source=learn)

## 3-1. エージェントの作成

新規でエージェントを作成します。

![ad20241215-07.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103396/a5972bc7-e759-3132-0498-aac37c4e684b.jpeg)

ただエージェントを作るのも面白くないかな？と思って、回答はすべて「博多弁」で返すように指示しています。

## 3-2. トピックの準備

Microsoft Copilot Studioは通常、トリガーとなる「フレーズ」が必要になりますが、今回はLINEメッセージの内容をダイレクトに受け渡し処理をするため「フレーズ」を準備できません。
そこで、フレーズが「意図不明時」に起動するシステム トピック「Conversational boosting」を利用してみます。今回は、システム トピック「Conversational boosting」に独自に追加する部分のみ解説します。

## 3-3. 変数の準備と設定

![ad20241215-09.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103396/83216e8b-20ab-f4ac-c598-b9cb7ef52dbf.jpeg)

トリガーの直下に「変数値を設定する」で、変数「InputText」を作成します。

![ad20241215-08.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103396/46628727-60bf-23e5-28c2-b31fabf1fd2e.jpeg)

Power Automateから、messageとして「replyTokenテキスト」の内容が渡されるので、変数「InputText」に入れるイメージです。

![ad20241215-011.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103396/a71aa2bb-e6ec-0f8a-f799-38c3b1b92883.jpeg)

図のように「replyToken」は、数字とアルファベットの組み合わせで必ず32文字となります。構成的に前半を文字数固定の「replyToken」とすることで、「テキスト」が何文字になっても対応できるように！
この前半「32文字」を基準として、変数「InputText」の値を、Copilot Studioの変数でテキスト部分とreplyToken部分に分割していきます。

![ad20241215-010.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103396/c52539e4-5066-7237-5f19-4c7766e06781.jpeg)

1. 設定する変数：変数「MainText」を作成
2. 設定する値：変数「InputText」からテキストのみを入れるため「計算式」を利用

```
Mid(Topic.InputText,33,Len(Topic.InputText)-32)
```

3. 設定する変数：変数「replyToken」を作成
4. 設定する値：変数「InputText」からreplyTokenのみを入れるため「計算式」を利用

```
Left(Topic.InputText,32)
```

Microsoft Copilot Studioの「計算式」は、Power FXなのでPower Automateの「式」と違うところに注意してください。

## 3-4. HTTP 要求の送信

最後に、LINEにリプライする部分を作成します。

![ad20241215-012-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103396/64c4cd59-7328-81a6-0193-c665fd83738d.jpeg)

LINEにリプライする部分は、Copilot Studioの「詳細」にある「HTTP要求の送信」を利用します。

![ad20241215-012.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103396/610f07e4-6833-0156-c2d1-0c06cc2ba46d.jpeg)

設定内容はPower AutomateでLINEにリプライを送信するときとほぼ同じですが、「本文」はCopilot Studioの処理結果が入るようにします。

```
{
    messages:[
        {
            type:"text",
            text: Topic.Answer
        }
    ],
    replyToken: Topic.replyToken
}
```

「Conversational boosting」の全体図はこちら。（赤枠内が追加した部分）

![ad20241215-013.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103396/01ea8f0a-b8bd-4cb8-fbef-e80c0f913a11.jpeg)

忘れずに「公開」しておきます。

# 4. 実行結果

今回のLINEボットの名前は「サービス連携Botくん」です。
早速話しかけてみます。

![ad20241215-015.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103396/f5df4d1b-251c-b017-e96d-c64ebe9d3bfb.jpeg)

微妙な博多弁でリプライできています。
そして「好きな食べ物」は個人情報らしい。なんでやｗ

![ad20241215-014.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103396/85fc8d17-2bed-ce8e-9746-11c40a90b30d.jpeg)

でも「好きな博多名物」はノリノリで答えてくれました。
色々話しかけてみると、徐々に博多弁もスムーズになっていくのが面白い！

# 5. 最後に

Microsoft Copilot Studioで「チャネル」の設定やAzure Bot Serviceを利用せず、「スキル」トリガー以外のトリガーでPower Automateと連携することができました！
往復の会話などは現時点では難しいですが、色々とできることが広がるなと思ったところです。
検証大変だったけど楽しかった！！