14
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Shinosaka.rbAdvent Calendar 2016

Day 23

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

Last updated at Posted at 2016-12-22

はじめに

さいきん何かと話題の 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

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

14
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?