開發動機:將人工登記的工作轉爲自動化登記

開發工具: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 試算表内


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