API GatewayとAWS LambdaでSlackのBOTを作ってみた~癒やしの筋肉編~

記事タイトルとURLをコピーする

こんにちは。技術1課の高橋です。

API GatewayとAWS LambdaでSlackのBOTを作ってみました。

今回その作成方法をご紹介します。

 

Slackってなんだ!?

そもそもSlackとは何でしょう。Slackとはコミュケーションツールであり、操作性の良さ、拡張性の高さから特にITエンジニア界隈で人気を高めている注目のサービスです。

サーバーワークスでは社内コミュケーションツールにSlackを利用しております。社員同士でメールをすることはありません。弊社代表の大石が言う通り、Slackでは親近感をもってやりとりができるので楽しいです。

概要

Slack上で、特定の文字を打つと画像を表示してくれるBOTを作ってみます。

Slack APIのOutgoing Webhooksというものを使います。これは特定のチャンネルで特定の文字を打つと、指定したURLに投稿内容をPOSTしてくれるものです。そのPOSTに対して指定された形のJSONを返すことで、Slack上に投稿ができるという仕組みです。

Hubotみたいに複雑なものは作れませんが、簡単にBOTが作れるので楽しいです。

仕組み

AWS Lambdaはイベントドリブン型のコンピューティングサービスであり、API GatewayはREST APIを作成することができるサービスです。

AWS Lambdaは非常に拡張性の高いサービスですので、こんなことができちゃいます。

 

さて今回のBOTですが、SlackのOutgoing Webhooksから、特定の文字が打たれたらAPI Gatewayが発行したAPIを叩くようにします。

API GatewayはAWS Lambdaであらかじめ作成しておいたfunctionを実行します。Lambda functionはflickrのAPIを叩いて画像のURLをJSON形式で取得し、API Gateway経由でSlackに値を返します。返された画像はSlackに投稿されるといったシステムです。

 

muscle_bot382298順を追って説明します。

SlackでOutgoing Webhooksの設定をする

Slackの設定画面からOutgoing Webhooksの設定をします。新たに作成すると、下記のフォームがでてきますので、一つずつ入力していきます。

パラメータ説明
ChannelBOTを動かすチャンネルを選びます
Trigger wordsトリガーとなる単語を記入します
URLs送信先のURLを記入します(API Gateway設定後)
Tokenここに表示されるトークンはJSONの中に含まれますので、どのBOTからきたものかバックエンド側で知ることができます
Descriptive LevelSlack内でなんという名前でBOTを管理するか名前を決めます
Customize Nameここで選択した名前でBOTが投稿します
Customize IconBOTが投稿する時に使用するアイコンを指定します

AWS Lambdaの構築をする

AWS Lambda(以下、Lambda)で、バックエンドの設定をします。

コードを書いてZipファイルに固めてアップロードするだけです。今回、私はJavaScriptで書きました。モジュールは、node_modulesをコードファイルと一緒にZip圧縮すれば使用できます。

余談ですがAWS LambdaはPython,Java,Node.jsに対応しています。(2015年11月19日時点)

今回はFlickrのAPIを叩いて画像のURLを取得してみました。

API Gatewayの設定をする

muscle_bot81212

作成したFunctionの"API endpoint"の欄から、API endpointを作成してください。

Outgoing WebhooksのURLsを設定する

先ほど作成したOutgoing Webhooksの"URLs"の欄に、API endpoint URLを入力してセーブしてください。

これで設定は完了です。

動かしてみよう!

動かしてみましょう。BOTをジョインさせたチャンネルで、指定したキーワードを打ってみます。

ほれ「筋肉」カタカタ ポチー

muscle_result2118310おお、いい感じですね。もういっちょ

muscle_result3103109むむむ、なんぞこれ

結論

  1. API Gateway,LambdaでSlackのBOTができる
  2. 簡単に作れる
  3. 返ってきた画像がしょぼいと萎える

Hubotでできている社内のブリとは異なり複雑なことはできないのですが、簡単に作れるので社内Slackの活性化にいかがでしょうか。サーバ、Herokuの準備は不要ですし、AWS Lambda,API Gatewayともにお安いのでお財布にも優しいです。

ちなみに最近LambdaにSchedule Eventという機能が追加されました。cron形式のスケジュールイベントです。

これとSlackのIncoming Webhooks(SlackへのPOST)を組み合わせることで、定時になったら「蛍の光」のリンクを貼って帰宅を促すこともできちゃいます。

なぜこのBOTを作ったのか

みんなにバルクを感じて欲しかった

それではごきげんよう