下期第15堂[雲端服務機器人] Line機器人-寫入資料


今天介紹 將Line機器人接收到的訊息,插入資料表中。

今天使用的工具是Google sheets, 比起正規資料庫,建置起來快速方便,

當然這適合小型的資料,大概幾千筆之內較適合。


程式碼

function doPost(e) {
    // LINE Messenging API Token
var CHANNEL_ACCESS_TOKEN = '......................';
    // 以 JSON 格式解析 User 端傳來的 e 資料
    var msg = JSON.parse(e.postData.contents);

const replyToken = msg.events[0].replyToken;
const userMessage = msg.events[0].message.text; // 使用者傳的訊息內容
const user_id = msg.events[0].source.userId;    // 抓取使用者的 ID
const event_type = msg.events[0].source.type;   // 分辨是個人聊天室還是群組

const sheet_url = '......................';   // 網址
const sheet_name = '....................................'; // 工作表名稱
const SpreadSheet = SpreadsheetApp.openByUrl(sheet_url);
const reserve_list = SpreadSheet.getSheetByName(sheet_name); 

var current_list_row = reserve_list.getLastRow(); // 取得工作表最後一欄
var reply_message = []; // 空白回覆訊息陣列,後期會加入 JSON

    // 查詢傳訊者的 LINE 帳號名稱
    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 {
            //  呼叫 LINE User Info API,以 user ID 取得該帳號的使用者名稱
            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,
            }),
        });
    }

    // 將輸入值 word 轉為 LINE 文字訊息格式之 JSON
    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 (userMessage == "顯示" | userMessage == "清單") {
    var list="全部資料";
    for (var x = 1; x <= current_list_row; x++) {
      list = list + "\n" + reserve_list.getRange(x, 1).getValue();
    }
    reply_message = [{
        "type": "text",
        "text": "共有 " + current_list_row + "筆清單"
      },{
        "type": "text",
        "text": list
      }]
    send_to_line();

}else{
 var Today=new Date();
  reserve_list.getRange(current_list_row + 1, 1).setValue(reserve_name);
  reserve_list.getRange(current_list_row + 1, 2).setValue(userMessage);
  current_list_row = reserve_list.getLastRow();
        
  // 回傳成功訊息
  reply_message = [{
    "type": "text",
    "text": reserve_name + "插入資料" 
        }]
  send_to_line();
}






}

今日挑戰

上網搜尋 java script語法,在第三欄加上當時時間

在箭頭的地方插入新一行

小挑戰參考答案

reserve_list.getRange(current_list_row + 1, 3).setValue((Today.getMonth()+1)+"月"+Today.getDate()+"日");

思考與發展

今天的程式只是一個示範,他會把沒有關鍵字的對話全部抄錄起來。

同學當然可以改成有關鍵字才紀錄,例如句子裡面有“請記錄”,

才把這一個對話插到資料庫裡面


小叮嚀

學期已經接近尾聲,同學可以開始製作期末成果了。

您可能也會喜歡…

發佈留言