LoginSignup
10
8

More than 5 years have passed since last update.

Microsoft Bot FrameworkとHerokuとNode.jsを使ってSkype用Botを作る。

Last updated at Posted at 2016-11-19

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情報を登録画面を表示する。
    regbot.png

  • 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の名前で下記のサンプルを作成。

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にアップロードする際にこの情報をチェックしてライブラリがインストールされるはず。

package.json
{
  "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

  • Herokuアカウント登録
    herokutop.png

  • Create New Appで新しいプロジェクトを作成
    herokucreateapp.png

  • 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に悲しい言葉を吐くボット

10
8
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8