2019年1月3日 星期四

LINE,透過Google表單發LINE訊息(Google Apps Script)

Google 很強大
可以用他來建立 大家都可以使用的 表單
但這 Google 表單,真的僅只是表單嗎?
























例如:
公司部門想要聚餐,投票要去哪個餐廳
就可以透過 Google 表單來設計
可能有5間餐廳讓公司員工去選擇

以上
這個例子只是 Google表單 的基本款功能
也是大家最熟悉的

但他真正厲害的地方
可不是這裡,而是超乎想像

他可以對這個 Google表單
設計一個程式
並指定觸發條件
哈~這可就厲害了
表單不再只是表單了

聰明的各位
應該可以想到些什麼出來了嗎~

這也不是
什麼稀奇的事情了
國外玩家早就已經時做出來了
只是我想依樣畫葫蘆
因為實作的過程,一定還會有些障礙出來
只是國外玩家沒有po出來而已
真的要去實作過
才會知道可以做到什麼程度

而我
是希望透過建構一個
當有人新增了表單時,會透過 Line 來通知我

最終
連結家中的 IOT(Arduino) 裝置
達到 家異常時 可透過 Line 傳遞訊息

一、建立 Google 試算表
二、建立 Google 表單
三、建立 指令碼編輯器
四、建立 觸發條件
五、測試 
六、後記


一、建立 Google 試算表
對於
怎麼製作 Google 表單
其實蠻簡單的
也可以很多類型,輸入框、選擇題、勾選...等等

首先當然要先登入
您的 Google 硬碟
選擇【新增】

點選【Google試算表】


然後
給這個 Google試算表 一個名稱
如下圖 紅色框線的部分


二、建立 Google 表單
然後
建立表單
選點【插入】→【表單】




至於
怎麼設計問項
就看自己個人囉
因為是Lab
我這邊就只做個超級簡單的問項

























複製 這個表單 的連結






















用Browser去開啟
並任意輸入一下測試


























再查看一下
這個 Google 試算表
是否有被新增一筆紀錄

























三、建立 指令碼編輯器
然後
再為這個 表單
建立一個 指令編輯器

























把程式碼貼上去
//程式碼開始

function getFormData(e) {
  var token = "您的 Line Token";

  var spreadSheet = SpreadsheetApp.getActive();
  var sheet = spreadSheet.getActiveSheet();
  var lastColumn = sheet.getLastColumn();
  var sheetData = sheet.getSheetValues(1, 1, 1, lastColumn);
  var message = "\n\n";
  for (var i = 0 ; i < lastColumn; i++) {
    message += sheetData[0][i] + ":" + e.values[i] + "\n\n";
  }
  sendLineNotify(message, token);
}

function sendLineNotify(message, token){
  var options =
   {
     "method"  : "post",
     "payload" : {"message" : message},
     "headers" : {"Authorization" : "Bearer " + token}
   };
   UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}

//程式碼結束

貼上程式碼後
按下上方的圖示,進行存檔
記得要改成您自己的 token 喔

























給個名稱吧











四、建立 觸發條件
為這個程式碼
建立 一個觸發條件
【編輯】→【您所有的觸發條件】

























【所有專案】→【...】

























點選【觸發條件】



















點選右下方的【新增觸發條件】
























選擇一下
執行功能→getFormData
選取活動來源→試算表
選取活動類型→提交表單時




五、測試 
現在
我們來實際測試看看吧
在表單上回答好問項,然後按下【提交】


我電腦版的 Line
馬上就跳出訊息


測試成功囉~~


六、後記
這個 Lab 只是測試而已
最終
是希望能對於家中的一些IOT裝置
當感測到異常時,透過 Line 發出訊息

當然
Google 也不是吃素的
以下連結說明了 Google 對於App Script免費使用的扣達限制
https://developers.google.com/apps-script/guides/services/quotas


11 則留言:

  1. 謝謝您的文章!非常實用的程式教學!

    回覆刪除
    回覆
    1. 網誌管理員已經移除這則留言。

      刪除
  2. 版大您好,我是個剛學習的菜鳥!我事先在sheet裡面的欄位輸入英文字/數字~~然後希望可取出來,然後傳送到line notify.
    目前line notify已經可以收到message,可是sheet裡面的欄位(事先輸入的數值或是英文字母)卻無法跟著message傳出來.想請版大求救~可否指導我該怎麼修改!!!
    感恩

    回覆刪除
  3. 已經找到解了!問題是出在我是先開指令碼編輯器來寫程式,然後再製作google apps excel.這樣子會發生已經寫好的程式找不到excel路徑.所以"必須"如板大的示範教學~先開google apps excel,再從google apps excel開啟指令碼編輯器來寫程式.
    可是~這樣又萌發好奇心了~難道不能先開指令碼編輯器來寫程式,然後寫路徑方式去我想要去的任一個google apps excel檔案抓取資料嗎?
    再麻煩版大指導下~~
    感恩

    回覆刪除
  4. 我想請教一下,這個功能可以在表單上面加入一個定時發送的功能嗎?

    回覆刪除
  5. 想請教一下,如果想要一次通知兩個賴群駔 要怎麼改?

    回覆刪除
    回覆
    1. 請問觸發條件顯示
      這個應用程式未經驗證
      無法增加怎麼解決

      刪除
  6. 請問要如何讓未填的資料不出現在line

    回覆刪除
  7. 如果我按照版大的步驟,表單沒辦法帶到EXCEL、沒辦法傳送至Line Notify去,就算帶到EXCEL日期也是錯的

    回覆刪除
  8. 類型錯誤:無法讀取 null 的屬性“getActiveSheet”
    獲取表單數據

    回覆刪除
  9. 網誌管理員已經移除這則留言。

    回覆刪除