# 使用 Google Apps Script (GAS) 串接 LINE Messaging API 教學 ## 前言 本教學將引導你如何使用 Google Apps Script (GAS) 來串接 LINE Messaging API,實現透過 GAS 發送 LINE 訊息的功能。GAS 是一個無伺服器平台,可讓您用 JavaScript 輕鬆擴展 Google Workspace 的功能,非常適合用來做為發送 LINE Notify 或聊天機器人的後端。 ## 先備條件 在開始之前,請確保您已具備以下條件: 1. **一個 Google 帳號**:用於存取 Google Apps Script。 2. **一個 LINE 帳號**:用於建立 LINE Developer 帳號及 LINE Bot。 3. **一個 LINE Developer 帳號**:如果沒有,請至 [LINE Developers Console](https://developers.line.biz/console/) 註冊。 --- ## 步驟一:取得 LINE Channel Access Token Channel Access Token 是你的應用程式(GAS)與 LINE API 溝通的鑰匙。 1. **登入 LINE Developers Console** 前往 [LINE Developers Console](https://developers.line.biz/console/) 並登入你的帳號。 2. **建立一個 Provider** 如果你還沒有 Provider,請點擊 `Create a new provider` 並輸入一個你喜歡的名稱。 3. **建立一個 Channel** - 在你的 Provider 之下,點選 `Create a new channel`。 - 選擇 `Messaging API`。 - 填寫所有必填欄位,例如: - `Channel type`: Messaging API - `Provider`: 選擇你剛建立的 Provider - `Company or owner's country/region`: 你的國家/地區 - `Channel name`: 你的機器人名稱 (例如:GAS Bot) - `Channel description`: 你的機器人描述 - `Category`: 選擇適合的類別 - `Subcategory`: 選擇適合的子類別 - 同意 LINE 的服務條款。 - 按下 `Create` 完成建立。 4. **取得 Channel Access Token (long-lived)** - 進入你剛剛建立的 Channel。 - 切換到 `Messaging API` 分頁。 - 捲動到頁面底部,你會看到 `Channel access token` 區塊。 - 點擊 `Issue` 按鈕來產生一個長期的 Access Token。 - **請妥善保管這個 Token,稍後我們會在 GAS 中使用它。** 5. **讓使用者加入你的 LINE Bot** - 在 `Messaging API` 分頁頂部,您會看到一個 QR Code。 - 使用您的 LINE App 掃描此 QR Code,並將此 LINE Bot 加入好友。這樣你的 Bot 才能發送訊息給你。 --- ## 步驟二:設定 Google Apps Script 專案 1. **建立一個新的 GAS 專案** - 前往 [Google Apps Script](https://script.google.com/)。 - 點擊左上角的 `+ 新專案`。 2. **命名你的專案** - 點擊左上角的「未命名專案」,並將其命名為有意義的名稱,例如 `LINE Message Sender`。 --- ## 步驟三:撰寫 GAS 程式碼 將以下程式碼複製並貼到 `程式碼.gs` 檔案中。 ```javascript // +-----------------------------------------------------------------+ // | **** 請將這裡的 TOKEN 換成你自己的 **** | // +-----------------------------------------------------------------+ const CHANNEL_ACCESS_TOKEN = 'YOUR_CHANNEL_ACCESS_TOKEN'; // +-----------------------------------------------------------------+ // | **** 請將這裡的 USER_ID 換成你自己的 **** | // +-----------------------------------------------------------------+ // 你的 LINE User ID,可以透過 Webhook 事件取得, // 或讓 Bot 加入群組後,從群組事件中取得。 // 簡單的測試方法是,先設定好 Webhook,然後傳訊息給 Bot, // 再從堆疊紀錄 (Stackdriver) 中找到你的 User ID。 const TO_USER_ID = 'YOUR_LINE_USER_ID'; /** * 主要的進入點函式,用於發送訊息 */ function sendMessage() { const message = '這是一則來自 GAS 的測試訊息!'; pushMessage(TO_USER_ID, message); } /** * 發送 LINE Push Message * @param {string} userId - 要接收訊息的使用者 ID * @param {string} text - 要發送的文字訊息 */ function pushMessage(userId, text) { const url = 'https://api.line.me/v2/bot/message/push'; const payload = { 'to': userId, 'messages': [ { 'type': 'text', 'text': text, } ] }; const options = { 'headers': { 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN, }, 'method': 'post', 'payload': JSON.stringify(payload) }; try { const response = UrlFetchApp.fetch(url, options); Logger.log(response.getContentText()); } catch (e) { Logger.log('Error: ' + e.message); } } /** * 回應 Webhook 事件 (用於聊天機器人) * 當 LINE 使用者傳送訊息給 Bot 時,LINE 平台會將事件發送到您設定的 Webhook URL。 * doPost 函式會接收這個請求。 */ function doPost(e) { // 解析從 LINE 平台傳來的事件 const event = JSON.parse(e.postData.contents).events[0]; // 確認是訊息事件 if (event.type === 'message') { const replyToken = event.replyToken; const userMessage = event.message.text; const userId = event.source.userId; // 取得傳送訊息的使用者 ID // 簡單的回應邏輯:回傳使用者傳送的訊息 const replyText = `你說了:「${userMessage}」。\n你的 User ID 是:${userId}`; replyMessage(replyToken, replyText); } return ContentService.createTextOutput(JSON.stringify({'status': 'success'})).setMimeType(ContentService.MimeType.JSON); } /** * 回覆 LINE Reply Message * @param {string} replyToken - 用於回覆訊息的 Token * @param {string} text - 要回覆的文字訊息 */ function replyMessage(replyToken, text) { const url = 'https://api.line.me/v2/bot/message/reply'; const payload = { 'replyToken': replyToken, 'messages': [ { 'type': 'text', 'text': text, } ] }; const options = { 'headers': { 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN, }, 'method': 'post', 'payload': JSON.stringify(payload) }; try { UrlFetchApp.fetch(url, options); } catch (e) { Logger.log('Error: ' + e.message); } } ``` **重要:** 1. 將 `YOUR_CHANNEL_ACCESS_TOKEN` 替換成您在 **步驟一** 中取得的 Channel Access Token。 2. 將 `YOUR_LINE_USER_ID` 替換成你自己的 LINE User ID。 - **如何取得你的 User ID?** - 最簡單的方法是先設定好 Webhook (見下方步驟),然後傳送任何訊息給你的 Bot。 - 接著在 GAS 編輯器中,點擊 `執行紀錄`,你會看到類似 `你說了:「...」。你的 User ID 是:Uxxxxxxxxxxxx` 的日誌,`U` 開頭的那串就是你的 User ID。 --- ## 步驟四:部署 GAS 專案並測試 ### 方法一:手動執行 (Push Message) 此方法用於主動發送訊息給指定使用者。 1. **儲存專案** 點擊上方的磁碟圖示儲存你的程式碼。 2. **選擇要執行的函式** 在函式選單中,選擇 `sendMessage`。 3. **執行函式** 點擊 `▶ 執行` 按鈕。 4. **授權** - 第一次執行時,GAS 會要求您授權。 - 點擊 `審查權限` -> 選擇你的 Google 帳號。 - 點擊 `進階` -> `前往「(專案名稱)」(不安全)`。 - 點擊 `允許`。 5. **檢查結果** - 執行完畢後,你的 LINE 應該會收到一則來自 Bot 的訊息。 - 你也可以在 GAS 編輯器下方的 `執行紀錄` 中看到 API 的回應。 ### 方法二:部署為 Web App (Reply Message / Webhook) 此方法是將你的 GAS 腳本變成一個公開的 Web API,讓 LINE 平台可以呼叫它,以實現聊天機器人自動回應的功能。 1. **部署專案** - 點擊右上角的 `部署` -> `新增部署作業`。 - 在「選取類型」旁邊,點擊齒輪圖示,選擇 `網頁應用程式`。 2. **設定網頁應用程式** - `說明`:(選填) 輸入部署的描述,例如 `v1`。 - `執行身分`:選擇 `我`。 - `誰可以存取`:選擇 `任何人`。 **(這非常重要,因為 LINE 的伺服器需要公開存取此 URL)** - 點擊 `部署`。 3. **取得 Web App URL** - 部署成功後,你會得到一個**網頁應用程式的網址**。請複製此網址。 4. **設定 LINE Bot 的 Webhook** - 回到你的 [LINE Developers Console](https://developers.line.biz/console/)。 - 進入你的 Channel,切換到 `Messaging API` 分頁。 - 找到 `Webhook settings` 區塊。 - 將剛剛複製的 GAS Web App URL 貼到 `Webhook URL` 欄位中。 - 點擊 `Update` -> `Verify` 來驗證 URL 是否有效。 - **啟用 Webhook**:將 `Use webhook` 這個開關打開。 - (可選) 停用自動回應:在 `Greeting messages` 和 `Auto-reply messages` 點擊 `Edit`,並將其 `Status` 設定為 `Disabled`,這樣 Bot 才不會在你設定的 `doPost` 之外自動回覆預設訊息。 5. **測試 Webhook** - 打開你的 LINE App,對你的 Bot 發送任何訊息。 - 如果設定正確,Bot 應該會立刻回覆 `你說了:「(你傳的訊息)」。你的 User ID 是:(您的ID)`。 --- ## 範例:發送不同類型的訊息 你可以修改 `pushMessage` 或 `replyMessage` 函式中的 `messages` 陣列來發送不同類型的訊息。 ### 發送圖片訊息 ```javascript function sendImageMessage(userId) { const url = 'https://api.line.me/v2/bot/message/push'; const payload = { 'to': userId, 'messages': [ { 'type': 'image', 'originalContentUrl': 'https://www.example.com/image.jpg', // 必須是 HTTPS 'previewImageUrl': 'https://www.example.com/preview.jpg' // 必須是 HTTPS } ] }; // ... 後續的 options 和 UrlFetchApp.fetch() 同上 ... } ``` ### 發送貼圖訊息 ```javascript function sendStickerMessage(userId) { const url = 'https://api.line.me/v2/bot/message/push'; const payload = { 'to': userId, 'messages': [ { 'type': 'sticker', 'packageId': '446', // 貼圖包 ID 'stickerId': '1988' // 貼圖 ID } ] }; // ... 後續的 options 和 UrlFetchApp.fetch() 同上 ... } ``` > **提示**:可用的貼圖列表請參考 [LINE Sticker List](https://developers.line.biz/en/docs/messaging-api/sticker-list/)。 --- ## 結論 透過本教學,你已經學會如何設定一個 GAS 專案來發送 LINE 訊息,並將其部署為一個可以回應使用者訊息的聊天機器人。GAS 的方便之處在於它不需要你管理伺服器,且能與 Google 生態系統(如 Google Sheets, Docs)完美整合,為你的 LINE Bot 創造更多可能性。 若要探索更多功能,建議詳閱 [LINE Messaging API 官方文件](https://developers.line.biz/en/docs/messaging-api/overview/)。