利用Line Notify通知Google表單事件. 因為想知道自己 ... - Medium

文章推薦指數: 80 %
投票人數:10人

因為想知道自己放在群組裡半公開的Google spreadsheet連結,如果填寫表單,要通知填了什麼內容,以及另一個表單被修改了什麼內容時,請通知我, ... 佛學日常程式閱讀影片利用LineNotify通知Google表單事件DoranWuFollowFeb11,2020·7minread授權頁面因為想知道自己放在群組裡半公開的Googlespreadsheet連結,如果填寫表單,要通知填了什麼內容,以及另一個表單被修改了什麼內容時,請通知我,找到Line有這樣的功能,成功做出來,紀錄一下過程。

要進行兩個組要部分:一、在LineServiceWebSite上取得一個LineNotify權杖(Token),Token與line中的聯絡人(包括群組)要在LineNotifypage裡建立一對一關係,所以可以不斷新增權杖代碼,這段代碼「只會出現一次」,建議找個記事本記錄下,透過Line自動發佈訊息給甲,就需建專發佈訊息給甲的LineNotifyToken。

二、寫程式透過此Token去呼叫LineNotifyPostAPI,把訊息代入API中。

可以來自不同的事件,但都綁在同一個服務中,本次會使用到GoogleAppsScript來傳送通知。

產生LineNotifyToken至LINENotify的網站,使用自己的LINE帳號登入,登入移至個人帳號Logo,選擇「個人頁面」,會看到已有和LINENotify自訂的服務,可見本圖片要產生新的,選擇「Generatetoken」,會跳出以下畫面,請命名服務和選擇要個人還是群組當目標,最後產生一組代碼就可以在已連動的服務中看到新增權杖,記得要先加LINENotify好友,然後邀請LINENotify到你選擇的個人或群組編寫GoogleAppsScript傳送通知本次分別寫在兩個地方,一個是Google表單送出時,一個是當Googlespreadsheet有變動時,會傳送訊息。

Google表單送出時參考這個教學使用GoogleAppsScript取得Google表單的題目與回答內容並傳送至Line—(01)程式碼撰寫於Google表單從表單右上角點擊三個圈的「更多設定」,找到「指令編輯碼器」,進去之後就會到屬於這個表單的GoogleAppsScript,請記得命名。

從參考處取得程式碼,只有編輯message多了個圖示如下:functiongetFormData(e){vartoken="LineNotify權杖";varform=FormApp.getActiveForm();varcurrentItemResponses=e.response.getItemResponses();varmessage="\n";for(vari=0;i<currentItemResponses.length;i++){message+=currentItemResponses[i].getItem().getTitle()+":"+currentItemResponses[i].getResponse()+"\n\n";}message+="⏰填表時間:"+e.response.getTimestamp();sendLineNotify(message,token);}functionsendLineNotify(message,token){varoptions={"method":"post","payload":{"message":message},"headers":{"Authorization":"Bearer"+token}};UrlFetchApp.fetch("https://notify-api.line.me/api/notify",options);}寫完之後按一下工作列「時鐘」的圖示執行後,會跳出到另一個畫面,要先獲得權限,接著就是編輯觸發時間點。

然後測試一下寫一個新的表單後,成功在Line的對話裡出現,成功!Googlespreadsheet編輯時另一個需求是想知道編輯的內容和行列,發現需要自建立一個Googleappsscript,要先於Googledrive安裝,教學請參考這篇,然後寫的程式如下:functiononEdit(e){vartoken="LINENotifyToken";Logger.log("somethingwasedited,previousvaluewas:"+e.oldValue);varnewValue=e.range.getValues();Logger.log("newValue%s",newValue);varrange=e.range;varli=range.getRow();varcl=range.getColumn();Logger.log("Thecelleditedwasatrow"+range.getRow()+"andcolumn"+range.getColumn());sendLineNotify("匝匝地圖修改囉!新內容為:➡️"+newValue+",在"+(li+1)+"行及"+cl+"列。

",token);}functionsendLineNotify(message,token){varoptions={"method":"post","payload":{"message":message},"headers":{"Authorization":"Bearer"+token}};UrlFetchApp.fetch("https://notify-api.line.me/api/notify",options);}參考Google官網的Simple作法,在標單編輯時會觸發這個函示onEdit(e)SimpleTriggersLogger會紀錄最近一筆的異動,新增的會蓋掉之前的,可以在GoogleAppsScript介面看到,記錄變動範圍內的新值到newValue,然後把變動的行、列紀錄,參考這篇找到行列的取法,注意,因為行在我的表格中,第一行是標題列,所以在要送的msg中要多加1,如此,最後傳送的內容顯示如下:以上,集兩種需求於一個LineNotify的服務完成,了解到Googlespreadsheet的用法,簡單的GoogleAppsScript撰寫,還有LineNotifyToken的綁定,成就解鎖!另外參考的連結如下:Howdoyouget"e.oldValue"ifcellcontentswerepastedfromanothercellinSheetPleasethinkofthisasoneofseveralworkarounds.Ithoughtthatitmightbecomeaworkaroundbysavingthedata…stackoverflow.com此生故彼生紀錄生活中的因緣,再回頭的那刻我不忘記132ProgrammingLineNotifyGoogleSpreadsheets13 claps132此生故彼生紀錄生活中的因緣,再回頭的那刻我不忘記WrittenbyDoranWuFollow此生故彼生紀錄生活中的因緣,再回頭的那刻我不忘記



請為這篇文章評分?