---
# System prepended metadata

title: GAS（Google App Script） 與 LINE Message API
tags: [Google Apps Script, JavaScript, Line]

---

# 使用 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/)。
