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. Поиск возвращает фрагменты, и agent пишет ответ по ним.

Что если документация не покрывает вопрос?

Эскалация. Отсутствие попаданий или низкая релевантность считается отсутствием покрытия, а не разрешением угадывать.

Как поддерживать базу актуальной?

При изменении политик заново добавляйте URL и обновляйте документы; в процессе есть команды обновления и аудита.

Можно встроить в очередь тикетов?

Да, как шаг черновика. Перед отправкой клиенту оставьте ручное утверждение.

Можно отвечать на вопросы по аккаунту?

Только по документации нельзя. Данные аккаунта в вашей системе; передавайте только безопасный контекст, никогда — учётные данные.

Сколько стоит запуск?

Загрузка и поиск оплачиваются по факту использования; актуальные тарифы на странице цен, промпт просит одобрение до трат.

Связанные процессы

Адаптируйте под себя

Тот же рецепт, подстроенный под ваш реальный процесс.

Только одна продуктовая линейка

Сузьте до одного продукта, чтобы база была чище.

Добавьте классификацию тикетов

Сначала классифицируйте вопрос, затем ищите по нужному разделу.

Регулярный аудит

Раз в месяц проверяйте битые ссылки и устаревшие политики.

Справочные страницы этого рецепта и куда двигаться дальше.