LINE Notify 排程通知

LINE Notify 是一個官方帳號
你可以在任何 Line 群組中加入 Line Notify
並運用它來進行通知相關的服務

底下介紹如何搭配 Google Apps ScriptGoogle Sheets
來完成一個簡單的自動排程通知服務:

  • 取得 Line Notify 的存取權杖
  • 建立 Google Apps Script
  • 建立 Google Sheets

取得 Line Notify 的存取權杖

1.登入LINE Notify

2.點選右上角:個人帳號 -> 個人頁面 -> 發行權杖

3.填寫權杖名稱

註:此名稱會在通知時作為標題顯示

4.選擇接受通知的群組

註:記得該群組也要把 Line Notify 拉進去喔,不然沒有作用

5.紀錄已發行的權杖

註:權杖代碼只會顯示一次,離開會面前務必先複製

建立 Google Apps Script

1.登入 Google Apps Script

2.點選左上角:新專案

3.撰寫 GAS 代碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function doPost() {
var line_notify_token = "Line Notify 的權杖代碼";
sendMsg("想要傳送的訊息", line_notify_token);
}

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

註:doPost 這個方法是 GAS 定義的 API,
表示外部用 Post 方法 call 這隻網址時會執行這個方法。

但基本上自動排程不需要從外部呼叫
可以直接從內部設定

4.部署

點擊右上方:部署 -> 部署作業

網頁應用程式下方會有兩個欄位

欄位選項與選擇
執行身份
誰可以存取所有人

5.設定觸發條件

點擊左側選單:觸發條件

點擊右下角:新增觸發條件

設定觸發條件的欄位

欄位說明
選擇您要執行的功能就是要執行的 function,這邊就選 doPost
選擇應執行的部署作業上端,就是指最後部署的程式代碼,這邊選上端。
這樣每次重新部署就會套用最新的代碼
選取活動來源時間驅動或是日曆驅動
選取時間型觸發條件類型時間驅動可以選擇:特定,分鐘,小時,日,週,月
選取時段根據時間類型的結果選擇

註:時間驅動的日行程有一個大坑。
你會發現選項都是區間而不是整點
像是下午 1 點到下午 2 點這樣

那到底觸發的時間會是???

我之前網上查的結果是會在這區間內的一個時間點執行!?
那我自己實測的結果是剛好都會落在某整點的 35 分鐘

建立 Google Sheets

1.登入 Google Sheets

2.建立表單並記錄 SPREADSHEET_ID

SPREADSHEET_ID 可以直接看網址列得知:

https://docs.google.com/spreadsheets/d/SPREADSHEET_ID/

3.建立表單欄位

一個簡單的範例:

主題內容
訊息 1早安
訊息 2午安
訊息 3一起說

4.更新 GAS 內容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
function doPost() {
var line_notify_token = "Line Notify 權杖代碼";
var SPREADSHEET_ID = "SPREADSHEET_ID";
// 選取試算表
var spreadsheet = SpreadsheetApp.openById(SPREADSHEET_ID);
// 選取試算表中的工作表
var sheet = spreadsheet.getSheets()[0];
// 選取工作表中除第一列的所有填寫內容
var range = sheet.getRange(
2,
1,
sheet.getLastRow() - 1,
sheet.getLastColumn()
);
// 取值
var rows = range.getValues();
// 將每一列內容以單個訊息發送
rows.forEach((i) => {
sendMsg("\n" + i[0] + "\n" + i[1], line_notify_token);
});
}

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

到這裡就完成了一個簡易自動排程的通知功能
接下來就是等待設定好的觸發時間
然後收已經在 Google Sheet 裡面寫好的訊息!

本文作者: David Huang
本文地址https://davidblog.github.io/2023/08/02/LINE-Notify-排程通知/

0%