Heroku NodeJSでIFTTT(Maker Channel)のDo NoteからChatWorkへ送る仕組みを作るメモです。前回のIFTTTのMaker Channelとシンプルに接続するHeroku NodeJSのメモから発展させていきます。
ChatWorkはIFTTTのChannelには対応していないので歯痒い思いをしていましたが、IFTTTにMaker Channelができたことで可能です。ChatWorkAPIと疎通できるようにした中継サーバーでメッセージを橋渡しをしてもらい、実現します。
早速やってみましょう。
仕組み
- HerokuにてNodeJSでChatWorkAPIと疎通できるようにして中継サーバーを作ります。
- そして、Do NoteからのメッセージをMaker Channel経由で送ります。
- 先ほどのHerokuサーバーで中継してもらって、ChatWorkでメッセージを喋ってもらいます。
Do Noteのレシピ
Do NoteのレシピはMaker Channelです。レシピのタイトルは自由につけて大丈夫です。
肝となるActionは以下のとおりです。JSONをPOSTで送ります。
前回と比べるとアクセスキー(accesskey)というものを設置して、Heroku内でもアクセスキーを照合しています。
URLがわかってしまうとChatWorkへメッセージ送り放題になるのも怖いので最低限の対策です。
Herokuを作る
立ち上げ
いつものこちらをベースにまず立ち上げます。
Getting Started with Node.js on Heroku | Heroku Dev Center
npmをインストール
出来上がったら主要なnpmをインストールします。
npm install --save express request body-parser
喋らせたいChatWorkのルームIDとアクセストークンを用意
喋らせたいChatWorkのルームIDとアクセストークンを用意します。
APIの使い方まわりは以下の記事わかりやすいです。
実際のコード
以下がコードです。動作させるときのアクセスキーはDo Noteのaccesskeyと一致させましょう。
var express = require('express'); var request = require('request'); var app = express(); var bodyParser = require('body-parser'); app.set('port', (process.env.PORT || 5000)); app.use(express.static(__dirname + '/public')); app.use(bodyParser.urlencoded({extended: true})); app.use(bodyParser.json()); // 動作させるときのアクセスキー(Do Noteのaccesskeyと一致させる) var ACCESS_KEY = 'ABCDEFG'; // ChatWorkのルームID var ROOM_ID = ' '; // ChatWorkのアクセストークン var CHATWORK_ACCESS_TOKEN = ' '; // ChatWorkメッセージ送信 function postMessage(bodyStr){ var request = require('request'); var options = { headers: { 'X-ChatWorkToken': CHATWORK_ACCESS_TOKEN }, json: true }; options.url = 'https://api.chatwork.com/v1/rooms/' + ROOM_ID + '/messages'; options.form = { body: bodyStr }; request.post(options, function (error, response, body) { if (!error && response.statusCode == 200) { console.log(body); }else{ console.log('error: '+ response.statusCode); } }); } app.post('/input', function(req, res){ res.set('Content-Type', 'application/json'); console.log('---------- input'); console.log(req.body); if(req.body.accesskey == ACCESS_KEY){ // アクセスキーが一致すれば送信 postMessage(req.body.message); // ChatWorkメッセージ送信 res.send("{'request':'OK'}"); } else { // NG res.send("{'request':'ERROR'}"); } }); app.get('/', function(request, response) { response.send('Hello ChatWork!'); }); app.listen(app.get('port'), function() { console.log('Node app is running on port', app.get('port')); });
試してみる
さきほどのDo Noteから送ってみます。
リストからchatworkのボタンを選択します。
テキストを入力。
ChatWorkに無事表示されました!
おわりに
このようにIFTTTで対応していないAPIでも、使いたいAPIへ中継できるサーバーを立ててIFTTTのMaker Channelをつかって橋渡しにすれば、やりとりできることがわかりました。
それでは、よきIFTTT&ChatWork&Heroku Lifeを!