IFTTTのMaker Channelとシンプルに接続するHeroku NodeJSのメモ

IFTTTのMaker Channelとシンプルに接続するHeroku NodeJSのメモです。

最近、IFTTTに待望のMakerChannelが出来まして、こちら側から作ったサーバーでIFTTTのチャンネルの情報を受け取ったり、こちら側から作ったサーバーからIFTTTへ情報を送ったりすることが可能になりました。(いままでは、WordPressのIFTTTチャンネルを改造して使えば可能でしたが、よりシンプルなやり方で出来るようになりました。)

早速つなげてみましょう。

まずチャンネルをActivate

IFTTTにMaker Channelができました | スイッチサイエンス マガジン

こちらがわかりやすいです。ということで、まずチャンネルをActivateします。

image_20150701_000017_16

このとおり「Your secrity key is.」の下に書かれているセキュリティキーを覚えておきます。

IFTTT準備

動作イメージ

Maker ChannelによってIFTTTがサーバーから受け取ってGmailを送るレシピと、Maker Channel経由でサーバーへ値を送るDo Noteボタンを作ります。

image_20150701_095838_4

Maker ChannelによってIFTTTがサーバーから受け取ってGmailを送るレシピを作る

Maker Channelが受け取るとGmailを送るレシピを作ります。

image_20150701_002451_30

設定はこんな感じです。

image_20150701_002512_31

Maker Channelのトリガーでは受け取るイベント名をきめます。今回はMyEvent01とします。

image_20150701_002558_33

Gmail Channelの設定は以下のようにしています。

image_20150701_002620_34

Maker Channel経由でサーバーへ値を送るDo Noteボタン

送信用のDo Noteボタンも作ります。

image_20150701_003304_38

レシピのタイトルは区別しやすければ適当でよいです。

  • URLはHerokuのアドレスの input へ送ります。
  • JSONデータをPOSTで {“message”:<送信内容 NoteText>}を送ります。

image_20150701_003315_39

Actionは以下のようにしています。

image_20150701_003325_40

Herokuを作る

立ち上げ

いつものこちらをベースにまず立ち上げます。

Getting Started with Node.js on Heroku | Heroku Dev Center

出来上がったら主要なnpmインストールします。

npm install --save express request body-parser

実際のコード

先ほど作ったレシピとDo Noteボタンに合わせて以下のようにコードを書きます。

  • IFTTT_SECURITY_KEY変数
    • Maker Channelにあったセキュリティキーを使います
var express = require('express');
var request = require('request');
var app = express();
var bodyParser = require('body-parser');

var IFTTT_EVENT_NAME = "MyEvent001";  // イベント名
var IFTTT_SECURITY_KEY = "                 ";  // さきほどのIFTTTのセキュリティキー

app.set('port', (process.env.PORT || 5000));
app.use(express.static(__dirname + '/public'));

app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());

app.get('/', function(request, response) {
    response.send('Hello IFTTT Maker!!!');
});

// IFTTTへ送信
app.get('/output', function(request, response) {
    response.send('output');

    var _request = require('request');

    var options = {
        uri: 'http://maker.ifttt.com/trigger/' + IFTTT_EVENT_NAME + '/with/key/' + IFTTT_SECURITY_KEY,
        form: {
            value1:1,
            value2:2,
            value3:3
        },
        json: true
    };

    console.log('---------- [output]');
    console.log(options);

    _request.post(options, function(error, response, body){
        if (!error && response.statusCode == 200) {
            console.log(body);
        } else {
            console.log('error: '+ response.statusCode);
        }
    });
});

// Do Noteボタンで受け取る
app.post('/input', function(req, res){
    res.set('Content-Type', 'application/json');
    res.send("{'request':'OK'}");
    console.log('---------- [input]');
    console.log(req.body);
});

app.listen(app.get('port'), function() {
    console.log('Node app is running on port', app.get('port'));
});

デプロイして試してみましょう!

試してみる

Maker Channelが受け取るとGmailを出すレシピを試してみる

こちらを試してみます。

image_20150701_002451_30

<HerokuのURL>/output にアクセスしてみると

image_20150701_004115_42

以下のようなメールが来ます。

image_20150701_004128_43

value1,2,3 値も連携できてる!

サーバーへ値を送るDo Noteボタンを試してみる

こちらも

heroku logs --tail

で待ち受けておいて、Do Noteでメッセージを送ります。

image_20150701_004713_1

無事、<HerokuのURL>/inputが受信するのでログが反応します。

image_20150701_004948_46

無事受信できました!

おわりに

ということで、つないでみました。

これができると、いままでIFTTTになかったチャンネルを自作して繋げたり、独自のデバイスからIFTTTを連携したりすることも簡単にできそうです。もちろんIFTTTで本番のものを作るのは荷が重いですが、実際にしっかりしたシステムを組む前のプロトタイピングが捗りそうです。

それでは、よき IFTTT & Heroku NodeJS Lifeを!