Aller au contenu principal

Flux de Recherche Globale et Intelligence Artificielle

Ce document explique comment fonctionne la recherche globale et l'intégration de l'intelligence artificielle pour créer des vues personnalisées et exécuter des actions complexes.

🔍 Recherche Globale

Fonctionnement Actuel

  1. Ouverture : Appuyer sur Cmd+K (Mac) ou Ctrl+K (Windows/Linux) ouvre la modal de recherche
  2. Saisie : L'utilisateur tape dans le champ de recherche
  3. Déclenchement automatique : La recherche se lance automatiquement après 300ms de pause (debounce)
  4. Résultats : Les résultats s'affichent en temps réel (sessions, contacts, devis, factures, pages Notion)
  5. Actions rapides : Les actions rapides (créer session, créer contact) sont affichées en bas de la liste des résultats

Détails Techniques

  • Debounce : 300ms pour éviter trop d'appels API
  • Cache : 30 secondes pour les requêtes valides, 5 minutes en mémoire
  • Limite : 10 résultats par type d'entité
  • Ordre d'affichage : Sessions → Contacts → Devis → Factures → Pages Notion → Actions rapides

🤖 Intelligence Artificielle Intégrée

Prérequis

⚠️ Important : L'IA ne fonctionne que si l'utilisateur a configuré une clé API OpenAI dans les paramètres de connexions. Si OpenAI n'est pas configuré, les fonctionnalités IA ne seront pas disponibles.

Flux Complet

Étape 1 : Détection d'une Requête IA

L'interface détecte automatiquement si la requête ressemble à une demande IA. La détection fonctionne en français et en anglais :

Patterns français détectés :

  • je veux créer, je veux, créez moi, créez-moi
  • crée, créer, montre, montrer, affiche, afficher
  • quel, quelle, combien, liste, lister
  • trouve, trouver, filtre, filtrer, vue
  • Expressions : avec, qui, dont

Patterns anglais détectés :

  • i want to create, i want, create for me, create me
  • create, show, display, what, how many
  • list, find, filter, view
  • Expressions : with, that, which

Autres déclencheurs :

  • Commence par ? ou /
  • Contient des expressions de filtrage : "avec", "qui", "dont", "with", "that", "which"

Exemples de requêtes détectées :

  • je veux créer une session pour Jean Dupont
  • créez moi un contact pour Marie Martin
  • I want to create a quote for 2000€
  • create for me a session for wedding on August 22
  • sessions avec montant > 2000
  • show contacts with email

Étape 2 : Traitement IA (Automatique)

Si la requête est détectée comme IA ET que l'utilisateur a OpenAI configuré :

  1. Bouton "✨" visible : Un bouton Sparkles apparaît dans le champ de recherche

  2. Clic sur "✨" : L'utilisateur clique pour activer l'IA

  3. Appel API : POST /api/search/ai/process

  4. Classification : L'IA détermine l'intent :

    • search : Recherche simple avec filtres
    • create_view : Création de vue personnalisée (non implémenté actuellement)
    • execute_action : Exécution d'action (auto-déclenché)
    • question : Question à répondre
    • unknown : Intent non reconnu
  5. Résultat : L'IA retourne :

    • L'intent détecté
    • Un niveau de confiance (0-1)
    • Des filtres structurés (si applicable)
    • Une réponse textuelle (si applicable)

Étape 3 : Affichage et Exécution

Si l'intent est create_view ou search avec des filtres :

  1. Affichage : Un panneau apparaît avec :

    • L'intent détecté
    • Le niveau de confiance
    • La réponse de l'IA
    • Les filtres générés (sous forme de badges)
  2. Actions disponibles :

    • "Appliquer les filtres" : Applique les filtres à la recherche actuelle

Si l'intent est execute_action :

  1. Auto-exécution : L'action est automatiquement générée et exécutée sans intervention de l'utilisateur
  2. Affichage : Un indicateur de chargement apparaît pendant l'exécution
  3. Notifications : Des notifications in-app et push sont créées automatiquement :
    • Notification de succès avec détails de l'action
    • Notification d'échec en cas d'erreur
  4. Fermeture : La modal de recherche se ferme automatiquement après l'exécution

Exemples Concrets

Exemple 1 : Recherche avec Filtres

Requête utilisateur : "sessions de mariage en juillet 2024 avec montant > 2000€"

  1. Détection : La requête contient "avec", donc détectée comme IA

  2. Traitement IA :

    {
    "intent": "search",
    "confidence": 0.95,
    "parsedQuery": {
    "entity": "sessions",
    "filters": [
    { "field": "type", "operator": "equals", "value": "mariage" },
    { "field": "date", "operator": "between", "value": ["2024-07-01", "2024-07-31"] },
    { "field": "amount", "operator": "greater_than", "value": 2000 }
    ]
    }
    }
  3. Affichage : Panneau avec les filtres générés

  4. Application : Clic sur "Appliquer les filtres" pour utiliser les filtres générés

Exemple 2 : Création Automatique d'Action

Requête utilisateur : "je veux créer une session pour Fred Le Marquier pour son mariage le 22 août 2026 au château de garde"

  1. Détection : La requête commence par "je veux créer", donc détectée comme IA

  2. Traitement IA :

    {
    "intent": "execute_action",
    "confidence": 0.98,
    "parsedQuery": {
    "action": {
    "type": "composite",
    "actions": [
    {
    "type": "create_contact",
    "parameters": {
    "first_name": "Fred",
    "last_name": "Le Marquier"
    }
    },
    {
    "type": "create_session",
    "parameters": {
    "contact_id": "{contact_id}",
    "title": "Mariage",
    "start_date": "2026-08-22T10:00:00Z",
    "location": "Château de Garde"
    }
    }
    ]
    }
    }
    }
  3. Auto-exécution :

    • Génération automatique de l'action
    • Exécution séquentielle (création du contact, puis de la session)
    • Remplacement des placeholders ({contact_id}) entre les actions
  4. Notifications :

    • Notification in-app : "✅ Contact créé par IA"
    • Notification in-app : "✅ Session créée par IA"
    • Push notifications envoyées automatiquement
  5. Fermeture : La modal se ferme automatiquement après 1.5 secondes

📊 Architecture

┌─────────────────┐
│ GlobalSearch │
│ Component │
└────────┬────────┘

├─► Recherche automatique (debounce 300ms)
│ └─► GET /api/search/global?q=...

└─► Détection requête IA

├─► Vérification OpenAI configuré

├─► Bouton "✨" visible (si OpenAI OK)

└─► Clic sur "✨"

└─► POST /api/search/ai/process

├─► Intent: search/create_view
│ ├─► Affichage filtres
│ └─► Bouton "Appliquer les filtres"

├─► Intent: execute_action
│ ├─► POST /api/search/ai/generate-action (auto)
│ ├─► POST /api/search/ai/execute-action (auto)
│ ├─► Création notification in-app
│ ├─► Envoi push notification
│ └─► Fermeture automatique de la modal

└─► Intent: question
└─► Affichage réponse

🔔 Notifications

Notifications In-App

Lorsqu'une action IA est exécutée, une notification est automatiquement créée dans le centre de notifications :

  • Succès : "✅ [Type d'action] créé par IA" avec détails
  • Échec : "❌ Échec: [Type d'action]" avec message d'erreur

Push Notifications

En plus des notifications in-app, des push notifications sont envoyées automatiquement :

  • Titre : "✅ [Type d'action] par IA" ou "❌ Échec: [Type d'action]"
  • Corps : Description de l'action ou message d'erreur
  • Données : Métadonnées de l'action (type, succès, résultat)

Les push notifications fonctionnent même si l'application est fermée, permettant aux utilisateurs de rester informés des actions exécutées par l'IA.

🎯 Points Importants

  1. Recherche automatique : Se lance automatiquement après 300ms de pause
  2. Vérification OpenAI : L'IA ne s'active que si l'utilisateur a OpenAI configuré
  3. Détection multilingue : Détection en français et en anglais
  4. Auto-exécution : Les actions sont exécutées automatiquement sans intervention
  5. Notifications automatiques : Notifications in-app et push pour toutes les actions
  6. Actions rapides en bas : Les actions rapides sont toujours affichées en bas de la liste
  7. Cache : Les réponses IA sont mises en cache 5-10 minutes pour réduire les coûts

🔧 Améliorations Futures

  1. Auto-détection améliorée : Détecter automatiquement les requêtes IA et lancer le traitement sans clic
  2. Historique des recherches : Sauvegarder les recherches fréquentes
  3. Vues sauvegardées : Réintroduire la fonctionnalité de vues sauvegardées (retirée temporairement)