沿って, Uav-jp 21/08/2022

Microsoft Power Virtual AgentsでおみくじBotを作る | IIJ Engineers Blog

CONTENTS

【IIJ 2021 TECHアドベントカレンダー 12/12(日)の記事です】

こんにちは。Power Platform全般を担当しているr-itoです。好きなお寿司はたまごです。最近近所のスーパーのだし巻き卵がおいしくてたまりません。

2022年まであと少し。そこで社内用に新年の運勢を占うおみくじBotを用意しようと思いました。せっかくなので最近話題のMicrosoft Power Virtual Agentsを使って実装してみます。これはOffice365製品で、手軽にGUIベースでチャットボットを作ることができます。

おみくじBotということで、おみくじの結果が豊富にあるとよいですよね。そこでおみくじの結果はだれでも編集可能にできるようにしたいと思います。Microsoft Listsというリストを作るアプリで、おみくじの結果を自由に編集できるようにします。

これらを組み合わせ、返答内容をリストから取得して、ランダムにお返事をするBotを実装します。Power Virtual Agents、実はランダムで返事をするのが難しいのでなにかのヒントになったら嬉しいです。

簡単な全体像は以下の通り。

おみくじの結果はMicrosoft Listsで編集保存。これらをユーザに公開し、いじってもらいます。Listsは登録した順に自動でIDが採番されます。これを利用し、IDをランダムで指定すればおみくじになるというわけです。

アルゴリズム部分はPower Automateが担当。Listsの登録件数をLength関数で取得し、ランダム関数で 1~登録件数 の間で数字を生成し、IDとしてリストにアクセスしておみくじ結果を取得します。

あとはVirutalAgentsでユーザにお返事をする仕組みを作れば完成です。

おみくじの結果リストを準備する

実際の作り方をご紹介します。

まずTeams上でMicrosoft Listsを追加し、おみくじリストを作成します。(Microsoft Listsの中身は実際にはただのSharepoint リストなので、後のPower Automateでの処理時はSharepoint コネクタを利用します)

列の表示/非表示のオプションでIDを表示することで、デバッグするのに役立ちます。ランダム値がきちんとIDの範囲に入るかどうか、何番が当たったかがわかりやすくなります。

結果列としてタイトルに運勢を、その次の列にありがたい言葉を用意します。この二つをセットでおみくじBotは返すようにします。

おみくじの結果リストは公開し、社内で自由に追加編集できるようにすることで、気軽にVirtual Agentsに触れられるきっかけになればと思っています。コードを書かなくても自分が作ったおみくじの結果をBotが返してくれたら嬉しいですよね。

Virutal Agentsでトリガーの編集

さて、Listsを準備したらVirtual Agentsの作成に移ります。Virtual Agentsは ユーザから何を話しかけられたら反応するか?(トリガー)と、どういう反応を返すか(キャンバス)で構成されています。

トリガーとして omikuji, おみくじ, 運試し… などとユーザが話しかけたらこの回答パターンを行う、というように実装していきます。トリガーは複数設定してもよいため、キーワードを多めに設定するとフレンドリーになると思います。

Microsoft Power Virtual AgentsでおみくじBotを作る | IIJ Engineers Blog

では、まずおみくじを引いてもらうためのトリガーを準備します。ユーザの入力を予測して、ある程度ファジーな入力に耐えられるようにします。

キーワードを作成したら返答内容、キャンバスの編集に入ります。

Power Automateでランダムなおみくじ結果を取得

おみくじをランダムに排出する部分はPower Automateのアクションに任せます。作成するには アクションを呼び出す から フローの作成を選んでください。そして、Power Virtual Agentsフローテンプレートを選びます。

テンプレートから以下のようなフローを作成していきます。ここでは順に説明いたします。

まず、おみくじのランダム部分について説明します。Listsを使って登録したおみくじの結果を取得するため Sharepointコネクタの 複数項目の取得 を行います。(日本語訳がまったく直感的でない、酷い罠です)

そして結果を格納し、ランダム値を計算するための変数を用意します。コネクタの 変数を初期化する を選び、数式を書きます。

実際の式はこんな感じになります。rand(1,10)で 1~10までの数字を生成することができます。ここの10の部分をListsの登録総数にすればランダムなIDを指定できます。なので length(リストのValue) で登録総数が取得でき、randの部分を置き換えれば完成です。

完成した式を見ると複雑ですが、日本語的に書くと以下のような感じの構造です。乱数取得(最小値=1,最大値=おみくじ結果のリストの長さ)

これで乱数部分ができました。あとは乱数の結果に基づいておみくじの結果を取得します。

Sharepointコネクタの項目の取得からIDに先ほど計算した乱数値の変数をいれます。取得した結果をVirtual Agentsへの返却値としてテキスト形式で入力します。

これでPower Automateの部分は完了です。保存して、Virtual Agentsに戻りましょう。

最終的な返答の設定

Virtual Agentsにもどったあと、Power Automateの結果をお返事にいれます。また、おみくじを引いた人の名前をいれておくと自然さが増すので、bot.UserDisplayNameという標準で入っている変数を使ってユーザの表示名を返信にいれています。

以上でおみくじBot完成です!お疲れ様でした。Botを保存し、テストし、公開することで社内へと展開することができます。

ぜひいっぱいおみくじをひいて、来年もよい年になりますように。

応用編

ここまで書いて気づかれた方もいるかもしれませんが、IDが歯抜けになった場合この方法は破綻します。存在しないIDを取得する可能性があるからです。

対応策としては結果を配列にしてアクセスさせれば解決できます。しかし、簡易的なおみくじだし、性善説でなんとかなるだろうと難しいことはやってません。

初心者が試しに作るならこの程度で十分ですし、デバッグもしやすいかなと。Power Automateの数式は怖がられがちなので、ネタとして触ってもらうのが大事だと思っています。

ちゃんと配列として結果を全て保存し、ランダムにする実装ですが、変数に ?[番号] をつけることで配列にアクセスができます。これを利用します。

rand(0,配列の長さ)を入れればOKなので、以下のような数式になります。variables(‘おみくじリスト格納変数’)?[rand(0,length(variables(‘おみくじリスト格納変数’)))]

ぜひ改良してよりよいBotを作ってみてください。

IIJ Engineers blog読者プレゼントキャンペーン