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. Внутрішню нотатку: використані ресурси й оцінки релевантності.

Правила:
- Відповідай лише з отриманих фрагментів. Якщо немає результатів або релевантність низька, ескалюй; ніколи не вгадуй.
- Не вигадуй політики, повернення коштів, ціни чи дії з акаунтом.
- Не залучай приватні дані клієнта, облікові дані чи платіжну інформацію.
- Питай перед витратою кредитів на завантаження даних або пошук.
- Не надсилай відповідь клієнту; поверни її мені на перевірку.

Копія також містить кроки встановлення й правила безпеки.

Що ви отримаєте

Приклад результату одного запуску. Не живе генерування.

Приклад відповіді (фрагмент)

Відповідь: Ваш план поновлюється першого числа місяця. Відхилена картка повторюється три дні, потім місце призупиняється.

Джерела: «часті запитання з оплати» - 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 знову й оновіть документи; процес містить команди оновлення й аудиту.

Чи можна використати в черзі тікетів?

Так, як крок чернетки. Тримайте людське схвалення перед надсиланням клієнту.

Чи обробляє питання, специфічні для акаунта?

Лише з документацією ні. Дані акаунта у вашій системі; передавайте лише потрібний безпечний контекст, ніколи облікові дані.

Скільки коштує один запуск?

Інгест і пошук оплачуються за використання; актуальні тарифи на сторінці цін, а промпт просить схвалення перед витратою.

Пов’язані процеси

Адаптуйте

Той самий рецепт, підлаштований під те, як ви насправді працюєте.

Лише одна продуктова лінія

Обмежте одним продуктом, щоб база була чистіша.

Додайте класифікацію тікетів

Спершу класифікуйте тип питання, потім шукайте потрібну документацію.

Періодичний аудит

Щомісяця перевіряйте зламані посилання й старі політики.

Довідкові сторінки за цим рецептом і наступні кроки.