概要
この記事では、HerokuとNode.jsを活用して特定のユーザ(少人数を想定)に記念日を通知するLINE Botを作るノウハウを紹介します。ここでの通知とは、時間指定でbotからユーザへの簡単なテキストメッセージを送ることを指します。
##事前準備1 LINE bot のチャネルの用意
LINE Botを作成するためにはLINEのMessaging APIというサービスを使います。
まずこのサービスを利用するためのチャネルを作成します。
以下をページを参考に必要な情報を入力して進めてください。
実在するアカウントと同様にアイコンも設定できます。
ここでは、某作品より以下のようなアイコンを設定しました。
Messaging APIには、botからユーザへのメッセージ(Push)とユーザがbotに送ったメッセージに対する返信(Reply)
がありますが、今回使用するのは、Pushの方です。
##事前準備2 ホストするサーバー(Heroku)の用意
次に、botをホストするサーバを用意します。
今回は無料で多くのサービスが利用可能なHerokuを使います。
Herokuの基本的な使い方やデプロイするまでの流れは、以下の記事が参考になると思います。
https://qiita.com/arashida/items/b2f2e01259238235e187
https://qiita.com/shti_f/items/b4b5d830672d908eff4e
##botの開発
今回はbotからのメッセージを送ることを想定しているので、起点はHerokuのアドオン機能であるheroku schedulerを利用することにします。(詳細は後述)
この設定は後ほど行うとして、まずは通知するためのプログウラムを記載します。
通常使うindex.jsとは別にファイルを一つ作成します。
コードを書くにあたっては、Herokuの環境変数の設定などがあり、その点は上記の記事を参考にさせていただきました。
#!/usr/bin/env node
// モジュールのインポート
const server = require("express")();
const line = require("@line/bot-sdk"); // Messaging APIのSDKをインポート
// パラメータ設定
const line_config = {
channelAccessToken: process.env.LINE_ACCESS_TOKEN, // 環境変数からアクセストークンセット
channelSecret: process.env.LINE_CHANNEL_SECRET // 環境変数からChannel Secretをセット
};
// APIコールのためのクライアントインスタンスを作成
const bot = new line.Client(line_config);
main();//メインとなる処理を適当に
//メッセージを送る処理
function sendMessage(message){
console.log("message:" + message);
bot.pushMessage("XXXXXXXXXXXXXXXXXXXXXXXXXX",{ //送りたい相手のUserID
type:"text",
text: "今日ハ " + message + "ダゼェ!"
})
}
function main() {
//現在日付の取得
var today = new Date();
var month = today.getMonth()+1;
var date = today.getDate();
var message = ""; //デフォルトのメッセージをなにか入れたい場合はここに入れる。
//送るべきメッセージの判定
//XXの誕生日
if (month == 7 & date == 30 ) {
message = "XXの誕生日"
sendMessage(message);
}
//入籍届けを出した日
else if (month == 8 & date == 11 ) {
message = "入籍届けを出した日"
sendMessage(message);
}
//該当しない日は何もしない
else {
}
}
今回は簡易的な作りでDBのようなものを持たせていないので、日付の判定もメッセージ送信先のIDもハードコードしています。
##package.jsonにJobの追加
heroku schedulerにキックしてもらうためのジョブと実際に動かすjsのファイルをpackage.jsonで紐付けます。
{
"name": "line_botXXXXX",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"job-push-sample": "node sample.js"
},
...
##スケジューラの設定
スケジューラはHerokuのアドオン機能で日時や毎時の実行であれば、この機能で十分です。
※細かい設定はできないので、そのあたりまで実装したい方は別のサービスを使ったほうがいいでしょう
実際の設定は以下の記事を参考にさせていただきました。
実際の設定画面は以下の通りです。
npm run 「package.jsonで指定したjob」という記載の仕方です。
※時間は標準時での設定しかできない点に要注意。
設定は以上です!
実際に指定したユーザのラインにメッセージが飛んでいることを確認できましたでしょうか?
##まとめ
ラインは生活の中に浸透していることもあって、アイディアと工夫次第で面白いことができそうですね。
これからも可能性を探っていきたいと思います。