BTP AI - Automatisez vos propositions commerciales, facturation, fluidifiez vos interventions et la rédaction de vos rapports
Simply ask the Agent to modify your documents, before sending the client a secure signature and payment link
Record your meetings with clients and scan their house using Gemini Live, then automatically generate a report and conclusions for your client.
Le projet est au profit de l'agence d'ingénierie structurelle Efora et de son CEO Hamid El Garroudi. Notre but est d'automatiser les logiques métier ci-dessous:
Un guide d'utilisation est disponible ici
- Frontend: React (Next.js) + Shadcn UI / Tailwind CSS
- Backend: Supabase (PostgreSQL, Auth, Storage, Edge Functions)
- Automatisation: n8n (workflows d'automatisation)
Un projet comporte toujours un client identifié par un socID Dolibarr, un project_id Dolibarr, un nom, une description, une date de début et une date de fin. Un projet peut contenir plusieurs devis et factures.
Un projet peut-être créé de deux façons:
- Manuellement via la navbar (formulaire React)
- Automatiquement lorsqu'un client envoi un mail à l'adresse
agence@efora.fravec un objet contenant 'demande de devis' (workflow n8n)
Dans les deux cas l'agent tentera d'identifier le type de projet à partir des rangées de la table templates. Ces templates sont modifiables via la page réglages de l'application.
- L'utilisateur clique sur "Nouveau Projet" dans la navbar.
- Un formulaire s'affiche pour saisir les informations du projet.
- À la soumission, l'API Dolibarr crée le projet et renvoie le project_id.
- Si le client n'est pas enregistré dans Supabase, il est ajouté.
- Le projet est enregistré dans Supabase avec le project_id et le socid en foreign key. Un dossier est créé dans Dropbox pour le projet. Les dossier Dropbox suivent cette nomenclature: IDENTIFIANT_NOM_PRENOM_TITRE
- Une génération de devis est lancée automatiquement, une confirmation de création est affichée à l'utilisateur.
- L'utilisateur est redirigé vers la page du projet à l'issue de la génération de devis.
- Le workflow identifie si des pièces jointes sont présentes. Seules les images et PDF sont acceptés.
- Si oui, elles sont extraites et converties en base64 pour interprétation par l'Agent IA.
- Sinon, le flow passe à l'étape 4.
- L'Agent IA analyse le contenu du mail et des pièces jointes pour extraire les informations nécessaires à la création du projet.
- Si aucun client est identifié avec l'adresse mail de l'envoyeur, il est ajouté. Les champs nécessaires sont remplis avec les informations extraites (nom, prénom, adresse, code postal). Si ces informations ne sont pas disponibles, l'agent les demande par mail à l'envoyeur.
- Le projet est créé dans Dolibarr via l'API, et le project_id est récupéré.
- Le projet est enregistré dans Supabase avec le project_id et le socid en foreign key et la colonne email_created est True. Un dossier est créé dans Dropbox pour le projet. Les dossier Dropbox suivent cette nomenclature: IDENTIFIANT_NOM_PRENOM_TITRE
- Une génération de devis est lancée automatiquement.
- Hamid reçoit un mail de confirmation avec les détails du projet et une invitation à consulter la page du projet.
- Le contenu du mail est enregistré dans la table conversations avec project_id en foreign key.
Un devis est toujours rattaché à un projet identifié par son project_id Dolibarr. Le devis est visualisé dans le frontend via un composant React.js prenant un devis_json issu de l'API Dolibarr en prop.
Un devis peut contenir plusieurs lines (prestations). L'utilisateur a la possiblité de modifier le devis à l'aide de langage naturel via un champ de texte libre. Les modifications sont envoyées à l'agent IA n8n. L'agent a accès à plusieurs outils notamment la récupération du dossier client et dossier projet via Dolibarr ainsi qu'un outil de recherche multimodale (l'agent fait une requête, l'outil renvoie des images en base64 de devis passés correspondant à la requête).
Après modification, une nouvelle ligne est ajoutée à la table devis. La web app poll la table périodiquement pour récupérer le devis le plus récent pour un project_id donné.
Lorsque l'utilisateur est satisfait de son devis, il clique sur "Approuver et Envoyer". L'identifiant de devis et de projet est envoyé à N8N qui note la proposition comme validée dans Dolibarr et dans Supabase.
Le devis est enregistré dans Dropbox, et un lien de signature est généré via YouSign. Le client reçoit une invitation à signer le devis, et est relancé tous les jours par YouSign.
Le devis est noté au statut devis_valide et le projet au statut devis_envoye dans Supabase.
(NB: il y a possibilité de signaler un devis comme signé manuellement via la timeline du projet)
L'endpoint de génération est automatiquement déclenché, cependant il peut être déclenché manuellement via un bouton dans l'onglet Factures de la page projet en spécifiant 'advance' ou 'final' pour acompte ou solde.
L'agent crée un objet de facture Dolibarr puis la facture est crée dans Dolibarr, le statut de la facture est noté facture_generee dans Supabase avec le project_id en foreign key.
La facture est modifiable via une interface similaire à celle des devis.
Lorsque l'utilisateur est satisfait de sa facture, il clique sur "Approuver et Envoyer". L'identifiant de facture et de projet est envoyé à N8N qui note la proposition comme validée dans Dolibarr et dans Supabase. Un produit est créé via Stripe et la facture est envoyée au client par mail avec un lien de paiement Stripe.
Après paiement de la facture, l'agent de booking est déclenché. Il récupère les informations du projet et du client, puis propose trois créneaux de rendez-vous pour une visite technique. Le client reçoit un mail avec les créneaux et peut en choisir un en répondant au mail. Une fois le créneau choisi, l'agent met à jour le statut du projet à planifie et envoie une confirmation au client.
Deux outils sont disponibles pour Hamid durant ses interventions:
- L'agent Gemini Live qui est disponible dans l'onglet 'Camera' de la page projet. Il permet prendre de transcrire les notes dictées par Hamid et de prendre des photos à l'aide d'un bouton. Lorsqu'une photo est prise, la photo est envoyée en base64 à un Agent IA n8n afin d'annoter et de sauvegarder les pièces jointes dans le dossier client DropBox. Le contexte de transcription est envoyé à n8n lorsqu'une photo est prise afin d'améliorer l'annotation des photos.
- L'outil de téléversement de photos manuel est disponible dans l'onglet 'Pièces Jointes' de la page projet. Il permet de téléverser des photos qui sont envoyées en base64 à un Agent IA n8n afin d'annoter et de sauvegarder les pièces jointes dans le dossier client DropBox.
Après la visite technique et le téléversement des pièces jointes, l'utilisateur peut générer un rapport d'intervention. Le rapport est généré par un Agent IA n8n qui compile les notes dictées, les photos annotées et les informations du projet pour créer un objet JSON.
Chaque type de rapport a son schéma JSON. Cependant leur forme globale ne différe pas, seules les descriptions et noms des propriétés sont différentes afin de guider la génération des rapports. Chaque Schéma a:
- l'objet
informations_generalesqui comporte les informations de base du projet (nom, prénom, adresse, date de début, date de fin, rédacteur, etc) - une liste
sommairedétaillant le titre des sections requises dans le rapport - une liste d'objets de type section ayant tous la forme
titre,contenuetéléments_media(liste de photos url dropbox avec légendes) - une liste
sections_personaliséesqui suit la même forme que les autres sections, utilisée pour les sections non standards.
Le rapport est converti en base64 côté client, téléchargé sur le disque dur, puis envoyé à n8n pour être envoyé par mail au client et sauvegardé dans le dossier Dropbox du projet.
Le client reçoit un formulaire par mail avec un lien vers le rapport. Le formulaire permet 3 choix:
- Approuver le rapport, dans ce cas une facture solde de tout compte est générée automatiquement pour validation par Hamid.
- Demander des révisions, dans ce cas le client peut spécifier les modifications souhaitées. Un mail est envoyé à Hamid pour l'informer des modifications demandées. Hamid peut modifier le rapport via le chat et le revalider. Un versionage est intégré (e.g RapportTitre-1, RapportTitre-2, etc) et chaque version validée est enregistrée dans DropBox.
- Demander des études complémentaires, dans ce cas un nouveau projet et devis sont créés et Hamid est notifié par mail.
L'API Dolibarr est utilisée pour la gestion des clients, projets, devis et factures. Voici quelques points importants à noter:
- la clé API est disponible dans le fichier transmis à Mikhaël. La clé APi doit-être passée en header des requètes HTTP:
DOLAPIKEY: clé api. - la documentation REST est de très mauvaise qualité, aucune source ne concentre toutes les informations. Je conseille d'utiliser Perplexity AI pour vos recherches, le forum français Dolibarr est une très bonne source pour les cas d'usage les plus avancés, et ce blog post est une bonne introduction
- l'API Dolibarr est rigoureuse sur les verbes HTTP, il faut bien vérifier que l'on utilise le bon verbe (GET, POST, PUT, DELETE), de plus un verbe post crée et ne renvoie pas l'objet créé (POST pour créer, renvoie l'ID du projet puis GET /projets/ID pour récupérer l'objet créé).
- Lors de tests de créations de factures, bien penser à supprimer les factures test dans Dolibarr dans les plus brefs délais car si une facture pour un autre projet est crée, alors les factures précédentes ne pourront pas être supprimées (sous peine d'un trou dans comptabilité)
- Un client Test1 a été créé avec mon adresse mail personelle, je conseille de changer cette adresse mail pour bien recevoir les mails clients.




