Felo API PlatformFelo API Platform

內容

把社群討論變成一份每週傾聽簡報

搜尋過去一週品牌和競品相關的 X 貼文,補充有來源的網頁背景,讀頁面背後的內容,再把每期簡報歸檔,讓下週從已知開始。

建置時間25 分鐘難度進階更新於2026-10-30
適合誰品牌與傳播產品行銷社群管理

複製 prompt

把方括號裡的欄位替換掉,然後貼到 Claude Code、Codex 或任何能存取終端機的 AI。它會安裝 Felo skill、在花額度前詢問,並執行這套工作流程。

為[品牌、產品或品類]執行一份社群聆聽簡報。

監控詞:[品牌]、[產品名]、[競品名]、[品類關鍵字]。
時間範圍:過去 [7 / 14] 天。時區:[時區]。讀者:[團隊]。
允許的來源:僅公開 X 貼文和公開網頁。

輸出:
1. 用五行總結對話中發生了什麼變化。
2. 主題,每個主題寫明大家在說什麼、支持它的貼文,以及這些貼文涵蓋的日期範圍。
3. 競品提及:誰被推薦,以及在什麼脈絡下。
4. 風險:客訴、故障、重複提問或反彈。
5. 下一步,分為「立即回覆」「持續觀察」「回饋給產品」。
6. 來源清單,包含每個貼文和頁面的 URL 及日期。

規則:
- 只報告 API 回傳的貼文和頁面。不要編造情緒分數、互動數據、引文或來源。
- 把 X 當作訊號,不是代表性調查。樣本太小時要說明無法下結論。
- 把客戶原話和你自己的總結分開,簡短引用並附連結。
- 把時間範圍落實為明確的開始和結束日期,並註明時區。
- 消耗額度前,先展示預計執行的搜尋和擷取並等待我批准。
- 不要回覆、發文、追蹤或傳訊息給任何人。這份簡報是唯讀的。
- 將結果寫入 ./social-listening.md,並在對話中總結。

複製的內容也包含安裝步驟和安全規則。

你會得到什麼

一次執行的範例輸出,不是即時生成。

簡報範例(節錄)

社群聆聽簡報 — 2026-10-30

變化

  • 對匯出流程的抱怨成為頭號主題。
  • 價格串裡有人在推薦更便宜的競品。
  • 2026-10-27 的故障已不再被提及。

主題

  1. 更新後匯出很慢 — @example_dev:「40 頁文件的匯出按鈕現在要幾分鐘。」(2026-10-28);@example_ops:「還有誰月底匯出排隊?」(2026-10-29)
  2. 有人在推薦更便宜的替代品 — Example Rival 出現在詢問更低價格的串中

競品

當人們詢問更便宜的替代品時,Example Rival 會被推薦;推薦是關於價格,不是功能。

風險

匯出抱怨也出現在支援相關串中,可能進入流失對話。

下一步

  • 立即回覆:2026-10-28 的匯出串。
  • 觀察:抱怨是否會擴散到 API 受眾。
  • 回饋給產品:月底匯出延遲。

來源

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

實際呼叫

給開發者:同一套工作流程的可複製程式碼,依執行順序排列。

展開實際 API 呼叫
  1. 搜尋過去一週的貼文

    用 X Search 搜品牌名和競品名,限定最近 7 天,保留帳號和日期。

    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;

    範例輸出

    { "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. 補充有來源的網頁背景

    用 Chat 問這些討論背後的背景,拿到有來源的網頁列表。

    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);

    範例輸出

    {
      "answer": "The main threads are …",
      "sources": [
        { "link": "https://example.com/thread", "title": "…", "snippet": "…" }
      ]
    }
  3. 讀頁面背後的內容

    用 Web Fetch 讀取最相關的兩三頁,補充事實背景和連結。

    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 })),
      ),
    );

    範例輸出

    // pages[0].content
    "# Example thread summary\n\nExtracted page content…"
  4. 依主題寫成週報

    依主題、代表性貼文、背景、風險和下週關注點組織 Markdown。

    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. 歸檔並對比上週

    把週報和來源存進 LiveDoc,下週先檢索上一期做對比。

    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));

    範例輸出

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

包含什麼

  • 過去一週帶日期的 X 貼文
  • 有來源的網頁背景
  • 依主題分群的討論摘要
  • 一份可直接分享的週報
  • 保存每期簡報的 LiveDoc

不做什麼

  • X 覆蓋不完整,不代表全體使用者
  • 不提供情緒辨識的確定性結論
  • 不自動發文或回覆
  • 不包含私訊和私有社群資料
  • 每週執行一次,排程由你的 agent 或 cron 負責

常見問題

哪些內容算簡報裡的來源?

每則 X 貼文都保留連結、帳號和日期;網頁背景來自 Chat 和 Web Fetch 的公開頁面。沒有來源的斷言不會寫進簡報。

可以同時追蹤競品嗎?

可以。把品牌名和競品名一起搜尋,並在週報裡分組呈現。

它會測量情緒嗎?

會依主題和語氣做歸納,但明確標為編輯判斷,不宣稱精確的情緒百分比。

會看多久以前的貼文?

預設最近 7 天,適合週報;需要更長窗口時改 `since_time`。

可以每週自動跑嗎?

可以。把同一套 prompt 放進 cron 或 agent 排程,每週寫入同一份 LiveDoc。

一份簡報要花多少?

X 搜尋、Chat 和頁面擷取都按用量計費;目前費率在價格頁面,prompt 會先請求確認。

相關工作流程

改成你的版本

同一套配方,依你實際的交付方式調整。

只看一個話題

把搜尋範圍縮到一個產品發佈或爭議,簡報會更聚焦。

加入 YouTube 觀點

用影片轉錄補充創作者觀點,但明確標為個人經驗。

做成月報

把頻率改成每月,適合品牌和公關團隊。

這套配方背後的參考頁面,以及下一步可以看什麼。