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.
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.
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
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 configSalida de ejemplo
{ "short_id": "PvyKouzJirXjFdst4uKRK3", "name": "Support knowledge base", "description": "Help center, policy pages, and internal runbooks" }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" } ]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 updatesRecupera 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 } ]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
Convierte una pregunta en un brief de investigación con fuentes
Pregunta a la web, guarda las páginas detrás de la respuesta como Markdown, añade lo que dicen los profesionales en X y conserva las evidencias en un LiveDoc que puedes consultar después.
Abrir el flujo de trabajoContenidoPublica un resumen diario de IA que tu equipo realmente lea
Obtén un resumen con fuentes, añade lo que publican los profesionales en X, consigue una transcripción de vídeo, compón la edición en Markdown y archívala en un LiveDoc.
Abrir el flujo de trabajoOficinaConvierte una página de investigación en una presentación
Extrae la página, guárdala como contexto LiveDoc, deja que la API PPT Task construya el deck y consulta hasta obtener el enlace final.
Abrir el flujo de trabajoHazlo 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.
Seguir
Las páginas de referencia detrás de esta receta y los siguientes pasos.