Felo API PlatformFelo API Platform

Support

Répondez aux questions support depuis votre propre documentation

Créez un LiveDoc, chargez le centre d’aide et le runbook interne, récupérez les passages qui répondent au ticket et laissez le modèle répondre uniquement à partir de ces preuves.

Temps20 minutesNiveauDébutantMis à jour2026-10-29
Pour quiÉquipes supportSuccès clientCréateurs de helpdesk

Copier le prompt

Remplacez les champs entre crochets, puis collez dans Claude Code, Codex ou toute IA avec accès au terminal. Elle installe le skill Felo, demande avant de dépenser des crédits et exécute le workflow.

Réponds à cette question de support uniquement avec notre documentation : [question du client].

Base de connaissances : [URL du centre d’aide ou LiveDoc short_id]. Voie d’escalade : [responsable ou file].
Contexte client disponible : [offre, région, produit] (ne demande jamais de mot de passe ni de données de paiement).

Produis :
1. Une réponse directe en deux à quatre phrases.
2. Les passages de documentation qui la justifient, avec le titre de la ressource.
3. La prochaine étape pour le client.
4. Une note interne : ressources utilisées et scores de pertinence.

Règles :
- Réponds uniquement à partir des passages récupérés. En cas d’absence de résultat ou de pertinence faible, escalade ; ne devine jamais.
- N’invente ni politique, ni remboursement, ni prix, ni action sur le compte.
- N’intègre aucune donnée client privée, aucun identifiant et aucune information de paiement.
- Demande avant de consommer des crédits pour l’ingestion ou la recherche.
- N’envoie pas la réponse au client ; rends-la-moi pour relecture.

La copie inclut aussi les étapes d'installation et les règles de sécurité.

Ce que vous obtenez

Exemple de sortie d'une exécution. Pas de génération en direct.

Exemple de réponse (extrait)

Réponse : Votre offre se renouvelle le premier du mois. Une carte refusée est retentée pendant trois jours avant la suspension du siège.

Sources : « questions fréquentes de facturation » - https://example.com/help/billing

Si ce n’est pas couvert : escalader vers la file facturation avec l’ID de facture.

Les appels exacts

Pour les développeurs : le même workflow en code, dans l'ordre d'exécution.

Afficher les appels API
  1. Créez la base de connaissances

    Créez la base via l’API LiveDoc et enregistrez le 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

    Exemple de sortie

    {
      "short_id": "PvyKouzJirXjFdst4uKRK3",
      "name": "Support knowledge base",
      "description": "Help center, policy pages, and internal runbooks"
    }
  2. Chargez le centre d’aide public

    Ajoutez l’URL du centre d’aide comme ressource 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");

    Exemple de sortie

    [
      { "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. Ajoutez la documentation interne

    Ajoutez le runbook interne comme document.

    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. Récupérez les preuves de la question

    La recherche sémantique renvoie les passages les plus pertinents et leurs scores.

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

    Exemple de sortie

    [
      {
        "id": "res_005",
        "title": "Refund policy",
        "content": "Refunds are available within 30 days of purchase…",
        "score": 0.92
      }
    ]
  5. Répondez uniquement depuis les preuves

    Le modèle n’utilise que les passages récupérés et escalade sans résultat.

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

    Exemple de sortie

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

Ce qui est inclus

  • LiveDoc avec centre d’aide et runbook interne
  • Recherche sémantique avec passages et titres
  • Réponse avec sources citables
  • Escalade claire quand la documentation manque

Ce qu'elle ne fait pas

  • Répond uniquement depuis votre documentation et ne navigue pas sur le web ouvert
  • N’exécute pas d’actions de compte, remboursements ou changements de plan
  • Pas de données clients privées ni d’identifiants dans la base
  • Une documentation périmée produit des réponses périmées ; mettez-la à jour
  • Rédige seulement la réponse, ne l’envoie pas au client

Questions

D’où vient la réponse ?

Uniquement de votre LiveDoc : pages du centre d’aide et runbook. La recherche renvoie des passages et l’agent écrit la réponse à partir d’eux.

Et si la documentation ne couvre pas ?

Escalade. Aucun résultat ou une pertinence faible est traité comme non couvert, pas comme une permission de deviner.

Comment garder la base à jour ?

Quand une politique change, ajoutez à nouveau les URL et mettez à jour les documents ; le workflow inclut des commandes de mise à jour et d’audit.

Puis-je l’utiliser dans la file de tickets ?

Oui, comme étape de brouillon. Gardez une approbation humaine avant l’envoi au client.

Gère-t-il les questions liées au compte ?

Pas uniquement avec la documentation. Les données de compte sont dans votre système ; ne transmettez que le contexte sûr nécessaire, jamais d’identifiants.

Combien coûte une exécution ?

Ingestion et recherche sont facturées à l’usage ; les tarifs actuels sont sur la page des prix, et le prompt demande votre accord avant dépense.

Workflows liés

Adaptez-la

La même recette, adaptée à votre façon de livrer.

Une seule gamme produit

Restreignez à un produit pour une base plus propre.

Ajoutez la classification des tickets

Classifiez le type de question avant de chercher la bonne documentation.

Audit régulier

Vérifiez chaque mois les liens cassés et les politiques obsolètes.

Les pages de référence derrière cette recette et la suite.