なかしょの技術日誌

業務では非MS系のものばかりですが、ここではMS系の技術やサービスを中心に書いていきたいと思います。

LUISとAzure Bot Serviceを利用してMicrosoft Teamsで在庫管理ボットを動作させる

はじめに

この記事は「Microsoft Cognitive Services & Bot Framework - Qiita」の6日目になります。

概要

自身の前記事のいい加減さに反省して、もう一件記事を書きます。

LUISとAzure Bot Serviceを利用してMicrosoft Teamsで在庫管理ボットを動作させる例を紹介します。

LUISの構築やAzure Bot Serviceの構築はある程度省略しますので、
本記事を読み進める前に以下の記事を読んでいただけると理解が深まります。

beachside.hatenablog.com

beachside.hatenablog.com

LUISの設定

Phrase Listの設定

在庫管理対象となるものをPhrase Listに登録します。
今回はProductという名前で以下のように登録しました。

f:id:nakasho_dev:20161206010143p:plain

Entityの設定

製品のEntityとしてProductを登録します。
実際にはもっと子要素を増やすべきですがサンプルなので割愛します。

f:id:nakasho_dev:20161206010434p:plain

Intentの登録

製品の在庫数を取得するためのIntentをGetZaikoとして作成しました。
Actionパラメータには先ほど作成したPhraseやEntityのProductを指定し、NameもProductとしています。
(※違う名前にしたほうがわかりやすかったです。)

f:id:nakasho_dev:20161206010840p:plain

LUISを学習させる。

GetZaikoとなる文章パターンを覚えさせます。

f:id:nakasho_dev:20161206011212p:plain

f:id:nakasho_dev:20161206011221p:plain

何パターンかSubmitし、Trainで学習させ、Publishします。
「レモンの残りは?」のQueryの結果は以下のようになりました。

f:id:nakasho_dev:20161206013617p:plain

Azure Bot Serviceの実装

LUIS向けのAzure Bot Serviceの初期構築が完了している想定で進めます。

LUIS向けで構築する際に作成されるBasicLuisDialog.csxの末尾に以下のメソッドを登録します。

f:id:nakasho_dev:20161206013654p:plain

記事の可視性のためにメソッド内に処理をすべてまとめています。
実際はDBやWebAPI等からデータを取得することとなります。
今回、Entityが一つである前提のため、result.Entities[0].Entity という取得方法を実施していますが、通常はtypeやscoreの値をみて判断すべきだと思います。

Azure Bot Serviceのチャットウィンドウで動作を確認します。

f:id:nakasho_dev:20161206014211p:plain

期待通り動作しました。

Microsoft Teamsへの登録

https://dev.botframework.com/ にアクセスしてログインします。
Azure Bot Serviceでは作成した時点でMyBotsに登録されているところが便利だと思います。

f:id:nakasho_dev:20161206015126p:plain

Add another channel から Microsoft Teamsの行のAddを選択します。

f:id:nakasho_dev:20161206015144p:plain

Microsoft Teamsとの連携を有効にし、「I'm done configuring Microsoft Teams」のボタンをクリックします。

f:id:nakasho_dev:20161206015756p:plain

ChannelsにMicrosoft Teamsが加わりました。

f:id:nakasho_dev:20161206015803p:plain

Test linkの「Add to Teams」をクリックするとTeamsのアプリケーションが起動し、chatbotとのチャット画面が開きます。

f:id:nakasho_dev:20161206020455p:plain

以上でTeamsとの連携まで完了しました。

まとめ

在庫管理っぽいことをするボットを作成してみました。
例えば製品販売店であれば、実際の在庫管理システムとリンクさせたボットを公開し、顧客の購買部のメンバーが参加するTeamsに登録いただくなんてことも考えられます。
ボットを活用して問い合わせに対する時間が削減できるとよいですよね。

余談

なぜ、今回の記事の連携先にMicrosoft Teamsを選んだかというと、個人でOffice365 Business Premiumを契約しているけど、契約人数が一人のため、Teamsのチャットがつまらなかったからです。
もうこれで1人じゃないよ! このボットは自分自身への最高の誕生日プレゼントです。