پشتیبانی
تیکت پشتیبانی را به پیشنویس پاسخ مستند تبدیل کنید
تیکت را ماسک کنید، نیت و اولویت را با Chat طبقهبندی کنید، بخشهای پاسخدهنده از مستندات را بازیابی کنید، گفتوگوهای حادثه عمومی را بررسی کنید و پیشنویس مسیریابیشده برای تأیید انسانی بگذارید.
کپی پرامپت
فیلدهای داخل قلاب را جایگزین کنید و در Claude Code، Codex یا هوش مصنوعی با دسترسی ترمینال بچسبانید. مهارت Felo را نصب میکند، پیش از خرج اعتبار میپرسد و گردشکار را اجرا میکند.
این تیکت پشتیبانی را تریاژ کنید و پیشنویس پاسخ برای بررسی انسانی بنویسید: [تیکت را پس از حذف نام، ایمیل، شناسه حساب، داده پرداخت و هر اطلاعات شناسایی دیگر بچسبانید]. حوزه محصول: [محصول]. طرح یا منطقه: [فقط اگر برای پاسخ لازم است]. منبع مستندات: [URL مرکز راهنما یا LiveDoc short_id]. مسیر تأیید: [چه کسی بررسی میکند]. صف ارجاع: [تیم یا کانال]. خروجی: 1. نیت: یک دسته و یک جمله دلیل. 2. اولویت: فوری / عادی / کم، با قاعده اعمالشده. 3. شواهد: بخشهای مستندات که به تیکت پاسخ میدهد، با عنوان و ارتباط. 4. بررسی حادثه: آیا گزارشهای عمومی به اختلال گسترده اشاره میکنند؟ پیوند و تاریخ، یا «سیگنال عمومی نیست». 5. مسیریابی: پیشنویس، درخواست اطلاعات بیشتر یا ارجاع — و چرا. 6. پیشنویس پاسخ: دو تا چهار جمله، فقط بر پایه شواهد، با نام بردن منبع استفادهشده. قواعد: - نام، ایمیل، شماره سفارش، توکن یا داده پرداخت را در فراخوانی API یا خروجی نگذارید. فقط با تیکت پوشاندهشده کار کنید. - فقط از مستندات بازیابیشده پاسخ دهید. بدون شاهد ارجاع دهید، نه حدس. - بازپرداخت، تخفیف، مهلت یا تغییر حساب را وعده ندهید؛ این موارد را به ارجاع بفرستید. - شایعه عمومی اختلال سیگنال است، نه مدرک. پست و تاریخ را نقل کنید. - پیش از مصرف اعتبار، فراخوانیهای برنامهریزیشده را نشان دهید و منتظر تأیید من بمانید. - پاسخ نفرستید، تیکت را بهروز نکنید و اقدامی روی حساب نکنید. پیشنویس را برای بررسی برگردانید. - نتیجه را در ./support-triage.md بنویسید و در چت خلاصه کنید.
نسخه شامل مراحل نصب و قواعد ایمنی نیز هست.
چه دریافت میکنید
خروجی نمونه یک اجرا. نه تولید زنده.
تریاژ — تیکت نمونه
نیت
پرسش صورتحساب / تمدید. مشتری میپرسد چرا طرح دوباره تمدید شد.
اولویت
معمولی. پرسش صورتحساب است، نه اختلال، و مشتری مسدود نیست.
شواهد
- «پرسشهای متداول صورتحساب» — زمان تمدید و تلاش دوباره کارت. ارتباط: بالا.
- «تغییرات طرح» — کاهش بین تمدیدها. ارتباط: متوسط.
بررسی حادثه
هیچ گزارش عمومی در ۴۸ ساعت گذشته نیست.
مسیر
پیشنویس. مستندات پرسش را پوشش میدهد.
پیشنویس پاسخ
سلام — طرح شما اول هر ماه تمدید میشود و اگر کارت رد شود سه روز دوباره تلاش میشود و سپس صندلی متوقف میشود. میتوانید کارت را در تنظیمات صورتحساب عوض کنید؛ پرسشهای متداول مراحل را دارد. اگر باید تاریخ تمدید جابهجا شود پاسخ دهید تا به تیم صورتحساب ارجاع دهیم.
یادداشت بازبین
تأیید، ویرایش یا ارجاع به صف صورتحساب.
فراخوانیهای دقیق
برای توسعهدهندگان: همان گردشکار بهصورت کد، به ترتیب اجرا.
نمایش فراخوانیهای واقعی API
ماسک و طبقهبندی کنید
ایمیل، تلفن و شماره سفارش را با کد حذف کنید سپس با Chat نیت و اولویت را تعیین کنید.
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);خروجی نمونه
{ "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": "…" } ] }شواهد مستند را بازیابی کنید
بخشهای مرتبط را در LiveDoc پشتیبانی جستوجو کنید و عنوان و امتیاز را نگه دارید.
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"); }خروجی نمونه
[ { "title": "Billing FAQ", "content": "Your plan renews on the first of the month; a failed card retries for three days…", "score": 0.91 } ]حادثه عمومی را بررسی کنید
در X محصول و کلماتی مانند «قطعی/آفلاین» را در ۴۸ ساعت جستوجو کنید، فقط بهعنوان سیگنال عمومی.
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, }));خروجی نمونه
[ { "text": "Workspace login is failing for my whole team.", "handle": "example_user", "at": "2026-10-30", "link": "https://x.com/example_user/status/..." } ]مسیر را تعیین و پاسخ را بسازید
قواعد صف را تعیین میکنند؛ شواهد، گام بعدی و پیشنویس را بستهبندی کنید.
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);خروجی نمونه
# 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)
تریاژ را ثبت کنید
نتیجه را در LiveDoc بنویسید برای مرور و حسابرسی.
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 ticketخروجی نمونه
{ "short_id": "PvyKouzJirXjFdst4uKRK3" }
چه چیزی دارد
- نیت و اولویت پس از ماسک
- شواهد مستند با امتیاز
- بررسی حادثه عمومی
- پیشنویس پاسخ مسیریابیشده
- LiveDoc با سابقه تریاژ
چه کاری نمیکند
- پاسخ نمیفرستد، تیکت را نمیبندد و عملیات حساب انجام نمیدهد
- گذرواژه، داده پرداخت یا داده کامل مشتری به API نفرستید
- بدون نتیجه مستندات ارجاع اجباری است
- X سیگنال حادثه عمومی است نه وضعیت سیستم پشتیبانی
- قواعد اولویت مال شماست؛ مدل فقط پیشنهاد میدهد
پرسشها
چه داده تیکتی میتوان فرستاد؟
فقط زمینه لازم پس از ماسک: محصول، توضیح، طرح و منطقه. بدون گذرواژه، پرداخت، آدرس کامل یا گفتوگوی خصوصی.
پاسخ از کجا؟
از بخشهای بازیابیشده در LiveDoc مستندات. بینتیجه گردشکار ارجاع میدهد نه حدس.
آیا پاسخ میدهد یا تیکت میبندد؟
نه. فقط پیشنویس و مسیر میسازد؛ ارسال و بستن کار انسان یا سیستم شماست.
اولویت چگونه تعیین میشود؟
با قواعد شما؛ مدل پیشنهاد و استدلال میکند و مسیر اولویت نهایی را تأیید میکند.
اگر مستندات پوشش ندهد؟
ارجاع به صف انسانی با «پوشش نشده» در بسته تریاژ.
هزینه یک تریاژ چقدر است؟
Chat، جستوجو و X Search بر اساس استفاده محاسبه میشوند؛ نرخهای فعلی در صفحه قیمت و پرامپت پیش از هزینه تأیید میخواهد.
گردشکارهای مرتبط
از مستندات خود به پرسشهای پشتیبانی پاسخ دهید
یک LiveDoc بسازید، مرکز راهنما و runbook داخلی را بارگذاری کنید، بخشهایی که به تیکت پاسخ میدهند را بازیابی کنید و بگذارید مدل فقط از همان شواهد پاسخ دهد.
باز کردن گردشکارمحتواگفتوگوهای اجتماعی را به خلاصه شنود هفتگی تبدیل کنید
پستهای X این هفته درباره برند و رقبا را جستوجو کنید، زمینه وب با منابع اضافه کنید، صفحات پشت آن را بخوانید و هر نسخه را بایگانی کنید تا هفته بعد از دانستهها شروع شود.
باز کردن گردشکارپژوهشیک پرسش را به خلاصه پژوهشی با منابع تبدیل کنید
از وب بپرسید، صفحات پشت پاسخ را بهصورت Markdown ذخیره کنید، آنچه متخصصان در X میگویند اضافه کنید و شواهد را در LiveDoc نگه دارید تا بعداً دوباره جستوجو شود.
باز کردن گردشکارآن را از خود کنید
همان دستور، متناسب با روش واقعی تحویل شما.
فقط طبقهبندی
بدون پاسخ: فقط نیت، اولویت و صف پیشنهادی.
به سیستم تیکت وصل کنید
با webhook خود بسته را در تیکت بنویسید بدون ارسال خودکار.
تا پایگاه دانش گسترش دهید
با نتیجه مستندات به گردشکار پایگاه دانش برای پاسخ کاملتر بروید.
ادامه دهید
صفحات مرجع پشت این دستور و گامهای بعدی.