Heroku NodeJSでIFTTT(Maker Channel)のDo NoteからChatWorkへ送る仕組みを作るメモ
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を!






