iT邦幫忙

2024 iThome 鐵人賽

DAY 28
0
IT 管理

30 天玩轉 GAS: 打造你的個人自動化助手系列 第 28

[Day 28] GAS - 什麼!還能夠傳賴?自動化發送通知到 LINE

  • 分享至 

  • xImage
  •  

每次有新的表單回應時沒辦法即時收到通知?今天這篇教你如何串接表單回應到 Line Notify!
Line Notify 提供了一個簡單的 API,可以用來將通知發送到你的 LINE 帳號或群組~
就跟著下面的步驟來一步一步來完成吧!

利用 Line Notify 自動化發送通知到 LINE

步驟 1:取得 LINE Notify 的 Token (權杖)

  1. 進入 LINE Notify 官方網站
  2. 登入你的 LINE 帳號,並進入到「個人頁面」。
  3. 點擊「發行權杖」按鈕。
    https://ithelp.ithome.com.tw/upload/images/20241004/20137680kR9gS3pL5a.png
  4. 選擇要接收通知的聊天群組或個人 LINE。
    https://ithelp.ithome.com.tw/upload/images/20241004/20137680gztxcCwnhV.png
  5. 命名你的 Token 並按下「發行」。
  6. 彈出這個視窗後, 記得複製這個 Token!因為關掉之後就再也不會顯示了! 這會是之後會用來與 Line Notify API 溝通的憑證。
    https://ithelp.ithome.com.tw/upload/images/20241004/20137680jnWaHDl5LB.png

要使用 Google Apps Script (GAS) 與 LINE Notify 進行整合,你可以透過發送 HTTP POST 請求來將訊息推送到 LINE Notify。LINE Notify 提供了一個簡單的 API,可以用來將通知發送到你的 LINE 帳號或群組。這裡我們將介紹如何設定和使用 GAS 來發送訊息到 LINE Notify。

步驟 2:小試身手1 - 撰寫 GAS 程式碼來發送 LINE Notify 文字訊息

在 GAS 中,你可以使用 UrlFetchApp 來發送 HTTP POST 請求向 Line Notify 發送訊息。

  • method: 使用 post 方法,因為我們要發送資料到 LINE Notify。
  • headers: 設定 Authorization 標頭,使用 Bearer 後接你的 LINE Notify Token。

Line Notify Request Method:
https://ithelp.ithome.com.tw/upload/images/20241005/20137680ffdKGPDt7l.png

  • payload: 包含你要發送的訊息,LINE Notify API 至少需要一個 message 參數。

payload 裡面可以放哪些參數,可參照 Line Notify API 官方文件 的 Request parameters 章節

發送文字訊息相當容易!只要在 payloadmessage 中填入訊息即可~

function sendLineNotifyTextMessage() {
  var token = '{你的Line Notify token(權杖)}'; 
  var options =
   {
     "method"  : "POST",
     "headers" : {"Authorization" : "Bearer "+ token},
     "payload":{
        'message': 'Hello Winnie!' 
     }
   };
   UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}

執行 sendLineNotifyMe 後,就會在 Line Notify 中收到訊息!

https://ithelp.ithome.com.tw/upload/images/20241005/20137680Ge5pRbux0y.png

Note: 如果是選群組的話,記得要先將 Line Notify 加入至群組成員中,這樣 API 才能夠成功執行從 Line Notify 發出訊息!

步驟 3:小試身手2 - 撰寫 GAS 程式碼來發送 LINE Notify 圖片訊息

  • payload 中加入 imageThumbnail, imageFullsize 的參數
function sendLineNotifyPicMsg() {
  var token = '{你的Line Notify token(權杖)}'; 
  var imageUrl = 'https://lh3.googleusercontent.com/LoLVzdJdA30GbWyhXj6R4_OLdY6gCti1gYRWXBdNvuAJ5-s98S94DEXeReK1C9nGwCQpQPEodpHTiEASg5rf8YtdwxW2P-09gfeD5cgA1YMHSkrNX1M'; // 可以換成你要傳的圖片 url
  var options =
   {
     "method"  : "POST",
     "headers" : {"Authorization" : "Bearer "+ token},
     "payload":{
        'message': 'GAS訊息_傳圖片' ,    
        'imageThumbnail': imageUrl,
        'imageFullsize': imageUrl
     }
   };
   UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}

https://ithelp.ithome.com.tw/upload/images/20241005/20137680wkwcELr6aV.png

Note: 如果想換成 google drive 中的圖片,imageUrl 可以改成 'https://drive.google.com/uc?export=view&id='+ file_id

步驟 4:小試身手3 - 撰寫 GAS 程式碼來發送 LINE Notify 圖片訊息

  • payload 中加入 stickerPackageId, stickerId 的參數
  • 目前可傳送的貼圖有限,貼圖列表跟編號可以參照官方文件
function sendLineNotifySticker() {
  var token = '{你的Line Notify token(權杖)}'; 
  var options =
   {
     "method"  : "POST",
     "headers" : {"Authorization" : "Bearer "+ token},
     "payload":{
        'message': 'GAS訊息_傳貼圖' ,    
        'stickerPackageId' : '6325' , // 輸入想傳貼圖的 stickerPackageId
        'stickerId' : '10979918',  // 輸入想傳貼圖的 stickerId
     }
   };
   UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}

https://ithelp.ithome.com.tw/upload/images/20241005/20137680fIpwoeEZgK.png

步驟 5:填寫表單後自動化發送通知到 LINE

這邊我們就來結合第六天的範例 [Day 6] GAS - Google form 表單自動化寄出信件
來試著自動發出 line Notify 通知看看!

原先的 code 是我們再最後寄出通知信給填單人

function sendThankyouMail(e) {
  const formResponse = e.response;    
  const itemResponses = formResponse.getItemResponses();
  const email = formResponse.getRespondentEmail();
  const name = itemResponses[0].getResponse()

  // 構建郵件內容
  var subject = "感謝您的回應!";
  var body = `親愛的${name},感謝您提交表單。我們將儘快處理您的回應。`;
  
  // 發送郵件
  MailApp.sendEmail(email, subject, body);
}

現在我們要再最後加上,通知某個 line notify 對象~

var msg = `您收到來了一筆來自${name}的回應。`
sendLineNotifyTextMessage(msg);

所以最後完整程式碼會是

function sendThankyouMail(e) {
  // 取得表單回應
  const formResponse = e.response;    
  const itemResponses = formResponse.getItemResponses();
  const email = formResponse.getRespondentEmail();
  const name = itemResponses[0].getResponse()

  // 構建郵件內容
  var subject = "感謝您的回應!";
  var body = `親愛的${name},感謝您提交表單。我們將儘快處理您的回應。`;
  
  // 發送郵件
  MailApp.sendEmail(email, subject, body);

  var msg = `您收到來了一筆來自${name}的回應。`
  sendLineNotifyTextMessage(msg);
}

function sendLineNotifyTextMessage(msg) {
  var token = '{你的Line Notify token(權杖)}'; 
  var options =
   {
     "method"  : "POST",
     "headers" : {"Authorization" : "Bearer "+ token},
     "payload":{
        'message': msg
     }
   };
   UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}

Note: 在透過事件觸發 sendLineNotifyTextMessage 之前要先通過專案權限,所以可以先直接執行 sendLineNotifyTextMessage 一次,給予權限後再去觸發事件~


這樣就簡單輕鬆完成啦!之後有任何的表單回應都能夠寄送通知到你的 Line 了!
這對於工作報告、提醒系統或訊息推送都非常實用~ 快來一起試試透過 GAS 傳送通知到 Line 上吧!

後記

摁摁... 就在打完這篇的一個禮拜後就看到了這個消息
https://ithelp.ithome.com.tw/upload/images/20241011/20137680XnBvl0MbVH.png

嚇到吃手手]

沒錯... Line Notify 即將於明年 3/31 關閉服務了
不過也不用擔心,還有不少通訊軟體有提供類似的 API,像是 Telegram, Discord 等等
如果真的需要 Line 服務的話也可以改使用需付費的 Line Messaging API
已經快到結尾啦~明天讓我們看看,如何用 GAS 部署靜態網頁!


上一篇
[Day 27] GAS - 別再造輪了,來使用別人的輪子吧 - Library 資料庫使用教學
下一篇
[Day 29] GAS - 什麼!還能架網頁!來動手做 To-Do List
系列文
30 天玩轉 GAS: 打造你的個人自動化助手30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1

哇,過了二十幾天,我才看到你這系列相見恨晚的文章😆

想不到你在 IT 管理 下,我在 GenAI 下,
各自寫著不同卻又相似的主題😆

我剛剛從你第一篇開始讀,
覺得寫得很用心!
一看就知道完全不是用 AI 產的文章😆

真的是相見恨晚,
日後有機會再向你請教一下!

Winnie iT邦新手 5 級 ‧ 2024-10-12 18:10:28 檢舉

嗚嗚感謝亨利羊大大的蒞臨~🥹
沒錯我也是昨天才發現原來也有人寫 GAS,覺得十分親切~
您的文筆真的實在太好了,我要好好向您學習!
(老實說我也有請 chatGPT 幫了我不少忙啦哈哈🫢)
是我要向大大請教啦🥹 沒問題~有機會再來好好交流!

我要留言

立即登入留言