Felo API PlatformFelo API Platform

Destek

Bir destek biletini kanıtlı yanıt taslağına triyaj edin

Bileti maskeleyin, Chat ile niyet ve önceliği sınıflandırın, dokümantasyondan yanıtlayan pasajları alın, kamuya açık olay tartışmalarını kontrol edin ve insan onayı için yönlendirilmiş bir taslak bırakın.

Süre20 dakikaSeviyeOrtaGüncellendi2026-10-30
Kimler içinDestek liderleriHelpdesk AgentDestek mühendisleri

İstemi kopyalayın

Köşeli parantezli alanları değiştirip Claude Code, Codex veya terminal erişimi olan bir AI’ya yapıştırın. Felo becerisini kurar, kredi harcamadan önce sorar ve iş akışını çalıştırır.

Bu destek talebini triyaj et ve insan incelemesi için yanıt taslağı yaz: [ad, e-posta, hesap ID’si, ödeme verisi ve diğer tanımlayıcı bilgileri çıkardıktan sonra talebi yapıştır].

Ürün alanı: [ürün]. Plan veya bölge: [yalnızca yanıt için gerekiyorsa]. Doküman kaynağı: [yardım merkezi URL’si veya LiveDoc short_id].
Onay yolu: [kim inceliyor]. Yükseltme kuyruğu: [ekip veya kanal].

Şunları hazırla:
1. Niyet: bir kategori ve bir cümlelik gerekçe.
2. Öncelik: acil / normal / düşük, uygulanan kuralla.
3. Kanıt: talebi yanıtlayan doküman pasajları, başlık ve alaka ile.
4. Olay kontrolü: kamusal raporlar geniş bir kesintiye işaret ediyor mu? Bağlantı ve tarih veya “kamusal sinyal yok”.
5. Yönlendirme: taslak, müşteriden ek bilgi isteme veya yükseltme — ve nedeni.
6. Yanıt taslağı: iki ila dört cümle, yalnızca kanıta dayalı, kullanılan kaynağı belirterek.

Kurallar:
- Ad, e-posta, sipariş numarası, token veya ödeme verisini API çağrılarına ya da çıktıya koyma. Yalnızca maskelenmiş taleple çalış.
- Yalnızca alınan dokümantasyondan yanıtla. Kanıt yoksa yükselt, tahmin etme.
- İade, indirim, süre veya hesap değişikliği vaat etme; bu durumları yükseltmeye gönder.
- Kamusal kesinti söylentileri sinyaldir, kanıt değildir. Gönderiyi ve tarihi alıntıla.
- Kredi harcamadan önce planlanan çağrıları göster ve onayımı bekle.
- Yanıt gönderme, talebi güncelleme ve hesap işlemi yapma. Taslağı inceleme için döndür.
- Sonucu ./support-triage.md dosyasına yaz ve sohbette özetle.

Kopya kurulum adımlarını ve güvenlik kurallarını da içerir.

Ne elde edersiniz

Bir çalıştırmanın örnek çıktısı. Canlı üretim değil.

Örnek triyaj (alıntı)

Triyaj — örnek bilet

Niyet

Faturalama / yenileme sorusu. Müşteri planın neden yeniden yenilendiğini soruyor.

Öncelik

Normal. Faturalama sorusu, kesinti değil ve müşteri engellenmiş değil.

Kanıt

  • “Faturalama SSS” — yenileme zamanı ve başarısız kart denemeleri. İlgi: yüksek.
  • “Plan değişiklikleri” — yenilemeler arası düşürme. İlgi: orta.

Olay kontrolü

Son 48 saatte kamuya açık bildirim yok.

Yönlendirme

Taslak. Dokümantasyon soruyu kapsıyor.

Yanıt taslağı

Merhaba — planınız her ayın 1’inde yenilenir ve başarısız kart üç gün yeniden denenir, sonra koltuk duraklatılır. Kartı Faturalama ayarlarından değiştirebilirsiniz; Faturalama SSS adımları içeriyor. Yenileme tarihini taşımanız gerekirse yanıtlayın, faturalama ekibine eskalasyon yapalım.

İnceleyici notu

Onayla, düzenle veya faturalama kuyruğuna eskalasyon yap.

Tam çağrılar

Geliştiriciler için: aynı iş akışı kod olarak, yürütme sırasıyla.

Gerçek API çağrılarını göster
  1. Maskeleyin ve sınıflandırın

    Kodla e-posta, telefon ve sipariş numarasını kaldırın, sonra Chat ile niyet ve önceliği belirleyin.

    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);

    Örnek çıktı

    {
      "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. Dokümantasyon kanıtını alın

    Destek LiveDoc’unda ilgili pasajları arayın, başlıkları ve puanları saklayın.

    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");
    }

    Örnek çıktı

    [
      {
        "title": "Billing FAQ",
        "content": "Your plan renews on the first of the month; a failed card retries for three days…",
        "score": 0.91
      }
    ]
  3. Kamuya açık olayı kontrol edin

    X’te son 48 saatte ürün ve “kesinti/çevrimdışı” gibi kelimeleri arayın, yalnızca kamuya açık sinyal olarak.

    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,
    }));

    Örnek çıktı

    [
      {
        "text": "Workspace login is failing for my whole team.",
        "handle": "example_user",
        "at": "2026-10-30",
        "link": "https://x.com/example_user/status/..."
      }
    ]
  4. Rotayı belirleyin ve yanıtı kurun

    Kurallar kuyruğu belirler; kanıtları, sonraki adımı ve taslağı paketleyin.

    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);

    Örnek çıktı

    # 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. Triyajı kaydedin

    Sonucu LiveDoc’a yazın, inceleme ve denetim için.

    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

    Örnek çıktı

    { "short_id": "PvyKouzJirXjFdst4uKRK3" }

Neler dahil

  • Maskelemeden sonra niyet ve öncelik
  • Puanlarla dokümantasyon kanıtı
  • Kamuya açık olay kontrolü
  • Yönlendirilmiş yanıt taslağı
  • LiveDoc’ta triyaj kaydı

Neleri yapmaz

  • Yanıt göndermez, bilet kapatmaz ve hesap işlemi yapmaz
  • API’ye parola, ödeme verisi veya tam müşteri verisi göndermeyin
  • Dokümantasyon sonucu yoksa eskalasyon zorunlu
  • X kamuya açık olay sinyalidir, destek sisteminin durumu değil
  • Öncelik kuralları sizin; model yalnızca önerir

Sorular

Hangi bilet verisi gönderilebilir?

Maskelemeden sonra yalnızca gerekli bağlam: ürün, açıklama, plan ve bölge. Parola, ödeme, tam adres veya özel konuşma yok.

Yanıt nereden?

Dokümantasyon LiveDoc’unda alınan pasajlardan. Sonuç yoksa iş akışı tahmin yerine eskale eder.

Yanıtlar veya bileti kapatır mı?

Hayır. Yalnızca taslak ve rota oluşturur; gönderme ve kapatma insan veya sisteminiz tarafından yapılır.

Öncelik nasıl belirlenir?

Kurallarınızla; model önerir ve gerekçelendirir, rota son önceliği onaylar.

Dokümantasyon kapsamazsa?

İnsan kuyruğuna eskalasyon, triyaj paketinde “kapsanmadı” ile.

Bir triyajın maliyeti nedir?

Chat, arama ve X Search kullanıma göre faturalanır; güncel tarifeler fiyat sayfasında ve istem harcamadan önce onay ister.

İlgili iş akışları

Kendinize uyarlayın

Aynı tarif, gerçekte nasıl teslim ettiğinize uyarlanmış.

Yalnızca sınıflandırma

Yanıt yok: yalnızca niyet, öncelik ve önerilen kuyruk.

Bilet sistemine bağlayın

Kendi webhook’unuzla paketi bilete yazın, otomatik göndermeden.

Bilgi tabanına genişletin

Dokümantasyon sonucu varsa daha tam yanıt için bilgi tabanı iş akışına geçin.

Bu tarifin arkasındaki referans sayfaları ve sonraki adımlar.