はじめに
先日参加したイベントGlobal Power Platform Bootcamp SapporoでPower Virtual Agentsを使ってノーコードでチャットボットを開発できることを知りました。
Microsoft Bot Frameworkはゴリゴリコードを書くのがハードル高くて避けていたのですが、ノーコードならできそうと思ったので会社でのちょっとした手続きを助けてくれるチャットボットを作ってみました。
試してみると非常に高いポテンシャルを感じました。今回作ったのは簡単なボットですが作りようによっては今会社でやっている仕事をかなり効率化できる可能性を秘めたサービスだと思います。
ボットを使うメリット
やることは決まりきったことなんだけど少しだけ変数が必要で全自動化が難しいことを楽にするというメリットがあると思います。
当社は出張の手配を他社へメールでお願いしているのですが、宛先や文面は変わらないのに対しフライトや宿泊地は変わるので、今回このプロセスをボット化してみます。
今回はMicrosoft Teams用のチャットボットを作りますが他にSlackやLINE用のボットが作成できるようです。
Power Virtual Agentsの概要
Build chatbots with no codeと謳っているようにノーコードでパワフルなチャットボットを開発できるMicrosoft Power Platformのサービスの1つです。
Power BIやPower Automate(旧Microsoft Flow)など他のPower系サービスや他のMicrosoftのサービスと連携できるのが良いですね。
イベントではボットの利用結果をPower BIで可視化するデモが行われました。
料金とライセンス
1テナントあたり2000セッションまで月1000ドル
公式サイト
テナントとはなんだろうと調べたのですがわからず、ただ、1テナントの中に複数のボットを作ることができるのは間違いなさそうです。(実際複数できました)
料金がお高い印象ですが、Office365(Business Premium)を使っている当社の1ユーザにすぎない自分が購入プロセス無くそのまま使えたのでOffice365のあるプラン以上を契約しているユーザは使えると思います。
また、Office365ユーザでなくても単体でPVAを契約できると思います。
Microsoft Power Apps,Microsoft Power Automate and Microsoft Power Virtual Agents Licensing Guide
を見たのですが結局理解できず、ライセンスに詳しい方いらっしゃいましたらコメントいただけると幸いです。
ボットの作成
それでは、定形である宛先メールアドレスと文面をユーザが気にすることなく、変数である宿泊地やフライト日時を会話で決めて依頼先へメールを送るというボットを作ります。
出張手配のやり方が自社と違うから導入無理という記事ではなく汎用性高い記事を書いたつもりです。
なので、みなさんもボットを作りたいと思ったときのヒントになれば幸いです。
以下の流れで作成していきます。
1. 会話を始めるときのキーワードの設定
2. 会話の流れの設定
3. 会話する場所の設定
1. 会話を始めるときのキーワードの設定
https://powerva.microsoft.com/
からPower Virtual Agentsへサインインします。
Homeの右上、ロボットのアイコンをクリックしNew botから作成します。
作ったボットを選びTopics > New topicをクリックします。
Trigger phrasesを入力します。
これはチャットボットを呼び出すトリガーとなる発話で、ユーザによって「出張手配」や「出張を手配して」など発話がゆれるため吸収するよう似たような文をいくつか登録すると良いです。あとからでも追加できるのでまずは思いつくものだけ入力しましょう。
その後Go to authoring canvasから会話の流れを設定していきます。
2. 会話の流れの設定
ユーザへの質問作成
キャンバスで会話の流れを作ります。
会話のパーツは
- Show a message:ボットの発話
- Call an action:別のアクションを呼び出す(後述します)
- Ask a question:ボットからの質問
がありますが今回はボットの質問に対するユーザのレスポンスを変数として使いたいのでAsk a questionを選びます。
ユーザへの質問を入力しIndentifyからレスポンスの分類を設定します。
選択肢から選ぶ、都市名など数多くの分類がありますがここではUser's entire response(ユーザの応答全体)を選びます。
発話内容がそのまま変数へ格納されるイメージです。
Cityなど多くのものはまだ日本語対応していないとのことでした。
Save response asはユーザからのレスポンスを格納する変数名です。
名前はあとからわかりやすいよう変えておきましょう。
宿泊地のほかフライト日時が必要なのでIdentifyはDate and timeを選びユーザの発話を日時形式にします。
メール送信処理の設定
次にユーザからのレスポンスを使って出張手配してくれる会社へメールを送る処理を作ります。
ここで、異なる機能のサービスをつなぐPower AutomateをPVAから呼び出すよう設定します。
往路のフライト日時のあとにCall an actionを追加します。
別タブでPower Automateの設定画面が開きます。
ユーザからの入力データの種類を設定します。今回の宿泊地や日時はテキストを選択しました。
ユーザの発話内容が格納された変数をメールのタイトルや本文で使うことができます。
設定が完了したらflowを保存します。
ここでハマりやすいので注意ですが作成したflowをPVAから呼び出すためにもうひと手間必要です。
Power Automateからソリューション > 新しいソリューションで右に表示されるスペースへ表示名などを入力して作成します。
作成したソリューションを選択し既存のものを追加します > フロー
ソリューション外部から作成したflowを選択して追加します。
詳しくは公式サイトに掲載されています。
Power Virtual AgentsからPower Automateを呼び出す
PVAの画面に戻り、先ほどと同じところでCall an actionを選ぶと作成したflowが表示されるので選択します。
さきほどのソリューションへ追加の手順を飛ばしてしまうとここへ表示されないので注意です。
ユーザの発話内容をPower Automateへ渡すようデータを紐づけます。
紐づけるものを同名にしておくと混乱しないと思います。
すべての変数で設定します。
会話の流れとPower Automateの完成版は記事の最後に載せていますので参考にしてください。
ボットの質問に「はい」「いいえ」で答える例も記載しています。
3. 会話する場所の設定
PVAの画面でボットの動作テストができますが、これをチャットボットとして自社で公開してTeamsで使う場合はPublishをします。
Manage > ChannelsからTeamsを選択します。
App IDをコピーしてTeamsで検索するとユーザーのところに作ったボットが出てきます。
クリックして会話してみましょう。
初回呼び出し時は英語でいろいろ出てきますが設定したトリガーフレーズを言うと意図した発話が返ってきます。
実際に使ってみる
もちろんスマートフォンのTeamsアプリでもボットを使えます。
日時はyyyy/mm/dd hh:mmの形式で入力します。
年がなかったり時間がAM、PMどちらかわからない場合はボットが補足してくれます。
該当する日時を選びましょう。
苗字を聞くのはどこどこの○○ですとメールへ記載するためです。
このようにメールが送られます。
日時が海外表記になりますがご愛敬です。
もしこのあたりをこだわる場合はAutomateを使ってデータ加工すれば実現できると思います。
完成形
以下のようになりました。
Power Virtual Agents
Power Automate
今回は宿泊あり飛行機移動前提のボットですがフライト日時から日帰りか宿泊か自動で判定したり、移動手段を選択肢に加えることで様々なケースに対応できると思います。
しかし、一つのボットであまり多くのことをフォローしようとすると複雑になりメンテナンスが大変になるので例えば日帰り出張の場合はトリガーフレーズを「日帰り出張」として別のトピックとして切り出すとシンプルで良いかもしれません。
さいごに:チャットボット作るときに考えること
やることは決まりきったことなんだけど少しだけ変数が必要で全自動化が難しいことを楽にするにはチャットボットが有効ですが、コミュニケーションの取り方には気を付けたいです。
要はいかにうざいと思われずにユーザの目的を達成できるかを重視して会話を設計するのが良いです。
悪い例
たとえば以下のような会話設計はユーザ体験を損ねます。
ユーザ:出張手配
ボット:出張の手配ですね。手配する前に出張申請をし承認されているか確認してください。申請は承認されましたか?
ユーザ:(承認されたから手配してるんだけど)はい
ボット:わかりました。それでは出張先を教えてください。なお移動距離が100㎞未満の場合は日帰り出張となりますのでご注意ください。100㎞を超える場合は宿泊を認めます。宿泊費は1泊につき1万円未満としてください。
ユーザ:(長いな…結局何を答えればってあぁ)大阪
ボット:大阪でよろしいですか?
ユーザ:(だからそう書いたじゃない)はい
ボット:わかりました。行きはどうしますか?
ユーザ:(どうしますかって移動手段のこと?出発時間のこと?)飛行機で移動
ボット:すみませんわかりません。まず出発日時を教えてください。
ユーザ:(最初から時間だと言ってよ)
まとめると
- フレーズが長い
- 質問の意図がわかりづらい
- ユーザにとって明確なことを聞かれる
- 明確な選択肢の提示がなくどう回答したらよいか困る
- ボット使わない方が結局楽
あたりはアンチパターンだと思います。
言葉の受け取り方は人それぞれなので会話設計に正解はないですが一問一答かつ短いやりとりで目的を達成できるようにしたいものです。
Power Virtual Agentsに詳しい人へ聞きたいこと
今回のボットだと
ボット:この内容でよいですか?
ユーザ:いいえ
ボット:最初からやり直してください
となりボットとの会話が終わってしまうので、もう一度質問のところに戻るようにする方法があるかどなたご存知でしたらコメントいただけると幸いです。