読者です 読者をやめる 読者になる 読者になる

「人工知能ボットAPI」を使って Slack bot を作ってみた

  
ユーザーローカルから「人工知能ボットAPI提供開始のご案内」というメールが来た。


そういえば1ヶ月ぐらい前にツイッターでプレスリリースが流れてた気がする。
その時に申し込んだような・・・とか思いながら、せっかくだしAPIを何かに使ってみたくなった。
http://ai.userlocal.jp/


普段 slack を使ってるのもあって、とりあえず slack bot を作って、そいつに「人工知能」を組み込んでしゃべらせてみた。

1.slackでbotを作る & Botkitのインストール

残念ながら、なんちゃって技術職の私はbotの作り方すら知らなかった。


さっさと作ってAPIを試したかったので、極力楽できる方法を探してると、おあつらえ向きの記事が見つかった。
http://toach.click/slack-botkit/
http://dotnsf.blog.jp/archives/1054134334.html


1-1 slackでbotを作る

slackにログインした状態でここに飛ぶと、記事に書いてある通り簡単にボットが作れる。
https://my.slack.com/services/new/bot

作った bot は slack 内のどこかのチャンネルに招待しておく。

1-2 Botkitのインストール

ちょうど手元に自由に使えるlinuxマシンがあったので、記事の通り Botkit なる何かをインストール。
どうやらこいつがいろいろやってくれるらしい。


なお、記事に沿ってやっていく中で、API Token を使ってbotを起動する時、rootユーザーでない場合は sudo をつけないと起動しなかった*1

sudo token=YOUR_API_TOKEN node bot.js


起動したら、botにメンションを飛ばしてみて、Hello! とか返ってくることを確認する。

2.botに「人工知能API」を適用する

やっとAPIの部分だ。だがやはりラクに作りたい・・・とか願ってると、ちょうど参考になる記事が見つかった。
http://dotnsf.blog.jp/archives/1054183548.html

ボットの実体は slack_bot.js というファイルらしい*2


このファイル、readme直後の最初の部分には初期設定的な何かが書いてあって、そこから下は

controller.hears( 
    コマンド(≒botが受け取るメッセージ), 
    メッセージの種類(メンションとかダイレクトメッセージとかの指定), 
    function(bot, message){
        :
    (処理の中身)
        :
} );

という塊がいくつか並んでいる。塊の1つひとつが bot の機能になっている。


ということは、この並びの下にAPIを利用した controller.hears(~) を書けばいいんじゃね?となるわけだ。


人工知能ボットAPI」は、リクエストを投げるとJSON形式でメッセージが返ってくる仕様なので、
JSON形式のデータを処理してるコードが見つかればなんとかなるかもしれない・・・


と思ってると、参考記事の最後にJSON形式の戻り値を処理するコードが書かれてたので、「ウヒョー」と言いながら使わせていただく*3

controller.hears([''],'direct_mention', function (bot, message) {
  var massage_text = encodeURI(message.text);
  var request = require( 'request' );
  url = 'https://chatbot-api.userlocal.jp/api/chat?key=YOUR_API_KEY=' + massage_text;
  request( url, function( error, response, body ){
    if( !error && response.statusCode == 200 ){
      var json = JSON.parse( body );
      var bot_reply = json['result'];
      bot.reply( message, bot_reply );
    }
  });
});

コレを slack_bot.js の下に追加して bot を起動すると、うまくいった。

3.実際に話しかけてみる

botの名前は justaway にしてみた(アイコンはアニメ『銀魂』に登場するジャスタウェイ)。

f:id:it_is_fine:20160619025230p:plain

メンションを飛ばしてみると、それっぽい返事「も」返ってくる。
ただ正直な所、今の段階では「なんか会話が噛み合わない」ということも多い。


仕様書にも、「まだ学習の途中なので、今後は会話の質が上がっていく予定」という主旨の説明が書いてあった。


今後この人工知能がどう「発達」していくのか、しばらく様子を見てみよう。

*1:ギーク諸氏には当たり前すぎて言及する価値もなかろうが、linux恐怖症のド素人(つまり私ですが)はこんなことで20分ぐらい悩む。

*2:記事内では bot.js と書いてあるが、ディレクトリ内にあるのは slack_bot.js facebook_bot.js だった。 Botkitがアップデートされて変更になったんかな?

*3:Javascriptなんてまったく知らないが、まあなんとかなった。