讓Line機器人變成你的小秘書
機器人的秘書還不夠誘惑嗎XD
這篇文章寫於 2020 年,文中的工具與版本可能已經更新,實作時請以官方文件為準。
為什麼撰寫這篇文章
在上一篇文章已經介紹了Google App Script如何串接Line Message Api的應用,在這裡我將延續之前的議題,讓Line機器人變成你的小秘書
文章目標
- 使用Google Sheet裡面Script的功能
- 使用簡單的SQL語法抓出Google Sheet中你需要的資訊
本文章使用到的技術:
- Google App Script : 這次著重在執行SQL語法
- Google Sheet : 會把它當成讀取/寫入的資料庫
STEP 1: 結合Google Sheet的衍生應用
Google App Script功能很多,但能做到什麼地步就看個人的想像能力,接下來我提供的只是一條思路,如果大家想到有趣的應用歡迎下方留言
如果大家平常有使用Google sheet當成工作記錄習慣的話,你可以嘗試看看這個應用
這裡我先創建一個Google Sheet,裡面建立一些清單(你可以直接複製我的):

接著建立Google Sheet的Script

將以下程式複製貼上,如果您願意可以自由更改,記得將上一篇取得的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)
接下來要將這個程式發布(如果有授權相關問題必須都接受才會通過)

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

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

貼到webhook URL上面後按下Save

STEP 2 : 驗證串接成功
打開你的LINE就可以輸入下面三種文字,機器人就會做相對應的回覆喔!
- 功能
- 未完成
- 已完成

希望大家喜歡這篇文章的應用~
留言載入中…