BotkitでSlackのBotをサクッと作る方法

with 1件のコメント

2015年末のSlack App Directoryの発表と同時に公開された、SlackのBotを作るためのフレームワーク Botkit の使い方を解説する。

Slackとプログラムの送受信部分はBotkitがやってくれるため、Botの本質的な部分に集中できるからオススメだ。

 

SlackでBot作成

まずはSlackにアクセスしてBotを作る。

Bot creation page

Botの名前を聞かれるから、好みの名前を入れる。

Slack Botの名前設定画面

 

Add Integrationを押してBotを作り終えると、Botの設定ページへ移る。

このページは、API TokenやBotの名前の変更など、Botにまつわる設定ができる。

Botを開発するため、ページ中ほどのAPI Tokenをコピーしよう。

Slack API Token確認画面

 

Botkitのインストール

Botプロジェクトを作りたいフォルダーへ移り、Botkitを入れる。

 

botkitフォルダーへ移り、依存パッケージをインストールする。

 

サンプルBotを動かす

先ほどのAPI Tokenを使ってサンプルBotを動かしてみる。

※YOUR_API_TOKENを各自のトークンで差し替える。

 

Botを作成したチームの好きなチャンネルに入り、Botを招待する。

※marvinは自分が設定したBot名で差し替える。

 

首尾よく招待できたら、helloと言わせてみよう。

Slack Bot Hello

 

サンプルBotにはいくつかのコマンドがプリセットされている。遊んでみよう。

  • @marvin hello
  • @marvin call me <Other Name> ※<Other Name>には好きなワードを入れる
  • @marvin who am I
  • @marvin shutdown
  • @marvin uptime

Slack Sample Bot Commands

 

Botを実装する

いよいよBotを実装していこう。何を呼びかけても「hahaha」と返す、イカれたBotを作ってみる。

 

Slack Bot API [hears]

Botkitを落としてきたフォルダーにある、bot.jsを開くと、Botkitモジュールの宣言に初期化処理が続き、controller.hears()を呼んでいるのが見て取れると思う。ここに、コマンドと、それに対応した処理を書く。コマンドは正規表現でも設定できるから、かなり高機能なこともできるようになっている。

大まかにはこのような構造となっている。

hears(コマンド名, メッセージの種類, コマンドの処理)

 

hears 第一引数 コマンド名

hears()の第一引数は、どのようなコマンドの処理かを記述する。文字列か、あるいは文字列配列で複数のコマンド名を指定しよう。

例 : hears(‘Hello’~  or  hears([‘Hello’, ‘Hey’ ~

 

このコマンド名には正規表現を使うこともできる。例えば、サンプルBotの call me <Other Name> というコマンドは、このようにコマンド名を設定している。

どのようなコマンドで呼ばれたかは、message.textに入っている。同じくcall me <Other Name>の処理では、メッセージを分解して、<Other Name>の部分を取り出している。

 

hears 第二引数 メッセージの種類

どのような種類のメッセージでコマンドを実行するかをカンマ区切りの文字列で設定する。

メッセージの種類はこのとおり。

※カンマ区切りではなく、文字列配列でも良い。

  • message_received : すべてのメッセージでコマンドを実行する。
  • ambient : メンション以外のメッセージ
  • direct_mention : “@marvin hello”のように、直接メンションされた場合
  • mention : “hello @marvin”のように、メッセージ中でメンションされた場合
  • direct_message : 1対1でメッセージされた場合

 

hears 第三引数 コマンドの処理

botとmessageを引数に取るコマンドの処理を記述する。

botを使ってSlackのAPIにアクセスしたり(bot.api.~)、botから返事させたりする。

例えば、サンプルBotの hello コマンドではこのように使っている。

 

My Botの実装

bot.jsを開き、controller.hears()を全て消し、新たな処理を記述する。

hears()の第一引数を空文字にすれば、すべてのメッセージにマッチするようになる。

全体としてはこのようなコードとなった。

 

実行するとこう。毒にも薬にもならないけれど、絶妙にイライラさせてくれるBotが出来上がった。

slack-marvin-bot.png.formatted

 

 

Webクローラーを作ることを通して、JavaScriptとNode.jsの様々な技術に触れることができる、入門〜中級レベルの本。
 

ECMAScript6 (ES6) のキャッチアップにはこちらがおすすめ。
 

One Response

  1. DC
    |

    触ってみていただいて、ありがとうごございます!botkitの開発チームSlackチャットルームの中で、「日本でもBotktiが使われてます!」と、ビックリしながら、嬉しい話がありました。何かの使い方の質問ありましたら是非 http://dev4slack.xoxco.com/ の中気軽に聞いてくださいませ! よろしくお願いします!