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 Apps ScriptでLINE Botを作る基本

Last updated at Posted at 2025-03-12

Google Apps ScriptでLINE Botを作る基本

Google Apps Script(GAS)を使って公式LINE Botを作る方法を解説します。
この記事では、doPost 関数を使ってLINEからのメッセージを受信し、返信する基本的な仕組みを紹介します。


1. Google Apps Scriptの準備

まずは、Google Apps Script(GAS)のプロジェクトを作成しましょう。

手順

  1. Google Apps Script にアクセス
  2. 新しいプロジェクト を作成
  3. コード.gs に以下のコードを追加

2. doPost 関数の実装

LINEからのメッセージを受信し、返信する基本的な処理を行います。

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);
    }

    Logger.log("ユーザーID: " + userId);

    var replyMessage = "すみません、理解できませんでした。";
    if (userMessage.includes("こんにちは")) {
      replyMessage = "こんにちは!";
    } else if (userMessage.includes("天気")) {
      replyMessage = "今日の天気は晴れです!";
    }

    Logger.log("返信メッセージ: " + replyMessage);
    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);
  }
}

このdoPost関数は、Google Apps Script(GAS)を使用してLINE BotのWebhookとして動作する処理です。
以下に詳しく明記してあります


3. LINE Botへメッセージを送信する関数

LINE APIを使ってメッセージを返信する処理を追加します。

javascript
function sendLineReply(replyToken, message) {
  var channelAccessToken = "YOUR_CHANNEL_ACCESS_TOKEN";

  var url = "https://api.line.me/v2/bot/message/reply";
  var payload = {
    "replyToken": replyToken,
    "messages": [{ "type": "text", "text": message }]
  };

  var options = {
    "method": "post",
    "headers": {
      "Content-Type": "application/json",
      "Authorization": "Bearer " + channelAccessToken
    },
    "payload": JSON.stringify(payload)
  };

  try {
    var response = UrlFetchApp.fetch(url, options);
    Logger.log("LINE返信レスポンス: " + response.getContentText());
  } catch (error) {
    Logger.log("LINE API送信エラー: " + error.toString());
  }
}



4. Webhookの設定

1.LINE Developers にアクセス
2.チャネルを作成
3.Messaging API の設定ページでWebhook URLをGASのデプロイURLに設定


5. 動作テスト

以下の関数を実行し、テストデータを送信してみましょう。

javascript
function testDoPost() {
  var testEvent = {
    "postData": {
      "contents": JSON.stringify({
        "events": [
          {
            "replyToken": "test_reply_token",
            "source": { "userId": "test_user" },
            "message": { "text": "こんにちは" }
          }
        ]
      })
    }
  };

  var result = doPost(testEvent);
  Logger.log("テスト結果: " + result.getContentText());
}



6. Googleスプレッドシートと連携

次に、スプレッドシートのデータを取得し、LINE Botで返信できるようにします。

javascript
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;
}


まとめ

この記事では、Google Apps Scriptを使ってLINE Botを作成する基本的な方法を紹介しました。
次回は、Googleスプレッドシートと連携してスケジュールを取得する方法を解説します。


次の記事

👉 「Googleスプレッドシートの予定を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?