Felo API PlatformFelo API Platform

پژوهش

تحلیلی از رقبا بسازید که تیم فروش بتواند استفاده کند

صفحات رقیب، پوشش خبری اطراف آن و آنچه خریداران در X می‌گویند را جمع کنید، سپس تحلیلی بسازید که هر ادعا منبع، تاریخ و وضعیت دارد.

زمان۳۰ دقیقهسطحمتوسطبه‌روزرسانی2026-10-30
برای چه کسانیبازاریابی محصولهوش رقابتیتوانمندسازی فروش

کپی پرامپت

فیلدهای داخل قلاب را جایگزین کنید و در Claude Code، Codex یا هوش مصنوعی با دسترسی ترمینال بچسبانید. مهارت Felo را نصب می‌کند، پیش از خرج اعتبار می‌پرسد و گردش‌کار را اجرا می‌کند.

یک تحلیل رقابتی از [نام رقیب] برای [محصول ما] تهیه کنید.

دامنه: [بخش]، [منطقه]، [زبان]. بازه زمانی: [۹۰ روز گذشته / ۱۲ ماه گذشته]. تصمیمی که پشتیبانی می‌کند: [تغییر قیمت / جایگاه‌یابی هنگام عرضه / مدیریت اعتراض‌ها].
منابع شروع: [دامنه رقیب]، [URL صفحه قیمت]، [URL تغییرات].

خروجی یک تحلیل Markdown با این بخش‌ها باشد:
1. اینکه خود را چگونه جایگاه‌یابی می‌کنند، با کلمات خودشان.
2. جدول شواهد: ادعا، عنوان منبع، URL، تاریخ، وضعیت (Verified / Vendor claim / Third-party / Signal / Inference / Not verified).
3. قیمت‌ها: آنچه صفحه می‌گوید، با پیوند و تاریخ بررسی. هرگز نرخ را بدون صفحه و تاریخ به متن منتقل نکنید.
4. نقاطی که خریداران اعتراض می‌کنند، با حساب‌های X و تاریخ، با برچسب سیگنال.
5. کاری که باید بعد انجام دهیم، با برچسب توصیه.
6. فهرست کامل منابع.

قواعد:
- جایگاه‌یابی آن‌ها را نقل کنید؛ آن را به ادعای قوی‌تر بازنویسی نکنید.
- ادعای فروشنده، پوشش شخص ثالث و استنباط خود را جدا کنید. هر ردیف را برچسب بزنید.
- هرگز قیمت، عدد، نام مشتری یا معیار ساختگی نسازید. داده نبود «داده‌ای موجود نیست».
- بازه زمانی و منطقه را به مقادیر صریح تبدیل کنید.
- پیش از مصرف اعتبار، فراخوانی‌های API برنامه‌ریزی‌شده را نشان دهید و منتظر تأیید من بمانید.
- چیزی منتشر، ارسال، زمان‌بندی یا در CRM ثبت نکنید.
- نتیجه را در ./competitor-teardown.md بنویسید و در چت خلاصه کنید.

نسخه شامل مراحل نصب و قواعد ایمنی نیز هست.

چه دریافت می‌کنید

خروجی نمونه یک اجرا. نه تولید زنده.

نمونه تحلیل رقیب (بخش)

تحلیل رقیب — [رقیب]، بررسی‌شده در 2026-10-30

چگونه خود را جایگاه‌یابی می‌کنند

تیتر صفحه اصلی: «پلتفرم تیم‌های پشتیبانی در حال رشد». صفحه دسته: «هر چیزی که تیم پشتیبانی شما نیاز دارد». هر دو ادعای فروشنده‌اند و همان‌طور که نوشته شده نقل شده‌اند.

جدول شواهد

ادعامنبعتاریخوضعیت
به‌عنوان پلتفرم جایگاه‌یابی می‌شود، نه ابزار نقطه‌ایhttps://example.com/competitor/home2026-10-30Verified
هر هفته تغییر منتشر می‌کندhttps://example.com/competitor/changelog2026-10-28Verified
در جمع‌بندی‌های مستقل ذکر شدهhttps://example.com/roundup2026-10-27Third-party
خریداران از آنبوردینگ کند می‌گویندپست X زیر2026-10-14Signal
Enterprise بزرگ‌ترین بخش آن‌هاستداده‌ای موجود نیست—Not verified

قیمت

صفحه قیمت یک طرح پله‌ای و یک طرح مصرفی دارد. نرخ‌ها اینجا تکرار نمی‌شوند؛ صفحه زنده و تاریخ را بررسی کنید: https://example.com/competitor/pricing (2026-10-30).

جایی که خریداران اعتراض می‌کنند

@example_dev، 2026-10-14: «نصب بیشتر از آنچه دمو نشان می‌داد طول کشید». یک پست تاریخ‌دار؛ این شکایت است، نه برآورد فراوانی.

توصیه

در صفحه مقایسه، زمان تا اولین نتیجه را برجسته کنید. این استنباط ماست، نه ادعای رقیب.

منابع

  • https://example.com/competitor/home
  • https://example.com/competitor/pricing
  • https://example.com/competitor/changelog

فراخوانی‌های دقیق

برای توسعه‌دهندگان: همان گردش‌کار به‌صورت کد، به ترتیب اجرا.

نمایش فراخوانی‌های واقعی API
  1. با پایه‌ای دارای منابع شروع کنید

    Chat پاسخ و صفحات استفاده‌شده را برمی‌گرداند، نقشه‌ای از جایی که درباره رقیب صحبت می‌شود. پاسخ را سرنخ بدانید نه منبع: پیوندها را نگه دارید، آن‌ها ردیف‌های شخص ثالث را می‌دهند. کمک‌کننده کلید را یک بار می‌فرستد و خارج از 2xx خطا می‌دهد.

    competitor.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 competitor = "Example Competitor";
    const segment = "mid-market support teams";
    
    const baseline = await felo<ChatData>("/v2/chat", {
      query: `How does ${competitor} position itself for ${segment}? Include pricing and recent launches.`,
    });
    
    const seedSources = baseline.data.resources.slice(0, 5);

    خروجی نمونه

    {
      "answer": "The competitor positions itself as …",
      "sources": [
        { "link": "https://example.com/competitor", "title": "…", "snippet": "…" }
      ]
    }
  2. صفحاتی که کنترل می‌کنند را دانلود کنید

    پوشش شخص ثالث نشان می‌دهد مردم چه فکر می‌کنند؛ صفحات خودشان نشان می‌دهد چه ادعا می‌کنند. صفحه اصلی، قیمت و تغییرات را با حالت خواندن به Markdown تبدیل کنید و تاریخ دانلود را بنویسید: صفحه قیمت بدون تاریخ تله است.

    competitor.ts
    type ExtractData = { data: { content: string } };
    
    const ownedPages = [
      { url: "https://example.com/competitor/home", title: "Homepage" },
      { url: "https://example.com/competitor/pricing", title: "Pricing" },
      { url: "https://example.com/competitor/changelog", title: "Changelog" },
    ];
    
    const fetched = await Promise.all(
      ownedPages.map(async (page) => {
        const res = await felo<ExtractData>("/v2/web/extract", {
          url: page.url,
          output_format: "markdown",
          with_readability: true,
          with_cache: true,
        });
        const checkedAt = new Date().toISOString().slice(0, 10);
        return { ...page, checkedAt, content: res.data.content };
      }),
    );

    خروجی نمونه

    {
      "url": "https://example.com/competitor/pricing",
      "checkedAt": "2026-10-30",
      "content": "# Pricing\n\nExtracted page text…"
    }
  3. ببینید خریداران در X چه می‌گویند

    در X مخالفت‌ها و دور زدن‌های رقیب را جست‌وجو کنید. حساب و تاریخ هر پست را نگه دارید؛ نقل‌قول تاریخ‌دار شکایت را ثابت می‌کند نه تکرارش را. تحلیل آن را سیگنال علامت می‌زند و چند پست را هرگز درصد نمی‌کند.

    competitor.ts
    type XData = {
      data: {
        tweets: {
          content: string;
          author: { username: string };
          created_at: string;
          metrics: { retweet_count: number; favorite_count: number };
        }[];
      };
    };
    
    const since = Math.floor((Date.now() - 90 * 24 * 60 * 60 * 1000) / 1000);
    
    const buyerSignal = await felo<XData>("/v2/x/tweet/search", {
      query: `"${competitor}" (pricing OR onboarding OR migration)`,
      limit: 25,
      since_time: since,
    });
    
    const objections = buyerSignal.data.tweets.slice(0, 5);

    خروجی نمونه

    { "data": { "tweets": [
      {
        "content": "setup took longer than the demo suggested",
        "author": { "username": "example_dev" },
        "created_at": "2026-10-14T09:20:00Z",
        "metrics": { "retweet_count": 3, "favorite_count": 24 }
      }
    ] } }
  4. تحلیل را با جدول شواهد بسازید

    این گام تحریریه است: صفحات و پست‌ها را به ادعا تبدیل کنید و به هرکدام منبع، تاریخ و وضعیت بدهید. ستون وضعیت سند را صادق نگه می‌دارد: Verified برای آنچه صفحه می‌گوید، Vendor claim برای بازاریابی، Third-party برای پوشش بیرونی، Signal برای پست تاریخ‌دار، Inference برای خوانش شما و Not verified بدون شاهد.

    competitor.ts
    const today = new Date().toISOString().slice(0, 10);
    
    const row = (claim: string, source: string, date: string, status: string) =>
      `| ${claim} | ${source} | ${date} | ${status} |`;
    
    const teardown = [
      `# Competitor teardown — ${competitor}`,
      `Scope: ${segment}. Checked ${today}.`,
      "",
      "| Claim | Source | Date | Status |",
      "| --- | --- | --- | --- |",
      row("Free tier listed on the pricing page", ownedPages[1].url, fetched[1].checkedAt, "Verified"),
      row("Positions as a platform, not a point tool", ownedPages[0].url, fetched[0].checkedAt, "Vendor claim"),
      row("Discussed in independent coverage", seedSources[0]?.link ?? "Not available", today, "Third-party"),
      row("Buyers report onboarding friction", "X post, quoted below", today, "Signal"),
      row("Most revenue comes from enterprise", "Not available", "—", "Not verified"),
      "",
      "## Recommendation",
      "Lead with time-to-first-result on the comparison page. Inference, not a competitor claim.",
    ].join("\n");
    
    console.log(teardown);

    خروجی نمونه

    | Free tier listed on the pricing page | https://example.com/competitor/pricing | 2026-10-30 | Verified |
  5. برای به‌روزرسانی بعدی در LiveDoc بایگانی کنید

    برای هر رقیب یک LiveDoc بسازید، صفحات دانلودشده را به‌عنوان منابع URL و تحلیل را به‌عنوان سند اضافه کنید. افزودن دوباره URL حذف تکراری می‌شود، بنابراین فصل بعد فقط تغییرات دانلود می‌شوند و تحلیل قبلی در همان بایگانی می‌ماند.

    competitor.ts
    type LiveDocData = { data: { short_id: string } };
    
    const teardownDoc = await felo<LiveDocData>("/v2/livedocs", {
      name: `Teardown: ${competitor}`,
      description: `Sources and teardown checked ${today}`,
    });
    
    await felo(`/v2/livedocs/${teardownDoc.data.short_id}/resources/urls`, {
      urls: fetched.map((page) => ({ url: page.url, title: page.title })),
    });
    
    await felo(`/v2/livedocs/${teardownDoc.data.short_id}/resources/doc`, {
      title: `Teardown ${today}`,
      content: teardown,
    });
    
    console.log(teardownDoc.data.short_id); // the next refresh reuses this LiveDoc

    خروجی نمونه

    { "short_id": "PvyKouzJirXjFdst4uKRK3" }

چه چیزی دارد

  • پایه‌ای با منابع از Chat API و صفحات پشت آن
  • صفحه اصلی، قیمت و تغییرات رقیب به‌صورت Markdown
  • نظرهای تاریخ‌دار خریداران از X، علامت‌خورده به‌عنوان سیگنال نه شاهد
  • جدول شواهد که واقعیت‌های تأییدشده، ادعاهای فروشنده و استنتاج را جدا می‌کند
  • LiveDoc که منابع را نگه می‌دارد تا از صفر شروع نشود

چه کاری نمی‌کند

  • فقط منابع عمومی؛ بدون مصاحبه برد/باخت، یادداشت CRM یا داشبورد خصوصی
  • قیمت‌ها پیوند و تاریخ‌دار می‌شوند و هرگز بدون تاریخ بررسی در جدول منجمد نمی‌شوند
  • پوشش X ناقص است و نمونه نماینده خریداران نیست
  • جایگاه‌یابی شما را انتخاب نمی‌کند؛ توصیه‌ها به‌عنوان استنتاج علامت می‌خورند
  • تحلیل را منتشر نمی‌کند یا در ابزارهای battlecard نمی‌نویسد

پرسش‌ها

شواهد از کجا می‌آیند؟

Chat API پایه‌ای با منابع و صفحات استفاده‌شده را برمی‌گرداند، Web Fetch صفحات رقیب را Markdown می‌کند و X Search پست‌های تاریخ‌دار اضافه می‌کند. هر ردیف منبع و تاریخ دارد و استنتاج وضعیت خودش را دارد.

آیا می‌توان چند رقیب را پوشش داد؟

بله. همان پرامپت را برای هر رقیب اجرا کنید و برای هر شرکت یک LiveDoc نگه دارید. صفحه مقایسه فقط ردیف‌های «تأییدشده» را کنار هم می‌گذارد نه شواهد دو اجرا را مخلوط کند.

آیا می‌توان قیمت‌هایشان را نقل کرد؟

گردش‌کار آنچه صفحه قیمت می‌گوید را با پیوند و تاریخ بررسی ثبت می‌کند. نرخ‌ها را در متن منجمد نمی‌کند چون قیمت‌ها تغییر می‌کنند و عدد قدیمی از نبود عدد بدتر است.

و یادداشت‌های برد/باخت ما؟

فقط منابع عمومی را می‌خواند. یادداشت‌های داخلی را به‌عنوان سند جداگانه در LiveDoc اضافه کنید و داخلی علامت بزنید؛ هرگز در مواد مشتری نقل نمی‌شوند.

هر چند وقت به‌روز شود؟

با محرک نه تقویم: تغییر قیمت، عرضه یا شروع چرخه فروش. همان LiveDoc را دوباره اجرا کنید تا فصل قبل کنار جدید بماند.

هزینه یک تحلیل چقدر است؟

هر فراخوانی چت، استخراج و جست‌وجوی X بر اساس استفاده اعتبار مصرف می‌کند؛ نرخ‌های فعلی در صفحه قیمت است. پرامپت پیش از هزینه تأیید می‌خواهد.

گردش‌کارهای مرتبط

آن را از خود کنید

همان دستور، متناسب با روش واقعی تحویل شما.

با محرک به‌روز کنید نه تقویم

وقتی رقیب قیمت را عوض می‌کند، عرضه بزرگی دارد یا پیش از چرخه فروش دوباره اجرا کنید. هر تحلیل را به‌عنوان سند تاریخ‌دار در همان LiveDoc نگه دارید.

تحلیل را به battlecard تبدیل کنید

از همان جدول برای هر نقش یک صفحه بنویسید — خریدار اقتصادی، قهرمان، بازبین فنی — فقط با ردیف‌های `Verified` و پیوندها. `Inference` را بیرون از مواد مشتری بگذارید.

دو رقیب را مقایسه کنید

گردش‌کار را برای هر رقیب با LiveDoc جداگانه اجرا کنید و صفحه مقایسه را فقط از ردیف‌های `Verified` در هر دو اجرا بسازید. هرگز دو اجرا را بدون ستون وضعیت ادغام نکنید.

صفحات مرجع پشت این دستور و گام‌های بعدی.