소스 정보
- 저장소
- RonShih/social-media-agent
- 최근 소스 활동
- 2026년 5월 8일 06:29
- 감지된 SKILL.md 언어
- 중국어
- 스타
- 2
- 포크
- 0
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
SOC 직업 분류 기준
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/RonShih/social-media-agent --skill publish-facebook명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SKILL.md 표시 중
| name | publish-facebook |
| description | 用 Playwright 在 Facebook 個人 timeline / 粉專發一篇含圖貼文。 |
共通規則見
CLAUDE.md「共通行為規則」章節,本檔只描述 FB 特有的步驟。 每步結束都要呼叫scripts/log-click.sh(格式見 CLAUDE.md「Click recording」)。
caption:貼文文字hashtags:list of string(接在 caption 結尾)local_image_path:本地圖檔絕對路徑draft_id / run_id:caller(/publish-now)傳入,用於 click-log{ "post_url": "https://..." }
--step 值必須一字不差用以下、不准自取)| step_id | 必要 | 用途 |
|---|---|---|
1_navigate | 必 | 進粉專首頁(讀 socials.facebook.url) |
2_switch_to_page_if_needed | 條件 | 切換到粉專管理身分(沒「立即切換」就 log 跳過) |
3_click_create_post | 必 | 點「在想些什麼?」開 composer |
4_type_caption | 必 | 輸入 caption + hashtags |
5_click_add_photo | 必 | 點「相片/影片」 |
6_file_upload | 必 | 上傳檔案 |
7_wait_preview | 必 | 等預覽載入完成 |
7b_stage_continue_1 | Reel-only | Reel 三段式第 1 個「繼續」(圖片貼文不會出現,照樣 log skip) |
7c_stage_continue_2 | Reel-only | Reel 三段式第 2 個「繼續」 |
8_click_publish | 必 | 點「發佈」 |
8b_dismiss_post_publish_dialog | 必 | 處理 WhatsApp 推銷 dialog(見下方坑點,發出去後必處理) |
9_extract_post_url | 必 | 抓貼文 URL |
為什麼鎖定:跨平台規則見 OPERATING_RULES §9。簡言之,click-log 統計分析需要 step_id 穩定才看得出 pattern。 「條件 / Reel-only」步驟若當下不適用,仍要 log 一筆
--ok true --ms 0 --args '{"reason":"skipped_not_applicable"}'占位,不要省略。
1_navigate — 讀 config/brand.yaml.socials.facebook.url,browser_navigate 過去2_switch_to_page_if_needed — 用 browser_snapshot 看是否有「立即切換」按鈕(FB 會顯示「切換為 Cuite Bellie 的粉絲專頁並開始管理。」橫幅)。有就 browser_click、等頁面重載;沒有代表已是粉專管理身分,跳過(log 一筆 --ok true --ms 0 標記略過)。這步是粉專身分必要條件 — 沒切換 composer 會以個人身分發文。3_click_create_post — 點「在想些什麼?」開 composer4_type_caption — 文字框輸入 caption + "\n\n" + hashtags.join(" ")5_click_add_photo — 點「相片/影片」6_file_upload — browser_file_upload 傳 local_image_path7_wait_preview — browser_wait_for 等預覽載入完7b_stage_continue_1 — 若 Reel 流程出現「繼續」按鈕(Stage A → B)就點;圖片貼文無此按鈕、log skip7c_stage_continue_2 — 同上、Stage B → C 的「繼續」;圖片貼文 log skip8_click_publish — 點「發佈」(用 name: '發佈', exact: true)8b_dismiss_post_publish_dialog — 點「稍後再說」處理 WhatsApp 推銷 dialog(見下方坑點),沒跳就 log skip9_extract_post_url — 抓新貼文永久連結。雙策略:Business Suite 優先、polling 為 fallback:Strategy 1(主):Meta Business Suite 已發佈 tab
config/brand.yaml.socials.facebook.asset_id
asset_id 欄位 → 跳到 Strategy 2browser_navigate 到 https://business.facebook.com/latest/posts/published_posts?asset_id=<asset_id>https://www.facebook.com/<page_id>/posts/pfbid... 或 https://www.facebook.com/reel/<id>/)getAttribute('href') 直接讀就好{"post_url": "<url>"}、log step 9 --ok true --args '{"strategy": "business_suite"}'Strategy 2(fallback):polling 粉專 timeline 只在 Strategy 1 失敗(asset_id 沒設、Business Suite 進不去、找不到符合的 row)時跑:
browser_navigate 回粉專 URL/reel/<id>/ 或 /posts/pfbid...,up to 90 秒{"post_url": "<url>"}、log --ok true --error "fallback_via_polling"兩個策略都失敗 → log --ok false --error "post not visible in Business Suite or timeline within 90s"、回 {"post_url": null, "error": "url_extraction_failed"}、caller 收到要明確告訴使用者「貼文可能已發出但 URL 抓不到,請手動確認 Business Suite」,不要假裝成功。
當 caller 傳入 mode: dry_run:
8_click_publish、step 9browser_close{"status": "dry_run_ok", "stages_passed": [...], "abort_at_step": "<step name>"}{"status": "dry_run_failed", "step_failed": "<step>", "error": "<原因>"}dry-run 不寫 click-log、不寫
reports/posts/報告。 因為 dry-run 不點最後的「發佈」,所以 WhatsApp 推銷 dialog 不會出現 — 那段邏輯靠 dry-run 驗不到,要靠真實 publish 才驗得到。
以下是已知 case,非 exhaustive list。中間步驟遇到沒列出的 dialog / 元素 drift / 載入慢 → 自己 reasoning 解(OPERATING_RULES §4「過程雜訊 vs 終點驗收」),不要 surface 給使用者。只有終點驗收(post URL、登入態、素材)才老實回 error。
WhatsApp 推銷 dialog(2026-05-05 確認)— 點完 step 8 發佈後 1-2 秒內會跳出:
處理方式(即 8b_dismiss_post_publish_dialog,step 8 之後、step 9 之前必做):
browser_wait_for time=2browser_snapshot 看當前 dialogbrowser_click 點它,log 8b --ok true --args '{"role":"button","name":"稍後再說"}'browser_press_key Escape 關 dialog(禁止點「新增 WhatsApp 按鈕」),log 8b 標 method=key8b --ok true --ms 0 --args '{"reason":"skipped_no_dialog"}'為什麼重要:背景的 Reel 設定 dialog 會顯示「發佈中」status,但若 WhatsApp dialog 沒處理乾淨,FB 在某個內部超時後會把 publish 當作取消,前端不會出 error toast、Meta Business Suite 「已發佈」/ 「草稿」/ 「已排定發佈」三個 tab 都不會出現該貼文。這就是 publish-facebook 過去看似成功實則沒發出去的根因。
密碼洩漏 dialog(FB 偶爾跳)— 點 Not now / 稍後再說 關閉後繼續。同樣不算 step、不 log。
name: '發佈', exact: true — 因為「加強推廣貼文」action 的 nested text 也含「發佈」二字,不 exact 會誤點上傳影片後,FB 不會留在「建立貼文」單一 dialog,會分三段:
caption 在 Stage A 輸入後會自動帶到 Stage B/C,不要重輸。三段都用預設值點「繼續」/「發佈」即可,不要展開或修改任何欄位。