2015年末のSlack App Directoryの発表と同時に公開された、SlackのBotを作るためのフレームワーク Botkit の使い方を解説する。
Slackとプログラムの送受信部分はBotkitがやってくれるため、Botの本質的な部分に集中できるからオススメだ。
Contents [hide]
SlackでBot作成
まずはSlackにアクセスしてBotを作る。
Botの名前を聞かれるから、好みの名前を入れる。
Add Integrationを押してBotを作り終えると、Botの設定ページへ移る。
このページは、API TokenやBotの名前の変更など、Botにまつわる設定ができる。
Botを開発するため、ページ中ほどのAPI Tokenをコピーしよう。
Botkitのインストール
Botプロジェクトを作りたいフォルダーへ移り、Botkitを入れる。
botkitフォルダーへ移り、依存パッケージをインストールする。
サンプルBotを動かす
先ほどのAPI Tokenを使ってサンプルBotを動かしてみる。
※YOUR_API_TOKENを各自のトークンで差し替える。
Botを作成したチームの好きなチャンネルに入り、Botを招待する。
※marvinは自分が設定したBot名で差し替える。
首尾よく招待できたら、helloと言わせてみよう。
サンプルBotにはいくつかのコマンドがプリセットされている。遊んでみよう。
- @marvin hello
- @marvin call me <Other Name> ※<Other Name>には好きなワードを入れる
- @marvin who am I
- @marvin shutdown
- @marvin uptime
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が出来上がった。
Webクローラーを作ることを通して、JavaScriptとNode.jsの様々な技術に触れることができる、入門〜中級レベルの本。
ECMAScript6 (ES6) のキャッチアップにはこちらがおすすめ。
One Response
DC
触ってみていただいて、ありがとうごございます!botkitの開発チームSlackチャットルームの中で、「日本でもBotktiが使われてます!」と、ビックリしながら、嬉しい話がありました。何かの使い方の質問ありましたら是非 http://dev4slack.xoxco.com/ の中気軽に聞いてくださいませ! よろしくお願いします!