Felo API PlatformFelo API Platform

オフィス

リサーチページをスライド資料に変える

ページを抽出し、LiveDoc の文脈として保存し、PPT Task API に deck を作らせ、完成したリンクが出るまでポーリングします。

所要時間15 分レベル初級更新日2026-10-29
対象コンサルタント営業・マーケティング社内ツール

プロンプトをコピー

角括弧の項目を置き換えて、Claude Code、Codex、ターミナルにアクセスできる AI に貼り付けてください。Felo スキルをインストールし、クレジットを使う前に確認し、ワークフローを実行します。

このソースをスライド資料にしてください: [公開 URL または PDF パス]。

読者: [誰が見るか]。枚数: [6〜10枚]。言語: [言語]。テーマ: [テーマ名または「default」]。

公開ページ(またはアップロードファイル)に Web Fetch を使い、ソースを LiveDoc コンテキストとして保存し、PPT タスクを作成し、デッキができるまでポーリングしてください。

以下を作成してください。
1. 1スライド1行のアウトライン。
2. 生成されたデッキのリンク。
3. コンテキストに使った LiveDoc のリンク。

ルール:
- ソースにない事実を捏造しないでください。ギャップは「ソースに記載なし」と明記してください。
- PPT タスクはクレジットを消費するため、送信前に確認してください。
- ソース URL、アウトライン、デッキリンクを一緒に保ってください。
- ワークスペース外にデッキを公開・共有しないでください。
- アウトラインを ./deck-outline.md に書き、チャットで要約してください。

コピー内容にはインストール手順と安全ルールも含まれます。

完成するもの

実行時の出力例です。リアルタイム生成ではありません。

デッキ構成の例(抜粋)

ソース -> デッキ構成

  1. このレポートが重要な理由
  2. 今四半期に変わったこと
  3. 3つの顧客セグメント
  4. 証拠が薄いところ
  5. 次に試すこと

デッキ: https://felo.ai/slides/... コンテキスト: https://felo.ai/livedoc/...

実際の呼び出し

開発者向け:同じワークフローを実行順に並べたコピー可能なコード。

実際の API 呼び出しを表示
  1. ソースページを抽出する

    Web Fetch で公開ページを Markdown にし、見出しと本文を残します。

    deck.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 ExtractData = { data: { content: string } };
    
    const page = await felo<ExtractData>("/v2/web/extract", {
      url: "https://example.com/research",
      output_format: "markdown",
      with_readability: true,
    });
  2. LiveDoc の文脈として保存する

    LiveDoc を作成し、ソースをドキュメントリソースとして追加し、short_id を取得します。

    deck.ts
    type LiveDocData = { data: { short_id: string } };
    type ResourceData = { data: { id: string } };
    
    const doc = await felo<LiveDocData>("/v2/livedocs", {
      name: "Quarterly research deck",
      description: "Source material for the next deck",
    });
    
    const resource = await felo<ResourceData>(
      `/v2/livedocs/${doc.data.short_id}/resources/doc`,
      {
        title: "Source page",
        content: page.data.content,
      },
    );
  3. スライドタスクを送信する

    PPT Task API にページ内容と LiveDoc short_id を渡し、task_id を取得します。

    deck.ts
    type PptTaskData = {
      data: { task_id: string; livedoc_short_id: string };
    };
    
    const task = await felo<PptTaskData>("/v2/ppts", {
      query: "Six slides for a product review: findings, evidence, next steps",
      livedoc_short_id: doc.data.short_id,
    });
    
    console.log(task.data.task_id);

    出力例

    {
      "data": {
        "livedoc_short_id": "PvyKouzJirXjFdst4uKRK3",
        "ppt_business_id": "BfLPuQKmChk9SPmyQawxgr",
        "task_id": "019cad6d-e874-55ef-d577-686344b5a7e9"
      }
    }
  4. 完成までポーリングする

    タスク状態を照会し、完成したらスライドリンクを読みます。

    deck.ts
    type TaskState = {
      data: { task_status: string; ppt_url?: string; live_doc_url?: string };
    };
    
    async function waitForDeck(taskId: string) {
      for (let attempt = 0; attempt < 40; attempt++) {
        const state = await felo<TaskState>(`/v2/tasks/${taskId}/historical`);
        if (state.data.task_status === "COMPLETED") return state.data;
        if (["FAILED", "EXPIRED", "CANCELED"].includes(state.data.task_status)) {
          throw new Error(`Deck task ${state.data.task_status}`);
        }
        await new Promise((resolve) => setTimeout(resolve, 3000));
      }
      throw new Error("Deck task timed out");
    }
    
    const result = await waitForDeck(task.data.task_id);
    console.log(result.ppt_url);

    出力例

    {
      "task_status": "COMPLETED",
      "ppt_url": "https://felo.ai/slides/oM8A9iJHg8dT4ZKgHThQTx",
      "live_doc_url": "https://felo.ai/livedoc/oM8A9iJHg8dT4ZKgHThQTx"
    }

含まれるもの

  • ソースページのきれいな Markdown 抽出
  • 再利用可能な文脈としての LiveDoc
  • 完成リンクを返す非同期 PPT タスク
  • 共有前に確認できるスライド構成

やらないこと

  • ソースは公開ページかアップロード済みファイルのみ。ログイン限定ページは失敗することがある
  • 生成スライドはソースに沿い、ブランドシステム全体はカバーしない
  • 1回で1 deck。複数はループが必要
  • 既存 deck の編集や視覚的な完全一致は保証しない
  • deck の公開や共有はしない

よくある質問

URL の代わりに PDF を使えますか?

はい。PPT タスクを multipart form data に変えてファイルを送ると、プラットフォームが LiveDoc リソースとして保存し、deck を作成します。

テーマを選べますか?

はい。先にテーマ一覧を取得し、タスク作成時にテーマ id を渡します。

deck はどれくらいかかりますか?

非同期タスクです。タスク履歴を完成までポーリングします。長い deck は短い deck より時間がかかります。

既存の deck を編集しますか?

いいえ。ソースから新しい deck を作ります。既存 deck の編集は別のワークフローです。

deck 1つの費用は?

スライド生成は従量制クレジットです。現在の料金は料金ページにあり、プロンプトは使う前に確認を求めます。

ソースは再利用できますか?

はい。LiveDoc がソースを保存し、後続の deck や mindmap でその short_id を再利用できます。

関連ワークフロー

自分の形に変える

同じレシピを、実際の進め方に合わせて調整します。

PDF ソースに変える

multipart で PDF をアップロードすると、先に LiveDoc リソースとして保存されます。

テーマを指定する

利用可能なテーマを一覧し、タスク作成時にテーマ id を渡します。

次の deck に再利用する

同じ LiveDoc short_id で新しい PPT タスクを作成します。

このレシピの背景にあるリファレンスと、次に見るべきページ。