← 回技術文件 晶鑫數位科技 3dgowl.com
網站營運

網站來單不漏接:
幫現有網站加上 LINE 自動通知的實作指南

訂單、預約、聯絡表單一送出,LINE 馬上收到通知。整理 LINE Notify 停用後的正規做法:申請官方帳號與 Messaging API、取得 Token 和 User ID,並依網站類型提供三種串接範例。

最後更新:2026 年 8 月

網站上有聯絡表單、預約功能或購物車的人,多半都遇過同一件事:客人下午就送出了訂單,你晚上打開信箱才看到。Email 通知不是不能用,但它會被淹沒、會進垃圾郵件,而且沒有人一天到晚盯著收件匣。台灣人真正隨時在看的是 LINE。所以最直接的解法,就是讓網站在收到訂單或預約的那一刻,主動發一則 LINE 訊息到你的手機。

這篇文章整理這件事現在的正規做法。先說結論:過去大家慣用的 LINE Notify 已經在 2025 年 3 月底停止服務,現在要做通知,走的是「LINE 官方帳號+Messaging API」這條路。申請流程不難,程式端要加的東西也不多,一個下午可以做完。

一、哪些情境用得到

只要網站上有「訪客做了某件事、你希望第一時間知道」的功能,都適用同一套做法:

共通點是:事件都發生在網站的「後端」。表單處理、訂單成立這些程式碼跑到一半的時候,順手多發一則 LINE 訊息出去。理解這一點,後面的架構就都好懂了。

二、先弄清楚現況:LINE Notify 走入歷史之後

如果你以前研究過這個題目,看到的教學十之八九教的是 LINE Notify:免費、申請一個 token 就能發,小商家和工程師都愛用。但 LINE 官方已經在 2025 年 3 月 31 日終止了這項服務,舊教學裡的作法現在完全行不通,網路上還留著大量過時文章,查資料時要特別留意日期。

官方指定的替代方案,就是透過 LINE 官方帳號(LINE OA)搭配 Messaging API 發送訊息。兩者的差異值得先知道:

LINE Notify(已停用)Messaging API(現行做法)
發送者「LINE Notify」官方機器人你自己的官方帳號
費用免費、無上限輕用量方案免費,每月 200 則;超過需升級付費方案
計算方式按「送達人次」計,發給 3 個人算 3 則
訊息形式純文字為主文字、圖片、影片、位置、Flex 卡片訊息

費用部分先安心:如果通知只發給你自己(或老闆加你兩個人),一天就算來十筆訂單,一個月也就三百則上下,超出免費額度時升級中用量方案(台灣目前月費 800 元、含 3,000 則)也還算合理。純自用的通知情境,多數人用免費方案就夠了。

三、運作原理

訪客 送出表單/訂單 /完成預約 你的網站後端 處理資料(原有流程) 多加一段:呼叫 LINE API LINE Messaging API POST /v2/bot/message/push 以你的官方帳號名義發送 你的手機 LINE 跳出 通知訊息 前提:你的 LINE 帳號要先加官方帳號為好友,官方帳號才能推播訊息給你
圖 1:LINE 通知的整體流向。對現有網站來說,唯一的改動是在後端多加一段呼叫 API 的程式

拆開來看只有三個要素:一個代表你網站的「LINE 官方帳號」(訊息由它發出)、一組證明你有權使用這個帳號發訊息的「Channel Access Token」,以及一個標明訊息要發給誰的「User ID」。事前準備做的就是把這三樣東西弄到手。

四、事前準備:四樣東西

1 建立官方帳號 LINE OA 管理後台 免費申請 2 啟用 Messaging API 連結 LINE Developers 建立 Channel 3 發行 Access Token Developers Console 長效 Token,妥善保管 4 取得 User ID 加好友+查自己的 ID 通知要發給誰
圖 2:申請流程四步驟。全部在 LINE 的網頁後台完成,不用寫程式

1. 建立 LINE 官方帳號

LINE 官方帳號申請頁免費建立一個帳號。名稱取「某某網站通知」這類一看就懂的就好,這個帳號的用途單純是發通知,不用經營。

2. 啟用 Messaging API

在官方帳號管理後台(LINE Official Account Manager)的設定裡啟用 Messaging API,過程中會引導你連結或建立一個 LINE Developers 的 Channel。完成後,這個官方帳號就具備了「用程式發訊息」的能力。

3. 發行 Channel Access Token

到 LINE Developers Console,進入剛剛的 Channel,在 Messaging API 分頁找到 Channel Access Token(long-lived),按下發行。這一長串字串就是你程式發訊息時的通行證,等同密碼,不能外流,後面的安全一節會再細講。

4. 取得接收者的 User ID

Messaging API 的訊息要指名發給誰,用的不是 LINE ID 或電話,而是一組 U 開頭的內部識別碼。兩個常用的取得方式:

重要前提 接收通知的人必須先把官方帳號加為好友,否則推播會失敗。自用情境就是:用自己的 LINE 掃官方帳號的 QR Code 加好友,這樣就完成了。要加好友的只有收通知的站長或老闆;在網站上填表單的訪客不需要加好友,甚至不需要有 LINE 帳號,因為通知只發給你程式裡指定的那個 User ID,跟訪客是誰無關。

五、依你的網站類型選作法

你的網站有自己的後端程式嗎? 有(PHP/Node…) 是 WordPress 純靜態/不想寫程式 A:後端直接呼叫 API 在表單/訂單處理程式裡 多加一段 push 程式碼 最推薦,改動最小 B:WordPress 掛勾 在 functions.php 掛上 表單/WooCommerce 的 hook 本質同 A,只是掛載點不同 C:Google Apps Script 中繼 表單 POST 到免費的 GAS 由 GAS 代發 LINE 訊息 零主機成本,Token 不落地前端 另有 D:Make/Zapier 這類自動化平台的 Webhook 模組,完全免寫程式,但免費額度有限、多一層依賴
圖 3:三種主要作法的選擇。判斷標準只有一個:後端程式在不在你手上

不管選哪條路,核心都是同一件事:找到一個「事件發生時會被執行、而且訪客看不到原始碼」的位置,在那裡呼叫 LINE 的 API。唯一絕對不能做的,是把呼叫 API 的程式寫在前端 JavaScript 裡,原因見安全一節。

六、程式範例

Messaging API 的推播就是一個 HTTP POST:打 https://api.line.me/v2/bot/message/push,Header 帶上 Token,內容指定收件人和訊息。以下三個範例可直接拿去改。

Node.js(Express 表單處理為例)

// 表單送出後的處理函式裡,資料存檔之後多呼叫這一段
async function sendLineNotify(order) {
  await fetch("https://api.line.me/v2/bot/message/push", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "Authorization": "Bearer " + process.env.LINE_CHANNEL_TOKEN  // Token 放環境變數
    },
    body: JSON.stringify({
      to: process.env.LINE_ADMIN_USER_ID,  // 收件人 User ID
      messages: [{
        type: "text",
        text: `新訂單通知\n姓名:${order.name}\n項目:${order.item}\n時間:${order.time}\n電話:${order.phone}`
      }]
    })
  });
}

PHP(多數傳統網站適用)

// 放在表單處理(例如 contact.php)寄信或寫入資料庫之後
function send_line_notify($name, $item, $time, $phone) {
  $payload = json_encode([
    "to" => getenv("LINE_ADMIN_USER_ID"),
    "messages" => [[
      "type" => "text",
      "text" => "新訂單通知\n姓名:{$name}\n項目:{$item}\n時間:{$time}\n電話:{$phone}"
    ]]
  ], JSON_UNESCAPED_UNICODE);

  $ch = curl_init("https://api.line.me/v2/bot/message/push");
  curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => [
      "Content-Type: application/json",
      "Authorization: Bearer " . getenv("LINE_CHANNEL_TOKEN")
    ],
    CURLOPT_POSTFIELDS => $payload,
    CURLOPT_RETURNTRANSFER => true
  ]);
  curl_exec($ch);
  curl_close($ch);
}

Google Apps Script(純靜態網站的免費中繼)

沒有後端的網站,可以到 script.google.com 建一個專案貼上以下程式,部署成「網頁應用程式」(存取權設「任何人」),把產生的網址當成表單的送出目標:

const TOKEN = PropertiesService.getScriptProperties().getProperty("LINE_TOKEN");
const ADMIN = PropertiesService.getScriptProperties().getProperty("ADMIN_ID");

function doPost(e) {
  const d = JSON.parse(e.postData.contents);
  UrlFetchApp.fetch("https://api.line.me/v2/bot/message/push", {
    method: "post",
    contentType: "application/json",
    headers: { Authorization: "Bearer " + TOKEN },
    payload: JSON.stringify({
      to: ADMIN,
      messages: [{ type: "text",
        text: "網站新詢問\n姓名:" + d.name + "\n訊息:" + d.message }]
    })
  });
  return ContentService.createTextOutput("ok");
}

Token 和 User ID 記得存在 GAS 的「指令碼屬性」(Script Properties)裡,不要直接寫在程式碼中。前端表單則用 fetch() 把欄位資料 POST 到這個網址即可。

GAS 方案的取捨 好處是完全免費、不用主機;限制是這個網址是公開的,理論上任何人都可以對它發請求灌通知。自用小網站通常無妨,在意的話可以在 doPost 裡加一個自訂的暗號欄位做簡單驗證。

七、安全注意事項

八、測試與常見錯誤

上線前先用 curl 或 Postman 直接打一次 API,確認 Token 和 User ID 沒問題,再接進網站流程。常見的錯誤代碼對照:

狀態碼代表意義處理方式
401Token 無效檢查有沒有帶 Bearer 前綴、Token 是否複製完整或已被撤銷
400(Invalid user id)User ID 格式錯誤確認是 U 開頭的識別碼,不是 LINE ID 或顯示名稱
400(The user hasn't added…)對方沒加好友請接收者先把官方帳號加為好友(或解除封鎖)
429超過訊息額度或頻率限制檢查本月已發訊息數,評估是否升級方案

都通了之後,做一次端對端測試:自己到網站上送出一筆測試表單,手機的 LINE 應該幾秒內跳出通知。順手把測試資料刪掉,就可以正式上線了。

九、重點整理