Edited at

Lambda で Chatwork の新しいメッセージを Slack に通知してみる。

More than 1 year has passed since last update.


はじめに

さいきん何かと話題の Serverless に入門したいと思い。

とりあえず、何かやってみよう!ということで、Lambda で身近な課題を解決してみました。

全然関係ないですが。Lambdaを入力するとき、私は心のなかで「ラムバダ」と唱えています。


発明のおかん

業務では主にSlackを使用しているのですが、お客さんの中にはChatworkを常用されているところもあります。

できるだけ、使用するツールを少なくしたいというのと。マシンに優しくしたいということもあり。

できれば、全てのメッセージをSlackでやりたいなと思いました。

ですが。Chatworkへのメッセージの送信をSlackからするのはなかなか難しいかな。。。と思い。。。

Chatworkが更新されたら、通知を受け取って、そのときに初めてChatworkを開くような状態にしたいな(必要だな)と考えるようになりました。


Lambdaにした経緯

こういった場合、主にifttt(Discover IFTTT and Applets - IFTTT)を使用しているのですが、どうもChatworkはiftttに対応されていないようで難しそうです。

APIも調べてみました(チャットワークAPIドキュメント)が、通知をしてくれるような実装はいまのところないようでした(Chatworkさん、今後の機能追加に期待しております)。

Zapier(The best apps. Better together. - Zapier - Zapier)には対応しているようですが、Zapierの無料枠ではちょっと物足りなさそうでした。

そこで、候補に上がったのがLambdaです。

Lambdaを利用すれば、無料枠の範囲で収まりそうだったし、話題の技術ということもあって使ってみることにしました。


主な構成

こんな感じ。

cloudcraft.png

(この図いらんかな。。。w)

LambdaでChatowrkのAPIを定期的にチェックして、新しいメッセージがあればSlackに通知します。

Chatwork の API で差分のみを取得してくれるという、ちょうど良さそうなのがあったため、こちらを使うことにしました(おそらくこういった用途を想定されている感じですね)。


チャットのメッセージ一覧を取得。パラメータ未指定だと前回取得分からの差分のみを返します。(最大100件まで取得)

http://developer.chatwork.com/ja/endpoint_rooms.html#GET-rooms-room_id-messages



で、いきなり完成

で、いきなりじゃじゃーんと完成したコードを掲載しておきます。

Gist: chatwork-to-slack.js

https://gist.github.com/toshima66/4c4df7302ae89f5f53935e4938f92332

時間があまりなかったため、いまいちな内容ですが。。

とりあえず、Token情報などを書き換えれば、すぐに動くものを作ってみました。


ChatworkとSlackの準備

本題ではないため、すっ飛ばしますが。

実際に動かすには Chatworkのtokenと、Slackのweb hook urlが必要です。


さっそく使ってみる

:one: Lambdaを新規作成

Lambda_Management_Console.png

:two: Blank Function を選択

Lambda_Management_Console.png

:three: Trigger に CloudWatch Events - Schedule を選択

Lambda_Management_Console.png

:four: Schedule expression に rate(15 minutes) を選択

15分毎にLambdaが起動されるの意味なので、選択はお好みで。

Lambda_Management_Console.png

:five: 適当な名前をいれて、コードを先程のものに全て入れ替え

Lambda_Management_Console.png

:six: 下の方にいって、適当なRoleを選択(なかったら作る)、Timeout時間を30秒に変更

Lambda_Management_Console.png

:seven: Next → Create

完成!

なのですが、実際には少し時間がかかるみたいです。

あとは、Functionを選択してTestしてみたりして楽しみましょう。


私のSlackに通知が来たところ

Slack_-_6vox.png


まとめ

簡単なコードを書くだけで、気軽にサーバーレスを楽しめますね!

Lambdaすごく便利です。

実際、Nodeの中身を記述するのは結構めんどくさかったりしますが。。

ちょっと遊んで体験してみるには十分かなと思いました。

本格的にやるときはこのあたりを使ってデプロイを自動化したり、テスト書いたりしていくといい感じになりそうです。

Serverless - The Serverless Application Framework powered by AWS Lambda and API Gateway

もうちょっと。遊んでみようと思います。


最後に。

Shinosaka.rb では、Rubyにかぎらずみんなでいろいろなものにチャレンジして(あそんで?)います。

最近はReactの話題が多めかな?w

Shinosaka.rb | Doorkeeper

忘年会の席があと5つほど空いていますね!(2016/12/23現在)

本コミュニティのいわゆる本番というやつですねw

みなさんも、楽しい会にぜひご参加いただければと思います。