讓Line機器人變成你的小秘書

機器人的秘書還不夠誘惑嗎XD

這篇文章寫於 2020 年,文中的工具與版本可能已經更新,實作時請以官方文件為準。

為什麼撰寫這篇文章

在上一篇文章已經介紹了Google App Script如何串接Line Message Api的應用,在這裡我將延續之前的議題,讓Line機器人變成你的小秘書

文章目標

  1. 使用Google Sheet裡面Script的功能
  2. 使用簡單的SQL語法抓出Google Sheet中你需要的資訊

本文章使用到的技術:

  1. Google App Script : 這次著重在執行SQL語法
  2. Google Sheet : 會把它當成讀取/寫入的資料庫

STEP 1: 結合Google Sheet的衍生應用

Google App Script功能很多,但能做到什麼地步就看個人的想像能力,接下來我提供的只是一條思路,如果大家想到有趣的應用歡迎下方留言

如果大家平常有使用Google sheet當成工作記錄習慣的話,你可以嘗試看看這個應用

這裡我先創建一個Google Sheet,裡面建立一些清單(你可以直接複製我的):

STEP 1: 結合Google Sheet的衍生應用(圖 1)

接著建立Google Sheet的Script

STEP 1: 結合Google Sheet的衍生應用(圖 2)

將以下程式複製貼上,如果您願意可以自由更改,記得將上一篇取得的line token放上去喔

var ss = SpreadsheetApp.getActiveSpreadsheet()//抓取這張excel
function doPost (e) {
    var msg = JSON.parse(e.postData.contents);
    // 取出 replayToken 和發送的訊息文字
    var replyToken = msg.events[0].replyToken;
    var userMessage = msg.events[0].message.text;

    if (userMessage.indexOf("未完成") > -1) {//分析傳遞字串確認是否有“未完成”
        // QUERY(目標文件及範圍,SQL語法)
        // 尋找sheet1範圍A2到C100裡面A跟B欄位的資料且C欄位為FALSE
        var formulaToUse = '=QUERY(Sheet1!A2:C100,"SELECT A,B WHERE C = FALSE")'
        var result = query(formulaToUse)

        var userMessage = '未完成文件如下:\n';//單純的文字組成
        result.forEach(row => {
            userMessage = userMessage + row[0] + ':' + row[1] + '\n'
        })
        return sendLineMsg(userMessage, replyToken);
    }
    if (userMessage.indexOf("已完成") > -1) {//分析傳遞字串確認是否有“已完成”
        var formulaToUse = '=QUERY(Sheet1!A2:C100,"SELECT A,B WHERE C = TRUE")'
        var result = query(formulaToUse)
        var userMessage = '已完成文件如下:\n';
        result.forEach(row => {
            userMessage = userMessage + row[0] + ':' + row[1] + '\n'
        })
        return sendLineMsg(userMessage, replyToken);
    }
    if (userMessage.indexOf("功能") > -1) {//這是列出你有提供功能的列表
        return sendLineMsg('朕不給的你不能搶ㄎㄎ\n• 未完成 :列出excel未完成清單\n• 已完成 :列出excel已完成清單', replyToken);
    }
}
function query (request) { //執行SQL語法的地方
    var sheet = ss.insertSheet(); //先插入一張新的sheet(也許有更好的做法,如果有請告訴我QQ)
    sheet.getActiveRange().setFormula(request); //執行SQL
    var result = sheet.getDataRange().getValues(); //把整張表抓下來
    ss.deleteSheet(sheet); //把sheet刪除
    Logger.log(result);//可透過log來看輸出的資訊(上方的View Logs)
    return result; //回傳結果
}
function sendLineMsg (Message, replyToken) {
    var CHANNEL_ACCESS_TOKEN = '你的 Channel access token';

    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': [{
                'type': 'text',
                'text': Message,
            }],
        }),
    });
}

原始碼:line_secretary.gs(GitHub Gist)

接下來要將這個程式發布(如果有授權相關問題必須都接受才會通過)

STEP 1: 結合Google Sheet的衍生應用(圖 3)

Project version記得每次都要選擇New(否則不會更新),並且要允許任何人可以存取這隻app,不然你的程式無法被line機器人執行

STEP 1: 結合Google Sheet的衍生應用(圖 4)

接下來複製你這串web app URL給LINE Message Api使用

STEP 1: 結合Google Sheet的衍生應用(圖 5)

貼到webhook URL上面後按下Save

STEP 1: 結合Google Sheet的衍生應用(圖 6)

STEP 2 : 驗證串接成功

打開你的LINE就可以輸入下面三種文字,機器人就會做相對應的回覆喔!

  1. 功能
  2. 未完成
  3. 已完成

STEP 2 : 驗證串接成功(圖 7)

希望大家喜歡這篇文章的應用~

Talk

留言討論

留言載入中…