ほんじゃーねっと

おっさんがやせたがったり食べたがったりする日常エッセイ

IFTTTのMakerチャンネルを使って、いろんなサービスの更新情報を通知してくれる仕組みを作る

仕事でチーム間のコミュニケーションツールとして使い始めたチャットワークだが、

最近は「いろんなサービスやスクリプトからの通知を集めるツール」としての利用がメインになってきている。

www.chatwork.com

以前記事にした、

「Subversionのコミット情報にメンバーがすぐに気づけるように通知するスクリプト」

blog.honjala.net

を書いたのがきっかけで、

この仕組みを流用すればメールを汚さずにいろんな通知を一元管理できるのでは?

と思いついて色々チャットワークに自動通知するスクリプトを書き始めた。

ただ通知するだけなのだけど、ボットが

「ブログのはてブが増えたよ!」とか

「AmazonにKindle本が追加されたよ!」とか

発言してくれることでチェックの手間が減るのが楽しい。

本題

そんな時に、「IFTTTにMakerチャンネルができた」という話を聞いて、

これを使えば自動通知がさらに捗りそうだ、ということで試してみた、というのが今回の本題だ。

IFTTT(If This Then That)とは

EvernoteやTwitter等様々なアプリやWebサービス(チャンネルと呼ばれる)の更新を監視して、

更新が発生するとをあらかじめ登録しておいたアクションを実行してくれるというサービスで、

これを使えばプログラムを自作しなくても手軽に連携の仕組みが作れるという、

自動化心をくすぐられるサービスだ。

ifttt.com

IFTTTは便利なサービスなのだが、以前はチャンネルが用意されていないサービス間の連携がしにくい、という欠点があった。

チャットワークもチャンネルが用意されていない。

それが、Makerチャンネルが使えるようになったことで多少やりやすくなった。

ifttt.com

Makerチャンネルは簡単に言うと「他のチャンネルとWebアプリを連携できる」チャンネルだ。

自作のWebアプリをトリガーとしてMakerチャンネル経由で他のチャンネルを呼び出したり、

特定のチャンネルで更新が発生したら指定したURLにリクエストを飛ばすようなことができる。

これを使えば、何かしらのサービスで更新が発生した時に自作のWebアプリを経由してチャットワークにメッセージを保存する、みたいなこともできるわけだ。

Makerチャンネルを使ってチャットワークに連携するサンプルを作る

試しに、Node.jsで作成したWebアプリ経由で「Date&Timeチャンネルをトリガーに、定時になったらチャットワークに通知するレシピ」を作ってみた。

Webアプリを準備する

まずはIFTTTからアクセス可能なWebアプリを用意する。

ここがややハードルの高いところ。

今回は「http://自分のサーバのドメイン:3000/ifttt/notify_workend」というURLを用意し、

POSTリクエストで「time:時間」「message:メッセージテキスト」をJSON形式で渡すとその内容をチャットワークに送れるようにした。

下記はnode.js + Express4のサンプルソース:

(Webアプリでパラメータを受け取れたら環境は問わないので、Apache + PHP環境とかでも可)

REST API Sample For IFTTT Maker Channel.

こういうものを1つ用意しておけば、URLを追加していくだけでいろんなチャンネルと連携できるようになる。

IFTTTのレシピを作成する

次はITFFF側で用意したURLを呼び出すレシピを作成する。

トリガーとなるチャンネルの選択後、Makerをアクションとして選択して新しいレシピを作成する。

f:id:piro_suke:20160215013908p:plain

アクションの設定を行って、

f:id:piro_suke:20160215013918p:plain

作成したWebアプリのURLとパラメータを定義する。

「Content Type」を「application/json」にしておき、BodyでJSONを渡すようにしている。

f:id:piro_suke:20160215013928p:plain

この内容で登録しておくと、平日の17:30になったら、「Time to leave work」というメッセージが

用意したURLに飛び、そこを経由してチャットルームにメッセージが投稿される。

おわり

とりあえず仕組みが作ってみたが、まだまだ活用法は模索中。

また良い通知レシピを思いついたら試してみたい。

実践Node.jsプログラミング Programmer's SELECTION

実践Node.jsプログラミング Programmer's SELECTION