作ろうと思った背景
- とりあえず何かしらのLINEbotを作りたかった。
- APIについての知識が浅いため、APIの技術に触れてみたかったため。
- ゴミの出しわすれが原因で家族がよく喧嘩するため、グループラインにゴミbotを入れることで少しでも喧嘩が減って欲しいと思ったため。
やったこと
1.LINEbotを作成するために、LINEdevelopersを登録、設定
2.メッセージを送信するためのプログラムを作成
3.グループidの取得
4.テスト
1.LINEbotを作成するために、LINEdevelopersを登録、設定
初めてのLINEbot作成ということで、どこか難しいことを考えていたのですが、bot自体の作成は意外と簡単で、まずは
1.LINEdevelopersに登録
2.コンソールからプロバイダを新規作成
3.メッセージングAPIを作成。この際に設定するチャンネル名がbotのアカウント名になります。
4.メッセージングAPI設定において、グループチャットを有効、自動返信を無効、メッセージの自動返信設定から、webhookを有効に設定。
5.Webhook settingsの、Webhook URLに、スクリプトのURLを入力(スクリプト作成後に発行)
①デプロイから、新しいデプロイを選択
②ウェブアプリとしてデプロイ
③URLをコピー
④Webhook settingsの、Webhookにコピー、実行。
これで基本的な設定は終了。QRからbotも追加できます★
メッセージを送信するためのプログラムを作成
今回はプログラマーとして初めて親の役に立つものを作った話(LINEbot)この方の記事を参考にさせていただきました。
function notifyGarbageRemoval() {
//urlはbotが一方的に送ってくるようにしたいので最後はpushになります。(返信用ならreply)
var url = 'https://api.line.me/v2/bot/message/push';
//botのチャネルトークンに関しては自分の作成したbotの管理画面のMessagingAPIの下の方にあります
var channelToken = '?????......';
const youbi = ["日","月","火","水","木","金","土"];
var text = "";
//後に下の方で説明させていただきます。
var to = "C....";
//Dateオブジェクト関連の処理の準備
var date = new Date();
date.setDate(date.getDate());
var dayIndex = date.getDay();
var day = ["日", "月", "火", "水", "木", "金", "土"];
if (day[dayIndex] == "火" || day[dayIndex] == "金") {
text += "今日は燃やすゴミの日";
}
if (day[dayIndex] == "水") {
text += "今日は燃やさないゴミ/有害・危険ゴミの日";
}
if (day[dayIndex] == "木") {
text += "今日は資源ごみの日";
}
var messages = [{
'type': 'text',
'text': text,
}];
//--ゴミ出しの日以外は送らない--//
if ((day[dayIndex] == "火") || (day[dayIndex] == "金") || (day[dayIndex] == "水") || (day[dayIndex] == "木")){
UrlFetchApp.fetch(url, {
'headers': {
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': 'Bearer ' + channelToken,
},
'method': 'post',
'payload': JSON.stringify({
"to" : to,
'messages': messages,
}),
});
}
}
3.グループidの取得
/*
LINEで受信したレスポンスをスプレッドシートに書き込む
———————————–*/
function doPost(e) {
/* スクリプトプロパティのオブジェクトを取得 */
const prop = PropertiesService.getScriptProperties().getProperties();
/* レスポンスを取得 */
const response = e.postData.getDataAsString();;
const spreadsheetId = "[シートIDを指定]"; // シートIDを指定
const sheetName = "log"; // シート名を指定
const spreadsheet = SpreadsheetApp.openById(spreadsheetId);
const sheet = spreadsheet.getSheetByName(sheetName);
/* スプレッドシートに書き込む */
sheet.appendRow([new Date(), response]);
}
【LINE BOT】GASで『userId』の取得方法この記事を参考にさせていただきました。
上記記事で取得したグループidをto=""のなかにセット。
var to = "C....";
4.テスト
グループid、トークン、スクリプトのURL入力を確認したら、GASの時計マークを選択し、スクリプトが発動するタイミングを決定します。それできちんとbotが動くことを確認したらOK!
結果
ちゃんと設定した時間通りにbotがゴミの日を知らせてくれました!(テストの際は1分おきに設定)
もし動作がうまくいかなかった際は、
- トークン再発行。
- 新しくデプロイして、URLを更新する。
- グループidを確認する。
- メッセージングAPIの設定を再度確認してみる。
この辺を改めて確認してみてください。
実家ではよくゴミ捨て問題で親と妹が揉めていたので、botを導入できてとても喜んでいただけました😊
実装していて難しいと感じたポイントはグループidの取得ぐらいです。
linebotを使用する上でのグループidや、その他もろもろについてはリファレンスに記載されていますので、ぜひ読んでいただくと理解が深まると思います!
最後まで読んでいただきありがとうございます😊
参考記事
https://qiita.com/enomotoakira/items/64bf4efeccc0248958f1
https://arukayies.com/gas/line_bot/get-userid!