コンテンツ
SNSの会話を週次のリスニングブリーフに変える
直近1週間の自社ブランドと競合に関する X 投稿を検索し、出典付きの Web 文脈を加え、その背景ページを読み、毎号をアーカイブして翌週は既知の内容から始めます。
プロンプトをコピー
角括弧の項目を置き換えて、Claude Code、Codex、ターミナルにアクセスできる AI に貼り付けてください。Felo スキルをインストールし、クレジットを使う前に確認し、ワークフローを実行します。
[ブランド、製品、カテゴリ] のソーシャルリスニングブリーフを実行してください。 監視語: [ブランド]、[製品名]、[競合名]、[カテゴリキーワード]。 期間: 過去 [7 / 14] 日。タイムゾーン: [タイムゾーン]。読者: [チーム]。 許可する情報源: 公開 X 投稿と公開 Web ページのみ。 以下を作成してください。 1. 会話の変化を5行で要約。 2. テーマごとに、人々が何を言っているか、それを支える投稿、投稿がカバーする日付範囲。 3. 競合への言及: 誰が、どの文脈で推薦されているか。 4. リスク: 苦情、障害、繰り返される質問、反発。 5. 次のアクションを「今すぐ返信」「監視」「製品へ共有」に分ける。 6. 出典一覧(すべての投稿とページの URL と日付)。 ルール: - API が返した投稿とページだけを報告してください。感情スコア、エンゲージメント数、引用、出典を捏造しないでください。 - X はシグナルとして扱い、代表的な調査とはみなさないでください。結論を出すにはサンプルが小さすぎる場合はその旨を書いてください。 - 顧客自身の言葉とあなたの要約を分け、短く引用してリンクを付けてください。 - 期間を明示的な開始日と終了日に解決し、タイムゾーンを記載してください。 - クレジットを消費する前に、実行予定の検索と抽出を示して私の承認を待ってください。 - 返信、投稿、フォロー、メッセージ送信はしないでください。このブリーフは読み取り専用です。 - 結果を ./social-listening.md に書き、チャットで要約してください。
コピー内容にはインストール手順と安全ルールも含まれます。
完成するもの
実行時の出力例です。リアルタイム生成ではありません。
ソーシャルリスニングブリーフ — 2026-10-30
何が変わったか
- エクスポートフローへの不満が最大のテーマになった。
- 価格スレッドでより安い競合が推薦されている。
- 2026-10-27 の障害はもう言及されていない。
テーマ
- アップデート以降エクスポートが遅い — @example_dev:「エクスポートボタンが40ページの文書で数分かかる」(2026-10-28)、@example_ops:「月末にエクスポートが行列するの、他にもいる?」(2026-10-29)
- より安い代替が推薦されている — 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/..." } ] } }出典付きの Web 背景を加える
Chat で議論の背景を聞き、出典付きの Web ページ一覧を取得します。
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": "…" } ] }背景ページを読む
Web Fetch で最も関連する2〜3ページを読み、事実背景とリンクを補います。
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…"
テーマ別に週報を書く
テーマ、代表投稿、背景、リスク、翌週の注目点で 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);アーカイブして前週と比較する
週報と出典を 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 } ]
含まれるもの
- 直近1週間の日付付き X 投稿
- 出典付きの Web 背景
- テーマ別にまとめた議論の要約
- そのまま共有できる週報
- 各号を保存する LiveDoc
やらないこと
- X のカバレッジは不完全で、全ユーザーを代表しない
- 感情分析の断定的な結論は出さない
- 自動投稿や返信はしない
- DM や非公開コミュニティのデータは含まない
- 週1回実行。スケジュールは agent か cron が担当
よくある質問
ブリーフの出典には何が含まれますか?
各 X 投稿はリンク、アカウント、日付を保持します。Web 背景は Chat と Web Fetch の公開ページです。出典のない主張は書きません。
競合も同時に追えますか?
はい。ブランド名と競合名を一緒に検索し、週報で分けて表示します。
感情を測定しますか?
テーマと語調で整理しますが、編集判断として明示し、正確な感情比率は主張しません。
どこまで遡りますか?
既定は直近7日で週報向けです。長い期間が必要なら `since_time` を変更します。
毎週自動で実行できますか?
はい。同じプロンプトを cron か agent のスケジュールに入れ、毎週同じ LiveDoc に書き込みます。
ブリーフ1本の費用は?
X 検索、Chat、ページ抽出は従量制クレジットです。現在の料金は料金ページにあり、プロンプトは使う前に確認を求めます。
関連ワークフロー
1つの問いを、出典付きリサーチブリーフに変える
Web に問いを投げ、回答の根拠ページを Markdown で取得し、X の実務者の声を加え、最後に証拠をあとから検索できる LiveDoc に残します。
ワークフローを開くリサーチ営業チームがそのまま使える競合分析を作る
競合自身のページ、周辺の報道、X での買い手の声を集め、主張ごとに出典・日付・ステータスを持つ分析にまとめます。
ワークフローを開くコンテンツチームが本当に読む日次AIニュースダイジェストを作る
出典付きのニュースまとめを取り、X の実務者の議論を加え、動画の文字起こしを1本取得し、Markdown で号を構成して LiveDoc に保存します。
ワークフローを開く自分の形に変える
同じレシピを、実際の進め方に合わせて調整します。
1つの話題だけ
1つのリリースや論争に絞ると、ブリーフが焦点を絞れます。
YouTube の意見を加える
動画の文字起こしでクリエイターの視点を補いますが、個人の経験として明示します。
月次レポートにする
頻度を月1回に変え、ブランドや広報チーム向けにします。
さらに進む
このレシピの背景にあるリファレンスと、次に見るべきページ。