1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Googleスプレッドシートの予定をLINE Botで取得する

Last updated at Posted at 2025-03-12

Googleスプレッドシートの予定をLINE Botで取得する

前回の記事「Google Apps ScriptでLINE Botを作る基本」では、GASを使ってLINE Botを作成し、メッセージを受信・返信する方法を紹介しました。
今回は、Googleスプレッドシートを使ってLINE Botでスケジュールを取得する方法を解説します。


1. Googleスプレッドシートの準備

まずは、Googleスプレッドシートに予定データを用意します。

スプレッドシートの作成手順

  1. Googleスプレッドシートを開く
  2. シート名を 「年間予定」 に変更
  3. 以下のようなデータを入力
日付 1年生の予定 2年生の予定 3年生の予定 特別な予定
2025/04/01 入学式 オリエンテーション 実習開始 全体集会
2025/04/02 授業開始 授業開始 研究発表 -

このシートから予定データを取得して、LINE Botの返信メッセージに組み込みます。


2. GASでスプレッドシートの予定を取得する関数を作成

以下のスクリプトをGASに追加し、指定した日付のスケジュールを取得できるようにします。

function getSchedule(date) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("年間予定");
  if (!sheet) {
    Logger.log("エラー: シートが見つかりません");
    return "エラー: シートが見つかりません";
  }
  
  var data = sheet.getDataRange().getValues();
  Logger.log("取得データ: " + JSON.stringify(data));

  var year1 = [], year2 = [], year3 = []; 
  var specialEvents = []; 

  for (var i = 1; i < data.length; i++) {
    var sheetDate = new Date(data[i][0]);
    var formattedSheetDate = Utilities.formatDate(sheetDate, Session.getScriptTimeZone(), "yyyy/MM/dd");

    if (formattedSheetDate === date) {
      if (data[i][1]) year1.push(data[i][1]);
      if (data[i][2]) year2.push(data[i][2]);
      if (data[i][3]) year3.push(data[i][3]);
      if (data[i][4]) specialEvents.push(data[i][4]);
    }
  }

  var message = date + "の予定は\n";
  message += "1年生: " + (year1.length > 0 ? year1.join(", ") : "なし") + "\n";
  message += "2年生: " + (year2.length > 0 ? year2.join(", ") : "なし") + "\n";
  message += "3年生: " + (year3.length > 0 ? year3.join(", ") : "なし") + "\n";
  if (specialEvents.length > 0) {
    message += "特別な予定: " + specialEvents.join(", ") + "\n";
  }
  message += "です。\n※予定が更新されていない可能性があります。各自確認してください。\n";
  message += "https://docs.google.com/spreadsheets/d/YOUR_SPREADSHEET_ID/edit";

  Logger.log("返信メッセージ: " + message);
  return message;
}

3. LINE Botのメッセージ処理を更新

次に、doPost 関数を修正し、スケジュールを取得できるようにします。

function doPost(e) {
  try {
    var json = JSON.parse(e.postData.contents);
    Logger.log("受信データ: " + JSON.stringify(json));

    var events = json.events;
    if (!events || events.length === 0) {
      return ContentService.createTextOutput(JSON.stringify({ "status": "no event" }))
        .setMimeType(ContentService.MimeType.JSON);
    }

    var replyToken = events[0].replyToken;
    var userMessage = events[0].message.text.trim();
    var userId = events[0].source && events[0].source.userId ? events[0].source.userId : null;

    if (!userId) {
      Logger.log("エラー: userIdが取得できませんでした。");
      sendLineReply(replyToken, "エラー: ユーザーIDが取得できませんでした。");
      return ContentService.createTextOutput(JSON.stringify({ "status": "error", "message": "userId not found" }))
        .setMimeType(ContentService.MimeType.JSON);
    }

    var replyMessage = "すみません、理解できませんでした。";
    if (userMessage.match(/\d{4}\/\d{2}\/\d{2}/)) { 
      replyMessage = getSchedule(userMessage);
    } else if (userMessage.includes("明日")) { 
      var today = new Date();
      today.setDate(today.getDate() + 1);
      var tomorrow = Utilities.formatDate(today, Session.getScriptTimeZone(), "yyyy/MM/dd");
      replyMessage = getSchedule(tomorrow);
    } else if (userMessage.match(/年間予定|スケジュール|カレンダー/)) {  
      replyMessage = "年間予定はこちらです!\nhttps://docs.google.com/spreadsheets/d/YOUR_SPREADSHEET_ID/edit";
    }

    sendLineReply(replyToken, replyMessage);
    return ContentService.createTextOutput(JSON.stringify({ "status": "success" }))
      .setMimeType(ContentService.MimeType.JSON);
  } catch (error) {
    Logger.log("エラー: " + error.toString());
    return ContentService.createTextOutput(JSON.stringify({ "status": "error", "message": error.toString() }))
      .setMimeType(ContentService.MimeType.JSON);
  }
}


4. 動作テスト

以下の関数を実行し、スケジュール取得が正常に動作するか確認します。

function testGetSchedule() {
  var testDate = "2025/04/01";
  var result = getSchedule(testDate);
  Logger.log("テスト結果: " + result);
}

5. まとめ

今回の記事では、Googleスプレッドシートと連携してLINE Botからスケジュールを取得する方法を紹介しました。
これを応用すれば、学校の行事予定や業務スケジュールをLINEで簡単に確認できるようになります。


次の記事

👉 「GASでLINE Botの応答を改善する(エラー処理&リッチメニュー)」

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?