MicrosoftBotFramework がSkype用のBotに対応しているので試してみました。
Microsoft Bot Frameworkを経由してSkype用BotとEndpoint用のサーバを通信するのですが、Endpoint用のURLはグローバルからアクセスできて、IPではなくドメインがあってHTTPSで通信できる必要があります。
Azureなどでサーバを借りればいいけど、無料で出来ないかなということでこの条件を満たしていてNode.jsが使えるHerokuを使ってみました。
Microsoft Bot Frameworkの登録
-
Microsoft Bot FrameworkのサイトにMicrosoftアカウントでサインインする。
-
Register Bot でBot情報を登録画面を表示する。
-
Nameは後で変えられるが、Bot handleは後で変えられない。
-
「Messaging endpoint」にBot Frameworkとやり取りするサーバのURLを入れる。
今回はHerokuのURLを入れるがこれは後で指定する。 -
Manage Microsoft App ID and passwordを押して、App IDとpasswordを取得。
passwordは後で表示されないので、取得したらメモしておく。 -
Registerで登録完了する。
-
MyBotsタブにBot情報が登録されていることを確認する。
-
Channelsで使用したいアプリをAddしておく。
今回はSkypeを使用する。「Web Chat」とか「Slack」のほうが設定は簡単かも。
参考URL
https://bita.jp/dml/msframework_webchat
http://qiita.com/ymisono/items/c6096fa62a68dda8001a
Node.JsでEndPoint用Programの作成
下記の記事を参考に作成する。
https://docs.botframework.com/en-us/node/builder/overview/
-
Node.JSをインストールする。
下記のページよりダウンロード&インストール
https://nodejs.org/ja/ -
Bot用のディレクトリを用意して、ディレクトリに移動。その中でnpm initを実行
mkdir mybot
cd mybot
npm init
botbuilderとrestifyをインストール
npm install --save botbuilder
npm install --save restify
server.jsの名前で下記のサンプルを作成。
var restify = require('restify');
var builder = require('botbuilder');
//=========================================================
// Bot Setup
//=========================================================
// Setup Restify Server
var server = restify.createServer();
server.listen(process.env.port || process.env.PORT || 3978, function () {
console.log('%s listening to %s', server.name, server.url);
});
// Create chat bot
var connector = new builder.ChatConnector({
appId: process.env.MICROSOFT_APP_ID,
appPassword: process.env.MICROSOFT_APP_PASSWORD
});
var bot = new builder.UniversalBot(connector);
server.post('/api/messages', connector.listen());
//=========================================================
// Bots Dialogs
//=========================================================
bot.dialog('/', function (session) {
session.send("Hello World");
});
下記のprocess.envの呼び出し方がわからなかったので、
appId: process.env.MICROSOFT_APP_ID,
appPassword: process.env.MICROSOFT_APP_PASSWORD
横着して、直接記載した。AppIDとパスワードはMicrosoft Bot Frameworkの登録のときに取得した値を使用する。
appId: "AppIDの値",
appPassword: "パスワード"
package.jsonも作成して保存
この作り方はちょっと良くわかっていないので、あとで見直す。
Herokuにアップロードする際にこの情報をチェックしてライブラリがインストールされるはず。
{
"name": "mybot",
"version": "1.0.0",
"description": "",
"main": "server.js",
"dependencies": {
"botbuilder": "^3.4.4",
"botkit": "^0.4.0",
"restify": "^4.2.0"
},
"author": "",
"license": "ISC",
"scripts": {
"start": "node server.js"
}
}
参考URL
http://kokudori.hatenablog.com/entry/2013/04/04/025521
Herokuに登録
Node.Jsで作ったプログラムをEndPoint用サーバにデプロイします。
Herokuの場合、Free版だと月に550時間、クレカ登録だと1000時間使えるので、 試しに使うには順分なのでこれを使います。
IBM Bluemixだと無料枠をうまくやりくりすれば24時間稼働も出来るようなので、こっちも試したいです。
参考URL
https://tdenc.com/blog/2016/06/03/heroku-new-free-dyno/
https://www.heroku.com/pricing
http://qiita.com/akameco/items/39a55635ceb0ba185b7f
-
Settings タブを選択、Buildpacksで「heroku/nodejs」を追加する。
-
Deployタブを選択して「 Deploy using Heroku Git 」に書かれている通りに実行する。あとgitはインストール済みの前提。
「git push heroku master」の実行時にファイルのアップロードと環境構築が行われる、
もしエラーが出たら、nodejsのモジュールか、package.jsonが間違っている可能性があるので、ちゃんと動く状態か確認して再度実行。
- Herokuの画面右上にある「Open app」をクリックする。「https://*****.herokuapp.com/」のページが表示され、
下記のレスポンスが返される。
{"code":"ResourceNotFound","message":"/ does not exist"}
このURLはSettingタブの「 Domains and certificates 」の箇所にもある。
このURLをMicrosoft Bot FrameworkのEndPointに設定する。
EndPointの設定
-
Microsoft Bot Frameworkにアクセスして[MyBot]のページを開いて、Editで「Messaging endpoint」に先程のHerokuのURLを入れる。httpではなく、httpsであることを確認すること。
-
[My Bot]の作成した Botのプロフィール画面に戻り、「Test connection to your bot」で「Test」を実行して、Acceptedが帰ってくれば成功。
エラーが帰ってくればEndPointの設定が間違っている。nodejsモジュールの設定、AppID、パスワードの値、Herokuの設定に間違いがないか確認する。
Skypeと通信
- Microsoft Bot Frameworkの [My Bot]画面のChannelsのSkypeの箇所に「Add to Skype」があるのでこれをクリック。
- AddContactを選んで、自分のSkypeクライアントにBotを登録する。
もし、Skypeがインストールされていなかったら、予めインストールしておくこと。 - Skypeが起動して、 Botが登録されていることを確認。
自分がオンラインであればBotもオンラインになるので、もし自分がオフラインになってればオンラインに変更する。
* Botにメッセージを投げて「Hello world」が帰ってきたら成功。
Hello worldだけだと面白くないので、
Github上にサンプルがあるのでこれも試してみる。これは、画像を返したり、質問形式で返したりするサンプルが乗っている。
https://github.com/Microsoft/BotBuilder/tree/master/Node/examples/demo-skype
var builder = require('../../core/');
の部分を
var builder = require('botbuilder');
に置き換えると動いた。
参考URL
https://docs.botframework.com/en-us/csharp/builder/sdkreference/gettingstarted.html
その他
サンプル用のSDKはNode.jsとC#だけですが、他の言語でも出来るみたいです。
参考
MicrosoftBotFrameworkのRestAPIを使ったTimerBot
[MicrosoftBotFrameworkのRESTAPIをPHPで SKYPEに悲しい言葉を吐くボット]
(http://qiita.com/y_kageyamna/items/79cb7c3652e9fbf32e6a#_reference-9262ac5d8282d333e2bb)