Le probleme : 72% du temps en taches repetitives
Notre client, une PME e-commerce lyonnaise, avait une equipe commerciale de 12 personnes. L'analyse de leurs journees revelait que 72% de leur temps etait consacre a des taches a faible valeur ajoutee : qualification des leads, relances, mise a jour CRM, comptes-rendus.
Objectif : Automatiser 80% des taches repetitives en 3 mois. Budget 18 000 euros. ROI positif des le 4eme mois.
Architecture de l'agent LangGraph
from langgraph.graph import StateGraph, END
from typing import TypedDict, Literal
class CRMState(TypedDict):
lead_data: dict
qualification_score: float
next_action: str
communications: list
def route_action(state: CRMState) -> str:
score = state["qualification_score"]
if score > 0.8: return "email"
elif score > 0.5: return "enrich"
elif score > 0.2: return "crm_update"
else: return END
workflow = StateGraph(CRMState)
workflow.add_node("qualify", qualification_node)
workflow.add_node("enrich", enrichment_node)
workflow.add_node("email", email_agent_node)
workflow.add_node("crm_update", salesforce_update_node)
workflow.add_conditional_edges("qualify", route_action)
agent = workflow.compile()
Integration Salesforce via API
L'agent se connecte a Salesforce via l'API REST pour lire et mettre a jour les leads en temps reel. Chaque action est loggee avec le raisonnement de l'agent pour permettre l'auditabilite.
import simple_salesforce as sf
class SalesforceConnector:
def __init__(self):
self.client = sf.Salesforce(
username=os.getenv("SF_USERNAME"),
password=os.getenv("SF_PASSWORD"),
security_token=os.getenv("SF_TOKEN")
)
def update_lead_status(self, lead_id: str, status: str, notes: str) -> dict:
return self.client.Lead.update(lead_id, {
"Status": status,
"Description": notes,
"AI_Qualified__c": True,
"AI_Score__c": status,
"LastModifiedByAI__c": datetime.now().isoformat()
})
Resultats apres 3 mois
- +340% de productivite commerciale mesuree
- -60% de temps sur les taches administratives
- +28% de taux de conversion des leads
- ROI de 340% sur 12 mois (economies salaires + gain CA)
- Satisfaction equipe : 4.8/5 (liberation des taches ingrates)
Ce qui n'a pas marche (et ce qu'on a corrige)
Premier deploiement : l'agent etait trop agressif dans ses relances automatiques. On a ajoute un "human-in-the-loop" pour les leads chauds et configure des delais minimum entre contacts. Lecon : l'IA autonome doit rester supervisee au depart.