Help us understand the problem. What is going on with this article?

出張手配してくれるチャットボットをPower Virtual Agentsで作ってみた

はじめに

先日参加したイベントGlobal Power Platform Bootcamp SapporoPower Virtual Agentsを使ってノーコードでチャットボットを開発できることを知りました。
Microsoft Bot Frameworkはゴリゴリコードを書くのがハードル高くて避けていたのですが、ノーコードならできそうと思ったので会社でのちょっとした手続きを助けてくれるチャットボットを作ってみました。

試してみると非常に高いポテンシャルを感じました。今回作ったのは簡単なボットですが作りようによっては今会社でやっている仕事をかなり効率化できる可能性を秘めたサービスだと思います。

ボットを使うメリット

やることは決まりきったことなんだけど少しだけ変数が必要で全自動化が難しいことを楽にするというメリットがあると思います。
当社は出張の手配を他社へメールでお願いしているのですが、宛先や文面は変わらないのに対しフライトや宿泊地は変わるので、今回このプロセスをボット化してみます。
今回はMicrosoft Teams用のチャットボットを作りますが他にSlackLINE用のボットが作成できるようです。

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へサインインします。
FireShot Capture 001 - Sign in - Intelligent Virtual Agents - Microsoft Power Virtual Agents_ - powervirtualagents.microsoft.com.png

Homeの右上、ロボットのアイコンをクリックしNew botから作成します。
FireShot Capture 003 - Power Virtual Agents - Home - powerva.microsoft.com.png

ボット名を決めます。
FireShot Capture 004 - Power Virtual Agents - Home - powerva.microsoft.com.png

作ったボットを選びTopics > New topicをクリックします。
FireShot Capture 007 - Power Virtual Agents - Topics - powerva.microsoft.com.png

Trigger phrasesを入力します。
これはチャットボットを呼び出すトリガーとなる発話で、ユーザによって「出張手配」や「出張を手配して」など発話がゆれるため吸収するよう似たような文をいくつか登録すると良いです。あとからでも追加できるのでまずは思いつくものだけ入力しましょう。
その後Go to authoring canvasから会話の流れを設定していきます。
FireShot Capture 008 - Power Virtual Agents - Topics - powerva.microsoft.com.png

2. 会話の流れの設定

ユーザへの質問作成

キャンバスで会話の流れを作ります。
会話のパーツは

  • Show a message:ボットの発話
  • Call an action:別のアクションを呼び出す(後述します)
  • Ask a question:ボットからの質問

がありますが今回はボットの質問に対するユーザのレスポンスを変数として使いたいのでAsk a questionを選びます。
FireShot Capture 010 - Power Virtual Agents - Topics - powerva.microsoft.com.png

ユーザへの質問を入力しIndentifyからレスポンスの分類を設定します。
選択肢から選ぶ、都市名など数多くの分類がありますがここではUser's entire response(ユーザの応答全体)を選びます。
発話内容がそのまま変数へ格納されるイメージです。
Cityなど多くのものはまだ日本語対応していないとのことでした。

FireShot Capture 012 - Power Virtual Agents - Topics - powerva.microsoft.com.png

Save response asはユーザからのレスポンスを格納する変数名です。
名前はあとからわかりやすいよう変えておきましょう。
FireShot Capture 013 - Power Virtual Agents - Topics - powerva.microsoft.com.png

宿泊地のほかフライト日時が必要なのでIdentifyはDate and timeを選びユーザの発話を日時形式にします。
FireShot Capture 015 - Power Virtual Agents - Topics - powerva.microsoft.com.png

メール送信処理の設定

次にユーザからのレスポンスを使って出張手配してくれる会社へメールを送る処理を作ります。
ここで、異なる機能のサービスをつなぐPower AutomateをPVAから呼び出すよう設定します。

往路のフライト日時のあとにCall an actionを追加します。
FireShot Capture 016 - Power Virtual Agents - Topics - powerva.microsoft.com.png

Create a flowからflowを作ります。
FireShot Capture 017 - Power Virtual Agents - Topics - powerva.microsoft.com.png

別タブでPower Automateの設定画面が開きます。
ユーザからの入力データの種類を設定します。今回の宿泊地や日時はテキストを選択しました。
FireShot Capture 020 - 繝輔Ο繝シ縺ョ菴懈・ - Power Automate - japan.flow.microsoft.com.png

PVAから受け取る値を定義します。
FireShot Capture 021 - 繝輔Ο繝シ縺ョ菴懈・ - Power Automate - japan.flow.microsoft.com.png

入力値を使ってメールを送るアクションを追加します。
FireShot Capture 022 - 繝輔Ο繝シ縺ョ菴懈・ - Power Automate - japan.flow.microsoft.com.png

Outlookを検索しメールの送信を選びます。
FireShot Capture 023 - 繝輔Ο繝シ縺ョ菴懈・ - Power Automate - japan.flow.microsoft.com.png

ユーザの発話内容が格納された変数をメールのタイトルや本文で使うことができます。
設定が完了したらflowを保存します。
FireShot Capture 024 - 繝輔Ο繝シ縺ョ菴懈・ - Power Automate - japan.flow.microsoft.com.png

ここでハマりやすいので注意ですが作成したflowをPVAから呼び出すためにもうひと手間必要です。
Power Automateからソリューション > 新しいソリューションで右に表示されるスペースへ表示名などを入力して作成します。
FireShot Capture 027 - 繧ス繝ェ繝・繝シ繧キ繝ァ繝ウ縺ョ邂。逅・- Power Automate - japan.flow.microsoft.com.png

作成したソリューションを選択し既存のものを追加します > フロー
FireShot Capture 028 - 繧ス繝ェ繝・繝シ繧キ繝ァ繝ウ縺ョ邂。逅・- Power Automate - japan.flow.microsoft.com.png

ソリューション外部から作成したflowを選択して追加します。
FireShot Capture 030 - 繧ス繝ェ繝・繝シ繧キ繝ァ繝ウ縺ョ邂。逅・- Power Automate - japan.flow.microsoft.com.png

詳しくは公式サイトに掲載されています。

Power Virtual AgentsからPower Automateを呼び出す

PVAの画面に戻り、先ほどと同じところでCall an actionを選ぶと作成したflowが表示されるので選択します。
さきほどのソリューションへ追加の手順を飛ばしてしまうとここへ表示されないので注意です。

FireShot Capture 032 - Power Virtual Agents - Topics - powerva.microsoft.com.png

ユーザの発話内容をPower Automateへ渡すようデータを紐づけます。
FireShot Capture 033 - Power Virtual Agents - Topics - powerva.microsoft.com.png

紐づけるものを同名にしておくと混乱しないと思います。
すべての変数で設定します。
FireShot Capture 034 - Power Virtual Agents - Topics - powerva.microsoft.com.png

会話の流れがすべて設定できたらSaveします。
FireShot Capture 033-02 - Power Virtual Agents - Topics - powerva.microsoft.com.png

会話の流れとPower Automateの完成版は記事の最後に載せていますので参考にしてください。
ボットの質問に「はい」「いいえ」で答える例も記載しています。

3. 会話する場所の設定

PVAの画面でボットの動作テストができますが、これをチャットボットとして自社で公開してTeamsで使う場合はPublishをします。
FireShot Capture 037 - Power Virtual Agents - Publish - powerva.microsoft.com.png

Manage > ChannelsからTeamsを選択します。
FireShot Capture 039 - Power Virtual Agents - Channels - powerva.microsoft.com.png

AddをするとApp IDが表示されます。
FireShot Capture 040 - Power Virtual Agents - Channels - powerva.microsoft.com.png

App IDをコピーしてTeamsで検索するとユーザーのところに作ったボットが出てきます。
クリックして会話してみましょう。
FireShot Capture 041 - (1) - Microsoft Teams - teams.microsoft.com.png

初回呼び出し時は英語でいろいろ出てきますが設定したトリガーフレーズを言うと意図した発話が返ってきます。
FireShot Capture 042 - (1) Search - Microsoft Teams - teams.microsoft.com.png

実際に使ってみる

もちろんスマートフォンのTeamsアプリでもボットを使えます。
日時はyyyy/mm/dd hh:mmの形式で入力します。
01.png

年がなかったり時間がAM、PMどちらかわからない場合はボットが補足してくれます。
該当する日時を選びましょう。
02.png

内容よければはいを選びます。
03.png

苗字を聞くのはどこどこの○○ですとメールへ記載するためです。
04.png

このようにメールが送られます。
日時が海外表記になりますがご愛敬です。
もしこのあたりをこだわる場合はAutomateを使ってデータ加工すれば実現できると思います。
mail.png

完成形

以下のようになりました。

Power Virtual Agents

screencapture-powerva-microsoft-2020-02-22-16_54_46.png

Power Automate

screencapture-japan-flow-microsoft-manage-environments-Default-926d0409-4eee-4689-979e-9f4e54fa00ca-flows-c6f5dfde-271b-410f-9329-96633e5605b3-2020-02-22-16_58_54.png

今回は宿泊あり飛行機移動前提のボットですがフライト日時から日帰りか宿泊か自動で判定したり、移動手段を選択肢に加えることで様々なケースに対応できると思います。
しかし、一つのボットであまり多くのことをフォローしようとすると複雑になりメンテナンスが大変になるので例えば日帰り出張の場合はトリガーフレーズを「日帰り出張」として別のトピックとして切り出すとシンプルで良いかもしれません。

さいごに:チャットボット作るときに考えること

やることは決まりきったことなんだけど少しだけ変数が必要で全自動化が難しいことを楽にするにはチャットボットが有効ですが、コミュニケーションの取り方には気を付けたいです。
要はいかにうざいと思われずにユーザの目的を達成できるかを重視して会話を設計するのが良いです。

悪い例

たとえば以下のような会話設計はユーザ体験を損ねます。

ユーザ:出張手配
ボット:出張の手配ですね。手配する前に出張申請をし承認されているか確認してください。申請は承認されましたか?
ユーザ:(承認されたから手配してるんだけど)はい
ボット:わかりました。それでは出張先を教えてください。なお移動距離が100㎞未満の場合は日帰り出張となりますのでご注意ください。100㎞を超える場合は宿泊を認めます。宿泊費は1泊につき1万円未満としてください。
ユーザ:(長いな…結局何を答えればってあぁ)大阪
ボット:大阪でよろしいですか?
ユーザ:(だからそう書いたじゃない)はい
ボット:わかりました。行きはどうしますか?
ユーザ:(どうしますかって移動手段のこと?出発時間のこと?)飛行機で移動
ボット:すみませんわかりません。まず出発日時を教えてください。
ユーザ:(最初から時間だと言ってよ)

まとめると

  • フレーズが長い
  • 質問の意図がわかりづらい
  • ユーザにとって明確なことを聞かれる
  • 明確な選択肢の提示がなくどう回答したらよいか困る
  • ボット使わない方が結局楽

あたりはアンチパターンだと思います。
言葉の受け取り方は人それぞれなので会話設計に正解はないですが一問一答かつ短いやりとりで目的を達成できるようにしたいものです。

Power Virtual Agentsに詳しい人へ聞きたいこと

今回のボットだと
ボット:この内容でよいですか?
ユーザ:いいえ
ボット:最初からやり直してください
となりボットとの会話が終わってしまうので、もう一度質問のところに戻るようにする方法があるかどなたご存知でしたらコメントいただけると幸いです。

mongamae-nioh
ダイレクトマーケティングエージェンシーでインフラエンジニア兼チームのマネジメントをしています。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした