haixunMaster/README.md

207 lines
7.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 巡樓Haixun Master— Threads AI 經營與獲客工作台
用 AI 在 Threads上經營帳號支援多帳號、混合資料來源官方 API / 瀏覽器爬蟲)與自動化。
## 兩條核心流程
| 流程 | 說明 | 現階段建議 |
|------|------|------------|
| **流程 A — 風格複製發文** | 海巡爆文與留言 → AI 學風格 → 草稿 → 審核 → 發文 | Chrome 同步 + 爬蟲 |
| **流程 B — 產品獲客** | 找潛在客群貼文 → 生成獲客留言 → 回覆自己貼文 → 追成效 | 需 Meta 官方 API |
## 技術棧
- Next.js 15 + TypeScript + Tailwind CSS
- SQLite + Prisma
- Playwright瀏覽器海巡、爬留言、發文
- Meta Threads 官方 API發文、獲客留言、成效需 OAuth
- Chrome 擴充(從本機 Chrome 同步 session 到遠端 server
- Vercel AI SDKOpenCode Go / Grok / OpenAI / Claude / Gemini
## 快速開始
```bash
npm install
npm run playwright:setup # Chromium + Linux 依賴
cp .env.example .env
# 填入 OPENCODE_GO_API_KEY 等
npm run db:push
npm run dev
```
開啟 http://localhost:3000
遠端 Linux server 部署時另需:
```bash
PLAYWRIGHT_HEADLESS=true npm run start
npm run worker # 若要自動化排程
```
## 三層設定分離
| 層級 | 在哪裡設定 | 範圍 | 內容 |
|------|-----------|------|------|
| **巡樓使用者** | 設定 `/settings` | 登入者是誰就是誰 | AI API Key、預設模型、產文偏好 |
| **巡樓使用者** | 設定 `/settings` | 全 Threads 帳號共用 | Meta App ID/Secret |
| **Threads 經營帳號** | 連線設定 `/connections` | 每帳號各一份 | 連線預設、Chrome 同步、OAuth token |
| **Threads 經營帳號** | 帳號策略 `/accounts` | 每帳號各一份 | 人設、受眾、定位策略 |
> AI Key 跟你有幾個 Threads 帳號無關 — 切換經營帳號不會換 AI Key。
## 設定頁:連線與資料流程
每帳號的連線預設與 Chrome 同步在 **連線設定**`/connections`AI Key 等在 **設定**`/settings`)。
### 連線預設(三種常用模式)
| 預設 | 海巡 | 留言 | 發文 | 適用情境 |
|------|------|------|------|----------|
| **Chrome 同步** | 瀏覽器 | 瀏覽器爬取 | 瀏覽器 | 現階段全爬蟲、要留言學風格 |
| **API Key 優先** | Meta API | 不爬 | Meta API | 已申請官方 API、流程 B |
| **混合模式** | Meta API | 瀏覽器爬取 | 瀏覽器 | API 海巡 + 留言素材 |
設定頁會即時顯示「目前流程預覽」,說明海巡、留言、發文各走哪條路。
### 底層開關(進階自訂)
| 開關 | 作用 |
|------|------|
| `searchViaApi` | 海巡優先 Meta keyword search |
| `publishViaApi` | 發文優先 Meta API |
| `devMode` | 允許 Playwright 瀏覽器海巡與爬留言 |
| `scrapeReplies` | 是否抓他人貼文留言(需 devMode |
| `repliesPerPost` | 每篇熱門文抓幾則留言 |
| `publishHeaded` | 發文時是否顯示瀏覽器視窗 |
| `playwrightDebug` | 保留 Playwright 除錯截圖 |
### Chrome Session 同步(遠端 server 必備)
服務跑在 Linux 無頭 server 時,**無法**在 server 上直接登入 Threads。
改用 Chrome 擴充(在**連線設定**頁操作):
1. Chrome → `chrome://extensions` → 開發人員模式 → 載入 `extension/haixun-threads-sync`
2. 擴充選項填入 server 網址(例如 `https://your-server.com`
3. 在 Chrome 登入 threads.com
4. 巡樓側欄切換到目標帳號
5. 連線設定頁按「從 Chrome 同步到目前帳號」
擴充會讀取 Chrome 的 Threads/Instagram cookies轉成 Playwright `storageState` 寫入 server DB。
> 不要同時在本機 Chrome 與 server Playwright 登入同一 Threads 帳號,會互相踢出。
### Meta App 憑證(非 AI Key
在設定頁填 **Threads App ID** + **App Secret**(全帳號共用),再到連線設定頁或側欄為**每個帳號**各做一次 OAuth 綁定。
完整申請步驟見 [docs/threads-api-setup.md](docs/threads-api-setup.md)。
## 使用流程
### 流程 A現階段Chrome 同步)
1. **連線設定** `/connections` → 安裝擴充並同步 Chrome session
2. **設定** `/settings` → 填 AI Key
3. **海巡** `/matrix` → 開始海巡 → 生成草稿 → 審核 → 發布
4. **成效紀錄** `/published` → 查看發布結果
### 流程 BAPI 獲客)
1. **連線設定** `/connections` → 綁定 Threads API OAuth
2. **設定** `/settings` → 填 AI Key
3. **找 TA** `/outreach` → 挖掘受眾 → 生成留言 → 發布
4. **互動經營** `/engagement` → 同步留言 → 生成回覆 → 發布
5. **成效紀錄** `/published` → 追蹤成效
## 多帳號模型
每個「經營帳號」各自有策略、主題、草稿、session 與 API token
- **瀏覽器 session**Chrome 擴充同步到 `Account.storageState`(每帳號各一次)
- **官方 API token**:側欄 OAuth 授權(每帳號各一把,共用一組 App ID/Secret
側欄可「新增經營帳號」→ 切換帳號 → 對該帳號同步 Chrome session。
## 資料抓取邏輯(程式行為)
```
海巡
├─ searchViaApi + 帳號有 OAuth → Meta keyword search
├─ 失敗或未開 → devMode 開 → Playwright 搜尋
└─ 記錄 Scan.searchSource = "api" | "browser"
留言top 12 篇)
├─ scrapeReplies + devMode + 有 session → Playwright 爬留言
└─ 否則略過API 模式無法讀他人留言)
發文
├─ publishViaApi + OAuth → Meta API
└─ 否則 / 失敗 → Playwright + storageState
```
## 自動化
**自動化** 頁設定定時任務(需 `npm run worker`
| 任務 | 流程 |
|------|------|
| 自動海巡 | A + B |
| 自動生成草稿 | A |
| 自動發文 | A |
| 自動獲客留言 | B需 Meta API |
| 自動回覆留言 | B需 Meta API |
## 環境變數
| 變數 | 說明 |
|------|------|
| `OPENCODE_GO_API_KEY` | OpenCode Go預設 AI |
| `XAI_API_KEY` / `OPENAI_API_KEY` 等 | 其他 AI provider可選 |
| `PLAYWRIGHT_HEADLESS` | `true`server 預設)或 `false`(本機除錯) |
| `DATABASE_URL` | SQLite 路徑,預設 `file:./dev.db` |
| `THREADS_APP_ID` / `THREADS_APP_SECRET` | 也可在設定頁填,不必寫 .env |
| `APP_URL` | 對外網址OAuth 與含圖 API 發文用 |
## 專案結構
```
app/ # Next.js 頁面與 API
(dashboard)/matrix/ # 海巡 — 內容矩陣與草稿審核
(dashboard)/outreach/ # 找 TA — 獲客留言
(dashboard)/engagement/ # 互動經營 — 留言回覆
(dashboard)/connections/ # 連線設定 — Chrome 同步、OAuth、搜尋來源
(dashboard)/automation/ # 自動化排程
(dashboard)/published/ # 成效紀錄
(dashboard)/settings/ # 設定 — AI Key、模型、產文偏好
extension/haixun-threads-sync/ # Chrome 擴充:同步 session
lib/
threads-api/ # Meta 官方 API
threads-browser/ # Playwright 爬蟲
services/scan.ts # 海巡編排API / 瀏覽器)
automation/ # 自動化引擎
worker/ # cron 排程器
docs/threads-api-setup.md # Meta API 申請指南
```
## 路線圖
| 階段 | 讀資料 | 寫資料 |
|------|--------|--------|
| **現在** | Playwright 爬蟲 + Chrome 同步 | Playwright 發文 |
| **之後** | Apify留言+ Meta API海巡 | Meta API獲客/回覆/成效) |
爬蟲模組會保留作 fallback。
## 風險與注意事項
- **瀏覽器爬蟲違反 Meta ToS**,有封號風險;建議用測試帳號
- **官方 API 較合規**,但讀不了他人貼文留言
- `storageState` 與 token 等同密碼,勿 commit `.env``*.db`
- Threads 貼文 ≤ 500 字
## License
MIT — 使用風險自負。