第 3 章

部署 Apps Script,取得回呼網址

建立內容日曆試算表,把它的 Apps Script 部署成網頁應用程式,取得一條免費的 HTTPS 網址作 OAuth 回呼。

上一章卡在一個問題:Meta 要求公開可連線的 HTTPS 回呼網址,但你沒有伺服器,也沒有網域。

解法是:Apps Script 本身可以部署成網頁應用程式,而 Google 會給你一條免費的 HTTPS 網址。那條網址就是回呼網址。不需要租主機,也不需要買網域。

1. 建立試算表

新建一個 Google Sheet,命名為「內容日曆」之類。

把第一個工作表改名為 Calendar,並在第一列填入這些標題:

ABCDEF
StatusPublish AtTextLinkPosted AtPost URL

各欄的用途:

欄位說明
StatusDraft(草稿)/ 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. 部署成網頁應用程式

右上角 部署 → 新增部署作業

  1. 按齒輪 ⚙ 選取類型 → 網頁應用程式
  2. 設定如下:
欄位選擇原因
說明隨意,例如 v1
執行身分我(你的電郵)讓指令碼有權讀寫你的試算表
誰可以存取所有人Meta 的伺服器要連得到這條網址

Apps Script 的新增部署作業對話框,「執行身分」選我,「誰可以存取」選所有人

「所有人」聽起來很寬鬆,但這只代表這條網址可以被匿名存取。下一章我們會用 state 參數驗證來源,而真正的機密(權杖)存在 Script Properties,不會因為網址公開而外洩。

  1. 部署。首次會要求授權——選擇你的 Google 帳戶,若出現「Google 尚未驗證這個應用程式」,按 進階 → 前往「(專案名稱)」(不安全)

這個警告是因為這個指令碼是你自己寫的,沒有經過 Google 的公開應用程式審核。它存取的只是你自己的試算表。

  1. 複製 網頁應用程式網址,格式是:
https://script.google.com/macros/s/AKfycb.../exec

部署完成畫面,「網頁應用程式」下方就是要複製的 /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_IDAPP_SECRET 填上真實值,然後在編輯器上方選擇函式 saveConfig 並按 執行

執行成功後,把程式碼裡那兩個值改回空字串:

var APP_ID = "";
var APP_SECRET = "";

值已經存進 Script Properties,程式碼裡不再需要。這樣即使你日後分享這個指令碼,也不會連 secret 一併送出。

這一章完成了什麼

  • ✅ 內容日曆試算表(Calendar 工作表)
  • ✅ 已部署的網頁應用程式,以及那條 /exec 網址
  • ✅ Meta 後台四個網址欄位已填妥
  • ✅ App ID / secret 已安全存入 Script Properties

下一章會走完 OAuth 授權,換取可用約 60 天的長期權杖。

步驟最後驗證於 2026年7月20日