Felo API PlatformFelo API Platform

البحث

حوّل استعلام بحث إلى موجز محتوى SEO

انظر أي الصفحات تجيب اليوم واقرأها بصيغة Markdown وارسم خريطة الأسئلة المغطاة والمتروكة ثم اكتب موجزًا يستطيع الكاتب بناء هيكل منه.

الوقت25 دقيقةالمستوىمتوسطمحدّث2026-10-30
لمنتسويق المحتوىخبراء SEOالمحررون

انسخ الموجّه

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

اكتب موجز محتوى SEO لاستعلام [الاستعلام المستهدف] من أجل [المنتج أو الموقع].

الجمهور: [القارئ]. السوق واللغة: [المنطقة]، [اللغة]. الزاوية: [دليل / مقارنة / صفحة منتج]. القرار الذي يدعمه: [مقال جديد / تحديث / سد فراغ].

اقرأ أولًا ما يجيب عن هذا الاستعلام حاليًا قبل وضع المخطط. أنتج موجزًا بصيغة Markdown يتضمن:
1. الاستعلام المستهدف والنية التي تستنتجها، مع دليل هذا القراءة.
2. ما تغطيه الصفحات الحالية: العنوان، الرابط، والأقسام الافتتاحية.
3. الأسئلة التي تجيب عنها الصفحات الحالية والأسئلة التي تغفلها.
4. مخططًا مقترحًا بسطر واحد لكل قسم عمّا يجب أن يثبته.
5. أدلة وأمثلة من المصادر، مع الروابط.
6. قائمة كاملة بالمصادر.

القواعد:
- لا تدّعِ حجم بحث أو صعوبة كلمة مفتاحية أو ترتيبًا أو زيارات. سير العمل هذا لا يقيسها؛ اكتب «لم يُقس هنا» بدلًا من رقم.
- لا تختلق إحصاءات أو اقتباسات أو ادعاءات عن محتوى المنافسين.
- صف النية كقراءة للصفحات، لا كحقيقة مقيسة.
- أبقِ الاقتباسات قصيرة ومنسوبة ومرتبطة.
- حوّل المنطقة واللغة إلى قيم صريحة.
- قبل استهلاك الأرصدة، اعرض استدعاءات API المخطط لها وانتظر موافقتي.
- لا تنشر ولا تجدول ولا ترسل شيئًا.
- اكتب النتيجة في ./seo-brief.md ولخّصها في الدردشة.

تتضمن النسخة خطوات التثبيت وقواعد الأمان أيضًا.

ما تحصل عليه

مخرجات نموذجية لتشغيل واحد. ليست توليدًا مباشرًا.

مثال موجز (مقتطف)

موجز SEO — «كيفية أتمتة فرز تذاكر الدعم»

الاستعلام المستهدف والنية

الاستعلام: «كيفية أتمتة فرز تذاكر الدعم». تبدأ الصفحات المسترجعة بخطوات التنفيذ لا بصفحات المنتج، لذا تُقرأ النية كدليل عملي. هذا قراءة للصفحات وليس تسمية نية مقيسة.

ما تغطيه الصفحات الحالية

الصفحةالرابطتبدأ بـ
أتمتة فرز تذاكر الدعم: دليل عمليhttps://example.com/guideقواعد التوجيه ثم الوسوم
قائمة تحقق أتمتة الفرزhttps://example.com/checklistقائمة التحقق نفسها

أسئلة تجيب عنها الصفحات

  • ما الذي تغيّره أتمتة الفرز
  • بأي قواعد توجيه نبدأ

أسئلة تغفلها

  • كيف نقيس هل تحسّن الفرز فعلًا
  • ماذا نفعل عندما يخطئ المصنّف

الهيكل المقترح

  1. ما تغيّره الأتمتة — إثبات أنها مسألة طابور لا عدد موظفين.
  2. أول ثلاث قواعد توجيه تستحق الأتمتة — إثبات كل واحدة بمثال.
  3. كيف نقيسها في الشهر الأول — إثبات بمؤشر يستطيع قائد العمليات استخراجه.
  4. عندما تخطئ الأتمتة — إثبات مسار التراجع البشري.

الأدلة

  • مثال قاعدة توجيه، مقتبس من https://example.com/guide (فُحص في 2026-10-30)

لم يُقس هنا

حجم البحث وصعوبة الكلمة المفتاحية والترتيب. يقرأ هذا المسار صفحات عامة؛ ولا يستعلم فهرس بحث أو متتبع ترتيب.

المصادر

  • https://example.com/guide
  • https://example.com/checklist

الاستدعاءات الدقيقة

للمطورين: سير العمل نفسه ككود، بترتيب التنفيذ.

عرض استدعاءات API الفعلية
  1. انظر من يجيب اليوم

    اسأل Chat عن الاستعلام وخذ الإجابة والصفحات المقتبسة. تلك الصفحات هي المحتوى المنافس الحالي.

    seo-brief.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 query = "how to automate support triage";
    const ourSite = "example.com";
    
    const coverage = await felo<ChatData>("/v2/chat", {
      query: `What pages currently answer the search query "${query}"? List the pages and what each one covers.`,
    });
    
    const candidates = coverage.data.resources
      .filter((resource) => !resource.link.includes(ourSite))
      .slice(0, 5)
      .map((resource) => ({ url: resource.link, title: resource.title }));

    مخرجات نموذجية

    {
      "answer": "Readers searching this usually want a step-by-step …",
      "sources": [
        { "link": "https://example.com/guide", "title": "…", "snippet": "…" }
      ]
    }
  2. اقرأ الصفحات بصيغة Markdown

    نزّل ثلاث إلى خمس صفحات أقوى عبر Web Fetch بصيغة Markdown مع حفظ العناوين والأسئلة.

    seo-brief.ts
    type ExtractData = { data: { content: string } };
    
    const pages = await Promise.all(
      candidates.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/guide",
      "checkedAt": "2026-10-30",
      "content": "# Automating support triage\n\n## Routing rules\n…"
    }
  3. ارسم خريطة التغطية والفجوات

    استخرج H2/H3 وأسئلة FAQ من كل صفحة وابنِ جدولًا: أي الأسئلة أجيبت وأيها لا.

    seo-brief.ts
    type Heading = { page: string; heading: string };
    
    const headings: Heading[] = pages.flatMap((page) =>
      page.content
        .split("\n")
        .filter((line) => line.startsWith("## "))
        .map((line) => ({
          page: page.title,
          heading: line.replace(/^##\s+/, ""),
        })),
    );
    
    const questions = headings.filter((item) => item.heading.includes("?"));
    
    const byTopic = new Map<string, string[]>();
    for (const item of headings) {
      byTopic.set(item.heading, [...(byTopic.get(item.heading) ?? []), item.page]);
    }

    مخرجات نموذجية

    // questions
    [
      { "page": "…", "heading": "What routes should you automate first?" }
    ]
  4. اكتب الموجز

    صف الاستعلام والنية ومقارنة التغطية والأسئلة الناقصة والهيكل المقترح وقائمة المصادر.

    seo-brief.ts
    const today = new Date().toISOString().slice(0, 10);
    
    const brief = [
      `# SEO brief — "${query}"`,
      `Checked ${today}. Site: ${ourSite}.`,
      "",
      "## Intent read",
      "The pages returned for this query lead with: " +
        headings.slice(0, 6).map((item) => item.heading).join("; ") +
        ". This is a reading of their structure, not a measured intent label.",
      "",
      "## What the pages cover",
      "| Page | URL | Checked |",
      "| --- | --- | --- |",
      ...pages.map((page) => `| ${page.title} | ${page.url} | ${page.checkedAt} |`),
      "",
      "## Questions the pages answer",
      ...questions.map((item) => `- ${item.heading} (${item.page})`),
      "",
      "## Topics more than one page covers",
      ...[byTopic.entries()]
        .filter(([, pageTitles]) => pageTitles.length > 1)
        .map(([heading, pageTitles]) => `- ${heading} (${pageTitles.length} pages)`),
      "",
      "## Proposed outline",
      ...questions.slice(0, 5).map((item, index) => `${index + 1}. ${item.heading}`),
      "",
      "## Questions they miss",
      "<!-- Only questions none of the fetched pages answer. Delete this comment when filled. -->",
      "",
      "## Not measured here",
      "Search volume, keyword difficulty, and ranking position. This workflow reads public pages; it does not query a search index or a rank tracker.",
      "",
      "## Sources",
      ...pages.map((page) => `- ${page.title}: ${page.url}`),
    ].join("\n");
    
    console.log(brief);

    مخرجات نموذجية

    # SEO brief — "how to automate support triage"
  5. احفظ في LiveDoc

    احفظ الموجز وروابط الصفحات في LiveDoc ليجلب التحديث التالي التغييرات فقط.

    seo-brief.ts
    type LiveDocData = { data: { short_id: string } };
    
    const briefDoc = await felo<LiveDocData>("/v2/livedocs", {
      name: `SEO briefs: ${ourSite}`,
      description: "One document resource per target query",
    });
    
    await felo(`/v2/livedocs/${briefDoc.data.short_id}/resources/urls`, {
      urls: pages.map((page) => ({ url: page.url, title: page.title })),
    });
    
    await felo(`/v2/livedocs/${briefDoc.data.short_id}/resources/doc`, {
      title: `SEO brief — ${query}`,
      content: brief,
    });
    
    console.log(briefDoc.data.short_id); // the next query adds to this archive

    مخرجات نموذجية

    { "short_id": "PvyKouzJirXjFdst4uKRK3" }

ما يتضمنه

  • قائمة صفحات بمصادر من Chat وروابط الإجابة
  • الصفحات الرائدة الحالية بصيغة Markdown
  • العناوين والأسئلة التي تغطيها
  • موجز يمكن بناء هيكل منه فورًا
  • LiveDoc بالمصادر للتحديث التالي

ما لا يفعله

  • لا يقيس الترتيب أو حجم البحث أو الصعوبة أو الزيارات
  • صفحات عامة فقط؛ قد يفشل تسجيل الدخول وجدار الدفع
  • لا ينشر المقال أو يعيد كتابته كاملًا
  • تشغيل واحد لكل استعلام؛ عدة استعلامات تحتاج دورتك
  • لا يضمن الترتيب

أسئلة

هل يقيس الحجم أو الترتيب؟

لا. يقرأ الصفحات العامة ويقيّم أي محتوى يجيب اليوم؛ الترتيب والحجم في أدوات SEO لديك.

من أين البيانات؟

يعيد Chat صفحات بمصادر ويحوّلها Web Fetch إلى Markdown. كل تقييم يشير إلى صفحة وتاريخ محددين.

هل يتعامل مع عدة استعلامات؟

نعم لكن واحدًا تلو الآخر. كرر الخطوات لكل استعلام واحفظ موجزات منفصلة.

لأي استعلامات يصلح؟

المعلوماتية والمقارنة و«كيف أفعل» لأن الصفحات العامة تعطي إشارة كافية. الاستعلامات الشرائية تحتاج بيانات منتجك وتحويلك.

هل يكتب المقال؟

لا. يعطي الموجز والهيكل؛ الكتابة للمحرر أو وكيل الكتابة.

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

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

سير عمل مرتبط

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

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

استعلامات المقارنة فقط

اقتصر على «X مقابل Y» و«أفضل X» لترى زاوية التميّز أوضح.

أضف صفحة منتجك

أضف صفحة المنتج كمصدر إضافي ليهبط الهيكل على ميزاتك وأسعارك.

حدّث كل ربع

أعد التشغيل في LiveDoc نفسه ولاحظ كيف تتغير صفحات المنافسين والهيكل.

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