콘텐츠
소셜 대화를 주간 리스닝 브리프로 바꾸기
지난주 브랜드와 경쟁사 관련 X 게시물을 검색하고 출처 있는 웹 맥락을 더하고 배경 페이지를 읽은 뒤 매호를 아카이브해 다음 주는 아는 것에서 시작합니다.
프롬프트 복사
대괄호 항목을 바꾼 뒤 Claude Code, Codex 또는 터미널에 접근할 수 있는 AI에 붙여넣으세요. Felo 스킬을 설치하고 크레딧을 쓰기 전에 확인한 뒤 워크플로를 실행합니다.
[브랜드, 제품, 카테고리]의 소셜 리스닝 브리프를 실행해 주세요. 모니터링 단어: [브랜드], [제품명], [경쟁사명], [카테고리 키워드]. 기간: 최근 [7 / 14]일. 시간대: [시간대]. 독자: [팀]. 허용 출처: 공개 X 게시물과 공개 웹 페이지. 다음을 작성해 주세요. 1. 대화에서 무엇이 바뀌었는지 다섯 줄 요약. 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 호출 보기
지난주 게시물 검색하기
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/..." } ] } }출처 있는 웹 배경 더하기
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": "…" } ] }배경 페이지 읽기
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 } ]
포함되는 것
- 지난주 날짜 있는 X 게시물
- 출처 있는 웹 배경
- 주제별로 묶은 논의 요약
- 바로 공유할 수 있는 주간 보고서
- 각 호를 저장하는 LiveDoc
하지 않는 것
- X 커버리지는 불완전하며 모든 사용자를 대표하지 않음
- 감정 분석의 단정적 결론은 내지 않음
- 자동 게시나 답글은 하지 않음
- DM과 비공개 커뮤니티 데이터는 포함하지 않음
- 주 1회 실행. 일정은 agent나 cron이 담당
자주 묻는 질문
브리프의 출처에는 무엇이 포함되나요?
각 X 게시물은 링크, 계정, 날짜를 유지합니다. 웹 배경은 Chat과 Web Fetch의 공개 페이지입니다. 출처 없는 주장은 쓰지 않습니다.
경쟁사도 함께 추적할 수 있나요?
네. 브랜드명과 경쟁사명을 함께 검색하고 주간 보고서에서 나눠 보여줍니다.
감정을 측정하나요?
주제와 어조로 정리하지만 편집 판단으로 표시하고 정확한 감정 비율을 주장하지 않습니다.
얼마나 과거까지 보나요?
기본은 최근 7일로 주간 보고서에 맞습니다. 더 긴 기간이 필요하면 `since_time`을 바꿉니다.
매주 자동 실행할 수 있나요?
네. 같은 프롬프트를 cron이나 agent 스케줄에 넣고 매주 같은 LiveDoc에 씁니다.
브리프 하나 비용은?
X 검색, Chat, 페이지 추출은 사용량 기반 크레딧입니다. 현재 요금은 가격 페이지에 있고 프롬프트는 쓰기 전에 승인을 요청합니다.
관련 워크플로
질문 하나를 출처 있는 리서치 브리프로 바꾸기
웹에 질문을 던지고, 답변의 근거 페이지를 Markdown으로 가져오고, X의 실무자 의견을 더한 뒤 증거를 나중에도 검색할 수 있는 LiveDoc에 남깁니다.
워크플로 열기리서치영업팀이 바로 쓰는 경쟁사 분석 만들기
경쟁사 자체 페이지, 주변 보도, X의 구매자 반응을 모아 모든 주장에 출처, 날짜, 상태를 붙인 분석을 만듭니다.
워크플로 열기콘텐츠팀이 실제로 읽는 일일 AI 뉴스 다이제스트 만들기
출처 있는 뉴스 요약을 가져오고 X의 실무자 논의를 더하고 영상 자막 하나를 가져온 뒤 Markdown으로 호를 구성해 LiveDoc에 보관합니다.
워크플로 열기내 방식으로 바꾸기
같은 레시피를 실제 배포 방식에 맞게 조정합니다.
한 주제만 보기
하나의 출시나 논쟁으로 범위를 좁히면 브리프가 집중됩니다.
YouTube 의견 더하기
영상 자막으로 크리에이터 관점을 보충하지만 개인 경험으로 표시합니다.
월간 보고서로 만들기
빈도를 월 1회로 바꿔 브랜드와 PR 팀에 맞춥니다.
더 알아보기
이 레시피의 배경이 되는 참고 페이지와 다음에 볼 곳.