Felo API PlatformFelo API Platform

Supporto

Rispondi alle domande di supporto dalla tua documentazione

Crea un LiveDoc, carica help center e runbook interno, recupera i passaggi che rispondono al ticket e lascia che il modello risponda solo da quelle prove.

Tempo20 minutiLivelloBaseAggiornato2026-10-29
Per chiTeam supportoCustomer successCostruttori helpdesk

Copia il prompt

Sostituisci i campi tra parentesi quadre e incolla in Claude Code, Codex o qualsiasi IA con accesso al terminale. Installa lo skill Felo, chiede prima di spendere crediti ed esegue il workflow.

Rispondi a questa domanda di supporto usando solo la nostra documentazione: [domanda del cliente].

Base di conoscenza: [URL del centro assistenza o LiveDoc short_id]. Percorso di escalation: [responsabile o coda].
Contesto cliente disponibile: [piano, regione, prodotto] (non chiedere mai password o dati di pagamento).

Produci:
1. Una risposta diretta in due-quattro frasi.
2. I passaggi di documentazione che la sostengono, con il titolo della risorsa.
3. Il passo successivo per il cliente.
4. Una nota interna: risorse usate e punteggi di rilevanza.

Regole:
- Rispondi solo dai passaggi recuperati. Se non ci sono risultati o la rilevanza è bassa, escala; non indovinare mai.
- Non inventare politiche, rimborsi, prezzi o azioni sull’account.
- Non inserire dati privati del cliente, credenziali o informazioni di pagamento.
- Chiedi prima di consumare crediti per ingestione o recupero.
- Non inviare la risposta al cliente; restituiscila per la mia revisione.

La copia include anche i passaggi di installazione e le regole di sicurezza.

Cosa ottieni

Output di esempio di un'esecuzione. Non è generazione dal vivo.

Esempio di risposta (estratto)

Risposta: Il tuo piano si rinnova il primo del mese. Una carta rifiutata viene ritentata per tre giorni prima di sospendere la licenza.

Fonti: «domande frequenti sulla fatturazione» - https://example.com/help/billing

Se non è coperto: escala alla coda fatturazione con l’ID della fattura.

Le chiamate esatte

Per gli sviluppatori: lo stesso workflow come codice, nell'ordine di esecuzione.

Mostra le chiamate API reali
  1. Crea la base di conoscenza

    Crea la base con la LiveDoc API e salva lo 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

    Output di esempio

    {
      "short_id": "PvyKouzJirXjFdst4uKRK3",
      "name": "Support knowledge base",
      "description": "Help center, policy pages, and internal runbooks"
    }
  2. Carica l’help center pubblico

    Aggiungi l’URL dell’help center come risorsa 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");

    Output di esempio

    [
      { "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. Aggiungi la documentazione interna

    Aggiungi il runbook interno come documento.

    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. Recupera le prove per la domanda

    La ricerca semantica restituisce i passaggi e i punteggi più rilevanti.

    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);

    Output di esempio

    [
      {
        "id": "res_005",
        "title": "Refund policy",
        "content": "Refunds are available within 30 days of purchase…",
        "score": 0.92
      }
    ]
  5. Rispondi solo con le prove

    Fai usare al modello solo i passaggi recuperati e escala senza risultati.

    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);

    Output di esempio

    "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."

Cosa include

  • LiveDoc con help center e runbook interno
  • Ricerca semantica con passaggi e titoli
  • Risposta con fonti citabili
  • Escalation chiara quando manca copertura

Cosa non fa

  • Risponde solo dalla tua documentazione e non naviga il web aperto
  • Non esegue azioni account, rimborsi o cambi piano
  • Niente dati privati dei clienti o credenziali nella base
  • Documentazione obsoleta produce risposte obsolete; aggiornala
  • Solo bozza della risposta, nessun invio al cliente

Domande

Da dove viene la risposta?

Solo dal tuo LiveDoc: pagine help center e runbook. La ricerca restituisce passaggi e l’agent scrive da lì.

E se la documentazione non copre?

Escalation. Nessun risultato o rilevanza bassa viene trattato come non coperto, non come permesso di indovinare.

Come mantengo aggiornata la base?

Quando cambia una policy, riaggiungi URL e aggiorna i documenti; il workflow include comandi di aggiornamento e audit.

Posso usarlo nella coda ticket?

Sì, come passo di bozza. Mantieni l’approvazione umana prima di inviare al cliente.

Gestisce domande specifiche dell’account?

Non solo con la documentazione. I dati account sono nel tuo sistema; passa solo il contesto sicuro necessario, mai credenziali.

Quanto costa un’esecuzione?

Ingestione e ricerca sono a consumo; le tariffe sono nella pagina prezzi e il prompt chiede approvazione prima di spendere.

Workflow correlati

Adattala a te

La stessa ricetta, adattata a come lavori davvero.

Solo una linea prodotto

Restringi a un prodotto per una base più pulita.

Aggiungi classificazione ticket

Classifica il tipo di domanda prima di cercare la documentazione.

Audit periodico

Controlla ogni mese link rotti e policy vecchie.

Le pagine di riferimento dietro questa ricetta e i prossimi passi.