Google Apps ScriptでLINE Botを作る基本
Google Apps Script(GAS)を使って公式LINE Botを作る方法を解説します。
この記事では、doPost
関数を使ってLINEからのメッセージを受信し、返信する基本的な仕組みを紹介します。
1. Google Apps Scriptの準備
まずは、Google Apps Script(GAS)のプロジェクトを作成しましょう。
手順
- Google Apps Script にアクセス
-
新しいプロジェクト
を作成 -
コード.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で取得する」