はじめに
※この投稿は、LINEのメッセージをGoogle Homeで読み上げる(機能強化版)を実装済みで更に機能強化を求む人向けの投稿です。
LINEのメッセージをGoogle Homeで読み上げる(機能強化版)を使って、個人的に機能強化も加えたりして遊んでいたんですが、ついにMicrosoft flowの無料で750回のAPIコール/月の上限に達しました。
むしゃくしゃして課金しようとしたんですが、
- アカウント作るのに独自ドメインのメールアドレスが必要
- USD $5.00/月と、個人で楽しむにしては高いコストがかかる
ので、やっぱりむしゃくしゃしてLINE Messaging APIからのWebhook呼び出しをBeebotteに垂れ流すnodejsサーバを書きました。っていう話。
この話を理解するには以下の知識が必要になります。
- nodejsの使い方
- かんたんなサーバ・クライアントの知識
-
Glitchの基礎知識。(以下をどうぞ)
- [Node.js] 無料で簡単にウェブアプリを公開できるサービス「Glitch」を使ってみた!
- ThimbleからGlitchへ移行する方法と注意点!+ Glitchってどんなサービス?【ざっくりまとめ】
- 簡単に言うと、nodejsがかける無料サーバだよ!無料だからちょっと制限あるけど、開発や小規模APIを作るならもってこい。
特徴・できること
-
LINE Messaging APIからのWebhook呼び出しをBeebotteに垂れ流すサーバ
- 「LINEのWebhookリクエストの内容は{events:[{<メッセージ内容>}]となっていますが、BeebotteのREST APIは{data:{}}の形式しか受け付けない」ため、要素名を書き換えてBeebotteに送りつけるサーバ。
- Microsoft Flowの無料750回APIコール/月を突破し、4000回/時のアクセスまでできる。およそ月に約28万アクセスできる計算。どのご家庭にもあるbot込の家族lineグループなら安心の帯域量!
- Microsoft Flowのときはチェックしていなかった、
X-Line-Signature(LINE developersを参照)を検証する。確実にLINEサーバからのメッセージしか通さない。
ソースちょーだい
プロジェクト自体は、githubで公開しています。※ただ、まだ動くだけの書き捨てコード状態。
インストール手順
Glitchで新規プロジェクトを作成。
# npm i crypto body-parser で必要なパッケージをインストール。
.envにLINEのCHANNEL_SECRETとBEEBOTTEのTOKENを書いて、server.jsもコピペする。
LINE_CHANNEL_SECRET='[SECRET]'
BEEBOTTE_TOKEN='[TOKEN]'
const express = require('express');
const crypto = require("crypto");
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.json({verify: function (req, res, buf, encoding) {
function validate_signature(signature, body) {
const LINE_CHANNEL_SECRET = process.env.LINE_CHANNEL_SECRET;
return signature == crypto.createHmac('sha256', LINE_CHANNEL_SECRET).update(body).digest('base64');
}
//test signature
if (!validate_signature(req.headers['x-line-signature'], buf)) {
throw new Error('Invalid signature.');
}
}}));
//リクエストがあったら応答
app.post('/api/lineToBeebotte', function(req, res, err) {
const events = req.body.events;
const resJson = {
data: req.body.events
};
const request = require('request-promise');
console.log(resJson);
request({
url: 'https://api.beebotte.com/v1/data/publish/line/message?token=' + process.env.BEEBOTTE_TOKEN,
method: 'POST',
form : resJson
}).then(()=>{
res.json({result:'sucsess'});
}).catch(()=>{
res.json({result:'fail'});
});
});
const listener = app.listen(process.env.PORT, function() {
console.log('Your app is listening on port ' + listener.address().port);
});
LINEのコンソールに設定する
LINEのデベロッパツールの中のコンソールに入り、Webhook URLにhttps://youredoamin.glitch.me/api/lineToBeebotte を設定する。※youredoaminは置き換え
まとめ
以上、ただ、垂れ流すだけのサーバですが、nodejsの勉強になって楽しかったです。ただ、朝4時までかけて突貫工事ですることではなかった←