Felo API PlatformFelo API Platform

Podpora

Odpovídejte na otázky podpory z vlastní dokumentace

Vytvořte LiveDoc, nahrajte help centrum a interní runbook, získejte pasáže odpovídající ticketu a nechte model odpovídat jen z těch důkazů.

Čas20 minutÚroveňZákladníAktualizováno2026-10-29
Pro kohoTýmy podporyÚspěch zákazníkaTvůrci helpdesku

Zkopírovat prompt

Nahraďte pole v hranatých závorkách a vložte do Claude Code, Codex nebo AI s přístupem k terminálu. Nainstaluje skill Felo, zeptá se před utracením kreditů a spustí workflow.

Odpověz na tento dotaz podpory pouze z naší dokumentace: [dotaz zákazníka].

Znalostní báze: [URL help centra nebo LiveDoc short_id]. Eskalační cesta: [odpovědná osoba nebo fronta].
Dostupný kontext zákazníka: [plán, region, produkt] (nikdy nežádej heslo ani platební údaje).

Vytvoř:
1. Přímou odpověď ve dvou až čtyřech větách.
2. Podpůrné pasáže dokumentace s názvem zdroje.
3. Další krok pro zákazníka.
4. Interní poznámku: použité zdroje a skóre relevance.

Pravidla:
- Odpovídej pouze z načtených pasáží. Bez výsledku nebo s nízkou relevancí eskaluj; nikdy nehádej.
- Nevymýšlej zásady, vratky, ceny ani akce na účtu.
- Nezaváděj soukromá data zákazníka, přihlašovací údaje ani platební informace.
- Ptej se před utracením kreditů za ingest nebo retrieval.
- Neodesílej odpověď zákazníkovi; vrať ji mně k revizi.

Kopie obsahuje i instalační kroky a bezpečnostní pravidla.

Co dostanete

Ukázkový výstup jednoho běhu. Ne živé generování.

Ukázková odpověď (výňatek)

Odpověď: Váš plán se obnovuje prvního dne v měsíci. Neúspěšná karta se opakuje tři dny, pak se místo pozastaví.

Zdroje: „časté dotazy k fakturaci” - https://example.com/help/billing

Pokud to nepokrývá: eskalujte do fakturační fronty s ID faktury.

Přesná volání

Pro vývojáře: stejný workflow jako kód, v pořadí provádění.

Zobrazit skutečná API volání
  1. Vytvořte znalostní bázi

    Vytvořte bázi přes LiveDoc API a uložte short_id.

    support.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 LiveDocData = { data: { short_id: string } };
    
    const kb = await felo<LiveDocData>("/v2/livedocs", {
      name: "Support knowledge base",
      description: "Help center, policy pages, and internal runbooks",
    });
    
    const kbId = kb.data.short_id; // save this in your config

    Ukázkový výstup

    {
      "short_id": "PvyKouzJirXjFdst4uKRK3",
      "name": "Support knowledge base",
      "description": "Help center, policy pages, and internal runbooks"
    }
  2. Nahrajte veřejné help centrum

    Přidejte URL help centra jako zdroj LiveDoc.

    support.ts
    type UrlResult = {
      data: {
        url: string;
        status: string;
        fail_reason: string | null;
        resource_id: string | null;
      }[];
    };
    
    const added = await felo<UrlResult>(
      `/v2/livedocs/${kbId}/resources/urls`,
      {
        urls: [
          "https://example.com/help/getting-started",
          { url: "https://example.com/help/billing", title: "Billing FAQ" },
        ],
      },
    );
    
    const failed = added.data.filter((item) => item.status === "failed");

    Ukázkový výstup

    [
      { "url": "https://example.com/help/getting-started", "status": "success", "resource_id": "res_003" },
      { "url": "https://example.com/help/billing", "status": "existed", "resource_id": "res_004" }
    ]
  3. Přidejte interní dokumentaci

    Přidejte interní runbook jako dokument.

    support.ts
    type ResourceData = { data: { id: string } };
    
    const runbook = `# Refund policy
    
    Refunds are available within 30 days of purchase. Requests after 30 days
    need a manual review by the billing team.
    `;
    
    const policy = await felo<ResourceData>(
      `/v2/livedocs/${kbId}/resources/doc`,
      { title: "Refund policy", content: runbook },
    );
    
    console.log(policy.data.id); // use this for updates
  4. Získejte důkazy k otázce

    Sémantické hledání vrací nejrelevantnější pasáže a skóre.

    support.ts
    type Hit = { id: string; title: string; content: string; score: number };
    
    async function findEvidence(question: string) {
      const res = await felo<{ data: Hit[] }>(
        `/v2/livedocs/${kbId}/resources/retrieve`,
        { query: question },
      );
      return res.data.filter((hit) => hit.score >= 0.7).slice(0, 4);
    }
    
    const question = "Can I get a refund after 45 days?";
    const hits = await findEvidence(question);

    Ukázkový výstup

    [
      {
        "id": "res_005",
        "title": "Refund policy",
        "content": "Refunds are available within 30 days of purchase…",
        "score": 0.92
      }
    ]
  5. Odpovídejte jen z důkazů

    Nechte model použít jen získané pasáže a bez výsledků eskalujte.

    support.ts
    type Completion = {
      choices: { message: { content: string | null } }[];
      usage: { prompt_tokens: number; completion_tokens: number; total_tokens: number };
    };
    
    const context = hits
      .map((hit) => `### ${hit.title}\n${hit.content}`)
      .join("\n\n");
    
    const completion = await felo<Completion>("/api/v1/chat/completions", {
      model: "anthropic/claude-haiku-5.5",
      messages: [
        {
          role: "system",
          content:
            "Answer only from the context. If the context does not cover the question, say so and hand the ticket to a human.",
        },
        {
          role: "user",
          content: `Context:\n${context}\n\nQuestion: ${question}`,
        },
      ],
    });
    
    console.log(completion.choices[0].message.content);
    console.log(completion.usage.total_tokens);

    Ukázkový výstup

    "No. The Refund policy says refunds are available within 30 days of purchase, so a request at 45 days needs a manual review by the billing team."

Co obsahuje

  • LiveDoc s help centrem a interním runbookem
  • Sémantické hledání s pasážemi a tituly
  • Odpověď s citovatelnými zdroji
  • Jasná eskalace při chybějícím pokrytí

Co nedělá

  • Odpovídá jen z vaší dokumentace a neprochází otevřený web
  • Nevykonává akce účtu, vrácení peněz ani změny plánu
  • Bez privátních dat zákazníků a přihlašovacích údajů v bázi
  • Zastaralá dokumentace dává zastaralé odpovědi; aktualizujte ji
  • Jen návrh odpovědi, ne odeslání zákazníkovi

Otázky

Odkud odpověď?

Jen z vašeho LiveDoc: stránek help centra a runbooku. Hledání vrací pasáže a agent z nich píše.

Když dokumentace nepokrývá?

Eskalace. Žádné výsledky nebo nízká relevance se berou jako nepokryté, ne jako svolení hádat.

Jak udržet bázi aktuální?

Když se změní politika, přidejte znovu URL a aktualizujte dokumenty; workflow obsahuje příkazy aktualizace a auditu.

Lze použít ve frontě ticketů?

Ano, jako krok návrhu. Před odesláním zákazníkovi držte lidské schválení.

Zvládá otázky specifické pro účet?

Jen s dokumentací ne. Data účtu jsou ve vašem systému; předávejte jen potřebný bezpečný kontext, nikdy přihlašovací údaje.

Kolik stojí jeden běh?

Ingesce a hledání se účtují podle užití; aktuální sazby na stránce cen a prompt žádá schválení před útratou.

Související workflowy

Přizpůsobte

Stejný recept, upravený podle toho, jak skutečně dodáváte.

Jen jedna produktová řada

Omezte na jeden produkt, aby báze byla čistší.

Přidejte klasifikaci ticketů

Nejdřív klasifikujte typ otázky, pak hledejte správnou dokumentaci.

Pravidelný audit

Každý měsíc zkontrolujte rozbité odkazy a staré politiky.

Referenční stránky za tímto receptem a další kroky.