Aller au contenu principal

Analytics et optimisation

Mesurer et optimiser les performances de votre app

Une app publiée sans suivi analytique est un investissement en aveugle. Le Apps SDK et le portail développeur fournissent des métriques détaillées pour comprendre comment votre app est utilisée, où les utilisateurs décrochent et comment améliorer vos résultats.

Le dashboard Analytics

Le portail développeur expose un tableau de bord avec les métriques essentielles :

DAU
Utilisateurs actifs quotidiens
Rétention
Taux de retour à J7 et J30
Actions
Nombre d'appels par action
Revenus
MRR, transactions, churn

Les métriques qui comptent

Métriques d’engagement

  • Sessions par utilisateur — combien de fois un utilisateur lance votre app par semaine
  • Actions par session — nombre moyen d’actions appelées par conversation
  • Durée de session — temps passé à interagir avec votre app
  • Taux de complétion — pourcentage de sessions qui aboutissent à un résultat utile

Métriques de rétention

  • Rétention J1 — pourcentage d’utilisateurs qui reviennent le lendemain
  • Rétention J7 — pourcentage qui revient dans la semaine
  • Rétention J30 — pourcentage qui revient dans le mois
  • Cohortes — évolution de la rétention par date d’inscription

Métriques de conversion (commerce)

  • Taux d’installation — visiteurs Store qui installent votre app
  • Taux de conversion gratuit vers payant — utilisateurs gratuits qui passent premium
  • ARPU — revenu moyen par utilisateur
  • Churn mensuel — pourcentage d’abonnés qui annulent
  • LTV — valeur vie client estimée

Accéder aux analytics via le SDK

Le SDK expose une API pour récupérer vos métriques programmatiquement :

import { analytics } from "@openai/apps-sdk";

// Récupérer les métriques des 30 derniers jours
const metrics = await analytics.getMetrics({
  appSlug: "mon-app",
  period: "30d",
  metrics: ["dau", "sessions", "actions", "revenue"],
});

console.log(`DAU moyen : ${metrics.dau.average}`);
console.log(`Sessions totales : ${metrics.sessions.total}`);
console.log(`Revenu du mois : ${metrics.revenue.total} EUR`);

Analytics par action

Identifiez quelles actions sont les plus utilisées et optimisez en conséquence :

const actionMetrics = await analytics.getActionMetrics({
  appSlug: "mon-app",
  period: "7d",
});

// Résultat :
// [
//   { action: "searchProducts", calls: 4521, avgLatency: 230, errorRate: 0.02 },
//   { action: "getDetails", calls: 2103, avgLatency: 180, errorRate: 0.01 },
//   { action: "addToCart", calls: 891, avgLatency: 150, errorRate: 0.03 },
// ]

Optimiser les performances

Réduire la latence

La latence des actions impacte directement l’expérience utilisateur :

// Avant : appels séquentiels (lent)
const product = await fetchProduct(id);
const reviews = await fetchReviews(id);
const stock = await checkStock(id);

// Après : appels parallèles (rapide)
const [product, reviews, stock] = await Promise.all([
  fetchProduct(id),
  fetchReviews(id),
  checkStock(id),
]);

Utiliser le cache

Le SDK propose un cache intégré pour les données qui changent rarement :

export const getCategories = defineAction({
  name: "getCategories",
  description: "Liste les catégories de produits disponibles",
  cacheTtl: 3600, // Cache 1 heure
  handler: async () => {
    return await fetchCategories();
  },
});

Optimiser les descriptions d’actions

Si le modèle appelle la mauvaise action, ajustez vos descriptions :

// Problème : le modèle confond searchProducts et getProductDetails
// Solution : descriptions plus distinctes

// searchProducts
description: "Recherche des produits par mot-clé dans le catalogue. Retourne une liste de résultats. Utilisez cette action quand l'utilisateur cherche quelque chose sans connaître le produit exact."

// getProductDetails
description: "Récupère les détails complets d'un produit spécifique par son identifiant. Utilisez cette action quand l'utilisateur veut plus d'informations sur un produit déjà identifié."

A/B testing

Le SDK supporte les expérimentations pour tester différentes approches :

import { experiment } from "@openai/apps-sdk";

app.action("showPricing", {
  description: "Affiche les options de tarification",
  handler: async (_, context) => {
    const variant = await experiment.getVariant(
      context.user.id,
      "pricing-layout"
    );

    if (variant === "A") {
      return { _widget: "pricingCards" }; // Cartes côte à côte
    } else {
      return { _widget: "pricingTable" }; // Tableau comparatif
    }
  },
});

Analysez ensuite les résultats :

const results = await experiment.getResults("pricing-layout");
// { A: { conversion: 0.12 }, B: { conversion: 0.18 } }
// Le tableau comparatif convertit 50 % mieux

Tableau de bord personnalisé

Créez votre propre dashboard en combinant les métriques du SDK avec vos données internes :

app.action("adminDashboard", {
  description: "Affiche le tableau de bord administrateur de l'application",
  auth: "required",
  handler: async (_, context) => {
    if (!isAdmin(context.user.id)) {
      throw new ActionError("FORBIDDEN", "Accès réservé aux administrateurs");
    }

    const [appMetrics, businessMetrics] = await Promise.all([
      analytics.getMetrics({ appSlug: "mon-app", period: "7d" }),
      getBusinessMetrics(), // Vos propres métriques
    ]);

    return {
      _widget: "adminDashboard",
      dau: appMetrics.dau.average,
      revenue: appMetrics.revenue.total,
      activeSubscriptions: businessMetrics.subscriptions,
      topActions: appMetrics.topActions,
    };
  },
});

Itérer sur les retours utilisateurs

Le Store permet aux utilisateurs de laisser des avis. Exploitez ces retours :

  • Répondez systématiquement aux avis négatifs avec un plan d’action
  • Identifiez les patterns dans les demandes de fonctionnalités
  • Mesurez l’impact de chaque mise à jour sur la rétention et les avis

Points clés à retenir

  • Le dashboard développeur expose les métriques d’engagement, rétention et revenus
  • Analysez les performances par action pour identifier les goulots d’étranglement
  • Parallélisez les appels et utilisez le cache pour réduire la latence
  • Le A/B testing permet de comparer différentes approches de manière empirique
  • Les descriptions d’actions bien rédigées réduisent les erreurs de routage du modèle
  • Itérez continuellement sur les retours utilisateurs et les métriques