建立機器人並接上 GAS
這頁從零開始:申請 LINE 官方帳號、啟用 Messaging API、寫一支會「回聲」的 GAS、部署成 Web App,最後把網址填回 LINE。做完你傳什麼,機器人就回什麼,之後所有功能都建立在這個骨架上。
步驟一:建立 LINE 官方帳號並啟用 Messaging API
LINE 現在要先有官方帳號,再從官方帳號啟用 Messaging API,才會產生機器人用的 Channel。
- 到 LINE Official Account Manager 用 LINE 帳號登入,依畫面建立 LINE 官方帳號。
- 進入該帳號 設定 → Messaging API,按 啟用 Messaging API,選一個 Provider(沒有就新建,名稱可填你的名字或團隊)。
Provider 選了就不能改
官方說明:帳號一旦指派 Provider,就無法更換或取消。先想好名稱再按。
- 到 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;介面名稱可能微調,以官方畫面為準。
- 回到 Official Account Manager,把 加入好友的歡迎訊息 與 自動回應訊息 都關掉。這兩項預設是開的,不關掉,使用者會同時收到 LINE 的罐頭回覆和你機器人的回覆。
步驟二:建立 GAS 專案並存放金鑰
- 到 script.google.com 新增專案,取名「LINE Bot」。用獨立腳本即可,這頁先不需要繫結試算表。
- 左側 專案設定 → 指令碼屬性 → 新增指令碼屬性,新增一筆:
| 屬性 | 值 |
|---|---|
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 都是POST+Bearertoken + JSON,包成一個函式後面就可以重複使用。muteHttpExceptions: true:失敗時才讀得到 LINE 回的錯誤說明,否則只會看到一個例外。
reply 與 push 的差別下一頁 處理事件與回覆訊息 會講。
步驟四:部署成 Web App
- 右上 部署 → 新增部署,類型選 網頁應用程式。
- 設定:
| 欄位 | 選擇 | 原因 |
|---|---|---|
| 執行身分 | 我 | 用你的帳號讀寫試算表;LINE 的請求沒有 Google 登入 |
| 誰可以存取 | 所有人 | LINE 伺服器沒有 Google 帳號,選其他項目 LINE 會被擋在登入畫面 |
- 按 部署,完成授權(會出現「未經驗證的應用程式」提醒,個人專案正常,點 進階 繼續)。
- 複製結尾是
/exec的 網頁應用程式網址。
改程式之後一定要發新版本
/exec 網址永遠跑「已部署的版本」,不是你編輯器裡最新存的程式。之後每次修改,都要 部署 → 管理部署作業 → 編輯(鉛筆)→ 版本選「新版本」→ 部署。網址不會變。忘了這一步是「我明明改了怎麼沒效果」的頭號原因。
步驟五:把網址填回 LINE
- LINE Developers Console → Messaging API 分頁 → Webhook URL 按 Edit,貼上剛才的
/exec網址。 - 按 Verify,出現成功訊息代表 LINE 連得到你的 GAS。
- 打開 Use webhook。
- 同一頁用手機掃 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 集是 功能說明,做完後可接著看定時提醒的做法,對應 記帳機器人 的每日推播。