Felo API PlatformFelo API Platform

البحث

ابنِ تحليل منافسين يمكن لفريق المبيعات استخدامه

اجمع صفحات المنافس والتغطية حوله وما يقوله المشترون على X ثم ركّب تحليلًا يحمل كل ادعاء مصدرًا وتاريخًا وحالة.

الوقت30 دقيقةالمستوىمتوسطمحدّث2026-10-30
لمنتسويق المنتجاستخبارات المنافسةتمكين المبيعات

انسخ الموجّه

استبدل الحقول بين الأقواس المربعة وألصق في Claude Code أو Codex أو أي ذكاء اصطناعي يملك وصولًا إلى الطرفية. يثبّت مهارة Felo ويسأل قبل إنفاق الرصيد وينفّذ سير العمل.

أعدّ تحليلًا تنافسيًا لـ [اسم المنافس] من أجل [منتجنا].

النطاق: [الشريحة]، [المنطقة]، [اللغة]. الفترة: [آخر 90 يومًا / آخر 12 شهرًا]. القرار الذي يدعمه: [تغيير السعر / تموضع الإطلاق / معالجة الاعتراضات].
مصادر البداية: [نطاق المنافس]، [رابط صفحة الأسعار]، [رابط سجل التغييرات].

أنتج تحليلًا بصيغة Markdown يتضمن:
1. كيف يموضعون أنفسهم، بكلماتهم.
2. جدول أدلة: الادعاء، عنوان المصدر، الرابط، التاريخ، الحالة (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 ناقصة وليست عينة مشترين تمثيلية
  • لا يختار تموضعك؛ التوصيات معلّمة كاستنتاج
  • لا ينشر التحليل ولا يكتب في أدوات بطاقات المواجهة

أسئلة

من أين تأتي الأدلة؟

يعيد Chat API أساسًا بمصادر والصفحات المستخدمة ويحوّل Web Fetch صفحات المنافس إلى Markdown ويضيف X Search منشورات مؤرخة. كل صف يحفظ المصدر والتاريخ وللاستنتاج حالته.

هل يمكن تغطية عدة منافسين؟

نعم. شغّل الموجّه نفسه لكل منافس واحفظ LiveDoc واحدًا لكل شركة. صفحة المقارنة تجمع صفوف «متحقق منها» فقط دون خلط أدلة تشغيلين.

هل يمكن اقتباس أسعارهم؟

يسجّل سير العمل ما تقوله صفحة الأسعار مع الرابط وتاريخ التحقق. لا يجمّد الأسعار في النص لأنها تتغير والرقم القديم أسوأ من غيابه.

وملاحظات الفوز/الخسارة؟

يقرأ المصادر العامة فقط. أضف الملاحظات الداخلية كمستند منفصل في LiveDoc وعلّمها داخلية؛ لا تُقتبس أبدًا في مواد العملاء.

كم مرة يُحدّث؟

بمحفّز لا بالتقويم: تغيّر سعر أو إطلاق أو بداية دورة بيع. شغّله مجددًا في LiveDoc نفسه ليبقى الربع السابق بجانب الجديد.

كم تكلفة تحليل واحد؟

كل استدعاء دردشة واستخراج وبحث X يستهلك رصيدًا حسب الاستخدام؛ الأسعار الحالية في صفحة الأسعار. يطلب الموجّه الموافقة قبل الإنفاق.

سير عمل مرتبط

اجعله مناسبًا لك

الوصفة نفسها، معدّلة بحسب طريقة تسليمك الفعلية.

حدّث بمحفّز لا بالتقويم

أعد التشغيل حين يغيّر المنافس أسعاره أو يطلق منتجًا كبيرًا أو قبل دورة بيع. احفظ كل تحليل كمستند مؤرخ في LiveDoc نفسه.

حوّل التحليل إلى بطاقات مواجهة

من الجدول نفسه اكتب صفحة لكل دور — المشتري الاقتصادي والراعي والمراجع التقني — بصفوف `Verified` فقط مع الروابط. أبقِ `Inference` خارج مواد العملاء.

قارن منافسين

شغّل سير العمل لكل منافس مع LiveDoc منفصل وابنِ صفحة مقارنة من صفوف `Verified` في التشغيلين فقط. لا تدمج تشغيلين دون عمود حالة أبدًا.

صفحات المراجع خلف هذه الوصفة والخطوات التالية.