Microsoft Bot Frameworkを使ってSkypeボットを作る
Microsoft Bot Frameworkというものが4月から使えるようになっていたらしく、今まで作れなかったSkypeボットもそれで動かせるということで試してみました。ボットはheroku上で動かします。数ヶ月の間にちょくちょく仕様が変わっているようで、よく惑わされました。
公式リンク
- 公式ドキュメント: https://docs.botframework.com/en-us/#navtitle
- githubのexample: https://github.com/Microsoft/BotBuilder/tree/master/Node/examples
必要なもの
- Microsoftのアカウント
- herokuのアカウント
- Node.js
流れ
- Bot Builder for Node.js でボットを作る
- herokuにデプロイ
- Developer Portalでボットとして登録
- 登録する過程で得たappIdとappPasswordを環境変数に追加 (or ボットに直書き)
- スカイプチャンネルに対応させる
Bot Builderでボットを作る
$ mkdir mybot $ cd mybot $ npm init $ npm install --save botbuilder $ npm install --save restify
サンプルコードを参考にして、hello worldとだけ返すbot。
// app.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'); });
ボットの機能を左右させる部分はBots Dialogs以下の部分です。Bot SetupではappIdとappPasswordを環境変数から受け取る形式にしているので、appIdとappPasswordがわかり次第、環境変数を設定していきます (まだわからない)。環境変数から受け取らず、直書きしてももちろん大丈夫です。
参考にしたサイトではUniversalBotではなくBotConnectorBotが用いられていたのですが、現在は非推奨のようです。
herokuにデプロイ
$ git init $ heroku create mybot $ echo 'node_modules' > .gitignore $ echo 'web node app.js' > Procfile $ git add . $ git commit -m "First commit" $ git push heroku master
herokuの管理画面でHeroku Domainを確認する (恐らく、mybot.herokuapp.comとなっている)。
Developer Portalでボットとして登録
Register a botでボットを登録します。
- Bot handle : 一意なボットのID (後の変更不可)
- Messaging endpoint : http://[Heroku Domain]/api/messages
- Microsoft App ID : 下のボタンで新しく作る (AdBlockを停止しないと反応しませんでした)。その際パスワードもメモっておく。
- Privacy statement : http://[Heroku Domain]/privacy (今回は適当)
- Terms of Use : http://[Heroku Domain]/terms (今回は適当)
appIdとappPasswordを環境変数に追加
先ほどの環境変数を登録します。 ローカルでは
$ export MICROSOFT_APP_ID=[appId] $ export MICROSOFT_APP_PASSWORD=[appPassword]
heroku上でも環境変数として登録する
$ heroku config:set MICROSOFT_APP_ID="[appId]" $ heroku config:set MICROSOFT_APP_PASSWORD="[appPassword]"
Skypeチャンネルに対応させる
Developer PortalのMy botsの左下でherokuとちゃんとつながっているかTestできます。うまく行くとAcceptedと表示され、エラーなら表示してくれます。参考にしたサイトでは入力のテストもできるようなUIになってましたが、私の時はTestというボタンひとつだけでした。
そして、Skypeチャンネルをaddします。Skypeの[Add to Skype]を押して指示に従うと、ボットとSkype上で会話できるようになります。試しに何かメッセージを送ればHello Worldと返してくれるはずです。
https://join.skype.com/bot/[appID]のリンクで他の人にも紹介できます。ただし公式ドキュメントのQ&Aでは、私的利用や企業内での利用は考慮されていないとあります。調べてみましたが、publishしてない状態でグループにボットを入れることはできなさそうです。