{"skill":{"slug":"techla-fb-repost","displayName":"Techla FB Repost","summary":"Skill để lấy nội dung từ link bài viết Facebook, viết lại bài theo phong cách phù hợp, tạo ảnh minh họa bằng Gemini, rồi đăng lên Facebook Page qua Graph API...","description":"---\nname: fb-repost\ndescription: >\n  Skill để lấy nội dung từ link bài viết Facebook, viết lại bài theo phong cách phù hợp, \n  tạo ảnh minh họa bằng Gemini, rồi đăng lên Facebook Page qua Graph API. \n  KÍCH HOẠT khi user đưa link Facebook và muốn repost, đăng lại, viết lại bài, \n  hay nói \"lấy bài này đăng lên page\". Dùng skill này BẤT CỨ KHI NÀO có link FB + yêu cầu đăng bài.\n---\n\n# FB Repost Skill\n\nWorkflow: **Scrape → Rewrite → Image → Post**\n\n## Yêu cầu credentials (lần đầu)\n\nNếu chưa có, hỏi user cung cấp:\n\n1. **APIFY_TOKEN** — https://console.apify.com/account/integrations\n2. **GEMINI_API_KEY** — https://aistudio.google.com/app/apikey  \n3. **FB_PAGE_ID** — ID Facebook Page\n4. **FB_PAGE_ACCESS_TOKEN** — Page Access Token (permission `pages_manage_posts`)\n\n> Gợi ý user lưu vào OpenClaw secrets/env vars để không nhập lại.\n\n---\n\n## Workflow chi tiết\n\n### Bước 1: Scrape bài viết Facebook\n\nChạy script scrape:\n```bash\npython3 scripts/scrape_fb.py \"<FB_POST_URL>\" \"<APIFY_TOKEN>\"\n```\n\nScript trả về JSON với các trường:\n- `text` — nội dung bài viết\n- `images` — array URL ảnh\n- `video` — URL video (nếu có)\n- `likesCount`, `commentsCount` — engagement stats\n- `pageName` — tên page gốc\n\nNếu lỗi → thử actor thay thế `apify~facebook-scraper`\n\n### Bước 2: Phân tích & Viết lại bài\n\nPhân tích bài gốc:\n- **Thể loại**: tin tức, cảm xúc, kiến thức, hài hước, viral...\n- **Tone**: nghiêm túc, vui vẻ, cảm động...\n- **Độ dài**: ngắn/vừa/dài\n\n**Nguyên tắc viết lại:**\n- KHÔNG copy nguyên văn — paraphrase hoàn toàn\n- Giữ thông tin cốt lõi (số liệu, tên, sự kiện)\n- Thêm hook mạnh ở đầu\n- Kết bằng CTA hoặc câu hỏi tương tác\n- Dùng emoji vừa phải\n- Độ dài: 150-400 chữ (tối ưu Facebook)\n\n**Template theo thể loại:**\n\n| Thể loại | Cấu trúc |\n|----------|----------|\n| Tin tức | [Hook sự kiện] → [Nội dung] → [Bình luận] → \"Bạn nghĩ sao?\" |\n| Kiến thức | [Hook \"Bạn có biết\"] → [Danh sách] → [Takeaway] → \"Bạn đã thử chưa?\" |\n| Cảm xúc | [Hook câu chuyện] → [Viết lại] → [Bài học] → \"Tag ngưỉi chia sẻ!\" |\n| Hài hước | [Hook hài] → [Nội dung] → \"Đúng không? Share ngay!\" |\n\n### Bước 3: Tạo ảnh với Gemini\n\nSoạn image prompt từ nội dung đã rewrite:\n```\n[Mô tả visual chính], [style: realistic/illustrative/infographic], \n[màu sắc/mood phù hợp], no text overlay, high quality, 16:9 ratio\n```\n\nChạy script tạo ảnh:\n```bash\npython3 scripts/generate_image.py \"<IMAGE_PROMPT>\" \"<GEMINI_API_KEY>\" /tmp/fb_image.png\n```\n\n### Bước 4: Đăng lên Facebook Page\n\n**Upload ảnh trước (nếu có):**\n```bash\npython3 scripts/post_fb.py upload-photo \"<PAGE_ID>\" \"<PAGE_TOKEN>\" /tmp/fb_image.png\n```\n→ Trả về `photo_id`\n\n**Đăng bài:**\n```bash\npython3 scripts/post_fb.py post \"<PAGE_ID>\" \"<PAGE_TOKEN>\" \"<MESSAGE>\" \"<PHOTO_ID>\"\n```\n\n---\n\n## Checklist trước khi đăng\n\n- [ ] Hiển thị bài viết đã rewrite cho user xem\n- [ ] Hiển thị ảnh đã tạo (hoặc mô tả)\n- [ ] Hỏi: \"Bạn muốn đăng luôn hay chỉnh sửa gì không?\"\n- [ ] Chỉ đăng khi user xác nhận ✅\n\n---\n\n## Xử lý lỗi\n\n| Lỗi | Nguyên nhân | Xử lý |\n|-----|------------|-------|\n| Apify rỗng | Link private/xóa | Báo user, xin paste nội dung thủ công |\n| Gemini 429 | Rate limit | Retry sau 10s |\n| FB 200 | Token hết hạn | Hướng dẫn refresh Page Access Token |\n| FB 368 | Vi phạm policy | Rewrite nhẹ hơn, bỏ từ nhạy cảm |\n\n---\n\n## Flow tóm tắt\n\n```\nUser đưa link FB\n    ↓\n[Apify] Scrape nội dung\n    ↓\n[Claude] Phân tích → Viết lại\n    ↓\n[Gemini] Tạo ảnh\n    ↓\n[Claude] Preview → Xin xác nhận\n    ↓\n[FB Graph API] Upload → Đăng\n    ↓\nTrả về link bài đã đăng ✅\n```\n\n## References\n\n- API docs chi tiết: [references/api_docs.md](references/api_docs.md)\n","tags":{"latest":"1.0.0"},"stats":{"comments":0,"downloads":762,"installsAllTime":0,"installsCurrent":0,"stars":0,"versions":1},"createdAt":1772444731141,"updatedAt":1778994492908},"latestVersion":{"version":"1.0.0","createdAt":1772444731141,"changelog":"fb-repost 1.0.0 — initial release\n\n- Supports reposting Facebook posts to a Facebook Page: scrape content, rewrite for page style, auto-generate images (Gemini), post via Graph API.\n- Works when user supplies any Facebook link and requests reposting/rewriting.\n- Requires Apify/Gemini/Facebook Page credentials (guidance and env var support included).\n- Step-by-step workflow: scrape post → analyze/rewrite → generate image → preview → seek confirmation → post.\n- Built-in error handling and user-friendly confirmation/checklist before publishing.","license":null},"metadata":null,"owner":{"handle":"techlaai","userId":"s17589jdxk8eshp9etdjn1an1x83hg3p","displayName":"techlaai","image":"https://avatars.githubusercontent.com/u/249414167?v=4"},"moderation":{"isSuspicious":false,"isMalwareBlocked":false,"verdict":"clean","reasonCodes":["review.llm_review"],"summary":"Review: review.llm_review","engineVersion":"v2.4.24","updatedAt":1780089737135}}