Support
Beantwoord supportvragen vanuit je eigen documentatie
Maak een LiveDoc, laad het helpcenter en de interne runbook, haal de passages op die het ticket beantwoorden en laat het model alleen uit dat bewijs antwoorden.
Prompt kopiëren
Vervang de velden tussen blokhaken en plak in Claude Code, Codex of een AI met terminaltoegang. Die installeert de Felo-skill, vraagt voor credits en voert de workflow uit.
Beantwoord deze supportvraag alleen met onze documentatie: [klantvraag]. Kennisbank: [helpdesk-URL of LiveDoc short_id]. Escalatieroute: [verantwoordelijke of wachtrij]. Beschikbare klantcontext: [plan, regio, product] (vraag nooit om wachtwoorden of betaalgegevens). Lever: 1. Een direct antwoord in twee tot vier zinnen. 2. De ondersteunende documentatiepassages, met de resourcetitel. 3. De volgende stap voor de klant. 4. Een interne notitie: gebruikte resources en relevantiescores. Regels: - Antwoord alleen uit de opgehaalde passages. Bij geen resultaat of lage relevantie escaleer je; raad nooit. - Verzin geen beleid, terugbetalingen, prijzen of accountacties. - Neem geen privégegevens van klanten, inloggegevens of betaalinformatie op. - Vraag het voordat je credits uitgeeft aan ingestie of retrieval. - Stuur het antwoord niet naar de klant; geef het aan mij terug voor beoordeling.
De kopie bevat ook de installatiestappen en veiligheidsregels.
Wat je krijgt
Voorbeelduitvoer van een run. Geen live generatie.
Antwoord: Je plan vernieuwt op de eerste van de maand. Een mislukte kaart wordt drie dagen opnieuw geprobeerd voordat de seat wordt gepauzeerd.
Bronnen: “veelgestelde vragen over facturatie” - https://example.com/help/billing
Als dit niet gedekt is: escaleer naar de facturatiewachtrij met het factuur-ID.
De exacte aanroepen
Voor ontwikkelaars: dezelfde workflow als kopieerbare code in uitvoeringsvolgorde.
Exacte API-aanroepen tonen
Maak de kennisbank
Maak de basis via de LiveDoc API en bewaar de 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 configVoorbeelduitvoer
{ "short_id": "PvyKouzJirXjFdst4uKRK3", "name": "Support knowledge base", "description": "Help center, policy pages, and internal runbooks" }Laad het openbare helpcenter
Voeg de helpcenter-URL als resource toe aan de 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");Voorbeelduitvoer
[ { "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" } ]Voeg interne documentatie toe
Voeg de interne runbook als document toe.
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 updatesHaal bewijs voor de vraag op
De semantische zoekopdracht levert de relevantste passages en scores.
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);Voorbeelduitvoer
[ { "id": "res_005", "title": "Refund policy", "content": "Refunds are available within 30 days of purchase…", "score": 0.92 } ]Antwoord alleen uit bewijs
Laat het model alleen de opgehaalde passages gebruiken en escaleer zonder treffer.
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);Voorbeelduitvoer
"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."
Wat inbegrepen is
- LiveDoc uit helpcenter en interne runbook
- Semantische zoekopdracht met passages en titels
- Antwoord met citeerbare bronnen
- Duidelijke escalatie bij ontbrekende dekking
Wat het niet doet
- Antwoordt alleen uit je documentatie en doorzoekt niet het open web
- Voert geen accountacties, terugbetalingen of planwijzigingen uit
- Geen privéklandata of inloggegevens in de kennisbank
- Verouderde documentatie geeft verouderde antwoorden; houd de basis actueel
- Alleen een conceptantwoord, geen verzending naar de klant
Vragen
Waar komt het antwoord vandaan?
Alleen uit je LiveDoc: helpcenterpagina’s en runbook. De zoekopdracht levert passages en de agent schrijft het antwoord daaruit.
Wat als de documentatie niet dekt?
Escalatie. Geen treffers of lage relevantie gelden als niet gedekt, niet als toestemming om te gissen.
Hoe houd ik de kennisbank actueel?
Voeg bij beleidswijzigingen URL’s opnieuw toe en werk documenten bij; de workflow bevat update- en auditcommando’s.
Kan ik het in de ticketwachtrij gebruiken?
Ja, als conceptstap. Houd menselijke goedkeuring voor verzending naar de klant.
Kan het accountspecifieke vragen behandelen?
Niet met documentatie alleen. Accountdata staat in jouw systeem; geef alleen de nodige veilige context mee, nooit inloggegevens.
Wat kost een run?
Ingestie en zoekopdracht worden op gebruik gefactureerd; actuele tarieven staan op de prijspagina en de prompt vraagt goedkeuring voor uitgaven.
Gerelateerde workflows
Maak van één vraag een onderbouwde researchbrief
Vraag het web, bewaar de pagina’s achter het antwoord als Markdown, voeg toe wat practitioners op X zeggen en houd het bewijs in een LiveDoc dat je later opnieuw kunt doorzoeken.
Workflow openenContentPubliceer een dagelijkse AI-nieuwsdigest die je team echt leest
Haal een onderbouwde nieuwssamenvatting, voeg discussies van practitioners op X toe, neem één videotranscript op, stel de editie samen in Markdown en archiveer in een LiveDoc.
Workflow openenKantoorMaak van een onderzoekspagina een presentatie
Extraheer de pagina, bewaar hem als LiveDoc-context, laat de PPT Task API het deck bouwen en vraag door tot de voltooide link.
Workflow openenMaak het van jou
Hetzelfde recept, aangepast aan hoe je echt oplevert.
Alleen één productlijn
Beperk tot één product voor een schonere basis.
Voeg ticketclassificatie toe
Classificeer eerst het vraagtype en zoek daarna de juiste documentatie.
Periodieke audit
Controleer maandelijks gebroken links en oude beleidsregels.
Verder
De referentiepagina’s achter dit recept en de volgende stappen.