Dukungan
Triase tiket dukungan menjadi draf jawaban berdasar
Masker tiket, klasifikasikan niat dan prioritas dengan Chat, ambil bagian yang menjawab dari dokumentasi, periksa percakapan insiden publik, dan tinggalkan draf terarah untuk persetujuan manusia.
Salin prompt
Ganti kolom dalam kurung siku lalu tempel ke Claude Code, Codex, atau AI dengan akses terminal. Ia memasang skill Felo, bertanya sebelum memakai kredit, dan menjalankan alur kerja.
Triage tiket dukungan ini dan tulis draf balasan untuk ditinjau manusia: [tempel tiket setelah menghapus nama, email, ID akun, data pembayaran, dan informasi pengenal lain]. Area produk: [produk]. Paket atau wilayah: [hanya jika perlu untuk jawaban]. Sumber dokumentasi: [URL pusat bantuan atau LiveDoc short_id]. Jalur persetujuan: [siapa yang meninjau]. Antrean eskalasi: [tim atau kanal]. Hasilkan: 1. Niat: satu kategori dan satu kalimat alasan. 2. Prioritas: mendesak / normal / rendah, dengan aturan yang diterapkan. 3. Bukti: bagian dokumentasi yang menjawab tiket, dengan judul dan relevansi. 4. Pemeriksaan insiden: apakah laporan publik menunjukkan gangguan luas? Tautan dan tanggal, atau “tidak ada sinyal publik”. 5. Routing: draf, minta informasi tambahan, atau eskalasi — dan alasannya. 6. Draf balasan: dua sampai empat kalimat, hanya berdasarkan bukti, sebutkan sumber yang dipakai. Aturan: - Jangan memasukkan nama, email, nomor pesanan, token, atau data pembayaran ke panggilan API atau output. Kerjakan hanya tiket yang sudah disamarkan. - Jawab hanya dari dokumentasi yang diambil. Tanpa bukti, eskalasi alih-alih menebak. - Jangan menjanjikan pengembalian dana, diskon, tenggat, atau perubahan akun; teruskan kasus itu ke eskalasi. - Rumor gangguan publik adalah sinyal, bukan bukti. Kutip unggahan dan tanggal. - Sebelum memakai kredit, tampilkan panggilan yang direncanakan dan tunggu persetujuan saya. - Jangan mengirim balasan, memperbarui tiket, atau melakukan tindakan akun. Kembalikan draf untuk ditinjau. - Tulis hasilnya ke ./support-triage.md dan ringkas di chat.
Salinan juga menyertakan langkah pemasangan dan aturan keamanan.
Yang Anda dapatkan
Contoh keluaran dari satu eksekusi. Bukan pembuatan langsung.
Triase — tiket contoh
Niat
Pertanyaan penagihan / perpanjangan. Pelanggan bertanya mengapa paket diperpanjang lagi.
Prioritas
Normal. Ini pertanyaan penagihan, bukan gangguan, dan pelanggan tidak terblokir.
Bukti
- “pertanyaan umum penagihan” — waktu perpanjangan dan retry kartu gagal. Relevansi: tinggi.
- “Perubahan paket” — downgrade antar perpanjangan. Relevansi: sedang.
Pemeriksaan insiden
Tidak ada laporan publik dalam 48 jam terakhir.
Rute
Draf. Dokumentasi mencakup pertanyaan.
Draf balasan
Halo — paket Anda diperpanjang pada tanggal 1 setiap bulan, dan kartu yang gagal dicoba lagi selama tiga hari sebelum kursi dijeda. Anda dapat mengganti kartu di pengaturan Penagihan; pertanyaan umum penagihan memiliki langkahnya. Jika perlu memindahkan tanggal perpanjangan, balas dan kami akan meneruskannya ke tim penagihan.
Catatan peninjau
Setujui, sunting, atau eskalasi ke antrean penagihan.
Panggilan persisnya
Untuk developer: alur kerja yang sama sebagai kode, sesuai urutan eksekusi.
Tampilkan panggilan API asli
Masker dan klasifikasikan
Hapus email, telepon, dan nomor pesanan lewat kode, lalu gunakan Chat untuk niat dan prioritas.
triage.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>; } const redact = (text: string) => text .replace(/[\w.+-]+@[\w.-]+\.\w+/g, "[email]") .replace(/\b(?:acct|account|order|invoice)[-_ ]?\w+\b/gi, "[id]") .replace(/\b(?:\d[ -]?){13,19}\b/g, "[card]"); type Ticket = { id: string; product: string; subject: string; body: string; plan?: string; sensitive?: boolean; }; const ticket: Ticket = { id: "T-1042", product: "Acme Workspace", subject: "Why did my plan renew?", body: "I was charged again and cannot find the renewal date on my account.", plan: "team", }; const summary = redact(`${ticket.subject}\n\n${ticket.body}`).slice(0, 1500); type ChatData = { data: { answer: string; resources: { link: string; title: string; snippet: string }[]; }; }; const triage = await felo<ChatData>("/v2/chat", { query: `Classify this support question by intent and priority, and list what is missing:\n\n${summary}`, }); console.log(triage.data.answer);Contoh keluaran
{ "answer": "Intent: billing / renewal question. Priority: normal. Missing: the renewal date the customer expects.", "resources": [ { "link": "https://example.com/billing-faq", "title": "Billing FAQ", "snippet": "…" } ] }Ambil bukti dokumentasi
Cari bagian relevan di LiveDoc dukungan, simpan judul dan skor.
triage.ts type Hit = { title: string; content: string; score: number }; const KB = process.env.SUPPORT_LIVEDOC_ID!; // the help-center LiveDoc short_id const retrieved = await felo<{ data: Hit[] }>( `/v2/livedocs/${KB}/resources/retrieve`, { query: summary }, ); const hits = retrieved.data.filter((hit) => hit.score >= 0.7).slice(0, 4); if (hits.length === 0) { console.log("No grounded evidence: escalate instead of drafting"); }Contoh keluaran
[ { "title": "Billing FAQ", "content": "Your plan renews on the first of the month; a failed card retries for three days…", "score": 0.91 } ]Periksa insiden publik
Cari di X produk dan kata seperti “gangguan/offline” dalam 48 jam, hanya sebagai sinyal publik.
triage.ts type XData = { data: { tweets: { content: string; author: { username: string }; created_at: string; url: string; }[]; }; }; const since = Math.floor((Date.now() - 48 * 60 * 60 * 1000) / 1000); const incident = await felo<XData>("/v2/x/tweet/search", { query: `"${ticket.product}" (outage OR "not working" OR error)`, limit: 20, since_time: since, }); const reports = incident.data.tweets.map((post) => ({ text: post.content, handle: post.author.username, at: post.created_at.slice(0, 10), link: post.url, }));Contoh keluaran
[ { "text": "Workspace login is failing for my whole team.", "handle": "example_user", "at": "2026-10-30", "link": "https://x.com/example_user/status/..." } ]Tentukan rute dan susun jawaban
Aturan menentukan antrean; gabungkan bukti, langkah berikutnya, dan draf.
triage.ts type Route = "draft" | "ask-customer" | "escalate"; function decideRoute(): { route: Route; reason: string } { if (hits.length === 0) { return { route: "escalate", reason: "no grounded evidence in the knowledge base" }; } if (ticket.sensitive) { return { route: "escalate", reason: "an account or billing action is requested" }; } if (reports.length >= 3) { return { route: "escalate", reason: "public reports suggest a wider issue" }; } if (!ticket.plan) { return { route: "ask-customer", reason: "the plan is needed to answer the question" }; } return { route: "draft", reason: "the documentation covers the question" }; } const decision = decideRoute(); const packet = [ `# Triage — ${ticket.id}`, "", `Route: ${decision.route} (${decision.reason})`, "", "## Intent and priority", triage.data.answer, "", "## Evidence", ...hits.map((hit) => `- ${hit.title} (score ${hit.score})`), "", "## Public signal", ...(reports.length ? reports.map((report) => `- @${report.handle} (${report.at}): ${report.text} — ${report.link}`) : ["No public reports in the last 48 hours."]), "", "## Reply draft", "[Written by the host Agent from the evidence above — human review required]", ].join("\n"); console.log(packet);Contoh keluaran
# Triage — T-1042 Route: draft (the documentation covers the question) ## Intent and priority Intent: billing / renewal question. Priority: normal. ## Evidence - Billing FAQ (score 0.91)
Catat triase
Tulis hasilnya di LiveDoc untuk tinjauan dan audit.
triage.ts type LiveDocData = { data: { short_id: string } }; const log = await felo<LiveDocData>("/v2/livedocs", { name: "Support triage log", description: "One document resource per triaged ticket", }); await felo(`/v2/livedocs/${log.data.short_id}/resources/doc`, { title: `Triage — ${ticket.id}`, content: packet, }); console.log(log.data.short_id); // reuse it for the next ticketContoh keluaran
{ "short_id": "PvyKouzJirXjFdst4uKRK3" }
Termasuk
- Niat dan prioritas setelah masking
- Bukti dokumentasi dengan skor
- Pemeriksaan insiden publik
- Draf jawaban terarah
- LiveDoc berisi catatan triase
Yang tidak dilakukan
- Tidak mengirim jawaban, menutup tiket, atau menjalankan tindakan akun
- Jangan kirim kata sandi, data pembayaran, atau data pelanggan lengkap ke API
- Tanpa hasil dokumentasi, eskalasi wajib
- X adalah sinyal insiden publik, bukan status sistem dukungan
- Aturan prioritas milik Anda; model hanya mengusulkan
Pertanyaan
Data tiket apa yang boleh dikirim?
Hanya konteks perlu setelah masking: produk, deskripsi, paket, dan wilayah. Tanpa kata sandi, pembayaran, alamat lengkap, atau percakapan privat.
Dari mana jawabannya?
Dari bagian yang diambil di LiveDoc dokumentasi. Tanpa hasil, alur eskalasi alih-alih menebak.
Apakah menjawab atau menutup tiket?
Tidak. Hanya membuat draf dan rute; pengiriman dan penutupan oleh orang atau sistem Anda.
Bagaimana prioritas ditentukan?
Oleh aturan Anda; model mengusulkan dan menjelaskan, rute mengonfirmasi prioritas akhir.
Jika dokumentasi tidak mencakup?
Eskalasi ke antrean manusia dengan “belum tercakup” di paket triase.
Berapa biaya satu triase?
Chat, pencarian, dan X Search ditagih sesuai pemakaian; tarif saat ini di halaman harga dan prompt meminta persetujuan sebelum mengeluarkan biaya.
Alur kerja terkait
Jawab pertanyaan dukungan dari dokumentasi Anda sendiri
Buat LiveDoc, muat pusat bantuan dan runbook internal, ambil bagian yang menjawab tiket, dan biarkan model menjawab hanya dari bukti itu.
Buka alur kerjaKontenUbah percakapan sosial menjadi brief mendengarkan mingguan
Cari post X minggu ini tentang merek dan pesaing, tambahkan konteks web bersumber, baca halaman di baliknya, dan arsipkan setiap edisi agar minggu berikutnya mulai dari yang sudah diketahui.
Buka alur kerjaRisetUbah satu pertanyaan menjadi brief riset bersumber
Tanya web, simpan halaman di balik jawaban sebagai Markdown, tambahkan apa yang dikatakan praktisi di X, dan simpan bukti dalam LiveDoc yang bisa ditelusuri lagi.
Buka alur kerjaSesuaikan
Resep yang sama, disesuaikan dengan cara Anda benar-benar mengirim.
Hanya klasifikasi
Tanpa jawaban: hanya niat, prioritas, dan antrean yang disarankan.
Hubungkan ke sistem tiket
Dengan webhook Anda, tulis paket ke tiket tanpa pengiriman otomatis.
Lanjut ke basis pengetahuan
Saat ada hasil dokumentasi, lanjut ke alur basis pengetahuan untuk jawaban lengkap.
Lanjut
Halaman referensi di balik resep ini dan langkah berikutnya.