跳轉至

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

網頁應用程式

把 Apps Script 專案部署成 Web App 後,會得到一個 URL。瀏覽器打開時執行 doGet(e),表單 POST 或外部系統呼叫則走 doPost(e)。適合內部小工具、Webhook 接收端,不適合當高流量網站。

最小例子

function doGet(e) {
  const name = e.parameter.name || "訪客";
  return HtmlService.createHtmlOutput("<h1>你好," + name + "</h1>");
}

或只回 JSON(給其他程式呼叫):

function doGet(e) {
  const out = { ok: true, at: new Date().toISOString() };
  return ContentService.createTextOutput(JSON.stringify(out))
    .setMimeType(ContentService.MimeType.JSON);
}

HtmlService 產出網頁;ContentService 產出文字/JSON/XML。前端若要呼叫伺服端函式,在 HTML 裡用 google.script.run.函式名稱()。

部署時最容易選錯的兩項

在編輯器按 部署 → 新增部署 → 網頁應用程式:

  1. 執行身分:以「我」執行,還是以「使用應用程式的使用者」執行。前者方便(永遠用你的日曆/Gmail),但風險是訪客等於借用你的權限;後者每人要授權。
  2. 存取對象:只有自己、網域內、或任何擁有連結的人。公開連結等於公開一個會跑你帳號配額的端點,務必驗證輸入。

每次改程式若選「新增版本」,舊 URL 可繼續指向舊版。測試可用「測試部署」的 head 網址,不必每次建正式版。

當 Webhook 接收端要知道的限制

外部系統(LINE、金流、表單服務)呼叫你的 doPost 時,Web App 有幾個和一般後端不同的地方:

限制 影響
存取對象必須是「所有人」 外部伺服器沒有 Google 帳號,選其他項目會被擋在登入畫面
讀不到請求標頭 無法驗證 x-line-signature 之類的簽章,見 LINE Bot 上線注意
無法自訂 HTTP 狀態碼 拒絕請求時也只能回 200,對方看起來是成功
POST 的回應會先經過 302 轉址 把 3xx 視為失敗的發送方會重送,機器人要能承受重複事件
/exec 只跑已部署的版本 改程式後必須發新版本,網址才會用新程式

POST 的本文在 e.postData.contents(字串,自己 JSON.parse),網址上的參數在 e.parameter。完整範例見 LINE Bot。

6 分鐘與同時執行

每個請求仍受執行時間與配額限制。不要用 Web App 當檔案轉換叢集;慢工作改切成時間觸發分批處理。

官方指南:Web Apps。長篇實作可看 YouTube 優質教學 的 Web App 片。