概要
耳鼻咽喉科の開業医をしています。
今回、以前作成したLINE Botのデータをnode.jsを使ってFirebaseに出し入れできるようにしました。
以前作ったLINE Botの記事はこちら
花粉症の重症度を判定し自分に合う市販薬を教えてくれるLINE Botの作成
作成
1.Firebaseno秘密鍵を生成し準備
こちらを参考にします。
サーバーに Firebase Admin SDK を追加する
サービスアカウントに移動し下部にある「新しい秘密鍵の生成」ボタンを押します。
次に表示される「キーを生成」ボタンを押します。
すると、すぐに生成されてJSONファイルがダウンロードされます。この段階では、長めの文字数のファイル名.jsonになっています。
ダウンロードしたJSONファイルをserviceAccountKey.jsonに名前を変えて配置します。
Realtime DatabaseのページでdatabaseURLを確認します。
Firebaseコンソールにある、Realtime Databaseの中にあるデータが確認できるページでdatabaseURLを確認します。赤枠のところをメモしておきます。
2.Firebaseにデータを記録できるようにする
Firebase関連のインストール
npm i firebase-admin
花粉症の重症度を判定し自分に合う市販薬を教えてくれるLINE Botの作成で作成したプログラムに追記していきます。
// Firebase /////////////////////////////////
var admin = require("firebase-admin");
// 1. サービスアカウント鍵を生成しserviceAccountKey.jsonにリネーム
var serviceAccount = require("./serviceAccountKey.json");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
// 2. Realtime DatabaseのページでdatabaseURLを確認して反映
databaseURL: "https://*************.com"
});
var db = admin.database();
var ref = db.ref("protoout/studio");
var usersRef = ref.child("messageList");
// LINE /////////////////////////////////////
const express = require('express');
const line = require('@line/bot-sdk');
const axios = require('axios');
const PORT = process.env.PORT || 3000;
const config = {
channelSecret: '********************',
channelAccessToken: '***********************'
};
const app = express();
// app.get('/', (req, res) => res.send('Hello LINE BOT!(GET)')); //ブラウザ確認用(無くても問題ない)
app.post('/webhook', line.middleware(config), (req, res) => {
console.log(req.body.events);
//ここのif分はdeveloper consoleの"接続確認"用なので削除して問題ないです。
if(req.body.events[0].replyToken === '00000000000000000000000000000000' && req.body.events[1].replyToken === 'ffffffffffffffffffffffffffffffff'){
res.send('Hello LINE BOT!(POST)');
console.log('疎通確認用');
return;
}
// Firebaseにも応答を記録 push
usersRef.push({
events:req.body.events
});
Promise
.all(req.body.events.map(handleEvent))
.then((result) => res.json(result));
});
3.Firebaseからデータを受信できるようにする
以下のコードを追記します。
// Firebase Listからデータを受信 child added on
var refMessageList = db.ref("protoout/studio/messageList");
refMessageList.on('child_added', function (snapshot) {
//postbackの場合
if (snapshot.val().events[0].type == 'postback') {
console.log('child_added', snapshot.val().events[0].postback.data)
userpostback = snapshot.val().events[0].postback.data;
}
//messageの場合
if (snapshot.val().events[0].type == 'message') {
//message-位置情報の場合
if (snapshot.val().events[0].message.type == 'location') {
userlat = snapshot.val().events[0].message.latitude;
userlong = snapshot.val().events[0].message.longitude;
getweather();//気象情報をreturnする関数
}
}
})
4.データベースを確認する
LINEのデータが記録されています。
考察
LINE BotのデータをFirebaseに出し入れすることができました。
今度はFirebaseのデータをWEBカレンダーに表示できるようにしたいと思います。