帳號管理
說明如何透過控制台與 API 管理已連結的社群帳號。
概覽
帳號管理相關端點可用於:
- 列出所有已連結帳號
- 檢視帳號詳細資料
- 解除連結(軟刪除)帳號
- 驗證權杖狀態
注意:此區端點需要 控制台 Session 驗證(Cookie),不接受 API Key。
列出帳號
取得當前使用者所連結的所有社群帳號。
Endpoint
GET /api/accounts
驗證方式
需登入控制台並攜帶 Session Cookie。
Response
{
"accounts": [
{
"account_id": "uuid-string",
"social_channel_type": "facebook",
"page_name": "My Facebook Page",
"page_id": "123456789",
"is_valid": true,
"expires_at": null,
"data_access_expires_at": "2026-01-05T10:30:00Z",
"created_at": "2025-01-01T10:00:00Z",
"updated_at": "2025-01-20T15:30:00Z"
},
{
"account_id": "uuid-string",
"social_channel_type": "instagram",
"ig_username": "myusername",
"ig_account_id": "987654321",
"account_type": "BUSINESS",
"is_valid": true,
"expires_at": "2025-03-20T10:30:00Z",
"created_at": "2025-01-15T12:00:00Z",
"updated_at": "2025-01-15T12:00:00Z"
},
{
"account_id": "uuid-string",
"social_channel_type": "threads",
"threads_username": "myusername",
"threads_id": "123456789",
"threads_profile_picture": "https://...",
"is_valid": true,
"expires_at": "2025-03-15T10:30:00Z",
"created_at": "2025-01-10T14:00:00Z",
"updated_at": "2025-01-10T14:00:00Z"
}
]
}
欄位說明
共同欄位:
account_id:帳號唯一識別碼(發佈 API 需使用)social_channel_type:平台名稱(facebook、instagram、threads…)is_valid:權杖是否仍有效expires_at:權杖到期時間(Facebook 為 null)created_at:首次連結時間updated_at:最後更新時間
Facebook 專屬:
page_name:粉專名稱page_id:粉專 IDdata_access_expires_at:資料存取到期日(90 天)
Instagram 專屬:
ig_username:IG 使用者名稱ig_account_id:IG User IDaccount_type:BUSINESS / CREATOR / MEDIA_CREATOR
Threads 專屬:
threads_username:Threads 使用者名稱threads_id:Threads User IDthreads_profile_picture:大頭貼 URL
解除連結帳號
將帳號標記為停用(資料庫中設定 disabled: true)。
Endpoint
DELETE /api/accounts/{account_id}
驗證方式
需控制台 Session(JWT)。
參數
account_id:要解除的帳號 ID(放在 URL 路徑)
Request 範例
DELETE /api/accounts/a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6 HTTP/1.1
Host: boring.aiagent-me.com
Cookie: session=...
成功回應
{
"success": true,
"message": "Account disconnected successfully"
}
驗證權杖
確認帳號權杖是否仍有效,以及到期時間。
Endpoint
POST /api/token/info
驗證方式
需控制台 Session。
Request Body
{
"account_id": "uuid-string"
}
Response
{
"success": true,
"data": {
"is_valid": true,
"expires_at": "2025-03-20T10:30:00Z",
"days_until_expiry": 45,
"platform": "instagram",
"account_name": "myusername"
}
}
使用情境
- 發佈前確認是否需重新授權
- 建立排程監控權杖到期
- 大量發佈前先驗證狀態
帳號 ID
account_id 是發佈貼文時最關鍵的識別碼。
取得帳號 ID
透過控制台:
- 登入 Boring 控制台
- 檢視「Connected Accounts」
- 點擊帳號旁的 「Copy ID」
- 保存 ID 以供 API 使用
透過 API:
const response = await fetch("https://boring.aiagent-me.com/api/accounts", {
credentials: "include"
});
const data = await response.json();
const accountIds = data.accounts.map(acc => ({
id: acc.account_id,
platform: acc.social_channel_type,
name: acc.page_name || acc.ig_username || acc.threads_username
}));
保存帳號 ID
建議做法:
- 儲存在環境變數或秘密管理服務
- 使用設定檔(勿提交版控)
- 建立名稱與 ID 的對照表
FACEBOOK_MAIN_PAGE_ID=a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6
INSTAGRAM_BUSINESS_ID=b2c3d4e5-f6g7-h8i9-j0k1-l2m3n4o5p6q7
THREADS_PERSONAL_ID=c3d4e5f6-g7h8-i9j0-k1l2-m3n4o5p6q7r8
權杖有效期
各平台有效期不同:
| 平台 | 有效期 | 自動刷新 | 建議動作 |
|---|---|---|---|
| 永不過期 | N/A | 每 90 天重新授權一次資料存取權 | |
| 60 天 | 無 | 到期前重新連結 | |
| Threads | 60 天 | 會(到期前 5 天) | 通常無需動作 |
處理到期
def check_token_expiration(account_id):
response = requests.post(
"https://boring.aiagent-me.com/api/token/info",
json={"account_id": account_id},
cookies=session_cookies
)
data = response.json()
if data["success"]:
days_left = data["data"]["days_until_expiry"]
if days_left and days_left < 7:
notify_admin(f"Token expiring in {days_left} days!")
建議每日檢查,低於 7 天即通知使用者重新授權。
帳號數量限制
平台限制
- Facebook:粉專數量不限,每個粉專獨立一個帳號 ID
- Instagram:商業或創作者帳號不限
- Threads:帳號數量不限
Boring 限制
目前對使用者連結帳號數量無限制。
多帳號管理
分組
ACCOUNTS = {
"production": {
"facebook": "prod-fb-account-id",
"instagram": "prod-ig-account-id",
"threads": "prod-threads-account-id"
},
"testing": {
"facebook": "test-fb-account-id",
"instagram": "test-ig-account-id",
"threads": "test-threads-account-id"
},
"clients": {
"client_a_facebook": "client-a-fb-id",
"client_b_instagram": "client-b-ig-id"
}
}
批次操作
def check_all_accounts():
response = requests.get(
"https://boring.aiagent-me.com/api/accounts",
cookies=session_cookies
)
accounts = response.json()["accounts"]
for account in accounts:
name = account.get("page_name") or account.get("ig_username") or account.get("threads_username")
print(f"{account['social_channel_type']}: {name} - Valid: {account['is_valid']}")
疑難排解
查無帳號
{
"success": false,
"error": "AccountNotFound"
}
可能原因:
- 帳號 ID 輸入錯誤
- 帳號已解除連結
- 不屬於目前登入的 Google 帳號
解法:
- 至控制台重新複製 ID
- 再次連結帳號
- 確認使用正確的 Google 帳號登入
權杖失效
發佈時可能出現:
{
"success": false,
"error": "InvalidToken",
"message": "Token expired or revoked"
}
解法:
- 前往控制台
- 解除連結該帳號
- 重新連結並授權
- 更新本地儲存的帳號 ID
權限變更
若在 Facebook / Instagram / Threads 介面撤銷了 Boring 的權限,權杖會立即失效,需重新連結。
最佳實務
- 安全儲存帳號 ID:使用環境變數或秘密管理
- 監控到期日:設定提醒或自動化通知
- 清楚標記帳號:在控制台使用具描述性的名稱
- 維持測試帳號:正式與測試環境分開管理
- 紀錄對照表:將帳號 ID 與實際用途記錄下來
- 定期稽核:每月檢視帳號清單
- 完成任務即撤銷:不再需要時請解除連結
安全性
存取控制
- 帳號與你的 Google 帳號綁定
- 只有你能檢視與管理自己的帳號
- API Key 與帳號權限分開管理
撤銷存取
若要完全撤銷:
- 在 Boring 控制台解除連結帳號
- 在對應平台刪除 Boring 應用程式
- 刪除不再使用的 API Key
資料保留
解除連結帳號後:
- 資料會標記為停用(仍保留)
- 發佈歷史仍會存在
- 權杖會留存於稽核用途
- 若需完全刪除,請聯絡客服