เนื้อหา
เปลี่ยนบทสนทนาโซเชียลเป็นบรีฟฟังรายสัปดาห์
ค้นโพสต์ X สัปดาห์นี้เกี่ยวกับแบรนด์และคู่แข่ง เพิ่มบริบทเว็บพร้อมแหล่ง อ่านหน้าเบื้องหลัง และเก็บทุกฉบับเพื่อให้สัปดาห์ถัดไปเริ่มจากที่รู้แล้ว
คัดลอกพรอมป์ต์
แทนช่องในวงเล็บเหลี่ยมแล้ววางใน Claude Code, Codex หรือ AI ที่เข้าถึงเทอร์มินัล ระบบจะติดตั้งสกิล Felo ถามก่อนใช้เครดิต และรันเวิร์กโฟลว์
ทำสรุป social listening สำหรับ [แบรนด์ ผลิตภัณฑ์ หรือหมวดหมู่] คำที่ติดตาม: [แบรนด์], [ชื่อผลิตภัณฑ์], [ชื่อคู่แข่ง], [คำสำคัญหมวดหมู่] ช่วงเวลา: [7 / 14] วันล่าสุด เขตเวลา: [เขตเวลา] ผู้อ่าน: [ทีม] แหล่งที่อนุญาต: เฉพาะโพสต์ X สาธารณะและหน้าเว็บสาธารณะ สร้าง: 1. สรุปห้าบรรทัดว่าบทสนทนาเปลี่ยนอะไร 2. ธีม แต่ละธีมมีสิ่งที่คนพูด โพสต์ที่สนับสนุน และช่วงวันที่ที่โพสต์ครอบคลุม 3. การกล่าวถึงคู่แข่ง: ใครถูกแนะนำ และในบริบทใด 4. ความเสี่ยง: ข้อร้องเรียน ระบบล่ม คำถามซ้ำ หรือปฏิกิริยาเชิงลบ 5. ขั้นตอนต่อไป แยกเป็น “ตอบตอนนี้” “จับตา” และ “ส่งต่อฝ่ายผลิตภัณฑ์” 6. รายการแหล่งอ้างอิงของทุกโพสต์และหน้าเว็บ พร้อม URL และวันที่ กฎ: - รายงานเฉพาะโพสต์และหน้าที่ API ส่งกลับ ห้ามแต่งคะแนนความรู้สึก ตัวเลขการมีส่วนร่วม คำพูด หรือแหล่งข้อมูล - ถือว่า X เป็นสัญญาณ ไม่ใช่แบบสำรวจที่เป็นตัวแทน และบอกเมื่อตัวอย่างน้อยเกินกว่าจะสรุป - แยกคำพูดของลูกค้าจากสรุปของคุณ และอ้างสั้นๆ พร้อมลิงก์ - แปลงช่วงเวลาเป็นวันที่เริ่มและสิ้นสุดที่ชัดเจน และระบุเขตเวลา - ก่อนใช้เครดิต ให้แสดงการค้นหาและดึงข้อมูลที่จะทำและรอการอนุมัติจากฉัน - ห้ามตอบ โพสต์ ติดตาม หรือส่งข้อความหาใคร สรุปนี้เป็นแบบอ่านอย่างเดียว - เขียนผลลัพธ์ลง ./social-listening.md และสรุปในแชท
สำเนายังรวมขั้นตอนติดตั้งและกฎความปลอดภัย
สิ่งที่คุณได้รับ
ตัวอย่างผลลัพธ์จากการรันหนึ่งครั้ง ไม่ใช่การสร้างสด
สรุป social listening — 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 อ่านสองหรือสามหน้าที่เกี่ยวข้องที่สุดและเพิ่มข้อเท็จจริงกับลิงก์
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 หรือชุมชนปิด
- รันสัปดาห์ละครั้ง การตั้งเวลาอยู่ที่เอเจนต์หรือ cron
คำถาม
อะไรนับเป็นแหล่ง?
ทุกโพสต์ X เก็บลิงก์ บัญชี และวันที่ บริบทเว็บมาจากหน้าสาธารณะ Chat และ Web Fetch ข้อความอ้างที่ไม่มีแหล่งไม่ถูกใส่
ติดตามคู่แข่งได้ไหม?
ได้ ค้นแบรนด์และคู่แข่งพร้อมกันแล้วจัดกลุ่มในรายงาน
วัดอารมณ์ไหม?
สรุปหัวข้อและโทน แต่ระบุว่าเป็นการตัดสินของบรรณาธิการ ไม่ได้อ้างเปอร์เซ็นต์อารมณ์ที่แน่นอน
ย้อนหลังไกลแค่ไหน?
ค่าเริ่มต้น 7 วันล่าสุดสำหรับรายงานสัปดาห์ ต้องการหน้าต่างใหญ่ขึ้นให้เปลี่ยน `since_time`
รันทุกสัปดาห์ได้ไหม?
ได้ วางพรอมป์ต์เดิมใน cron หรือตัวจัดตารางเอเจนต์และเขียนลง LiveDoc เดียวกัน
บรีฟหนึ่งชุดมีค่าใช้จ่ายเท่าไร?
X Search, Chat และการสกัดหน้าคิดตามการใช้งาน อัตราปัจจุบันที่หน้าค่าบริการ และพรอมป์ต์ขออนุมัติก่อนใช้จ่าย
เวิร์กโฟลว์ที่เกี่ยวข้อง
เปลี่ยนคำถามหนึ่งข้อเป็นบรีฟวิจัยที่มีแหล่งอ้างอิง
ถามเว็บ บันทึกหน้าเว็บที่อยู่เบื้องหลังคำตอบเป็น Markdown เพิ่มสิ่งที่ผู้ปฏิบัติพูดบน X และเก็บหลักฐานใน LiveDoc ที่ค้นซ้ำได้
เปิดเวิร์กโฟลว์วิจัยสร้างการวิเคราะห์คู่แข่งที่ทีมขายใช้ได้จริง
รวมหน้าของคู่แข่ง ข้อมูลรอบข้าง และสิ่งที่ผู้ซื้อพูดบน X แล้วประกอบการวิเคราะห์ที่ทุกข้อความอ้างมีแหล่ง วันที่ และสถานะ
เปิดเวิร์กโฟลว์เนื้อหาเผยแพร่สรุปข่าว AI รายวันที่ทีมอ่านจริง
รับสรุปข่าวพร้อมแหล่ง เพิ่มการพูดคุยของผู้ปฏิบัติบน X ดึงทรานสคริปต์วิดีโอ ประกอบฉบับเป็น Markdown และเก็บใน LiveDoc
เปิดเวิร์กโฟลว์ปรับให้เป็นของคุณ
สูตรเดิม ปรับตามวิธีที่คุณส่งมอบจริง
เฉพาะเรื่องเดียว
จำกัดที่การเปิดตัวหรือข้อถกเถียงหนึ่งเรื่องเพื่อโฟกัส
เพิ่มความเห็น YouTube
เสริมด้วยทรานสคริปต์วิดีโอ แต่ระบุว่าเป็นประสบการณ์ส่วนบุคคล
เปลี่ยนเป็นรายเดือน
เปลี่ยนความถี่เป็นรายเดือนสำหรับแบรนด์และ PR
ไปต่อ
หน้าเอกสารอ้างอิงเบื้องหลังสูตรนี้และก้าวต่อไป