Microsoft Teams上で動くチャットボットについて
製品の概要については以下のページからご確認ください。
https://www.mahty-solutions.com/holabot
https://prtimes.jp/main/html/rd/p/000000001.000103237.html
今回はMicrosoft Teamsの開発に当たり、技術的な側面からまとめてみました。
チャットボットの機能について
製品の概要については添付したURLにも記載がありますが、大きく分けると
①Q&A機能
②M365と連携した機能
になります。
今回は技術的な側面から紹介をさせて頂くため、
以下の流れで順番に紹介をしていきます。
・各機能で共通して使用している技術的
・Q&A機能
・M365と連携した機能
各機能で共通して使用している技術について
チャットボットの本体はAzure Bot Serviceを使用し、チャットボットの動作自体はBot Framework(C#)で実装をしています。
イメージは下の図のような感じになります。
ユーザーから送信されたチャットの情報はAzure Bot Serviceを介してBot Frameworkの処理へと送られます。
Bot Frameworkでは、ユーザーから送信されたメッセージによって処理を切り分けるように実装をします。
(※Azure bot serviceでBot Frameworkが稼働しているサーバーのURLをエンドポイントとして設定する必要がありますが、
今回は割愛します。)
ユーザーへメッセージを返答する際にはアダプティブカードを採用しています。
https://learn.microsoft.com/ja-jp/power-automate/overview-adaptive-cards
アダプティブカードには、メッセージ内にボタンを設置することができるため、ユーザーの操作の負担を減らすことができます。
アダプティブカードの使用例です。
ユーザーがボタンを押下すると、メッセージを送信したのと同じようにAzure Bot Service → Bot Frameworkへと処理が送られます。
例えば、「青」のボタンを押下すると「青」など設定しておいた値がAzure Bot Serviceへ送信されます。
アダプティブカードについては別記事でまとめました。
https://qiita.com/rei_441/items/7fa8da44ebe4fbeeba07
Q&A機能について
Q&A機能では、ユーザーからのメッセージに対して、回答を返す機能になっています。
試用している技術はDialogflowです。
https://cloud.google.com/dialogflow
dialogflowにこの質問が来たら、これを返すといった情報を事前に登録しておきます。
質問の内容が曖昧でも、トレーニングフレーズをいくつか設定することで対応できます。
例えば、「経費申請」というワードだった場合。
「経費」
「経費申請」
「申請」
などと設定しておくとこのような質問が来た時に「経費申請」という質問の回答を返答できる
ようになっています。
質問と回答の登録はCSVファイルを取り込み登録ができます。
Q&A機能の処理の流れは以下のようになります。
M365と連携している機能について
M365と連携している機能では、
①Outlookのカレンダーの予定を取得しチャット形式で返答
②Outlookのカレンダーに予定を登録する。
③メンバーを招待して会議を作成する
④会議に招待するメンバー全員の空き時間を提案し、会議の登録まで行う。
この4つの機能を備えています。
それぞれ、まずユーザーがどの機能を使用したいのかを
Bot Frameworkで識別し、ユーザーからのインプットをパラメーターとして自作のAPIを呼び出します。
APIはPHPで実装をしています。
APIではMicrosoft Graph APIを使用し、M365の情報を取得、書き込みを行っています。
処理の流れはこのようになっています。
ユーザーは使用したい機能を選択すると、それぞれ専用のポップアップ画面が立ち上がります。
このポップアップ画面では、日付や時間、会議に招待するメンバーを入力するフォームが備わっています。
基本的にはOutlookで会議や予定を作成する画面と同じような感じになっています。
あとは入力された値をパラメーターとしてAPIの中でGraphAPIを実行し、戻り値をBot Frameworkへ返す。
Bot Frameworkで戻り値を整形しユーザーへメッセージを送信することが一連の流れになります。
使用しているGraphAPIの例は以下となります。
・Outlookのカレンダーから予定を取得する
・Outlookのカレンダーに予定を登録する
・Outlookのカレンダーに会議を登録する
・テナント内にある会議室の一覧を取得する
・テナント内の全ユーザーの情報を取得する
・ユーザーの空き時間一覧を取得する
ちなみにGraphAPIは以下のサイトでM365のアカウントがあり、GraphAPIを実行できる
権限があれば試しに使用することができます。
https://developer.microsoft.com/ja-jp/graph/graph-explorer
これらのGraphAPIを呼び出す処理をPHPで実装してBot Frameworkから呼び出すようにしています。
以上がこのチャットボットで使用している開発目線での技術になります。