Felo API PlatformFelo API Platform

محتوا

ویدیوی YouTube را به مقاله قابل انتشار تبدیل کنید

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

زمان۲۵ دقیقهسطحمتوسطبه‌روزرسانی2026-10-29
برای چه کسانیتیم‌های محتوانویسندگان خبرنامهویراستاران ویدیو و پادکست

کپی پرامپت

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

این ویدیو را به مقاله قابل انتشار تبدیل کنید: [URL یوتیوب یا شناسه ویدیو].

مخاطب: [خوانندگان]. لحن: [سبک انتشار]. طول هدف: [۸۰۰ تا ۱۲۰۰ کلمه] به زبان [زبان].
مدیریت منبع: عنوان، کانال و URL ویدیو را نگه دارید. حداکثر قطعه‌های کوتاه را با زمان نقل کنید.

خروجی:
1. عنوان کاری.
2. پاراگراف آغازین.
3. بخش‌هایی با پاراگراف‌های کوتاه.
4. دو یا سه نقل‌قول با زمان.
5. آنچه ویدیو پوشش نداد.
6. فهرست منابع با ویدیو و صفحه‌های پیوندشده.

قواعد:
- متن کامل را بازتولید نکنید. خلاصه کنید و کوتاه نقل کنید.
- هر ادعای واقعی از ویدیو به زمان نیاز دارد؛ ادعاهای صفحه‌های پیوندشده به URL.
- هرچه قابل بررسی نبود «بررسی‌نشده» علامت بزنید.
- پیش از مصرف اعتبار برای متن یا استخراج صفحه بپرسید.
- چیزی منتشر، زمان‌بندی یا ارسال نکنید.
- نتیجه را در ./video-article.md بنویسید و در چت خلاصه کنید.

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

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

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

نمونه مقاله (بخش)

یک سخنرانی ۴۰ دقیقه‌ای درباره عامل‌ها واقعاً چه گفت

پاراگراف آغازین

دمو چشمگیر بود؛ بخش مفید، مدیریت خطا بود.

ادعایی که همه نقل کردند

> «عامل باهوش‌تر نشد. فقط دیگر اجازه ندادیم بدون بودجه دوباره تلاش کند». — [12:40]

آنچه ویدیو پوشش نداد

هزینه هر وظیفه موفق، و اینکه وقتی منبع بازیابی‌شده اشتباه است چه می‌شود.

منابع

  • ویدیو: https://www.youtube.com/watch?v=...
  • بنچمارک پیوندشده: https://example.com/benchmark

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

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

نمایش فراخوانی‌های واقعی API
  1. متن زمان‌دار را بگیرید

    از YouTube Subtitling برای زیرنویس زبان هدف استفاده کنید و شروع و مدت هر خط را نگه دارید.

    article.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 Transcript = {
      data: {
        title: string;
        contents: { text: string; start: number; duration: number }[];
      };
    };
    
    export async function fetchTranscript(videoId: string, language = "en") {
      const query = new URLSearchParams({
        video_code: videoId,
        language,
        with_time: "true",
      });
      const { data } = await felo<Transcript>(`/v2/youtube/subtitling?${query}`);
      if (data.contents.length === 0) throw new Error("This video has no subtitles");
      return data;
    }

    خروجی نمونه

    {
      "title": "How we rebuilt onboarding",
      "contents": [
        { "text": "Welcome back to the channel.", "start": 0.32, "duration": 4.1 }
      ]
    }
  2. به بلوک‌های خوانا تبدیل کنید

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

    article.ts
    const toClock = (seconds: number) => {
      const minutes = Math.floor(seconds / 60);
      const rest = Math.floor(seconds % 60);
      return `${String(minutes).padStart(2, "0")}:${String(rest).padStart(2, "0")}`;
    };
    
    export function toBlocks(
      contents: Transcript["data"]["contents"],
      window = 60,
    ) {
      const grouped = new Map<number, string[]>();
      for (const line of contents) {
        const bucket = Math.floor(line.start / window) * window;
        grouped.set(bucket, [...(grouped.get(bucket) ?? []), line.text.trim()]);
      }
      return [...grouped]
        .map(([start, lines]) => `[${toClock(start)}] ${lines.join(" ")}`)
        .join("\n\n");
    }

    خروجی نمونه

    [00:00] Welcome back to the channel. Today we are talking about onboarding.
    
    [01:00] The first thing we changed was the welcome screen.
  3. منابع نقل‌شده را بگیرید

    با Web Fetch صفحات نام‌برده در ویدیو را بخوانید و پیوند و واقعیت اضافه کنید.

    article.ts
    type ExtractData = { data: { content: string } };
    
    export async function fetchSources(urls: string[]) {
      return Promise.all(
        urls.slice(0, 5).map(async (url) => {
          const page = await felo<ExtractData>("/v2/web/extract", {
            url,
            output_format: "markdown",
            with_readability: true,
          });
          return { url, content: page.data.content };
        }),
      );
    }

    خروجی نمونه

    [
      {
        "url": "https://example.com/reference",
        "content": "# Reference\n\nExtracted page text…"
      }
    ]
  4. ساختار سپس پیش‌نویس

    اول از Model API ساختار بخواهید، سپس مقاله را بر اساس ساختار با نقل‌قول کوتاه و زمان بنویسید.

    article.ts
    const MODEL_API = "https://openapi.felo.ai/api/v1";
    
    type Completion = {
      choices: { message: { content: string } }[];
      usage: { prompt_tokens: number; completion_tokens: number; total_tokens: number };
    };
    
    async function complete(model: string, prompt: string): Promise<Completion> {
      const res = await fetch(`${MODEL_API}/chat/completions`, {
        method: "POST",
        headers,
        body: JSON.stringify({ model, messages: [{ role: "user", content: prompt }] }),
      });
      if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);
      return res.json() as Promise<Completion>;
    }
    
    export async function draftArticle(title: string, transcript: string) {
      const outline = await complete(
        "claude-haiku-5-5",
        "Outline a short article from this transcript. Return only headings.\n\n" + transcript,
      );
      const article = await complete(
        "claude-sonnet-5-5",
        `Write the article "${title}" from the transcript. Follow the outline and keep [mm:ss] on direct quotes.\n\nOutline:\n${outline.choices[0].message.content}\n\nTranscript:\n${transcript}`,
      );
      return {
        outline: outline.choices[0].message.content,
        article: article.choices[0].message.content,
        usage: article.usage,
      };
    }

    خروجی نمونه

    {
      "outline": "1. The problem\n2. What changed\n3. What we learned",
      "article": "## The problem\n\nWhen we…",
      "usage": { "prompt_tokens": 4120, "completion_tokens": 640, "total_tokens": 4760 }
    }
  5. برای بررسی در LiveDoc بگذارید

    پیش‌نویس و نقل‌قول‌ها را در LiveDoc ذخیره کنید و برای اصلاح و تأیید به ویراستار بدهید.

    article.ts
    type LiveDocData = { data: { short_id: string } };
    type ResourceData = { data: { id: string } };
    
    export async function saveDraft(
      title: string,
      result: { outline: string; article: string },
    ) {
      const doc = await felo<LiveDocData>("/v2/livedocs", {
        name: `Article draft: ${title}`,
        description: "Draft generated from a video transcript",
      });
    
      await felo<ResourceData>(`/v2/livedocs/${doc.data.short_id}/resources/doc`, {
        title: "Draft",
        content: result.article,
      });
    
      await felo<ResourceData>(`/v2/livedocs/${doc.data.short_id}/resources/doc`, {
        title: "Outline",
        content: result.outline,
      });
    
      return doc.data.short_id;
    }

    خروجی نمونه

    { "short_id": "PvyKouzJirXjFdst4uKRK3" }

چه چیزی دارد

  • متن YouTube با زمان
  • صفحات نقل‌شده در ویدیو به‌صورت Markdown
  • ساختار و پیش‌نویس از Model API
  • LiveDoc با پیش‌نویس برای بررسی

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

  • بدون کپی کل متن؛ فقط نقل‌قول کوتاه و بازنویسی
  • ویدیو باید زیرنویس داشته باشد
  • پیش از انتشار حق و حد نقل‌قول را بررسی کنید
  • مدل ساختار و پیش‌نویس می‌سازد؛ تصمیم نهایی با ویراستار
  • خودکار منتشر یا ترجمه نمی‌کند

پرسش‌ها

آیا ویدیو باید زیرنویس داشته باشد؟

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

پادکست به مقاله تبدیل می‌شود؟

این گردش‌کار برای YouTube است. برای پادکست ابتدا متن تهیه کنید و همان قواعد نوشتن را به کار ببرید.

به زبان دیگر می‌توان نوشت؟

بله. زبان هدف را بگویید؛ نقل‌قول‌ها به زبان اصلی با ترجمه در صورت نیاز می‌مانند.

مقاله را چه کسی می‌نویسد؟

عامل AI که پرامپت را در آن می‌چسبانید پیش‌نویس را می‌نویسد؛ Felo متن، صفحات و فضای بررسی می‌دهد.

کل متن را می‌توان بازنشر کرد؟

نه. گردش‌کار مقاله جدید با نقل‌قول‌های کوتاه می‌سازد و کل متن را کپی نمی‌کند.

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

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

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

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

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

فقط نقل‌قول‌های زمان‌دار

مقاله ننویسید؛ فهرست نقل‌قول قابل بررسی برای استفاده مجدد بدهید.

اول نسخه خبرنامه

مقاله را برای خبرنامه کوتاه‌تر و گفت‌وگویی‌تر کنید.

یک کانال را دسته‌ای پردازش کنید

مراحل را برای هر ویدیو تکرار کنید و LiveDocهای جداگانه ذخیره کنید.

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