網頁應用程式
把 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.函式名稱()。
部署時最容易選錯的兩項
在編輯器按 部署 → 新增部署 → 網頁應用程式:
- 執行身分:以「我」執行,還是以「使用應用程式的使用者」執行。前者方便(永遠用你的日曆/Gmail),但風險是訪客等於借用你的權限;後者每人要授權。
- 存取對象:只有自己、網域內、或任何擁有連結的人。公開連結等於公開一個會跑你帳號配額的端點,務必驗證輸入。
每次改程式若選「新增版本」,舊 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 片。