Felo API PlatformFelo API Platform

สนับสนุน

ตอบคำถามฝ่ายสนับสนุนจากเอกสารของคุณเอง

สร้าง LiveDoc โหลดศูนย์ช่วยเหลือและ runbook ภายใน ดึงส่วนที่ตอบทิกเก็ต และให้โมเดลตอบจากหลักฐานนั้นเท่านั้น

เวลา20 นาทีระดับพื้นฐานอัปเดต2026-10-29
สำหรับใครทีมสนับสนุนความสำเร็จลูกค้าผู้สร้าง helpdesk

คัดลอกพรอมป์ต์

แทนช่องในวงเล็บเหลี่ยมแล้ววางใน Claude Code, Codex หรือ AI ที่เข้าถึงเทอร์มินัล ระบบจะติดตั้งสกิล Felo ถามก่อนใช้เครดิต และรันเวิร์กโฟลว์

ตอบคำถามสนับสนุนนี้โดยใช้เฉพาะเอกสารของเรา: [คำถามลูกค้า]

ฐานความรู้: [URL ศูนย์ช่วยเหลือหรือ LiveDoc short_id] เส้นทางส่งต่อ: [ผู้รับผิดชอบหรือคิว]
บริบทลูกค้าที่มี: [แพ็กเกจ ภูมิภาค ผลิตภัณฑ์] (ห้ามขอรหัสผ่านหรือข้อมูลการชำระเงิน)

สร้าง:
1. คำตอบตรงไปตรงมาสองถึงสี่ประโยค
2. ข้อความเอกสารที่รองรับ พร้อมชื่อแหล่ง
3. ขั้นตอนถัดไปของลูกค้า
4. บันทึกภายใน: แหล่งที่ใช้และคะแนนความเกี่ยวข้อง

กฎ:
- ตอบจากข้อความที่ค้นคืนได้เท่านั้น ถ้าไม่พบหรือเกี่ยวข้องน้อย ให้ส่งต่อ ห้ามเดา
- ห้ามแต่งนโยบาย การคืนเงิน ราคา หรือการดำเนินการกับบัญชี
- ห้ามนำข้อมูลส่วนตัวของลูกค้า ข้อมูลรับรอง หรือข้อมูลการชำระเงินเข้ามา
- ถามก่อนใช้เครดิตในการนำเข้าหรือค้นคืน
- ห้ามส่งคำตอบให้ลูกค้า ให้ส่งกลับมาให้ฉันตรวจ

สำเนายังรวมขั้นตอนติดตั้งและกฎความปลอดภัย

สิ่งที่คุณได้รับ

ตัวอย่างผลลัพธ์จากการรันหนึ่งครั้ง ไม่ใช่การสร้างสด

ตัวอย่างคำตอบ (ตัดตอน)

คำตอบ: แพ็กเกจของคุณต่ออายุวันที่ 1 ของทุกเดือน หากบัตรถูกปฏิเสธจะลองใหม่สามวันก่อนพักที่นั่ง

แหล่ง: “คำถามที่พบบ่อยเกี่ยวกับการเรียกเก็บเงิน” - https://example.com/help/billing

หากไม่ครอบคลุม: ส่งต่อคิวการเรียกเก็บเงินพร้อม ID ใบแจ้งหนี้

การเรียกที่แน่นอน

สำหรับนักพัฒนา: เวิร์กโฟลว์เดียวกันในรูปโค้ดตามลำดับการทำงาน

แสดงการเรียก API จริง
  1. สร้างฐานความรู้

    สร้างฐานผ่าน LiveDoc API และเก็บ 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 config

    ตัวอย่างผลลัพธ์

    {
      "short_id": "PvyKouzJirXjFdst4uKRK3",
      "name": "Support knowledge base",
      "description": "Help center, policy pages, and internal runbooks"
    }
  2. โหลดศูนย์ช่วยเหลือสาธารณะ

    เพิ่ม URL ศูนย์ช่วยเหลือเป็นรีซอร์ส 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");

    ตัวอย่างผลลัพธ์

    [
      { "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" }
    ]
  3. เพิ่มเอกสารภายใน

    เพิ่ม runbook ภายในเป็นเอกสาร

    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 updates
  4. ดึงหลักฐานสำหรับคำถาม

    การค้นเชิงความหมายคืนส่วนและคะแนนที่เกี่ยวข้องที่สุด

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

    ตัวอย่างผลลัพธ์

    [
      {
        "id": "res_005",
        "title": "Refund policy",
        "content": "Refunds are available within 30 days of purchase…",
        "score": 0.92
      }
    ]
  5. ตอบจากหลักฐานเท่านั้น

    ให้โมเดลใช้เฉพาะส่วนที่ดึงมาและส่งต่อเมื่อไม่มีผลลัพธ์

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

    ตัวอย่างผลลัพธ์

    "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."

รวมอะไรบ้าง

  • LiveDoc จากศูนย์ช่วยเหลือและ runbook ภายใน
  • การค้นเชิงความหมายพร้อมส่วนและหัวเรื่อง
  • คำตอบพร้อมแหล่งที่อ้างได้
  • การส่งต่อชัดเจนเมื่อความครอบคลุมขาด

สิ่งที่ไม่ทำ

  • ตอบเฉพาะจากเอกสารของคุณและไม่ท่องเว็บเปิด
  • ไม่ทำกิจกรรมบัญชี คืนเงิน หรือเปลี่ยนแพ็กเกจ
  • ไม่ใส่ข้อมูลลูกค้าส่วนตัวหรือข้อมูลลับในฐาน
  • เอกสารเก่าทำให้คำตอบเก่า ต้องอัปเดต
  • เพียงร่างคำตอบ ไม่ส่งถึงลูกค้า

คำถาม

คำตอบมาจากไหน?

จาก LiveDoc ของคุณเท่านั้น: หน้าศูนย์ช่วยเหลือและ runbook การค้นคืนส่วนและเอเจนต์เขียนจากส่วนนั้น

ถ้าเอกสารไม่ครอบคลุม?

ส่งต่อ ไม่มีผลลัพธ์หรือความเกี่ยวข้องต่ำถือว่ายังไม่ครอบคลุม ไม่ใช่สิทธิ์เดา

รักษาฐานให้ใหม่ได้อย่างไร?

เมื่อนโยบายเปลี่ยน ให้เพิ่ม URL อีกครั้งและอัปเดตเอกสาร เวิร์กโฟลว์มีคำสั่งอัปเดตและตรวจสอบ

ใช้ในคิวทิกเก็ตได้ไหม?

ได้เป็นขั้นร่าง คงการอนุมัติของมนุษย์ก่อนส่งลูกค้า

จัดการคำถามเฉพาะบัญชีไหม?

ด้วยเอกสารอย่างเดียวไม่ได้ ข้อมูลบัญชีอยู่ในระบบคุณ ส่งเฉพาะบริบทปลอดภัยที่จำเป็น ไม่ส่งข้อมูลลับ

การรันหนึ่งครั้งมีค่าใช้จ่ายเท่าไร?

การนำเข้าและการค้นคิดตามการใช้งาน อัตราปัจจุบันที่หน้าค่าบริการ และพรอมป์ต์ขออนุมัติก่อนใช้จ่าย

เวิร์กโฟลว์ที่เกี่ยวข้อง

ปรับให้เป็นของคุณ

สูตรเดิม ปรับตามวิธีที่คุณส่งมอบจริง

เฉพาะผลิตภัณฑ์เดียว

จำกัดที่ผลิตภัณฑ์เดียวเพื่อฐานที่สะอาดขึ้น

เพิ่มการจัดประเภททิกเก็ต

จัดประเภทคำถามก่อนแล้วค้นเอกสารที่ตรง

ตรวจสอบเป็นระยะ

ตรวจลิงก์เสียและนโยบายเก่าทุกเดือน

หน้าเอกสารอ้างอิงเบื้องหลังสูตรนี้และก้าวต่อไป