ごった煮

色々な事を書いてます

Bot Frameworkを試す

Build2016でBot Frameworkが突然発表されたり何かとBotが取りざたされてるのでとりあえず触ってみました。

Bot Framework

とりあえずざっくりとBot Frameworkの概要について

Bot Frameworkは、MicrosoftのリリースしたBot開発ツールです。

自前でBotを作って、Azureにパブリッシュして(ほかのサーバで公開していいのかよくわからない)、サイトに登録するとBotが公開できるという何とも楽にいろいろできるツールです。

ちょうどVisual Studio Dev Essentialsで少額のAzureライセンスも提供されているので公開するのは誰でも手軽にできる点が嬉しいポイントかなと思われます。

ちなみにBot Frameworkの中の構成要素の一つであるBot Builder SDKは、Githubに公開されているので気に食わない部分やバグを見つけたりしたら積極的にプルリクを出すと幸せになれるかもしれません。

Bot Frameworkの構成要素は、主に以下の3つのようです。

Bot Builder SDK

簡単に言うとBot開発用のSDKです。

C#とNode.jsで開発できます。

 

Bot Connector

BotSNSやメールサービスやらに簡単に接続するための仕組みを提供してくれる部分っぽいです。

Office365とかslackとかSkypeとかsmsとかそういうのとbotの間にこいつがいるイメージです

 

Bot Directory

comming soonってなってるので(2016/04/18現在)今後使えるようになるはずの機能です。

botマーケットプレイスみたいな感じな気がします。(よくわかってない)

 

Bot Framework Emulator

botテストするのにわざわざAzureにデプロイするのかよとか思ってたらローカルで使えるツールが出てました。

Bot Framework Emulator です。

ローカルでサーバにデプロイしたり、Visual Studioからローカルに立ち上げたりしたBotと対話してテストするのに便利です。

難しいことも特に考えずにメッセージを投げられます。

 

C#で開発準備

C#で開発するための拡張みたいなのは特に見つかりませんでしたが、プロジェクトテンプレートが配布されているのでVisual Studioに追加しましょう。

ここ からダウンロードできます。

ダウンロードしたら\User\Documents\Visual Studio 2015\Templates\ProjectTemplates\Visual C#

の中にダウンロードしたフォルダ丸ごと入れて、Visual Studioを立ち上げなおすと下の画像みたいなテンプレートが追加されます。

image

 

こいつからプロジェクトを作るとすぐにC#Botのテンプレートプロジェクトが作れます。

 

ソースコードを見てみる

    [BotAuthentication]
    public class MessagesController : ApiController
    {
        ///

        /// POST: api/Messages
        /// Receive a message from a user and reply to it
        ///

public async Task Post([FromBody]Message message) {

if (message.Type == "Message")

{

// calculate something for us to return int length = (message.Text ?? string.Empty).Length;

// return our reply to the user return message.CreateReplyMessage($"You sent {length} characters");

}

else

{

return HandleSystemMessage(message);

}

}

private Message HandleSystemMessage(Message message)

{

if (message.Type == "Ping")

{

Message reply = message.CreateReplyMessage();

reply.Type = "Ping"; return reply;

}

else if (message.Type == "DeleteUserData")

{

// Implement user deletion here

// If we handle user deletion, return a real message

}

else if (message.Type == "BotAddedToConversation") { }

else if (message.Type == "BotRemovedFromConversation") { }

else if (message.Type == "UserAddedToConversation") { }

else if (message.Type == "UserRemovedFromConversation") { }

else if (message.Type == "EndOfConversation") { }

return null;

}

}

新しいことをいっぱい覚えなきゃいけないのかと思ってたら普通にASP.NET WebAPIでした。

POSTメソッドの引数とかは、Bot Frameworkのライブラリを使ってますが小難しいことは考える必要なさそうです。

HandleSystemMessageメソッドの中でMessageクラスのTypeの中身で分岐させていますがこの部分は、Bot Emulatorで全部アクセス可能です。

image

単純なメッセージは、下の枠にメッセージを書いて右下の紙飛行機マークで送信します。

これを送信すると、MessageクラスのTypeがMessageでメッセージが飛びます。

あとの分岐は、右上の黄色い枠に囲われてる部分でメッセージを選択して分岐させます。

このTypeが作法的に決まってるものなのか自由に選択できるものなのかだいぶ謎(たぶん自由に選べる)

 

恐らく下の画像のパッケージが一番重要っぽいです

image

 

まとめ

Bot開発の作法とか誰かまとめてほしい

いろいろなBotが出てますが、なんとなくFacebookBotが一番個人情報にアクセスしやすそうで可能性が広い気がしました(小並感)

Botよくわかってないのでこまめにブログにまとめるずくが出せれば頑張ります。