Felo API PlatformFelo API Platform

Suporte

Responda perguntas de suporte com a sua própria documentação

Crie um LiveDoc, carregue a central de ajuda e o runbook interno, recupere os trechos que respondem ao ticket e deixe o modelo responder apenas com essas evidências.

Tempo20 minutosNívelInicianteAtualizado2026-10-29
Para quemTimes de suporteSucesso do clienteCriadores de helpdesk

Copiar o prompt

Substitua os campos entre colchetes e cole no Claude Code, Codex ou qualquer IA com acesso ao terminal. Ela instala a skill da Felo, pergunta antes de gastar créditos e executa o fluxo.

Responda a esta pergunta de suporte apenas com a nossa documentação: [pergunta do cliente].

Base de conhecimento: [URL do central de ajuda ou LiveDoc short_id]. Caminho de escalonamento: [responsável ou fila].
Contexto do cliente disponível: [plano, região, produto] (nunca peça senha ou dados de pagamento).

Produza:
1. Uma resposta direta em duas a quatro frases.
2. Os trechos de documentação que a sustentam, com o título do recurso.
3. O próximo passo para o cliente.
4. Uma nota interna: recursos usados e pontuações de relevância.

Regras:
- Responda apenas com os trechos recuperados. Sem resultado ou com relevância baixa, escale; nunca adivinhe.
- Não invente política, reembolso, preço ou ação na conta.
- Não traga dados privados do cliente, credenciais ou informações de pagamento.
- Pergunte antes de gastar créditos em ingestão ou recuperação.
- Não envie a resposta ao cliente; devolva para minha revisão.

A cópia também inclui os passos de instalação e as regras de segurança.

O que você recebe

Saída de exemplo de uma execução. Não é geração ao vivo.

Exemplo de resposta (trecho)

Resposta: Seu plano renova no dia 1 de cada mês. Um cartão recusado é tentado por três dias antes de pausar a licença.

Fontes: “perguntas frequentes de cobrança” - https://example.com/help/billing

Se isso não cobrir: escale para a fila de cobrança com o ID da fatura.

As chamadas exatas

Para desenvolvedores: o mesmo fluxo em código, na ordem de execução.

Mostrar as chamadas reais da API
  1. Crie a base de conhecimento

    Crie a base pelo LiveDoc API e salve o 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

    Saída de exemplo

    {
      "short_id": "PvyKouzJirXjFdst4uKRK3",
      "name": "Support knowledge base",
      "description": "Help center, policy pages, and internal runbooks"
    }
  2. Carregue a central de ajuda pública

    Adicione a URL da central como recurso do 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");

    Saída de exemplo

    [
      { "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. Adicione a documentação interna

    Adicione o runbook interno como 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. Recupere as evidências da pergunta

    A busca semântica retorna os trechos mais relevantes e as pontuações.

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

    Saída de exemplo

    [
      {
        "id": "res_005",
        "title": "Refund policy",
        "content": "Refunds are available within 30 days of purchase…",
        "score": 0.92
      }
    ]
  5. Responda apenas com evidências

    Faça o modelo usar apenas os trechos recuperados e escalonar quando não houver resultado.

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

    Saída de exemplo

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

O que está incluído

  • LiveDoc com central de ajuda e runbook interno
  • Busca semântica com trechos e títulos
  • Resposta com fontes citáveis
  • Escalonamento claro quando a documentação não cobre

O que não faz

  • Responde apenas pela sua documentação e não navega na web aberta
  • Não executa ações de conta, reembolsos ou mudança de plano
  • Não inclui dados privados de clientes nem credenciais
  • Documentação desatualizada gera respostas desatualizadas; atualize a base
  • Apenas rascunha a resposta; não envia ao cliente

Perguntas

De onde vem a resposta?

Apenas do seu LiveDoc: páginas da central de ajuda e runbook. A busca retorna trechos e o agent escreve a resposta a partir deles.

E quando a documentação não cobre?

Escalonamento. Sem resultados ou com relevância baixa, o caso é tratado como não coberto, não como permissão para adivinhar.

Como manter a base atualizada?

Ao mudar uma política, adicione URLs de novo e atualize os documentos; o fluxo inclui comandos de atualização e auditoria.

Posso usar na fila de tickets?

Sim, como etapa de rascunho. Mantenha aprovação humana antes de enviar ao cliente.

Ele trata perguntas específicas da conta?

Só com documentação não. Dados de conta ficam no seu sistema; passe apenas o contexto seguro necessário e nunca credenciais.

Quanto custa uma execução?

Ingestão e busca são cobradas por uso; as tarifas atuais estão na página de preços, e o prompt pede aprovação antes de gastar.

Fluxos relacionados

Faça do seu jeito

A mesma receita, adaptada ao seu processo real.

Só uma linha de produto

Restrinja a um produto para a base ficar mais limpa.

Adicione classificação de tickets

Classifique o tipo de pergunta antes de buscar a documentação certa.

Auditoria periódica

Verifique uma vez por mês links quebrados e políticas antigas.

As páginas de referência por trás desta receita e para onde ir depois.