Section 11.5.8 : Intégrer les automatisations (workflows)
🎯 Objectif pédagogique
Connecter votre application IA à des workflows d'automatisation (Make, Zapier, webhook). Vous serez capable d'automatiser des actions déclenchées par votre chatbot : notifications, emails, logs.
Le chatbot qui déclenche des actions
Marc a un chatbot qui répond. Maintenant il veut qu'il agisse au-delà du texte : envoyer un email de résumé, logger les conversations dans Google Sheets, notifier sur Slack. C'est la puissance de l'intégration avec les outils d'automatisation de la Semaine 3.
Webhook — Le pont entre votre app et Make/Zapier
# webhook_client.py — Envoyer des données à des webhooks
import requests
import json
from datetime import datetime
class WebhookClient:
"""Client pour envoyer des données à des webhooks Make/Zapier."""
def __init__(self, webhook_urls=None):
self.webhooks = webhook_urls or \{\}
def send(self, webhook_name, data):
"""Envoyer des données à un webhook."""
url = self.webhooks.get(webhook_name)
if not url:
print(f"Webhook '\{webhook_name\}' non configuré.")
return None
payload = \{
"timestamp": datetime.now().isoformat(),
"source": "CareerBot Pro",
**data
\}
try:
response = requests.post(url, json=payload, timeout=10)
return response.status_code == 200
except requests.RequestException as e:
print(f"Erreur webhook: \{e\}")
return False
# Configuration des webhooks
webhooks = WebhookClient(\{
"conversation_log": "https://hook.eu2.make.com/xxxxx",
"weekly_report": "https://hooks.zapier.com/xxxxx",
"slack_notification": "https://hook.eu2.make.com/yyyyy",
\})
Scénarios d'automatisation
# Actions automatisées déclenchées par le chatbot :
# 1. Logger chaque conversation dans Google Sheets
def log_conversation(user_question, bot_response, tools_used):
webhooks.send("conversation_log", \{
"question": user_question[:500],
"response": bot_response[:500],
"tools_used": tools_used,
"model": "gpt-4o-mini"
\})
# 2. Envoyer un résumé hebdomadaire par email
def send_weekly_summary(stats):
webhooks.send("weekly_report", \{
"total_conversations": stats["total"],
"top_questions": stats["top_questions"],
"avg_satisfaction": stats["satisfaction"],
"report_period": "last_7_days"
\})
# 3. Alerter sur Slack si le bot échoue
def alert_on_error(error_message, user_question):
webhooks.send("slack_notification", \{
"type": "error",
"error": error_message,
"trigger_question": user_question[:200],
"severity": "high"
\})
Intégration dans l'agent
# Dans agent.py, après chaque réponse :
class CareerAgentRAG:
def chat(self, user_message):
# ... (code existant) ...
response = "..." # Réponse générée
# Logger automatiquement
try:
log_conversation(
user_question=user_message,
bot_response=response,
tools_used=[tc.function.name for tc in msg.tool_calls] if msg.tool_calls else []
)
except Exception:
pass # Le logging ne doit jamais bloquer la réponse
return response
Workflow Make : Chatbot → Google Sheets → Email
Workflow automatisé dans Make :
1. TRIGGER : Webhook reçoit les données du chatbot
↓
2. Google Sheets : Ajouter une ligne (question, réponse, date)
↓
3. Filter : Si tools_used contient "analyze_profile"
↓
4. Gmail : Envoyer un email de résumé à l'utilisateur
"Voici l'analyse de votre profil : [contenu]"
↓
5. Slack : Notification au channel #careerbot-logs
"Nouvelle analyse de profil effectuée"
Webhook = Fire and forget
L'appel webhook est asynchrone dans l'esprit : votre chatbot envoie les données et continue. Si Make/Zapier est en panne, le chatbot fonctionne toujours. Le logging et les notifications sont des bonus, pas des dépendances critiques. C'est le pattern "fire and forget".
🏋️ Exercice pratique (20 minutes)
- →Créez un webhook Make ou Zapier de test
- →Implémentez le
WebhookClient - →Intégrez le logging automatique dans votre agent
- →Vérifiez que les données arrivent dans Make/Zapier
Pourquoi le webhook ne doit-il pas bloquer la réponse du chatbot en cas d'erreur ?