Felo API PlatformFelo API Platform

Soporte

Responde preguntas de soporte desde tu propia documentación

Crea un LiveDoc, carga el centro de ayuda y el runbook interno, recupera los pasajes que responden al ticket y deja que el modelo responda solo con esas evidencias.

Tiempo20 minutosNivelInicialActualizado2026-10-29
Para quiénEquipos de soporteÉxito del clienteCreadores de helpdesk

Copiar el prompt

Sustituye los campos entre corchetes y pégalo en Claude Code, Codex o cualquier IA con acceso a terminal. Instala el skill de Felo, pregunta antes de gastar créditos y ejecuta el flujo.

Responde a esta pregunta de soporte solo con nuestra documentación: [pregunta del cliente].

Base de conocimiento: [URL del centro de ayuda o LiveDoc short_id]. Ruta de escalado: [responsable o cola].
Contexto del cliente disponible: [plan, región, producto] (nunca pidas contraseñas ni datos de pago).

Genera:
1. Una respuesta directa de dos a cuatro frases.
2. Los pasajes de documentación que la sustentan, con el título del recurso.
3. El siguiente paso para el cliente.
4. Una nota interna: recursos usados y puntuaciones de relevancia.

Reglas:
- Responde solo con los pasajes recuperados. Si no hay resultados o la relevancia es baja, escala; nunca adivines.
- No inventes políticas, reembolsos, precios ni acciones sobre la cuenta.
- No incorpores datos privados del cliente, credenciales ni información de pago.
- Pregunta antes de gastar créditos en ingesta o recuperación.
- No envíes la respuesta al cliente; devuélvela para mi revisión.

La copia también incluye los pasos de instalación y las reglas de seguridad.

Lo que obtienes

Salida de ejemplo de una ejecución. No es generación en vivo.

Ejemplo de respuesta (extracto)

Respuesta: Tu plan se renueva el día 1 de cada mes. Si una tarjeta falla, se reintenta durante tres días antes de pausar el asiento.

Fuentes: «preguntas frecuentes de facturación» - https://example.com/help/billing

Si esto no lo cubre: escala a la cola de facturación con el ID de factura.

Las llamadas exactas

Para desarrolladores: el mismo flujo como código, en orden de ejecución.

Mostrar las llamadas reales a la API
  1. Crea la base de conocimiento

    Crea la base con LiveDoc API y guarda el 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

    Salida de ejemplo

    {
      "short_id": "PvyKouzJirXjFdst4uKRK3",
      "name": "Support knowledge base",
      "description": "Help center, policy pages, and internal runbooks"
    }
  2. Carga el centro de ayuda público

    Añade la URL del centro como recurso 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");

    Salida de ejemplo

    [
      { "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. Añade la documentación interna

    Añade el 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. Recupera evidencias de la pregunta

    La búsqueda semántica devuelve los pasajes y puntuaciones más relevantes.

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

    Salida de ejemplo

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

    Haz que el modelo use solo los pasajes recuperados y escale sin resultados.

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

    Salida de ejemplo

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

Qué incluye

  • LiveDoc con centro de ayuda y runbook interno
  • Búsqueda semántica con pasajes y títulos
  • Respuesta con fuentes citables
  • Escalado claro cuando falta cobertura

Qué no hace

  • Responde solo desde tu documentación y no navega la web abierta
  • No ejecuta acciones de cuenta, reembolsos ni cambios de plan
  • No incluyas datos privados de clientes ni credenciales
  • La documentación obsoleta produce respuestas obsoletas; actualízala
  • Solo redacta la respuesta, no la envía al cliente

Preguntas

¿De dónde viene la respuesta?

Solo de tu LiveDoc: páginas del centro de ayuda y runbook. La búsqueda devuelve pasajes y el agent escribe desde ellos.

¿Y si la documentación no cubre?

Escalado. Sin resultados o relevancia baja se trata como no cubierto, no como permiso para adivinar.

¿Cómo mantener la base al día?

Al cambiar una política, vuelve a añadir URLs y actualiza documentos; el flujo incluye comandos de actualización y auditoría.

¿Puedo usarlo en la cola de tickets?

Sí, como paso de borrador. Mantén aprobación humana antes de enviar al cliente.

¿Gestiona preguntas de cuenta?

Solo con documentación no. Los datos de cuenta están en tu sistema; pasa solo el contexto seguro necesario, nunca credenciales.

¿Cuánto cuesta una ejecución?

Ingesta y búsqueda se facturan por uso; las tarifas están en la página de precios y el prompt pide aprobación antes de gastar.

Flujos relacionados

Hazlo tuyo

La misma receta, adaptada a cómo entregas de verdad.

Solo una línea de producto

Restringe a un producto para una base más limpia.

Añade clasificación de tickets

Clasifica el tipo de pregunta antes de buscar la documentación.

Auditoría periódica

Revisa cada mes enlaces rotos y políticas antiguas.

Las páginas de referencia detrás de esta receta y los siguientes pasos.