前往
大廳
主題

Google自動化:表單收到回應Discord通知

蜂蜜雪利酒 | 2024-10-10 13:52:24 | 巴幣 224 | 人氣 1656

先前發過一篇「Google自動化:表單收到回覆LINE通知」的文,
蛋魷魚LINE Notify明年2025/3/31將終止服務(From LINE Notify結束服務公告
路不轉人轉,改用Discord webhook,讓Discord通知⸜(*ˊᗜˋ*)⸝

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

那麼,開始做~٩(ˊᗜˋ*)و

操作步驟:
Step 1.啟用Discord Webhook
選擇一個想放通知的文字頻道→點選齒輪按鈕。
左邊選單→「整合」→右邊介面→「Webhook
點選按鈕「新 Webhook」→點選新創立出來的Webhook
會跳出介面,可以修改成想顯示的名稱和圖示。
小提醒:這邊的「Webhook網址」等一下要複製到程式碼裡面。
     Webhook網址請小心不要外洩出去,避免被無聊人士拿去炸您的群⋯⋯

Step 2.把程式碼貼進Apps Script
打開表單回應的試算表,上方選單→擴充功能Apps Script
會看到以下畫面,請在紅框處貼入程式碼。

程式碼如下,請修改其中兩行:
1.第3行:黃底處填入您的Webhook網址
const discordUrl = "這裡填入您的Webhook網址";
2.第9行:黃底處填入您要顯示的Discord訊息,\n是換行的標記,<@使用者ID>可在Discord指定通知人。
let msg = '<@使用者ID> 吃通知⸜(*ˊᗜˋ*)⸝\n https://www.gamer.com.tw/ \n';
//功能介紹:Google表單收到回應後,傳送到Discord通知。

const discordUrl = "這裡填入您的Webhook網址"; //這裡填入您的Webhook網址

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

  //這裡填入您要顯示的Discord訊息,\n是換行的標記,<@使用者ID>可在Discord指定通知人。
  let msg = '<@使用者ID> 吃通知⸜(*ˊᗜˋ*)⸝\n https://www.gamer.com.tw/ \n';  
  
  //發送Discord訊息
  sendMessage(discordUrl, msg);
}

//發送Discord訊息
function sendMessage(discordUrl, message) {

  let payload = JSON.stringify({content: message});
  
  let options = {
    method: "POST",
    payload: payload,
    muteHttpExceptions: true,
    contentType: "application/json"
  };

  UrlFetchApp.fetch(discordUrl, options);
  console.log(`發送Discord通知~`);  
}

點選「磁碟片」按鈕儲存。

Step 3.新增觸發條件
左手邊選單→點選「觸發條件」→新增觸發條件
確認以下兩個地方後,點選「儲存」:
1.執行的功能為「onFormSubmit
2.選取活動類型修改為「提交表單時

Step 4.開放權限
這裡會要求您提供權限,點您的Google帳戶
點選「Allow

到表單裡,填一筆申請資料,然後送出!
大功告成~灑花✧*。٩(ˊᗜˋ*)و✧*。

進階功能:
通知中顯示申請人填寫的資料。
請將以下程式碼貼在第10行:
  //選用功能:可將申請人填寫的資料,顯示在訊息上。**請不要顯示包含個資的欄位,如:申請人真實姓名、信箱等。**
  //程式碼請貼在第10行。
  let ss = SpreadsheetApp.getActiveSpreadsheet();
  let ws = ss.getActiveSheet();
  try {
    for(let i = 1 ; i<= ws.getLastColumn(); i++) {
      //取得表單題目
      //補充說明:getRange(橫的列,直的欄),從1開始計算
      let item = ws.getRange(1,i).getValue();
      //取得表單回應
      let response = e.values[i-1];
      //將回應填入訊息中
      msg += item + " : " + response + "\n";
    }
  } catch (err) {
      msg = "No Answers for message.\n\n";
      //異常時進行紀錄
      Logger.log(err)
  }

效果如下,耶~

說明就到這裡,希望對大家有幫助。
辛苦了,謝謝大家

14則留言

2025-03-18 04:29:33
謝謝細心說明,我已經完成了,且找出了問題,非常感謝。https://im.bahamut.com.tw/sticker/67/17.png
2025-03-17 01:45:49
您好 ,我想詢問一下 進階的部分跑出語法錯誤 ws = ss.getActiveSheet(); 是直接貼在地10行沒錯吧
補充一下(TypeError: Cannot read properties of null (reading 'getActiveSheet') 謝謝無私分享[e19]
2025-03-17 21:16:05
大大您好,對唷~我有把上述的程式碼發在GitHub,您可直接複製使用,可能更方便,網址如下
https://gist.github.com/sheriumi/95e0c745848aa745a0f199b72b481d3f

另外,錯誤看起來像是它找不到您的工作表,請大大再確認以下步驟:
Step 2.把程式碼貼進Apps Script
「打開表單回應的試算表」,上方選單→擴充功能→Apps Script
程式碼需要放在您收取表單回應的試算表內。
2025-03-03 11:31:46
您好,因為遇到狀況,有私訊您,懇請閱讀,謝謝。(合十
2025-03-03 19:33:05
大大您好,已回覆私訊了,謝謝您~[e41]
2025-02-19 16:56:02
感謝雪利大大🥰
2025-02-22 18:15:20
不會~希望有幫助到大大,祝您專案順利[e12]
2025-02-17 13:50:27
不好意思 還是有一些地方 不了解 我有私你 有空的話在麻煩你一下 感謝你 QQ

更多創作