はじめに
最近PowerPlatformを勉強し始めたまとっちです。
この前、Copilot Studio(旧Virtual Agents)デビューしたのですが、PowerAutomateとの連携のところでハマってしまって、解決に時間が掛かったので、備忘録として残します。
この記事の対象者
- Copilot Studio(旧Virtual Agents)からPowerAutomateに値を渡したい人
背景
PowerPlatformのコミュニティで話を聞いてたら、Claude APIのカスタムコネクタの分かりやすい記事があるのを知って、「おもしろそうなコトができそう…」と思って写経しました。
Claude APIのカスタムコネクタ自体はこの記事通りにやれば簡単に出来たのですが、これをチャットボットで動かしたいって思って、Copilot Studioに初挑戦しました。
この記事を作ったと同時に、ささみさんがハイレベルな記事👇を公開してましたw
- 玄人で本気のボットを作りたい人 → ささみさんの記事を見てね
- 初心者で簡単な設定練習したい人 → この記事を見てね
作ったシステム
システムの流れ
① Copilot Studioでユーザーがメッセージを入力する
② Copilot StudioがPowerAutomateを呼び出す
③ PowerAutomateがClaude APIを呼び出して回答をもらってCopilot Studioに返す
④ Copilot Studioがもらった回答をメッセージとして返信する
詳細設定
下記を順に説明していきます。
- Claude APIのカスタムコネクタ作成
- Copilot Studioでトピック作成(前半)
- PowerAutomateのフロー作成
- Copilot Studioでトピック作成(後半)
Claude PIのカスタムコネクタ作成
ささみさんが1つ1つの設定を丁寧に書いてるので、そのまま写経すれば完成します。
Copilot Studioでトピック作成(前半)
トピックを最初から作成します。
全てのメッセージにClaude APIで回答させたいので、トリガーは「メッセージを受信」にして、アクション呼び出しで「フローの作成」を選ぶと、PowerAutomateが開きます。
PowerAutomateのフロー作成
Copilot Studioで受け取ったメッセージをClaude APIカスタムコネクタに入れて、返ってきたメッセージを再びCopilot Studioに返します。
自分がハマったポイント①
ささみさんの記事を読めば分かるのですが、Claude APIのカスタムコネクタの出力がJSON形式で、body/contentの中は下記の配列になっています。なので、これを取得するために、For eachを使って必要な値を一旦変数に入れてあげる必要があります。
[
{
"type": "text",
"text": "日本で一番高い山は富士山です。標高は3,776mです。富士山は静岡県と山梨県にまたがる成層火山で、日本を代表する名山です。幾つもの山小屋や登山道があり、多くの登山客が訪れる人気の高い山です。夏の山開きから9月頃までが登山シーズンとなっています。富士山の雄大な姿は美しく、日本でも有数の観光名所となっています。"
}
]
※2024/4/27追記
下記の記事で配列内が1つだけの場合の値の取り出し方が載っておりました。
Copilot Studioでトピック作成(後半)
PowerAutomateで作ったフローを選択して、ユーザーからのメッセージを入力に入れて、返ってきた回答をCopilot Studioにメッセージとして返信します。
自分がハマったポイント②
最初、LastMessage.Textの存在を知らずに、どうやったらユーザーのメッセージを受け取れるか、ずっと迷っておりましたが、公式ドキュメントに載ってました👇
実際の動き
おわりに
今回の記事の内容は初歩だと思いますが、僕はハマってしまって、5時間くらい掛かったので、同じようなことで困ってる初心者の方の助けになれば幸いです。