Felo API PlatformFelo API Platform

תמיכה

עשו טריאז׳ לפניית תמיכה לטיוטת תשובה מבוססת

מסכו את הפנייה, סווגו כוונה ועדיפות עם Chat, אחזרו את הקטעים שעונים מהתיעוד, בדקו שיחות תקרית פומביות והשאירו טיוטה מנותבת לאישור אנושי.

זמן20 דקותרמהבינוניעודכן2026-10-30
למימובילי תמיכהHelpdesk Agentמהנדסי תמיכה

העתיקו את הפרומפט

החליפו את השדות בסוגריים מרובעים והדביקו ב-Claude Code, Codex או AI עם גישה לטרמינל. הוא מתקין את סקיל Felo, שואל לפני שריפת קרדיטים ומריץ את תהליך העבודה.

סווג את כרטיס התמיכה הזה וכתב טיוטת תשובה לבדיקה אנושית: [הדבק את הכרטיס לאחר הסרת שם, אימייל, מזהה חשבון, נתוני תשלום וכל מידע מזהה אחר].

תחום מוצר: [מוצר]. תוכנית או אזור: [רק אם נדרש לתשובה]. מקור תיעוד: [URL של מרכז העזרה או LiveDoc short_id].
נתיב אישור: [מי בודק]. תור הסלמה: [צוות או ערוץ].

הפק:
1. כוונה: קטגוריה אחת ומשפט נימוק.
2. עדיפות: דחוף / רגיל / נמוך, עם הכלל שהוחל.
3. ראיות: קטעי התיעוד שעונים לכרטיס, עם כותרת ורלוונטיות.
4. בדיקת תקלה: האם דיווחים ציבוריים מרמזים על תקלה רחבה? קישור ותאריך, או „אין אות ציבורי”.
5. ניתוב: טיוטה, בקשת מידע נוסף מהלקוח או הסלמה — ולמה.
6. טיוטת תשובה: שתיים עד ארבע פסקאות, רק על סמך הראיות, עם ציון המקור שעליו נשענת.

כללים:
- אל תכניס שמות, אימיילים, מספרי הזמנה, טוקנים או נתוני תשלום לקריאות API או לפלט. עבוד רק על הכרטיס הממוסך.
- ענה רק מהתיעוד שאוחזר. בלי ראיה, הסלם ולא תנחש.
- אל תבטיח החזרים, הנחות, מועדים או שינויי חשבון; העבר מקרים כאלה להסלמה.
- שמועות תקלה ציבוריות הן אותות, לא ראיות. צטט את הפוסט והתאריך.
- לפני שימוש בקרדיטים, הצג את הקריאות המתוכננות והמתן לאישור שלי.
- אל תשלח תשובה, תעדכן כרטיס או תבצע פעולות בחשבון. החזר את הטיוטה לבדיקה.
- כתוב את התוצאה ל-./support-triage.md וסכם אותה בצ׳אט.

ההעתקה כוללת גם שלבי התקנה וכללי בטיחות.

מה מקבלים

פלט לדוגמה של ריצה אחת. לא יצירה חיה.

דוגמת טריאז׳ (קטע)

טריאז׳ — פנייה לדוגמה

כוונה

שאלת חיוב / חידוש. הלקוח שואל למה התוכנית התחדשה שוב.

עדיפות

רגילה. זו שאלת חיוב, לא תקלה, והלקוח לא חסום.

ראיות

  • „שאלות נפוצות לחיוב” — מועד חידוש וניסיונות חוזרים לכרטיס. רלוונטיות: גבוהה.
  • „שינויי תוכנית” — הורדה בין חידושים. רלוונטיות: בינונית.

בדיקת תקלה

אין דיווחים פומביים ב-48 השעות האחרונות.

נתיב

טיוטה. התיעוד מכסה את השאלה.

טיוטת תשובה

שלום — התוכנית שלך מתחדשת בראשון לכל חודש, וכרטיס שנכשל מנוסה שוב שלושה ימים לפני שהמושב מושהה. אפשר להחליף כרטיס בהגדרות חיוב; בשאלות הנפוצות יש את השלבים. אם צריך להזיז את מועד החידוש, השיבו ונעביר לצוות החיוב.

הערת בודק

לאשר, לערוך או להסלים לתור החיוב.

הקריאות המדויקות

למפתחים: אותו תהליך עבודה כקוד, לפי סדר ההרצה.

הצג קריאות API אמיתיות
  1. מסכו וסווגו

    הסירו בקוד אימייל, טלפון ומספר הזמנה ואז השתמשו ב-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": "…" }
      ]
    }
  2. אחזרו ראיות תיעוד

    חפשו קטעים רלוונטיים ב-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
      }
    ]
  3. בדקו תקרית פומבית

    חפשו ב-X את המוצר ומילים כמו „השבתה/לא מקוון” ב-48 שעות, רק כאות פומבי.

    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/..."
      }
    ]
  4. קבעו מסלול והרכיבו תשובה

    הכללים קובעים את התור; ארזו ראיות, צעד הבא וטיוטה.

    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)
  5. תעדו את הטריאז׳

    כתבו את התוצאה ב-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 מחויבים לפי שימוש; התעריפים העדכניים בעמוד המחירים והפרומפט מבקש אישור לפני הוצאה.

תהליכי עבודה קשורים

התאימו

אותו מתכון, מותאם לאיך שאתם באמת מספקים.

סיווג בלבד

בלי תשובה: רק כוונה, עדיפות ותור מומלץ.

חברו למערכת הפניות

עם ה-webhook שלכם כתבו את החבילה לפנייה בלי שליחה אוטומטית.

הרחיבו לבסיס הידע

כשיש תוצאת תיעוד עברו לתהליך בסיס הידע לתשובה מלאה יותר.

עמודי העזר שמאחורי המתכון והשלבים הבאים.