なぜ作ろと思ったのか
今日はゴミ捨ての日とか、体重計乗りなさいだとか、傘持った?みたいな通知をしてくれるリマインダー機能がほしかった。
アプリを入れても見ないけど、LINEなら見るだろうと思って作ってみた。
タイトルにラズパイからと書いてあるが、何から送っても良い。
LINE Messaging API
LINE公式アカウントを作成して、そのアカウントから利用者(お友達)にメッセージを送信したり応答したりすることができる仕組み。
今回は通知するだけで応答機能は作らない。気が向いたら作って別の記事にします。
料金とメッセージ送信数
無料プランでは、毎月1000通のメッセージを送ることができる。個人利用ならフリープランで十分だろう。
アカウントを作成してログイン
以下まで進める
- LINEアカウントもしくはLINEビジネスアカウントでログイン。
- プロバイダ登録
チャネルを登録
以下入力して登録。登録後も変更できます。
項目 | 入力 |
---|---|
チャネルの種類 | Messaging API |
プロバイダー | プロバイダ名を選択 |
所在地 | 日本 |
アイコン | とりあえずなしで |
チャネル名 | 好きなチャネル名(Bot名)を入力 |
チャネル説明 | チャネルの説明文を入力 |
大業種 | 当てはまるものを選択 |
小業種 | 当てはまるものを選択 |
メールアドレス | メールアドレスを入力 |
プライバシーポリシーURL | 個人利用かつ任意なので入力しなかった |
サービス利用規約URL | 個人利用かつ任意なので入力しなかった |
お友達になる
チャネルのMessaging API設定のタブにQRコードがあるので、読み込むとお友達になれます。
ボットのベーシックIDを検索して友達追加でもいけそうです。
アクセストークンを取得
作成したLINEbotのアクセストークンを取得します。
パスワードと同じように重要な情報ですので、他人に見られない場所に記録しておきます。
送信してみる
メッセージの送信はこちらを参考にする。
Webhookの仕組みで送信できるようである。
{channel access token}
に先程取得したアクセストークンを入力。
U4af4980629...
の部分は、作成したチャネルの基本設定に記載されている、「あなたのユーザーID」を入力する。
参考ページに記載されているリトライキー(-H 'X-Line-Retry-Key: {UUID}' \
)は任意のため記載しなくてもいい。
curl -v -X POST https://api.line.me/v2/bot/message/push \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {channel access token}' \
-d '{
"to": "U4af4980629...",
"messages":[
{
"type":"text",
"text":"Hello, world1"
},
{
"type":"text",
"text":"Hello, world2"
}
]
}'
1度のリクエストで最大5回メッセージが送れるようである。
上記curlコマンドをshellscriptで作成してもよし。
PythonやGoなどの他の言語のサンプルも乗ってるので、好きに作ってみたら良いと思う。
Webhookなので、POST送信できればどこからでも送れそう。
cronで定期的に通知させてみる
shellscriptを作成する
# mkdir /usr/local/src/linebot
# vi /usr/local/src/linebot/diet.sh
#/bin/bash
curl -v -X POST https://api.line.me/v2/bot/message/push \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {channel access token}' \
-d '{
"to": "U4af4980629...",
"messages":[
{
"type":"text",
"text":"筋トレして体重計に乗ろう!"
}
]
}'
最後にカンマをつけてしまうと送信失敗するかも。注意しよう。
{
"type":"text",
"text":"筋トレして体重計に乗ろう!\nそしてお風呂に入って寝よう!"
},
改行コードは¥nではなくて、\nなので間違えないように。
cron設定する
cronは、以下の順番で並ぶ。
分 時 日 月 曜日 コマンド
# crontab -e
21時で設定した。
0 21 * * * sh /usr/local/src/linebot/diet.sh > /dev/null 2>&1
(参考)> /dev/null 2>&1について
cronを実行すると、標準出力される内容が実行ユーザーにメールが飛ぶ仕様。
スクリプトによっては、定期実行してたらメールの量が大量になってディスクを圧迫してしまう、なんてことも!
このスクリプトは何も出力がでないかもだけど、とりあえず入れておく。