跳轉至

建立 2026-09-21 更新 2026-09-21

建立機器人並接上 GAS

這頁從零開始:申請 LINE 官方帳號、啟用 Messaging API、寫一支會「回聲」的 GAS、部署成 Web App,最後把網址填回 LINE。做完你傳什麼,機器人就回什麼,之後所有功能都建立在這個骨架上。

步驟一:建立 LINE 官方帳號並啟用 Messaging API

LINE 現在要先有官方帳號,再從官方帳號啟用 Messaging API,才會產生機器人用的 Channel。

  1. LINE Official Account Manager 用 LINE 帳號登入,依畫面建立 LINE 官方帳號。
  2. 進入該帳號 設定 → Messaging API,按 啟用 Messaging API,選一個 Provider(沒有就新建,名稱可填你的名字或團隊)。

Provider 選了就不能改

官方說明:帳號一旦指派 Provider,就無法更換或取消。先想好名稱再按。

  1. LINE Developers Console,選剛才的 Provider 與 Channel,記下兩個值:
在哪裡 用途
Channel secret Basic settings 分頁 驗證 Webhook 簽章用(GAS 做不到,見 上線注意),先留著
Channel access token Messaging API 分頁最下方,按 Issue 呼叫 LINE API 的鑰匙,要保密

關於 Token 類型

官方文件目前建議使用「Channel access token v2.1」(可自訂到期時間)。本教學為了簡單,使用主控台按 Issue 就能取得的 token。正式環境建議改用有到期時間的 token;介面名稱可能微調,以官方畫面為準。

  1. 回到 Official Account Manager,把 加入好友的歡迎訊息自動回應訊息 都關掉。這兩項預設是開的,不關掉,使用者會同時收到 LINE 的罐頭回覆和你機器人的回覆。

步驟二:建立 GAS 專案並存放金鑰

  1. script.google.com 新增專案,取名「LINE Bot」。用獨立腳本即可,這頁先不需要繫結試算表。
  2. 左側 專案設定 → 指令碼屬性 → 新增指令碼屬性,新增一筆:
屬性
LINE_TOKEN 剛才取得的 Channel access token

金鑰放在屬性裡,而不是寫進程式碼:程式碼會被複製、分享,屬性不會。

步驟三:寫回聲機器人

Code.gs 換成以下內容:

function doPost(e) {
  const body = JSON.parse(e.postData.contents);
  (body.events || []).forEach(handleEvent);
  return ContentService.createTextOutput(JSON.stringify({ ok: true }))
    .setMimeType(ContentService.MimeType.JSON);
}

function handleEvent(event) {
  if (event.type !== "message" || event.message.type !== "text") return;
  replyText(event.replyToken, "你說:" + event.message.text);
}

// ---- 呼叫 LINE API 的共用函式 ----

function callLine(path, payload) {
  const token = PropertiesService.getScriptProperties().getProperty("LINE_TOKEN");
  const res = UrlFetchApp.fetch("https://api.line.me/v2/bot/" + path, {
    method: "post",
    contentType: "application/json",
    headers: { Authorization: "Bearer " + token },
    payload: JSON.stringify(payload),
    muteHttpExceptions: true,
  });
  if (res.getResponseCode() !== 200) {
    console.error(path + " 失敗 " + res.getResponseCode() + ":" + res.getContentText());
  }
}

function reply(replyToken, messages) {
  callLine("message/reply", { replyToken: replyToken, messages: messages });
}

function push(userId, messages) {
  callLine("message/push", { to: userId, messages: messages });
}

function replyText(replyToken, text) {
  reply(replyToken, [{ type: "text", text: text }]);
}

逐段看:

  • doPost(e):LINE 每次通知都會呼叫它。e.postData.contents 是 LINE 傳來的 JSON 字串。
  • (body.events || []):LINE 主控台的 Verify 按鈕會送一個 events 為空陣列的測試請求,這樣寫才不會在測試時出錯。
  • handleEvent:目前只處理「文字訊息」,其他事件先忽略。
  • callLine:所有 LINE API 都是 POSTBearer token + JSON,包成一個函式後面就可以重複使用。
  • muteHttpExceptions: true:失敗時才讀得到 LINE 回的錯誤說明,否則只會看到一個例外。

replypush 的差別下一頁 處理事件與回覆訊息 會講。

步驟四:部署成 Web App

  1. 右上 部署 → 新增部署,類型選 網頁應用程式
  2. 設定:
欄位 選擇 原因
執行身分 用你的帳號讀寫試算表;LINE 的請求沒有 Google 登入
誰可以存取 所有人 LINE 伺服器沒有 Google 帳號,選其他項目 LINE 會被擋在登入畫面
  1. 部署,完成授權(會出現「未經驗證的應用程式」提醒,個人專案正常,點 進階 繼續)。
  2. 複製結尾是 /exec網頁應用程式網址

改程式之後一定要發新版本

/exec 網址永遠跑「已部署的版本」,不是你編輯器裡最新存的程式。之後每次修改,都要 部署 → 管理部署作業 → 編輯(鉛筆)→ 版本選「新版本」→ 部署。網址不會變。忘了這一步是「我明明改了怎麼沒效果」的頭號原因。

步驟五:把網址填回 LINE

  1. LINE Developers Console → Messaging API 分頁 → Webhook URLEdit,貼上剛才的 /exec 網址。
  2. Verify,出現成功訊息代表 LINE 連得到你的 GAS。
  3. 打開 Use webhook
  4. 同一頁用手機掃 QR code 加機器人為好友,傳一句話。收到「你說:…」就成功了。

出錯時怎麼查

現象 常見原因
Verify 失敗 存取對象不是「所有人」;貼成 /dev 網址;沒有完成授權
有回聲但改程式沒變 忘了發新版本
完全沒反應 沒打開 Use webhook;自動回應訊息沒關(會被罐頭回覆蓋掉)
沒回覆,也沒錯誤 到 GAS 編輯器 執行 頁看紀錄;callLine 失敗會用 console.error 寫出 LINE 回的原因(如 token 打錯會是 401)

在編輯器直接按「執行」doPost 會失敗,因為沒有 e。除錯一律靠 LINE 傳訊息,再看 執行 頁的紀錄;想看 LINE 傳來的完整內容,在 doPost 第一行加 console.log(e.postData.contents)

推薦影音

申請 LINE Bot 並用 GAS 自動回應

頻道:蔡明和(彰化一整天)。示範申請 LINE Bot、用試算表的 Google Apps Script 設定 Webhook 並自動回應,與本頁步驟一到五對應。想先看一遍畫面再動手的人適合。

設定 LINE Messaging API

頻道:Boris的分享小站。「用 GAS 和 LINE Bot 製作定時提醒功能」系列的第 2 集,聚焦在 Messaging API 的後台設定,和步驟一、五對照。整個系列的第 1 集是 功能說明,做完後可接著看定時提醒的做法,對應 記帳機器人 的每日推播。