Felo API PlatformFelo API Platform

Nội dung

Biến thảo luận xã hội thành báo cáo lắng nghe hằng tuần

Tìm bài X tuần qua về thương hiệu và đối thủ, thêm bối cảnh web có nguồn, đọc các trang đằng sau và lưu mọi bản tin để tuần sau bắt đầu từ điều đã biết.

Thời gian25 phútMứcTrung cấpCập nhật2026-10-30
Dành cho aiThương hiệu & truyền thôngProduct marketingQuản lý cộng đồng

Sao chép prompt

Thay các trường trong ngoặc vuông rồi dán vào Claude Code, Codex hoặc AI có quyền truy cập terminal. Nó cài skill Felo, hỏi trước khi dùng credit và chạy quy trình.

Thực hiện bản tóm tắt lắng nghe mạng xã hội cho [thương hiệu, sản phẩm hoặc danh mục].

Từ khóa theo dõi: [thương hiệu], [tên sản phẩm], [tên đối thủ], [từ khóa danh mục].
Khung thời gian: [7 / 14] ngày qua. Múi giờ: [múi giờ]. Độc giả: [nhóm].
Nguồn được phép: chỉ bài đăng X công khai và trang web công khai.

Tạo:
1. Tóm tắt năm dòng về những gì đã thay đổi trong cuộc trò chuyện.
2. Các chủ đề, mỗi chủ đề gồm điều mọi người nói, bài đăng hỗ trợ và khoảng ngày chúng bao phủ.
3. Nhắc đến đối thủ: ai được giới thiệu và trong ngữ cảnh nào.
4. Rủi ro: phàn nàn, sự cố, câu hỏi lặp lại hoặc phản ứng tiêu cực.
5. Bước tiếp theo, chia thành “trả lời ngay”, “theo dõi” và “chuyển cho sản phẩm”.
6. Danh sách nguồn với mọi bài đăng và trang, URL và ngày.

Quy tắc:
- Chỉ báo bài đăng và trang API trả về. Không bịa điểm cảm xúc, số tương tác, trích dẫn hay nguồn.
- Coi X là tín hiệu, không phải khảo sát đại diện. Nói rõ khi mẫu quá nhỏ để kết luận.
- Tách lời khách hàng khỏi bản tóm tắt của bạn và trích ngắn kèm liên kết.
- Chuyển khung thời gian thành ngày bắt đầu và kết thúc rõ ràng, ghi múi giờ.
- Trước khi tiêu tín dụng, hiển thị các tìm kiếm và trích xuất dự định và chờ tôi phê duyệt.
- Không trả lời, đăng bài, theo dõi hay nhắn cho ai. Bản tóm tắt này chỉ đọc.
- Ghi kết quả vào ./social-listening.md và tóm tắt trong chat.

Bản sao cũng gồm các bước cài đặt và quy tắc an toàn.

Bạn nhận được gì

Kết quả mẫu của một lần chạy. Không phải tạo trực tiếp.

Ví dụ bản tóm tắt (trích)

Social listening brief — 2026-10-30

Điều gì đã thay đổi

  • Phàn nàn về luồng xuất dữ liệu thành chủ đề chính.
  • Đối thủ rẻ hơn được khuyên trong các luồng giá.
  • Sự cố 2026-10-27 không còn được nhắc.

Chủ đề

  1. Xuất dữ liệu chậm từ sau cập nhật — @example_dev: “Nút xuất giờ mất vài phút cho tài liệu 40 trang.” (2026-10-28); @example_ops: “Có ai thấy xuất dữ liệu xếp hàng cuối tháng không?” (2026-10-29)
  2. Một lựa chọn rẻ hơn được khuyên — Example Rival xuất hiện trong các luồng hỏi giá thấp hơn

Đối thủ

Example Rival được khuyên khi hỏi lựa chọn rẻ hơn; lời khuyên về giá, không phải tính năng.

Rủi ro

Phàn nàn xuất dữ liệu xuất hiện trong luồng gần hỗ trợ, có thể lan sang hội thoại rời bỏ.

Tiếp theo

  • Trả lời ngay: luồng xuất dữ liệu ngày 2026-10-28.
  • Theo dõi: phàn nàn có lan sang nhóm API không.
  • Chuyển cho sản phẩm: độ trễ xuất dữ liệu cuối tháng.

Nguồn

  • https://x.com/example_dev/status/... — 2026-10-28
  • https://example.com/export-thread — 2026-10-29

Các lệnh gọi chính xác

Dành cho lập trình viên: cùng quy trình dưới dạng mã, theo thứ tự chạy.

Hiện lệnh gọi API thật
  1. Tìm bài trong tuần

    Dùng X Search cho thương hiệu và đối thủ trong 7 ngày, giữ tài khoản và ngày.

    listening.ts
    const BASE = "https://openapi.felo.ai";
    const headers = {
      Authorization: `Bearer ${process.env.FELO_API_KEY}`,
      "Content-Type": "application/json",
    };
    
    async function felo<T>(path: string, body?: unknown): Promise<T> {
      const res = await fetch(`${BASE}${path}`, {
        method: body ? "POST" : "GET",
        headers,
        body: body ? JSON.stringify(body) : undefined,
      });
      if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);
      return res.json() as Promise<T>;
    }
    
    type XData = {
      data: {
        tweets: {
          content: string;
          author: { username: string };
          created_at: string;
          metrics: { retweet_count: number; favorite_count: number; reply_count: number };
          url: string;
        }[];
      };
    };
    
    const since = Math.floor((Date.now() - 7 * 24 * 60 * 60 * 1000) / 1000);
    
    const search = await felo<XData>("/v2/x/tweet/search", {
      query: '"Acme" OR "Acme app"',
      limit: 50,
      since_time: since,
    });
    
    const posts = search.data.tweets;

    Kết quả mẫu

    { "data": { "tweets": [
      {
        "content": "The export flow is slow again.",
        "author": { "username": "example_dev" },
        "created_at": "2026-10-28T09:14:00Z",
        "metrics": { "retweet_count": 4, "favorite_count": 21, "reply_count": 6 },
        "url": "https://x.com/example_dev/status/..."
      }
    ] } }
  2. Thêm bối cảnh web có nguồn

    Hỏi Chat bối cảnh thảo luận và lấy danh sách trang có nguồn.

    listening.ts
    type ChatData = {
      data: {
        answer: string;
        resources: { link: string; title: string; snippet: string }[];
      };
    };
    
    const context = await felo<ChatData>("/v2/chat", {
      query: "Recent customer complaints and competitor mentions around Acme",
    });
    
    const sources = context.data.resources.slice(0, 5);

    Kết quả mẫu

    {
      "answer": "The main threads are …",
      "sources": [
        { "link": "https://example.com/thread", "title": "…", "snippet": "…" }
      ]
    }
  3. Đọc các trang đằng sau

    Dùng Web Fetch đọc hai hoặc ba trang liên quan nhất và thêm dữ kiện, liên kết.

    listening.ts
    type ExtractData = { data: { content: string } };
    
    const pages = await Promise.all(
      sources.slice(0, 3).map((source) =>
        felo<ExtractData>("/v2/web/extract", {
          url: source.link,
          output_format: "markdown",
          with_readability: true,
          with_cache: true,
        }).then((page) => ({ ...source, content: page.data.content })),
      ),
    );

    Kết quả mẫu

    // pages[0].content
    "# Example thread summary\n\nExtracted page content…"
  4. Viết báo cáo theo chủ đề

    Soạn Markdown với chủ đề, bài đại diện, bối cảnh, rủi ro và điểm cần chú ý.

    listening.ts
    const date = new Date().toISOString().slice(0, 10);
    
    const ranked = [...posts].sort(
      (a, b) => b.metrics.favorite_count - a.metrics.favorite_count,
    );
    
    const brief = [
      `# Social listening brief — ${date}`,
      "",
      "## What the web says",
      context.data.answer,
      "",
      "## What people are posting",
      ...ranked.slice(0, 10).map(
        (post) =>
          `- @${post.author.username} (${post.created_at.slice(0, 10)}): ${post.content}\n  ${post.url}`,
      ),
      "",
      "## Pages behind the answer",
      ...pages.map((page) => `- [${page.title}](${page.link})`),
      "",
      "## Sources",
      ...sources.map((source) => `- [${source.title}](${source.link})`),
    ].join("\n");
    
    console.log(brief);
  5. Lưu và so với tuần trước

    Lưu báo cáo và nguồn trong LiveDoc, tuần sau tra bản tin trước.

    listening.ts
    type LiveDocData = { data: { short_id: string } };
    
    const archive = await felo<LiveDocData>("/v2/livedocs", {
      name: "Social listening archive",
      description: "One document resource per weekly brief",
    });
    
    await felo(`/v2/livedocs/${archive.data.short_id}/resources/doc`, {
      title: `Social listening — ${date}`,
      content: brief,
    });
    
    type Retrieved = { data: { title: string; content: string; score: number }[] };
    
    const previous = await felo<Retrieved>(
      `/v2/livedocs/${archive.data.short_id}/resources/retrieve`,
      { query: "what changed since last week" },
    ).then((res) => res.data.filter((hit) => hit.score >= 0.7));

    Kết quả mẫu

    [
      { "title": "Social listening — 2026-10-23", "content": "…", "score": 0.88 }
    ]

Bao gồm

  • Bài X có ngày trong tuần
  • Bối cảnh web có nguồn
  • Tóm tắt thảo luận theo chủ đề
  • Báo cáo tuần sẵn để chia sẻ
  • LiveDoc với mọi bản tin

Không làm gì

  • Độ phủ X không đầy đủ và không đại diện mọi người dùng
  • Không kết luận cảm xúc dứt khoát
  • Không tự đăng hay trả lời
  • Không tin nhắn riêng hay cộng đồng kín
  • Một lần chạy mỗi tuần; lịch do agent hoặc cron của bạn

Câu hỏi

Điều gì tính là nguồn?

Mỗi bài X giữ liên kết, tài khoản và ngày; bối cảnh web từ trang công khai Chat và Web Fetch. Khẳng định không nguồn không được đưa vào.

Có theo dõi đối thủ không?

Có. Tìm thương hiệu và đối thủ cùng lúc rồi nhóm trong báo cáo.

Có đo cảm xúc không?

Nó tóm tắt chủ đề và giọng điệu nhưng đánh dấu là nhận định biên tập, không khẳng định phần trăm cảm xúc chính xác.

Nhìn lại bao lâu?

Mặc định 7 ngày gần nhất cho báo cáo tuần; muốn cửa sổ lớn hơn thì đổi `since_time`.

Có chạy hằng tuần không?

Có. Đặt cùng prompt vào cron hoặc bộ lập lịch agent và ghi vào cùng LiveDoc.

Một báo cáo tốn bao nhiêu?

X Search, Chat và trích xuất trang tính theo mức dùng; giá hiện tại ở trang giá và prompt hỏi duyệt trước khi chi.

Quy trình liên quan

Tùy biến

Cùng công thức, điều chỉnh theo cách bạn thực sự triển khai.

Chỉ một chủ đề

Giới hạn ở một lần ra mắt hoặc tranh luận để tập trung.

Thêm ý kiến YouTube

Bổ sung bằng bản ghi video nhưng đánh dấu là trải nghiệm cá nhân.

Chuyển thành báo cáo tháng

Đổi tần suất sang hằng tháng cho thương hiệu và PR.

Các trang tham chiếu đằng sau công thức và nơi đi tiếp.