📖

Google Apps Script (GAS)でサクッとLINEボット作成

2024/01/07に公開

最近、私は体重が10kg程増えてしまい、友人と共にダイエットを決意しました。
そこで、私たちは励まし合いながらダイエットを続けるためのグループLINEを作ることにしました。

グループで決めたルールはシンプルです。

  • 毎日の始まりには体重を測り、その写真をグループに共有。
  • 夜には、その日一日の成果を報告。

これらのルールを忘れないようにするため、定期的にリマインダーを送信するLINEボットを作成することにしました。
この記事では、そのボットの作成過程と、Google Apps Script (GAS)を使ってLINEグループにメッセージを送信する方法について紹介します。

具体的な手順:

  1. LINE Developersでのボット設定

LINE Developersポータルで新しいボットを作成し、必要な設定を行います。これには、ボットの名前やアイコンの設定、アクセストークンの取得などが含まれます。

  1. グループLINEのIDを取得:

ボットをLINEグループに招待し、そこからグループIDを取得します。

  1. 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