ETH官方钱包

前往
大廳
主題

Google自動化:表單收到回覆LINE通知

蜂蜜雪利酒 | 2024-09-06 23:23:52 | 巴幣 1126 | 人氣 1248

2024/10/10更新:
LINE Notify明年2025/3/31將終止服務(From LINE Notify結束服務公告
2種替代方案,歡迎參考看看~

使用Google表單時,大家是否曾遇到需要即時處理回應的情況?
檢查是否有人送出申請,常常讓人覺得麻煩呢 如果申請人送出表單,LINE能通知就好了~

當然可以做到喔~不需要程式基礎,而且只要點幾下,再貼上短短的代碼就能實現!
讓GAS幫助我們處理瑣碎的工作,就有更多時間可以摸魚了,好耶~
咳!不是,有更多時間可以花在更重要的事上。

此篇文章可大致了解到以下內容:
如何透過GAS
1.實現提交表單時,LINE自動通知。
2.取得試算表指定欄位。
3.取得表單回應的資料。

那麼,開始做~?(ˊ?ˋ*)?

申請LINE權杖:
請Google搜尋「申請LINE權杖」,網上有很棒的圖文操作教學。
LINE權杖是一串英文+數字。
?小提醒:LINE權杖只會顯示一次,要好好保存喔~也要小心不要外洩出去,雖然機率很小,但搞不好有無聊的人會拿去玩,傳怪怪的訊息給你??

操作步驟:
Step 1.請打開表單回應的試算表,上方選單→擴充功能→Apps Script
Step 2.會看到以下畫面,請在紅框處貼入以下代碼:
//請貼入以下代碼↓
const token = "這裡填入您的LINE權杖"; //這裡填入您的LINE權杖

//trigger:Google表單提送觸發通知
function onFormSubmit(e) {

  let ss = SpreadsheetApp.getActiveSpreadsheet();
  let ws = ss.getActiveSheet();

  let line_msg = '\n有新的申請待處理,請撥冗審核 https://www.google.com/ ';  //這裡填入您要顯示的LINE訊息  
  
  //選用功能:可將申請人填寫的資料,顯示在訊息上。**請不要顯示包含個資的欄位,如:申請人姓名、信箱等。**  
  let title_col = 4; //這裡填入您要顯示的申請表題目起始欄(Column)
    
  try {
    for(let i = title_col ; i<= ws.getLastColumn(); i++) {
     //取得申請表題目,補充說明:getRange(橫的列,直的欄),從1開始計算
      let item = ws.getRange(1,i).getValue();
      //取得申請表回覆
      let response = e.values[i-1];
      //將回覆填入訊息中
      line_msg += item + " : " + response + "\n";
    }
} catch (err) {
  line_msg += "No Answers for message.\n\n"
  //異常時進行紀錄
  Logger.log(err)
}
  //發送LINE訊息
  sendMessage(token, line_msg);   
}

//發送LINE訊息
function sendMessage(token, message) {
  let option = {
    method: 'post',
    headers: { Authorization: 'Bearer ' + token },
    payload: {
      //這邊單純傳訊息,如果想要加上貼圖或圖片,請看參數自行新增
      message: message
    }
  };
  UrlFetchApp.fetch('https://notify-api.line.me/api/notify', option);
  console.log(`發送LINE通知~`);
}
//請貼入以上代碼↑↑↑

並修改代碼中以下資訊:
?黃底部分(token):請填入您的LINE權杖。
?籃底部分(line_msg):請填入您要顯示的LINE訊息。
?灰底部分:選用功能,可將申請人填寫的資料,顯示在LINE訊息上。如果不打算用,可以刪除。
 ?小提醒:考量資安,強烈建議不要顯示包含個資的欄位,如:申請人姓名、信箱等。
?粉底部分(title_col):請填入指定要顯示的申請表題目起始欄(Column)。
以我的表單為例,因為我想跳過前面的欄位,從第4欄的問題類型開始顯示,所以填入4。

Step 3.測試觸發LINE通知
這裡會要求您提供權限,點選「執行」→審查權限
點您的Google帳戶
點選「允許」
噹啷~LINE跳出通知囉~
可是顯示了No Answers for message.
這是因為我們尚未指定表單送出後,觸發這個功能,它沒有抓到表單回應的資料。

Step 4.指定表單送出後,觸發通知功能
左手邊選單→點選「觸發條件」→新增觸發條件
確認以下兩個地方後,點選「儲存」:
1.執行的功能為「onFormSubmit
2.選取活動類型修改為「提交表單時
這裡又會再要一次權限,按照Step 3同樣方式點選帳戶和允許即可。

Step 5.測試表單提交後,LINE是否能順利發送通知
好囉~我們到表單裡,填一筆申請資料,然後送出!
好耶!LINE跳出通知了,也顯示了申請人填寫的資訊。大功告成~灑花?:.?ヽ(*′?`)??.:?

程式碼解說:
此部分若有興趣歡迎看看~對程式碼苦手,想跳過也沒關係,照上面步驟做,就可以做出效果了。
就像我看到數學那樣~就想跑ε≡?( ′?`)?
霽月先生:(溫笑不語)。

1.取得試算表指定欄位
指定當前試算表
let ss = SpreadsheetApp.getActiveSpreadsheet();
指定當前分頁
let ws = ss.getActiveSheet();
抓取當前試算表分頁中,指定範圍的值,列和欄都是從1開始計算。
ws.getRange(橫的列, 直的欄).getValue();
請看圖,舉例來說,ws.getRange(1,4).getValue();
也就是取得第一列,第四欄D1的值:問題類型

還記得剛剛代碼中的這一行嗎?
let title_col = 4;
表示會從第四欄D1問題類型起,開始抓資料。

那如果想顯示A1時間戳記+D1問題類型+E1問題描述,跳過B1電子郵件地址、C1申請人姓名呢?
我們可以將title_col指定為1,代表從第1欄開始抓資料。
let title_col = 1;
在for迴圈內,最開頭的位置加上if條件式,排除第2欄和第3欄
//如果是第2欄或第3欄,就跳出本次迴圈
if(i == 2 | i == 3)
 continue;
就可以得到效果~

2.取得表單回應的資料
表單提交後,系統會收到一串回應,從0開始編號。
以我的表單為例:[0時間戳記, 1電子郵件地址, 2申請人姓名, 3問題類型, 4問題描述]
(編號為方便解說,實際不會顯示01234)

取得表單回應中指定編號的資料,所用的代碼為
e.values[編號]
而我希望取得「3問題類型」及「4問題描述」的資料,對應的代碼就是
e.values[3]e.values[4]
又for迴圈中, i = title_col,title_col的起始值是4,i<= ws.getLastColumn(),最終值是最後一欄5,即 i = 4 一直到 i = 5
所以此處代碼寫成
e.values[i-1]
for迴圈跑完,就會抓出e.values[3]e.values[4]
另外e.values必須搭配function onFormSubmit(e)才能抓得到表單回應的資料喔~
我之前自訂function名稱,結果都抓不到,忙了老半天,哈哈,真是春蟲蟲(誰讓你不愛看官方手冊X

延伸功能:
1.案件標註處理完成後,自動寄信通知申請人。
2.部門擁有多位審核者,各負責不同申請項目,按照申請項目,自動發信給該位審核者。
延伸功能的部分,希望未來有機會和大家介紹~

我有一陣子沒碰程式了,主要是時間不夠用,今天做這個分享,也幫助了我複習GAS。
我很喜歡像GAS這樣的應用,簡單又實用,能幫助人們節省工作時間、改善生活,是我學程式感到最有成就感的部分。

不知道解說得還可以嗎?歡迎大家提供意見~希望對大家有幫助。
說明就到這裡,辛苦了,謝謝大家

更多創作