Felo API PlatformFelo API Platform

Nghiên cứu

Nghiên cứu ngách sản phẩm trước khi nhập hàng

Thu thập bối cảnh danh mục, chụp trang đối thủ vào ngày đã nêu, đọc điều người mua phàn nàn trên X và giữ bằng chứng cùng bản ghi nhớ trong một LiveDoc để xem lại trước khi đặt hàng.

Thời gian30 phútMứcTrung cấpCập nhật2026-10-30
Dành cho aiNhà vận hành TMĐTNhà nghiên cứu sản phẩmNhà sáng lập DTC

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.

Nghiên cứu ngách sản phẩm này trước khi nhập hàng hoặc ra mắt: [sản phẩm hoặc danh mục].

Thị trường: [quốc gia hoặc khu vực]. Kênh: [sàn TMĐT / DTC / bán lẻ]. Khung thời gian cho bài đăng người mua: [30] ngày qua.
Sản phẩm tương đương hoặc URL đối thủ: [URL]. Ràng buộc ngân sách và biên lợi nhuận: [ràng buộc]. Độc giả: [nhóm].

Tạo bản ghi nhớ Markdown gồm:
1. Kết luận một đoạn: có đáng nghiên cứu tiếp không và điều gì sẽ thay đổi ý kiến của bạn.
2. Tín hiệu nhu cầu: nguồn nói gì về mức quan tâm, tính mùa vụ và sản phẩm thay thế.
3. Sản phẩm cạnh tranh: từng sản phẩm tuyên bố gì, giá ghi nhận trên trang và người mua nói nó thiếu gì.
4. Định vị giá: các mức giá thực sự tìm thấy trên trang, mỗi mức kèm ngày ghi nhận.
5. Phàn nàn và nhu cầu chưa đáp ứng, kèm trích dẫn, tài khoản và ngày.
6. Rủi ro và câu hỏi mở cần giải quyết trước khi mua hàng.
7. Nguồn: mọi trang và bài đăng đã dùng, kèm URL và ngày.

Quy tắc:
- Chỉ dùng những gì API trả về. Không bịa quy mô thị trường, ước tính bán hàng, số đánh giá hay giá đối thủ.
- Báo giá đúng như đã ghi nhận, kèm URL trang và ngày ghi nhận. Không bao giờ lấy trung bình hay chuẩn hóa.
- Coi bài đăng X là giai thoại, không phải dữ liệu thị trường, và nói rõ khi mẫu quá mỏng.
- Tách điều nhà cung cấp tuyên bố khỏi điều người mua báo lại.
- Trước khi tiêu tín dụng, hiển thị các lần trích xuất và tìm kiếm dự định và chờ tôi phê duyệt.
- Không liên hệ nhà cung cấp, không đặt hàng và không nhắn ai trên X.
- Ghi kết quả vào ./product-research.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 ghi nhớ (trích)

Nghiên cứu sản phẩm — danh mục ví dụ

Kết luận

Đáng xem kỹ hơn, nhưng bằng chứng công khai chưa đủ để quyết định tồn kho. Các câu hỏi mở bên dưới là bước tiếp theo.

Bối cảnh danh mục

Người mua so sánh không gian mặt bàn và vệ sinh hơn là áp lực. Không nguồn công khai nào hỗ trợ ước lượng quy mô thị trường.

Trang đối thủ

  • Example A — trang sản phẩm (ghi ngày 2026-10-30)
  • Example B — trang sản phẩm (ghi ngày 2026-10-30)

Người mua báo gì

  • @example_buyer: “Thay lần thứ ba trong một năm; gioăng hỏng.” — 2026-10-19
  • @example_home: “Vệ sinh mất vài phút, không ai nhắc.” — 2026-10-24

Định vị giá

Giá được ghi ngày 2026-10-30 từ các trang liên kết. Chia hai mức; mỗi trang được trích trực tiếp, không lấy trung bình.

Rủi ro và câu hỏi mở

  • Độ bền gioăng là phàn nàn lặp lại nhất.
  • Không nguồn nào đề cập tỷ lệ trả hàng.
  • Kiểm tra thời gian giao và chi phí đến trước khi đặt.

Nguồn

  • https://example.com/product-a — 2026-10-30
  • https://x.com/example_buyer/status/... — 2026-10-19

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. Hỏi Chat ảnh danh mục

    Bắt đầu từ câu trả lời có nguồn, không phải trang trắng: Chat tìm web công khai, xếp hạng trang và trả tài nguyên đã dùng. Hỏi một lần về bối cảnh nhu cầu, lựa chọn thay thế và phàn nàn phổ biến, rồi giữ tài nguyên đầu làm danh sách bằng chứng.

    product-research.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 ChatData = {
      data: {
        answer: string;
        resources: { link: string; title: string; snippet: string }[];
      };
    };
    
    const niche = "portable espresso maker"; // replace with the category you are judging
    
    const context = await felo<ChatData>("/v2/chat", {
      query: `Demand, price bands, and buyer complaints for ${niche} in the US`,
    });
    
    const sources = context.data.resources.slice(0, 5);

    Kết quả mẫu

    {
      "answer": "Buyers compare on counter space and cleanup …",
      "sources": [
        { "link": "https://example.com/category-guide", "title": "…", "snippet": "…" }
      ]
    }
  2. Chụp trang đối thủ

    Trích hai hoặc ba trang sản phẩm đối thủ thành Markdown với chế độ đọc. Mục tiêu là tuyên bố và giá trên trang hôm nay, không phải bảng thông số viết lại. Giữ URL cạnh nội dung và ghi ngày chụp: giá không ngày là tin đồn.

    product-research.ts
    const PRODUCT_PAGES = [
      { url: "https://example.com/product-a", title: "Example A — product page" },
      { url: "https://example.com/product-b", title: "Example B — product page" },
    ];
    
    type ExtractData = { data: { content: string } };
    
    const listings = await Promise.all(
      PRODUCT_PAGES.map((page) =>
        felo<ExtractData>("/v2/web/extract", {
          url: page.url,
          output_format: "markdown",
          with_readability: true,
        }).then((extracted) => ({ ...page, content: extracted.data.content })),
      ),
    );

    Kết quả mẫu

    [
      {
        "url": "https://example.com/product-a",
        "title": "Example A — product page",
        "content": "# Example A\n\nSpecs and price as displayed…"
      }
    ]
  3. Đọc điều người mua báo trên X

    Trang nhà cung cấp liệt kê tính năng; người mua mô tả lỗi. Tìm ngách cùng từ ma sát — vận chuyển, chất lượng, hoàn tiền — trong 30 ngày và giữ tài khoản, ngày, liên kết. Đây là giai thoại, không phải dữ liệu nhu cầu, và bản ghi phải nói rõ.

    product-research.ts
    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() - 30 * 24 * 60 * 60 * 1000) / 1000);
    
    const search = await felo<XData>("/v2/x/tweet/search", {
      query: `"${niche}" (shipping OR quality OR refund)`,
      limit: 50,
      since_time: since,
    });
    
    const complaints = search.data.tweets;

    Kết quả mẫu

    { "data": { "tweets": [
      {
        "content": "Third replacement in a year; the seal fails.",
        "author": { "username": "example_buyer" },
        "created_at": "2026-10-19T15:02:00Z",
        "metrics": { "retweet_count": 1, "favorite_count": 12, "reply_count": 3 },
        "url": "https://x.com/example_buyer/status/..."
      }
    ] } }
  4. Viết bản ghi nhớ

    Bước này là mã thường: ghép câu trả lời danh mục, ngày chụp, trích dẫn người mua và danh sách nguồn thành một Markdown. Ghi trung thực câu hỏi mở — bản ghi hữu ích vì tách điều trang chứng minh khỏi điều cần xác nhận với nhà cung cấp.

    product-research.ts
    const capturedOn = new Date().toISOString().slice(0, 10);
    
    const memo = [
      `# Product research — ${niche}`,
      "",
      "## Category context",
      context.data.answer,
      "",
      "## Competitor pages",
      ...listings.map(
        (page) => `- [${page.title}](${page.url}) — captured ${capturedOn}`,
      ),
      "",
      "## What buyers report",
      ...complaints.slice(0, 10).map(
        (post) =>
          `- @${post.author.username} (${post.created_at.slice(0, 10)}): ${post.content}`,
      ),
      "",
      "## Sources",
      ...sources.map((source) => `- [${source.title}](${source.link})`),
    ].join("\n");
    
    console.log(memo);
  5. Lưu bằng chứng vào LiveDoc

    Chạy một lần mỗi ngách: tạo LiveDoc và lưu short_id vào cấu hình. Thêm trang đối thủ và nguồn Chat làm tài nguyên URL để kho loại trùng, rồi bản ghi làm tài liệu. Trước khi mua, tra các lần chụp để xem giá nào đã đổi.

    product-research.ts
    type LiveDocData = { data: { short_id: string } };
    
    const research = await felo<LiveDocData>("/v2/livedocs", {
      name: `Product research: ${niche}`,
      description: "Competitor pages, buyer posts, and the memo",
    });
    
    await felo(`/v2/livedocs/${research.data.short_id}/resources/urls`, {
      urls: [
        ...listings.map((page) => ({ url: page.url, title: page.title })),
        ...sources.map((source) => ({ url: source.link, title: source.title })),
      ].slice(0, 10),
    });
    
    await felo(`/v2/livedocs/${research.data.short_id}/resources/doc`, {
      title: `Product memo — ${capturedOn}`,
      content: memo,
    });

    Kết quả mẫu

    { "short_id": "PvyKouzJirXjFdst4uKRK3" }

Bao gồm

  • Ảnh danh mục có nguồn từ Chat và các trang đằng sau
  • Trang đối thủ ở dạng Markdown kèm ngày chụp
  • Phàn nàn người mua trên X kèm tài khoản, ngày và liên kết
  • Bản ghi nhớ Markdown từ các đầu vào này
  • Một LiveDoc giữ bằng chứng và bản ghi nhớ

Không làm gì

  • Chỉ nguồn công khai; báo cáo trả phí, báo giá nhà cung cấp và dữ liệu bán nội bộ không thuộc phạm vi
  • Không ước lượng quy mô, sản lượng hay biên lợi nhuận
  • Giá ghi đúng như lúc chụp, không chuẩn hóa hay lấy trung bình
  • Bài X là giai thoại, không phải dữ liệu nhu cầu
  • Không liên hệ nhà cung cấp, không đặt hàng, không sửa listing

Câu hỏi

Bối cảnh thị trường đến từ đâu?

Chat API trả câu trả lời có nguồn và các trang công khai đã dùng. Trang đối thủ lấy từ URL bạn cung cấp bằng Web Fetch; bài người mua lấy từ X Search. Không dùng dữ liệu bán riêng.

Nó có nói sản phẩm bán chạy không?

Không. Nó sắp xếp bằng chứng công khai — bối cảnh, giá đã chụp và phàn nàn — rồi ghi điều chưa biết. Xác thực nhu cầu cần dữ liệu của bạn như quảng cáo, đặt trước hoặc trao đổi nhà cung cấp.

Nếu sàn chặn trích xuất?

Web Fetch tải từng trang công khai và một số site chặn. Dùng trang sản phẩm hoặc nhà cung cấp truy cập được và để bản ghi chú đánh dấu lần chụp thiếu thay vì đoán giá.

Làm sao tránh giá đối thủ lỗi thời?

Mỗi giá trong bản ghi gắn với URL và ngày chụp. Chạy lại trích xuất sát lúc quyết định mua; kho lưu giữ lần chụp cũ để thấy giá đã đổi.

Nó có liên hệ nhà cung cấp hay người bán?

Không. Quy trình chỉ đọc: trích trang, tìm bài công khai và viết ghi chú cục bộ. Không gửi tin, không đặt hàng, không sửa listing.

Một lần nghiên cứu tốn bao nhiêu?

Mỗi lệnh Chat, trích xuất và tìm X dùng credit theo mức dùng; giá hiện tại ở trang giá. Prompt hỏi duyệt trước khi chạy.

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.

Thêm bản ghi video review

Khi danh mục có video review, lấy bản ghi bằng YouTube Subtitling và thêm hai hoặc ba trích dẫn có timestamp vào phần người mua. Video review vẫn là trải nghiệm một người, nên giữ nhãn giai thoại như bài X.

So sánh hai ứng viên

Chạy cùng bước cho mỗi ứng viên và đặt bản ghi cạnh nhau: tính năng tuyên bố, giá đã chụp, phàn nàn lặp lại và câu hỏi mở. So sánh vẫn định tính cho đến khi có dữ liệu bán hoặc trả hàng.

Cập nhật trước khi mua

Chạy lại trích xuất một ngày trước khi đặt. Giữ cùng LiveDoc và thêm bản ghi mới để kho cho thấy điều gì đổi giữa nghiên cứu và mua, kể cả giá vượt ngân sách.

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