LINE 通知設定指南
使用安全 Touch Mail 的「LINE 通知功能」的初始設定步驟。
※請務必在電腦(PC)上進行此設定。
【重要】每月免費訊息則數取決於您的 LINE 官方帳號方案。請根據註冊的 IC 卡數量評估適合的 LINE 官方帳號方案。
LINE Messaging API 費用
❶ 建立 LINE 官方帳號
從 LINE 官方帳號 建立帳號。

※如果您從未用登入 LINE Official Account Manager 的帳號登入過 LINE Developers Console,在操作過程中會顯示註冊開發者資訊的畫面。請輸入您的姓名和電子郵件地址以建立開發者帳號。
❷ 啟用 Messaging API 並建立 channel
從帳號列表中選擇已建立的「LINE 官方帳號」
https://manager.line.biz/

前往「設定」

前往「Messaging API」

前往「使用 Messaging API」

建立 LINE Developers provider。
(如果已經建立 provider,您也可以選擇現有的 provider。)

登入 LINE Developers Console
LINE Developers

選擇已建立(或選定)的 provider,並確認 channel 已建立。
❸ 發行長期 Channel Access Token
發行位於已建立 channel 的「Messaging API 設定」標籤內的「Channel Access Token (長期)」。請複製它,因為稍後會在 GAS 中使用。
❹ 設定 Google Apps Script
建立一個新的 Google 試算表,並在第一列中,A欄輸入「IDm」,B欄輸入「LINE ID」,C欄輸入「連結日期與時間」。
從頂部選單的「擴充功能」開啟「Apps Script」並貼上以下程式碼。

// =========================================================
// 【初期設定】
// 將您的設施取得的「Channel Access Token」貼在下方
// =========================================================
const LINE_ACCESS_TOKEN = '請將發行的 Channel Access Token (長期) 貼在這裡';
/**
* 處理來自應用程式和 LINE 的請求的主函式
*/
function doPost(e) {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
try {
const json = JSON.parse(e.postData.contents);
// =========================================================
// 處理 1:來自家長的連結設定 (接收來自 LINE 的 Webhook)
// =========================================================
if (json.events && json.events.length > 0) {
const event = json.events[0];
if (event.type === 'message' && event.message.type === 'text') {
const text = event.message.text;
const userId = event.source.userId;
if (text.startsWith("idm=")) {
const idm = text.replace("idm=", "").trim();
// 在試算表中記錄 IDm 和 User ID
sheet.appendRow([idm, userId, new Date()]);
replyLineMessage(event.replyToken, "連結完成!\n您現在將收到來自 安全 Touch Mail 的通知。");
}
}
return ContentService.createTextOutput(JSON.stringify({status: "success"})).setMimeType(ContentService.MimeType.JSON);
}
// =========================================================
// 處理 2:來自應用程式的感應通知
// =========================================================
if (json.idm && json.action === 'touch') {
const targetIdm = json.idm;
const data = sheet.getDataRange().getValues();
let targetUserId = null;
// 從試算表底部尋找最新的連結資料
for (let i = data.length - 1; i >= 1; i--) {
if (String(data[i][0]) === String(targetIdm)) {
targetUserId = data[i][1];
break;
}
}
if (targetUserId) {
let messageText = "";
// 優先使用在應用程式中設定的自訂訊息(如果有)
if (json.custom_message) {
messageText = json.custom_message;
} else {
// 否則,建立標準訊息
messageText =
`來自【${json.terminal_name}】的 ${json.mode} 通知\n\n` +
`${json.child_name} 已經 ${json.mode}。\n\n` +
`地點:${json.location}\n` +
`發送者:${json.terminal_name}\n` +
`時間:${json.timestamp}`;
}
// 執行 LINE 發送
pushLineMessage(targetUserId, messageText);
return ContentService.createTextOutput(JSON.stringify({status: "success"})).setMimeType(ContentService.MimeType.JSON);
} else {
return ContentService.createTextOutput(JSON.stringify({status: "error", message: "User not linked"})).setMimeType(ContentService.MimeType.JSON);
}
}
} catch (err) {
return ContentService.createTextOutput(JSON.stringify({status: "error", message: err.toString()})).setMimeType(ContentService.MimeType.JSON);
}
}
// ---------------------------------------------------------
// 輔助函式:發送回覆
// ---------------------------------------------------------
function replyLineMessage(replyToken, text) {
const url = "https://api.line.me/v2/bot/message/reply";
const payload = {
"replyToken": replyToken,
"messages": [{"type": "text", "text": text}]
};
const options = {
"method": "post",
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer " + LINE_ACCESS_TOKEN
},
"payload": JSON.stringify(payload)
};
UrlFetchApp.fetch(url, options);
}
// ---------------------------------------------------------
// 輔助函式:發送推播訊息
// ---------------------------------------------------------
function pushLineMessage(userId, text) {
const url = "https://api.line.me/v2/bot/message/push";
const payload = {
"to": userId,
"messages": [{"type": "text", "text": text}]
};
const options = {
"method": "post",
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer " + LINE_ACCESS_TOKEN
},
"payload": JSON.stringify(payload)
};
UrlFetchApp.fetch(url, options);
} 將程式碼中 '請將發行的 Channel Access Token (長期) 貼在這裡' 的部分,替換為您在步驟 3 中取得的您自己的 Channel Access Token。
從畫面右上角的「部署」>「新增部署作業」,選擇類型為「網頁應用程式」,並將存取權限設定為「所有人」,然後執行。

複製發行的「網頁應用程式網址」。

※「網頁應用程式網址」也將在「安全 Touch Mail」的設定中使用。我們建議您使用可以從電腦存取的方法(例如電子郵件)將其分享到您的智慧型手機。
在 LINE Developers Console 上,點擊您建立的 channel 的「Messaging API 設定」標籤內的「Webhook URL」區塊的「編輯」,貼上複製的「網頁應用程式網址」。
此頁面上的 Bot 基礎 ID(以 @ 開頭的 ID)就是您連結的「LINE 官方帳號 ID」。此「LINE 官方帳號 ID」將在「安全 Touch Mail」的設定中使用。我們建議將其分享到您的智慧型手機。
❺ 應用程式設定
開啟安全 Touch Mail 應用程式,並從初始設定畫面進入「LINE 通知設定」。
在「LINE 通知伺服器 URL」輸入您剛才分享的「網頁應用程式網址」。
在「設施的 LINE 官方 ID」輸入您剛才分享的「LINE 官方帳號 ID (以 @ 開頭的 ID)」,然後儲存。
❻ 顯示 LINE 連結用的行動條碼
完成到步驟 ❺ 的設定後,在「註冊/更新 IC 卡或智慧型手機」時將會顯示 LINE 連結用的行動條碼。
請接收通知的家長掃描此行動條碼並直接送出訊息,即可開始在 LINE 接收通知。