89
93

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MS謹製のbot作成フレームワーク「botbuilder」で遊んでみた!

Last updated at Posted at 2016-04-03

MSさん(人工知能で話題の)が、Bot開発用のフレームワークをBuild 2016にて発表しました。
[速報]マイクロソフト、Bot開発用フレームワーク「Microsoft Bot Framework」を公開。Slack、Skype、メール、SMSなど対応。Build 2016 - Publickey

Bot Frameworkというのは「Connector」「Builder SDK」「Directory」の3要素から構成される、とのことです。エコシステムを作るぞ、というMSの気概を感じますね。。
さてbot用SDK・フレームワークというと、hubotがスタンダードかなぁという風に感じていた中で昨年にはSlackのbotkitもお手軽かわいい感じで話題になったり、その渦中でこのBot Builder。もう本当に大bot時代という感じで。

bot、手軽に組めると色々と仕事や趣味も捗る・・!ので、武器は多いほうが良いですよね。ということで触ってみました。
nodejsです。

この記事では、Slackのbotをとりあえず触りだけ・・という感じで動かしてみましょう。

参考リンク

npmプロジェクト作成

セットアップ

npm init でPJを作成→パッケージのインストール。

npm install --save botbuilder
npm install --save restify

Hello World!

Githubレポジトリには色々なexampleが置かれています。
ここにSlackのサンプルもあるので、参考にしながら下のコードを slack.jsとしてプロジェクトのトップに設置します。


var Botkit = require('botkit');
var builder = require('botbuilder');

var controller = Botkit.slackbot();
var bot = controller.spawn({
     token: process.env.token
});

var slackBot = new builder.SlackBot(controller, bot);
slackBot.add('/', function (session) {
     session.send('Hello World'); 
});

slackBot.listenForMentions();

bot.startRTM(function(err,bot,payload) {
    if (err) {
          throw new Error('Could not connect to Slack');
            }
});

保存したら、早速立ち上げてみましょう。
※Slackのbotトークンは予め取得しておいて下さい
https://slack.com/apps/A0F7YS25R-bots

token=$SLACK_BOT_TOKEN node slack.js

起動中に、botアカウントに1度話しかけると「Hellow world!」と返事をしてくるようになります!

対話をしてみる!

なるほど動いたぞ、ということでもう少し踏み込んでみます。
※Slackのbotに関する記述はこちら。
http://docs.botframework.com/builder/node/bots/SlackBot/

botということで、最低限(でも)必要となるのは「Aと話しかけたらBと答える」という機能です。
動作イメージはこんな感じ。

botbuilder.gif

これをどう実現するか?
BotBuilderでは、この「やりとり」のことを「Dialog」という概念で扱っており、全てのBotは「DialogCollection」として振る舞います。

先ほどのHellow Worldを例に挙げるなら、

slackBot.add('/', function (session) {
     session.send('Hello World'); 
});

というのが、「slackBotに」「/というIDで」「function(){}というDialogを」「addする」ことを意味します。

「呼びかけと返答のパターンが設定されているDialogを、botに持たせる」

非常にシンプルに記述できるので、まずコードから見てみましょう

var Botkit = require('botkit');
var builder = require('botbuilder');
var controller = Botkit.slackbot();
var bot = controller.spawn({
  token: process.env.token
});

var slackBot = new builder.SlackBot(controller, bot);
var dialog = new builder.CommandDialog();

dialog.matches(['Hi', 'Hello', 'こんにちは'], function (session) {
  session.send('こんにちは');
});
dialog.matches('how are you', function (session) {
  session.send('im fine thank you.')
});
dialog.onDefault(function (session) {
  session.send('もう1度言って下さい')
});

slackBot.add('/', dialog);

slackBot.listen(['mention', 'direct_mention']);
bot.startRTM(function(err,bot,payload) {
  if (err) {
    throw new Error('Could not connect to Slack');
  }
});
  • dialog.matches()の第1引数に入力パターンを文字列もしくは文字列のリストで
  • 同じく第2引数にコールバックを
  • どのパターンにもマッチしなかった時の振る舞いとしてonDefault()にコールバックを

記述します。
そして出来上がったDialogを/に登録している、という訳です。
slackBot.listen()の対象をmentionのみにすると、直接のメンション(先頭がユーザー名になっているメンション)は拾ってくれないことに注意して下さい

思ったより長くなってきたので、この記事はここまでにします・・
次は「簡単なやりとり(会話)をする」、というものを書いてみようと思います。

感想

なるほどシンプルに扱えるな!という感じです。
この程度の単純さだと実用性もないですが、書いてみた感じだと「hubotやbotkitと同じくらいシンプル」。
ただ、それらと違うのはBotFrameworkに関しては「単一のbotを手早く作る」という地平に収まっていない・・!という点です。その意味では、ここに書かれた内容はその魅力の数%にも満たないな、という理解。
まだまだ情報も少ないので、「ライバルたちはもう始めている!!」という状況にならないよう、サービス周辺の情報にアンテナを張りつつ、実装に関しても今のうちに色々と遊んでおきたいな〜という感想です!
2016年はbot世紀の始まりを予感させますね!

89
93
4

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
89
93

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?