Google Apps Script (GAS)でサクッとLINEボット作成
最近、私は体重が10kg程増えてしまい、友人と共にダイエットを決意しました。
そこで、私たちは励まし合いながらダイエットを続けるためのグループLINEを作ることにしました。
グループで決めたルールはシンプルです。
- 毎日の始まりには体重を測り、その写真をグループに共有。
- 夜には、その日一日の成果を報告。
これらのルールを忘れないようにするため、定期的にリマインダーを送信するLINEボットを作成することにしました。
この記事では、そのボットの作成過程と、Google Apps Script (GAS)を使ってLINEグループにメッセージを送信する方法について紹介します。
具体的な手順:
- LINE Developersでのボット設定
LINE Developersポータルで新しいボットを作成し、必要な設定を行います。これには、ボットの名前やアイコンの設定、アクセストークンの取得などが含まれます。
- グループLINEのIDを取得:
ボットをLINEグループに招待し、そこからグループIDを取得します。
- Google Apps Scriptプロジェクトの設定:
Googleドライブで新しいApps Scriptプロジェクトを作成し、LINE APIと通信するためのスクリプトを記述します。
4.時間ベースのトリガーの作成
Google Apps Scriptのトリガー機能を使って、特定の時間にスクリプトが実行されるように設定します。
コードと実装方法の詳細
LINE Developersでボット作成
LINE Developersポータルにアクセスし、「新しいプロバイダー」を作成します。
「Messaging API」チャネルを新規作成し、ボットの基本情報(名前、説明、アイコンなど)を設定します。
「Channel Access Token」はスクリプトで使用します。
グループLINEのIDを取得
サーバーを別途立てるのは面倒だったので、LINEのWebhook機能とスプシを利用してグループのIDを取得する方法を選びました。メッセージがグループに送信されると、自動的にGoogle Apps Scriptが実行され、グループIDをスプレッドシートに記録できるようになります。以下はそのためのdoPost関数のコードです。
function doPost(e) {
var events = JSON.parse(e.postData.contents).events;
events.forEach(function(event) {
if (event.type === 'message' && event.source.type === 'group') {
var groupId = event.source.groupId;
// スプレッドシートに記録
var sheet = SpreadsheetApp.openById('スプシのID').getActiveSheet();
sheet.appendRow([new Date(), groupId]);
}
});
return ContentService.createTextOutput(JSON.stringify({ 'content': 'post received' }))
.setMimeType(ContentService.MimeType.JSON);
}
このスクリプトをWebアプリとしてデプロイし、そのURLをLINE DevelopersポータルでボットのWebhook URLとして設定しました。
グループに何かメッセージが送信されると、スクリプトが実行され、グループIDがスプレッドシートに記録されます。これにより、どのグループにメッセージを送るべきかがわかります。
その後,作成したbotをグループチャットへ招待して、グループチャットのIDを取得します。
⚠️bot自体をグループチャットへの参加を許可してあげないと拒否されてしまいます。
Allow bot to join group chats > Editへと進み > グループ・複数人トークへの参加を許可する
今回作るAPIは時間をトリガーに発火させるので、ID取得後はWebhookを利用しません。
Use webhookはOFFにしておきます。
Google Apps Scriptプロジェクトの設定とメッセージ送信機能の実装:
新しいApps Scriptプロジェクトを作成し、以下のようなスクリプトを記述します。
function sendMorningMessage() {
var message = "おはようございます。今日もダイエット頑張ってください\n体重を測って写真を貼りましょう";
var groupId = "YOUR_GROUP_ID";
var accessToken = "YOUR_ACCESS_TOKEN";
sendMessage(groupId, message, accessToken);
}
function sendEveningMessage() {
var message = "今日は運動しましたか?今日頑張ったことを報告しましょう";
var groupId = "YOUR_GROUP_ID";
var accessToken = "YOUR_ACCESS_TOKEN";
sendMessage(groupId, message, accessToken);
}
function sendMessage(groupId, message, accessToken) {
var url = "https://api.line.me/v2/bot/message/push";
var headers = {
"Content-Type": "application/json",
"Authorization": "Bearer " + accessToken
};
var postData = {
"to": groupId,
"messages": [{
"type": "text",
"text": message
}]
};
var options = {
"method" : "post",
"headers": headers,
"payload" : JSON.stringify(postData)
};
UrlFetchApp.fetch(url, options);
}
時間ベースのトリガーの作成
このLINEボットの主な目的は、定期的にグループLINEにメッセージを送ることです。
そのために、Google Apps Script (GAS) の時間ベースのトリガー機能を利用しました。
このトリガーを使って、毎朝と夜に自動的に特定の関数を実行させる設定を行います。
Google Apps Scriptのトリガー設定は、スクリプトエディタの「編集」メニューから「現在のプロジェクトのトリガー」を選択して行います。そこで「+ トリガーを追加」をクリックし、実行したい関数(例えばsendMorningMessageやsendEveningMessage)を選んで、実行頻度(毎日)や実行時間(朝8時や夜8時など)を指定します。
まとめ
一人でのダイエットは時に困難で、モチベーションを維持するのが難しいこともあります。
しかし、友達と一緒に目標に向かって励まし合うことで、その挑戦はずっと楽しく、実現可能なものに変わります。このLINEボットを通じて、毎日のルーチンを維持し、お互いを励ますことができるようになることを期待しています。
技術を利用して日常生活の小さな問題を解決することは、とてもやりがいのあることです。
このLINEボットが、私たちのダイエットへの取り組みをサポートし、目標達成へと導いてくれることを期待しています。そして、この記事があなたのプロジェクトや日々の生活の中で、何か新しいアイデアを生み出すきっかけになれば幸いです。
最後に、ダイエットを続け、健康的な生活を目指していきます。
現在71kg....目指せ60kg!!
Discussion