開發動機:將人工登記的工作轉爲自動化登記
開發工具:Javascript, Google Apps Script, Google 試算表, LINE Developers, LINE API

LINE Developers
通過 Google Apps Script 撰寫
function doPost(e) {
var CHANNEL_ACCESS_TOKEN = 'tlUyCQVNuR60BaUzqOVbJjZjK9Rl/m/RiHneiokstr1Dmo+DVneV477smNDmnve9qovWiHMznUgfKkXYoLwYk8WeNXUdOgjtxUQagw+qZtCVcKJviSpo4kr7GiJmCXFxQtJ2Xtg0w+7t2iPyLYZimAdB04t89/1O/w1cDnyilFU=';
var msg = JSON.parse(e.postData.contents);
const replyToken = msg.events[0].replyToken;
const user_id = msg.events[0].source.userId;
const userMessage = msg.events[0].message.text;
const event_type = msg.events[0].source.type;
const sheet_url = 'https://docs.google.com/spreadsheets/d/1JX1APuMaV3waYykAKV_kHXTEqACORwYgc7h5BW2ZfNQ/edit?gid=0#gid=0';
const sheet_name_1 = 'reserve1';
const sheet_name_2 = 'reserve2';
const SpreadSheet = SpreadsheetApp.openByUrl(sheet_url);
const reserve_list_1 = SpreadSheet.getSheetByName(sheet_name_1);
const reserve_list_2 = SpreadSheet.getSheetByName(sheet_name_2);
var current_list_row_1 = reserve_list_1.getLastRow();
var current_list_row_2 = reserve_list_2.getLastRow();
var reply_message = [];
function get_user_name() {
switch (event_type) {
case "user":
var nameurl = "https://api.line.me/v2/bot/profile/" + user_id;
break;
case "group":
var groupid = msg.events[0].source.groupId;
var nameurl = "https://api.line.me/v2/bot/group/" + groupid + "/member/" + user_id;
break;
}
try {
var response = UrlFetchApp.fetch(nameurl, {
"method": "GET",
"headers": {
"Authorization": "Bearer " + CHANNEL_ACCESS_TOKEN,
"Content-Type": "application/json"
},
});
var namedata = JSON.parse(response);
var reserve_name = namedata.displayName;
}
catch {
reserve_name = "not avaliable";
}
return String(reserve_name)
}
function send_to_line() {
var url = 'https://api.line.me/v2/bot/message/reply';
UrlFetchApp.fetch(url, {
'headers': {
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN,
},
'method': 'post',
'payload': JSON.stringify({
'replyToken': replyToken,
'messages': reply_message,
}),
});
}
function format_text_message(word) {
let text_json = [{
"type": "text",
"text": word
}]
return text_json;
}
var reserve_name = get_user_name();
if (typeof replyToken === 'undefined') {
return;
};
if (String(userMessage).includes("修改菜單登記")){
reserve_list_1.getRange(current_list_row_1 + 1, 1).setValue(userMessage);
current_list_row_1 = reserve_list_1.getLastRow();
reply_message = format_text_message(reserve_name + "您好,登記修改菜單成功。機器人提醒您:週二之前提供的資料會在下禮拜更新;週三之後提供的資料會在後禮拜更新。")
send_to_line()
}
else if (String(userMessage).includes("下架登記")){
reserve_list_2.getRange(current_list_row_2 + 1, 1).setValue(userMessage);
current_list_row_2 = reserve_list_2.getLastRow();
reply_message = format_text_message(reserve_name + "您好,登記下架成功。")
send_to_line()
}
else {
console.log("功德值加一")
}
}
把機器人加入群組,只要出現特定詞語,機器人將内容自動記錄至 Google 試算表内

結論:省下人工登記的時間以及降低資料錯誤的問題