第 3 章
部署 Apps Script,取得回呼網址
建立內容日曆試算表,把它的 Apps Script 部署成網頁應用程式,取得一條免費的 HTTPS 網址作 OAuth 回呼。
上一章卡在一個問題:Meta 要求公開可連線的 HTTPS 回呼網址,但你沒有伺服器,也沒有網域。
解法是:Apps Script 本身可以部署成網頁應用程式,而 Google 會給你一條免費的 HTTPS 網址。那條網址就是回呼網址。不需要租主機,也不需要買網域。
1. 建立試算表
新建一個 Google Sheet,命名為「內容日曆」之類。
把第一個工作表改名為 Calendar,並在第一列填入這些標題:
| A | B | C | D | E | F |
|---|---|---|---|---|---|
| Status | Publish At | Text | Link | Posted At | Post URL |
各欄的用途:
| 欄位 | 說明 |
|---|---|
| Status | Draft(草稿)/ Scheduled(已排程)/ Posted(已發佈)/ Error |
| Publish At | 發佈時間。只有 Scheduled 的行才會看這一欄 |
| Text | 帖文內容 |
| Link | 選填。會自動發成主帖下面的一則回覆 |
| Posted At | 系統自動填 |
| Post URL | 系統自動填,發佈後的永久連結 |
為什麼連結要單獨一欄、發成回覆?因為主帖保持純內容、不帶連結,觸及通常較好。連結放在自己的回覆裡,想看的人一樣點得到。
2. 開啟 Apps Script 編輯器
在試算表選 擴充功能 → Apps Script。
會開啟一個綁定在這個試算表的指令碼專案。把預設的 Code.gs 內容全部刪除,貼上以下骨架:
/**
* Threads 自動發帖 — 設定與 OAuth 回呼。
* 所有機密資料存放在 Script Properties,不會寫死在程式碼裡。
*/
// 你的 Meta 應用程式資料。填好之後執行一次 saveConfig()。
var APP_ID = "在這裡貼上你的 App ID";
var APP_SECRET = "在這裡貼上你的 App secret";
var API = "https://graph.threads.net/v1.0";
var AUTH_HOST = "https://threads.net";
/** 把設定寫入 Script Properties,然後把上面兩個值清空。 */
function saveConfig() {
var props = PropertiesService.getScriptProperties();
props.setProperty("APP_ID", APP_ID);
props.setProperty("APP_SECRET", APP_SECRET);
Logger.log("已儲存。現在可以把程式碼裡的 APP_ID / APP_SECRET 改回空字串。");
}
/** 這個網頁應用程式的網址,就是要填進 Meta 的回呼網址。 */
function showRedirectUri() {
var url = ScriptApp.getService().getUrl();
Logger.log("回呼網址:" + url);
return url;
}
/** OAuth 回呼會打到這裡。下一章會補上完整內容。 */
function doGet(e) {
return HtmlService.createHtmlOutput("Apps Script 已就緒。");
}
按儲存(💾),把專案命名為「Threads 發帖器」之類。
3. 部署成網頁應用程式
右上角 部署 → 新增部署作業。
- 按齒輪 ⚙ 選取類型 → 網頁應用程式
- 設定如下:
| 欄位 | 選擇 | 原因 |
|---|---|---|
| 說明 | 隨意,例如 v1 | — |
| 執行身分 | 我(你的電郵) | 讓指令碼有權讀寫你的試算表 |
| 誰可以存取 | 所有人 | Meta 的伺服器要連得到這條網址 |

「所有人」聽起來很寬鬆,但這只代表這條網址可以被匿名存取。下一章我們會用
state參數驗證來源,而真正的機密(權杖)存在 Script Properties,不會因為網址公開而外洩。
- 按 部署。首次會要求授權——選擇你的 Google 帳戶,若出現「Google 尚未驗證這個應用程式」,按 進階 → 前往「(專案名稱)」(不安全)。
這個警告是因為這個指令碼是你自己寫的,沒有經過 Google 的公開應用程式審核。它存取的只是你自己的試算表。
- 複製 網頁應用程式網址,格式是:
https://script.google.com/macros/s/AKfycb.../exec

4. ⚠️ 之後重新部署時要注意
日後修改程式碼後要更新部署,一定要用「編輯現有部署作業」:
部署 → 管理部署作業 → 選中現有那個 → 鉛筆圖示 ✏️ → 版本改為「新版本」→ 部署
如果你按「新增部署作業」,會產生一條全新的網址,而 Meta 那邊登記的仍是舊網址,授權就會失敗。
5. 回到 Meta 填回呼網址
拿著剛才複製的網址,回到 Meta 後台 Use cases → Access the Threads API → Customize → Settings,四個欄位全部填同一條:
| 欄位 | 填入 |
|---|---|
| Redirect callback URL | 你的 /exec 網址 |
| Uninstall callback URL | 你的 /exec 網址 |
| Delete callback URL | 你的 /exec 網址 |
| Website URL | 你的 /exec 網址 |
按儲存。如果 Meta 拒絕儲存,通常是因為網址不是 HTTPS、有多餘空白,或者你貼了 /dev 而不是 /exec。
/dev網址只有你自己登入時可以存取,Meta 連不到。一定要用/exec。
6. 存入你的 App ID 與 secret
回到 Apps Script,把第 2 步程式碼頂部的 APP_ID 與 APP_SECRET 填上真實值,然後在編輯器上方選擇函式 saveConfig 並按 執行。
執行成功後,把程式碼裡那兩個值改回空字串:
var APP_ID = "";
var APP_SECRET = "";
值已經存進 Script Properties,程式碼裡不再需要。這樣即使你日後分享這個指令碼,也不會連 secret 一併送出。
這一章完成了什麼
- ✅ 內容日曆試算表(
Calendar工作表) - ✅ 已部署的網頁應用程式,以及那條
/exec網址 - ✅ Meta 後台四個網址欄位已填妥
- ✅ App ID / secret 已安全存入 Script Properties
下一章會走完 OAuth 授權,換取可用約 60 天的長期權杖。
步驟最後驗證於 2026年7月20日