SlackBotを作るSlackBotを作った

こんにちは、Duenoです。 私はデジタルコンサルティング事業部のエンジニアで、普段業務ではMarkeshipというアプリケーションの開発に携わっています。 今回は、SpeeeKaigiで話したSlackBotについて話していきます。

SpeeeKaigiについてはこちら↓

tech.speee.jp

はじめに

Speeeでは現在メインのチャットツールとしてChatWorkが全社的に利用されています。 Slackも利用されており、エンジニアを始めとする一部の社員が利用するチャットツールという位置づけです。 が、 もうすぐSlackがメインになるそうです。

なのでSlackBotを少し使いやすくしてみようと思い、今回私は"Yaya"というアプリケーションを作りました。

動機

Integrationsが痒いところに手が届かなくて困る。

Slackには、他のアプリと連携するIntegrations機能が存在するのですが、あまりカスタマイズ性が高くありません。 そのため、ちょっとデータを加工してBotに発言させたい場合、Botプロセスを何処かで立てる必要が出てきます。 ちょっとしたことなのでわざわざ環境構築からやるのはしんどいので、すでにあるBotに気軽に機能追加出来る環境があると良いなと思いました。

使い方

1.Botキャラクターを作る

f:id:mogmog2:20170314172156p:plain

[キャラ名] キャラ設定 [作りたいキャラ名] [アイコンにしたいURL]

というコマンドを実行すると新しいキャラクターが生成されます。 生成されたキャラクターにコマンドを教えて使います。

2.Botキャラクターにコマンドを教える。

f:id:mogmog2:20170314171920p:plain

[キャラ名] 教える [コマンド名]

でコマンドを教えることが出来ます。 コマンドの内容はRubyのスニペットコードを投稿すると、そのファイルが紐付けられます。 ↑の画像だと、「ぴん」というコマンドに “ぽん!"と発言するRubyプログラムが紐付けられました。

登録したコマンドは

[キャラ名] [コマンド名]! [引数]

で使用することが出来ます。 f:id:mogmog2:20170314171915p:plain

3.状態を読み書きする。

キャラクター毎に状態(key - valueの仕組み)をもたせることが出来ます。 f:id:mogmog2:20170314171916p:plain

これだけだとあまり用途がなさそうですが、プログラムから読み書きすることも出来ます。

4.Webhookのエンドポイントを生成する

f:id:mogmog2:20170314171918p:plain

Botプロセスだけでなく、Webサーバも動いており、Slack上からwebhookのエンドポイントも作成できます。

リクエストを受け取ったときの処理も、コマンドと同様にRubyのスニペットコードとして記述できます。

主な機能は以上です。

構成

f:id:anoChick:20170301005837p:plain

簡単な構成としては↑のようになっています。 f:id:anoChick:20170301013304p:plain

WebhookはRuby on Rails、WorkerはSIdekiqで実装しています。

また、Herokuでの稼働を想定しており、"Deploy to Heroku"ボタンで簡単に環境構築が出来るようになっています。

まだ作りたてなのでそこまで便利につかえてはいないのですが、 基盤としてはとても強力なんじゃないかと思っているので、 機能が増えたらまた記事を書こうと思います。