Threads 每天 20:00 自動發文 bot:排程 + trending 選題 + 兩段式發文
內容生產 bot
我想固定在 Threads 分享 GitHub 上的好專案 當 build-in-public 的素材 — 但每天逛 trending、挑一個、判斷它在幹嘛、用自己口吻翻成繁中、再發出去 大概 20 分鐘。固定的事就該自動化 但我不想做成「全自動亂發」那種 會吐出一堆我自己都沒看過的東西 砸帳號。所以這個 bot 的核心不是「全自動」 是「我只出方向 其他它包」。
先講重點
用 Claude Code scheduled-tasks 每天 20:00 觸發、跳 AskUserQuestion 問我今天想看哪個方向、抓 GitHub trending 挑一個用我口吻寫繁中介紹、Threads Graph API 兩段式發文。核心是「我出 5 秒判斷,AI 包剩下 20 分鐘勞動」 — 不是全自動,人在迴路。已穩定跑半年。
卡點:固定策展 GitHub 好物 但每天手挑手寫很耗
想固定分享 GitHub 好專案累積帳號 但流程每天一模一樣:逛 trending → 挑一個 → 看懂它在幹嘛 → 用自己口吻翻繁中 → 發。固定的勞動就該丟給程式。但我也看過太多「全自動發文 bot」吐出一堆機器味、沒人看過的內容 — 那種會反過來砸掉帳號可信度。所以我要的不是全自動 是「把勞動自動化 但判斷留給自己」。
解法:Claude Code 排程 + 人只出一個「方向」
核心設計是「人在迴路」。每天 20:00 Claude Code 的 scheduled-tasks 自動觸發流程 第一件事不是發文 是用 AskUserQuestion 跳一題問我:今天想看 AI / agent、CLI 工具、全端後台、還是隨意挑 trending 第一名(或直接打「今天跳過」)。我點一下方向 剩下抓 repo、去重、寫文、發文 它全包。我出 5 秒判斷 省 20 分鐘勞動 而且每篇都還是我選的方向 不會發出我沒看過的東西。
AI 在哪幾段做事
選完方向:(1)「隨意挑」就 WebFetch GitHub trending,指定方向就走 GitHub search 按 star 排序抓前 15 個 (2) 比對過去 30 天的 log 去重 不重複介紹同一個 repo (3) 挑一個高 star、最近還有在維護的(避開 awesome-list 跟明顯刷 star 的) (4) 用我的 voice 規則寫繁中介紹:第一人稱、整篇最多 1 個 emoji、句尾不加句號直接換行、控制在 480 字內。voice 規則是寫死在流程指引裡的 不是每次重講一遍。
我 debug 最久的一段:Graph API 兩段式發文 + Windows 編碼坑
發文這段卡最久。兩個雷:Threads Graph API 不是一步發 — 要先建一個 container 再 publish 中間還得 sleep 一下 不然 container 還沒 ready 會發失敗。更陰的是 Windows:Git Bash 的 curl 是 Windows 原生 build 中文直接塞進命令列會被 CP950 codepage 轉成亂碼。解法是貼文先寫成 UTF-8 檔 讓 curl 用 @file 去讀。還有一個靜默雷:long-lived token 60 天會過期 要排每週 refresh 不然某天 bot 就默默不發了 而這種「沒報錯但也沒發」最難抓。下面是發文核心:
# Threads 發文是「兩段式」:先建 container 再 publish 不是一步到位
# Windows 雷:Git Bash 的 curl 中文直接進命令列會被 CP950 轉亂碼
# → 貼文先寫成 UTF-8 檔 用 --data-urlencode @file 讓 curl 讀
TEXT_FILE="logs/post-main.txt" # 用 Write 工具寫成 UTF-8
FILE_FOR_CURL="$(cygpath -m "$TEXT_FILE")" # native curl 讀不了 /c/... 路徑
# 1) 建 container(media_type=TEXT)
CREATION_ID=$(curl -s -X POST \
"https://graph.threads.net/v1.0/${USER_ID}/threads" \
-d "media_type=TEXT" \
--data-urlencode "text@${FILE_FOR_CURL}" \
-d "access_token=${TOKEN}" | grep -o '"id":"[^"]*"' | cut -d'"' -f4)
sleep 2 # 不 sleep container 偶爾還沒 ready publish 會失敗
# 2) publish container
curl -s -X POST \
"https://graph.threads.net/v1.0/${USER_ID}/threads_publish" \
-d "creation_id=${CREATION_ID}" \
-d "access_token=${TOKEN}"
三條紅線:不塞 slogan、不放聯盟連結、不超過 500 字
bot 最容易做歪的地方是「順手塞推廣」。我在流程裡寫死三條紅線:結尾不加「追蹤我」這類 CTA、文中不放任何聯盟連結或 UTM、整篇不超過 500 字(Threads 上限 留 buffer)。原因跟我在 about 頁學到的是同一條:這個帳號的價值是「他真的每天在看這些專案」 一旦開始塞推廣 策展的可信度就崩了。自動化可以省力 但不能拿可信度去換。
整段複製給 AI agent,你就有這個 workflow
把下面整段複製貼給你的 AI agent(Claude Code 或其他 coding agent),它就能照著幫你把這個「每天定時自動發 Threads、但你只出方向」的 bot 建起來,你不用自己從零摸。
我要你幫我做一個「半自動的 Threads 發文 bot」,核心是人在迴路:每天定時自動觸發,但發什麼方向由我決定,其餘抓素材、寫文、發文交給你包。我用 Claude Code,作業系統是 Windows,請依這個規格做:
1. 用 Claude Code 的 scheduled-tasks 設一個每天 20:00(時區 Asia/Taipei)觸發的排程。
2. 觸發後第一步不是發文,是用 AskUserQuestion 跳一題問我今天想看哪個方向(例如 AI 代理、CLI 工具、全端後台,或隨意挑 trending 第一名,也要能讓我直接回「今天跳過」)。
3. 我選方向後:「隨意挑」就用 WebFetch 抓 GitHub trending;指定方向就走 GitHub search 按 star 排序抓前 15 個。然後比對我過去 30 天的發文紀錄做去重,不要重複介紹同一個專案,並避開 awesome-list 類清單與明顯刷 star 的專案,挑一個高 star 且最近仍有在維護的。
4. 用我的語氣寫一段繁體中文介紹:第一人稱、整篇最多一個 emoji、句尾不加句號直接換行、控制在 480 字以內。請把這份語氣規則寫死在流程指引檔裡,不要每次重講。
5. 發文用 Threads Graph API,請注意這是兩段式:先建一個 media_type 為 TEXT 的 container,中間 sleep 約兩秒再 publish,不要一步發,否則 container 還沒就緒會發失敗。
6. 請避開我已知的三個雷:第一,Windows 上 Git Bash 的 curl 是原生 build,中文直接塞進命令列會被 CP950 編碼轉成亂碼,所以貼文要先用 Write 寫成 UTF-8 檔,再用 curl 的 --data-urlencode 搭配 @檔案 去讀,並用 cygpath -m 把路徑轉成 curl 讀得懂的格式;第二,長效 token 大約 60 天會靜默失效,請順便排一個每週自動 refresh token 的機制,避免某天 bot 沒報錯卻也沒發;第三,這種「沒報錯但也沒發」最難抓,請在每步加 log 方便我事後對照。
7. 內容守三條紅線:結尾不要加「追蹤我」這類 CTA 或 slogan、文中不放任何聯盟連結或 UTM、整篇不超過 500 字。
請先確認我目前的環境(Claude Code 版本、是否已有 Threads Graph API 權限與 token、發文用哪個帳號)再一步步建,每完成一步就先跟我確認再往下做。
把上面整段複製貼給 agent 就好,它會問你細節(像 token、帳號、環境)再實作,你只要回答,卡住時補一下你的環境資訊就行。
完整 SOP 清單
上面已經把真實架構(Claude Code 排程 + 人選方向 + GitHub trending 選題 + Graph API 兩段式發文)跟我撞過的編碼 / token 坑都寫出來了。下面是完整元件對照 確認沒漏掉哪塊:
- Claude Code scheduled-tasks 排程設定(每天 20:00 Asia/Taipei 觸發)
- daily-workflow.md 完整流程指引(問方向 → 抓 repo → 去重 → 寫文 → 發文 → 記 log)
- Threads Graph API 兩段式發文 bash(create container → sleep → publish,含 Windows CP950 修法)
- long-lived token 60 天 refresh 機制(refresh-token.sh,token 滿 24 小時後可刷)
- GitHub trending / search 兩條抓 repo 路徑 + 過去 30 天去重邏輯
- 繁中介紹文 voice 規則(第一人稱 / ≤1 emoji / 少句號 / ≤480 字)+ 結構模板
- 三條紅線:不加 slogan / 不放聯盟連結或 UTM / 不超過 500 字
看完這篇之前先確認:
- 想在 Threads / X 固定發 build-in-public 素材但每天手挑很煩
- OK 用 Claude Code Pro (US$20/月)、有 GitHub / Threads 帳號
- 願意「人出方向、AI 包執行」不要完全交給 AI 亂發
- 想 100% 全自動發文不審稿 (帳號可信度會崩)
- 完全沒程式背景但連終端機都沒裝過 (先看 Claude Code Windows 安裝那篇)
- 沒 Claude Code Pro 想找免費替代 (本 workflow 走 scheduled-tasks 需 Pro)
- Windows Git Bash 中文塞命令列被 CP950 轉亂碼 — 要寫成 UTF-8 檔讓 curl --data-urlencode @file 讀
- Threads Graph API 不是一步發,要先建 container 再 publish 中間 sleep 2 秒
- long-lived token 60 天靜默失效,要排每週自動 refresh,不然某天 bot 沒報錯但也沒發
▸ 常見問題
這個 bot 真的能取代我每天手動發 Threads 嗎?
可以,但前提是「你只出方向、AI 包執行」這個架構。完全交給 AI 亂發會崩帳號可信度。我這個是每天跳問題讓你 5 秒選方向,剩下 20 分鐘抓 / 寫 / 發全自動,半年穩定。
非工程師可以做嗎?要會什麼?
可以,但要會「跟 Claude Code 講需求」加上有耐心 debug 一兩天。文章內 prompt 整段可以複製給 AI agent 直接幫你建,不用自己從零摸 Python 跟 Threads API。
發 Threads 會被 IG / Meta 鎖帳號嗎?
Threads Graph API 是官方 API,正常使用不會。但有 rate limit (每天約 250 篇 publish),日發 1 篇遠低於上限。注意「不放聯盟連結 / 不堆 hashtag / 不重複發同一個 repo」這三條紅線守住就 OK。
如果想換平台 (X / Bluesky / Threads) 程式碼要重寫嗎?
選 repo 加上寫文那段都通用,只有發文 API 那段要換。換 X 改 Twitter API、Bluesky 改 AT Protocol,大概 30 分鐘工程。文章內把流程模組化好,API call 是最後一段獨立 function。
名詞解釋
- API(應用程式介面)
- 程式跟程式之間溝通的窗口。例如你的程式透過 LINE 的 API 自動發訊息、透過 Google 的 API 讀試算表。
- Threads
- Meta 旗下的文字社群平台。本站的社群引流主戰場之一,相關自動發文流程有整篇教學。
- 機器人(bot)
- 自動執行特定任務的程式,例如 LINE bot 自動回訊息、發文 bot 每天定時發貼文。
- Claude Code
- Anthropic 推出的 AI 寫程式工具,裝在自己電腦的終端機裡,能直接讀寫你的檔案、跑指令,把你用中文描述的需求做成真的網站或工具。
- 排程(cron)
- 讓程式「每天 8 點」「每小時」自動執行的定時器。自動發文、定期抓資料都靠它。
- API 金鑰(API key)
- 服務發給你的一串密碼,程式用它證明「我有權限使用這個服務」。絕對不能公開、不能寫死在程式碼裡。
- 編碼(encoding)
- 電腦儲存文字的方式。Windows 中文環境常用 Big5,多數程式假設 UTF-8,兩邊對不上就變亂碼 — 所以資料夾、檔案建議用英文命名。
- Python
- 入門門檻最低的主流程式語言之一,資料處理、自動化、AI 領域的首選。
- GitHub
- 放 Git 程式碼的雲端平台,也是全世界開源專案的集散地。程式碼推上去之後可以接自動部署。