Ce que vous allez apprendre
3 briques CE natives
base_automation · ir.actions.server · ir.cron — toutes gratuites et intégrées.
Déclencheurs puissants
À la création, à la modification, à un changement de statut, ou programmé.
Actions Python
Un petit snippet Python pour message_post, write, create, appels modèles.
Cron pour le récurrent
Tâches programmées (daily, hourly, ponctuel) — rappels, nettoyages, sync.
Anatomie d'un scénario d'automation CE
Quatre scénarios concrets InfoSphere — chacun suit le même schéma : Trigger → Filtre → Action serveur → Résultat. Ce pattern couvre 80% des besoins du Marketing Automation Enterprise, sans licence.
Les déclencheurs à froid
(on_create, on_state_set, on_create_or_write)
réagissent aux événements métier. Le ir.cron couvre les scénarios
programmés (rappel J-1, nettoyage hebdo, rapports mensuels).
InfoSphere sans Enterprise — mais avec les 4 scénarios
Karim est sur Odoo Community Edition (CE). Il a besoin de quatre automatisations pour professionnaliser la communication :
- Bienvenue newsletter — dès qu'un visiteur s'inscrit sur le site, lui envoyer automatiquement un message de bienvenue + le tagger à onboarder.
- Enrichissement CRM — chaque inscription d'événement confirmée alimente la liste Prospects événements du mass mailing pour relance ultérieure.
- Alerte grosse commande — dès qu'une
sale.orderdépasse 50 000 DZD, notifier l'équipe CRM pour organiser un suivi VIP sous 48h. - Rappel SMS J-1 — tous les jours à 18h, envoyer un SMS de rappel à tous les inscrits aux événements InfoSphere ayant lieu le lendemain (réduit le no-show de 65%).
Les trois premiers utilisent base_automation + une action serveur.
Le quatrième utilise ir.cron. Zéro licence Enterprise.
Étape 1 — Activer les Automation Rules
Le module base_automation est présent dans Odoo CE mais
non installé par défaut. Pour l'activer :
- Active le mode développeur (Paramètres → Activer le mode développeur)
- Va dans Apps
- Recherche « Automation Rules »
- Installe — un nouveau menu Technique → Automation Rules apparaît
Les 3 automations InfoSphere créées : le trigger (on_create / on_state_set / on_create_or_write) est bien visible dans la liste. Chaque règle peut être désactivée temporairement pour tests sans suppression.
Une Automation Rule (base.automation) combine :
- Modèle cible (
mailing.contact,event.registration,sale.order…) - Trigger — on_create, on_create_or_write, on_state_set, on_time (périodique), on_unlink
- Filter domain — condition Odoo classique
(
[('amount_total','>',50000)]) - Actions serveur à exécuter — one2many vers
ir.actions.server
Étape 2 — Scénario 1 : Nouvel inscrit newsletter
Trigger on_create sur mailing.contact avec filtre
list_ids != False. Dès qu'un nouveau contact est créé et qu'il
appartient à au moins une liste, l'action serveur s'exécute.
Le formulaire de la règle : trigger À la création, filtre sur liste non vide, action serveur liée.
Le code Python de l'action serveur est volontairement court — l'environnement
expose records (le recordset déclenchant) et env
(l'environnement Odoo complet) :
for rec in records:
rec.message_post(
body=f"Bienvenue {rec.name} ! Votre email "
f"{rec.email} est bien enregistré."
)
En production, tu remplacerais ce message_post par un appel à un
template d'email (env['mail.template'].browse(X).send_mail(rec.id))
ou à l'API mass_mailing pour ajouter automatiquement à une campagne d'onboarding.
ir.actions.server
interdit import, open(), exec(), et les
assignations d'attributs directs (rec.field = x). Préfère toujours
rec.write({'field': x}). Pour les dates, utilise
fields.Datetime.now() (pas datetime.datetime.now()).
Étape 3 — Scénario 2 : Inscription event → liste Prospects
Trigger on_state_set sur event.registration.
Ce trigger se déclenche lorsqu'un champ state passe à une valeur
donnée — dans notre cas open (inscription confirmée).
Trigger on_state_set configuré sur state=open — la règle ne se déclenche que lorsque l'inscription passe en « confirmée », pas à chaque modification.
Le code Python synchronise l'inscription vers la liste de diffusion (ré-utilisation du contact existant ou création s'il est nouveau) :
MailingContact = env['mailing.contact']
MailingList = env['mailing.list']
prospects = MailingList.search([('name','ilike','Prospects')], limit=1)
for reg in records:
if reg.email and prospects:
contact = MailingContact.search(
[('email','=',reg.email)], limit=1
)
if contact:
contact.write({'list_ids': [(4, prospects.id)]})
else:
MailingContact.create({
'name': reg.name, 'email': reg.email,
'mobile': reg.phone,
'list_ids': [(6, 0, [prospects.id])],
})
Résultat : la liste de diffusion Prospects événements s'enrichit automatiquement à chaque inscription confirmée, sans intervention manuelle.
Étape 4 — Scénario 3 : Grosse commande → alerte CRM
Trigger on_create_or_write sur sale.order avec filtre
state='sale' AND amount_total > 50000. Chaque commande validée
et > 50 000 DZD déclenche une notification sur le chatter, visible de toute
l'équipe commerciale.
Règle Commande > 50 000 DZD → notification équipe CRM — filtre domaine Odoo natif combinant statut et montant.
for order in records:
order.message_post(
body=f"Grosse commande {order.name} — "
f"{order.amount_total:,.0f} {order.currency_id.name} "
f"chez {order.partner_id.name}. À relancer sous 48h.",
message_type='notification',
)
order.activity_schedule()
pour créer une activité CRM assignée au commercial ; et
env['discuss.channel'].sudo().browse(X).message_post() pour poster
dans un canal Discuss dédié (ex: #ventes-vip).
Étape 5 — Scénario 4 : Cron quotidien SMS rappel J-1
Pour les scénarios programmés (pas réactifs à un événement),
la bonne brique est ir.cron. Un cron se définit avec un intervalle
(1 jour, 2 heures, etc.) et du code Python exécuté à chaque
déclenchement.
La liste des ir.cron — le cron InfoSphere
SMS J-1 — rappel événements est présent aux côtés des crons système
(queue SMS, queue mail, purge, etc.). Désactivé par défaut pour les tests.
Le code du cron récupère tous les event.registration confirmées dont
l'événement a lieu demain, puis poste un message (en production,
ce serait env['sms.api']._send_sms(...)) :
# Cron quotidien — fields.Datetime obligatoire (pas datetime)
tomorrow_start = fields.Datetime.add(fields.Datetime.now(), days=1)
day_after = fields.Datetime.add(tomorrow_start, days=1)
regs = env['event.registration'].search([
('state', '=', 'open'),
('event_id.date_begin', '>=', tomorrow_start),
('event_id.date_begin', '<', day_after),
])
for reg in regs:
if reg.phone and reg.event_id:
# En prod : env['sms.api']._send_sms(numbers=[reg.phone], body='...')
reg.message_post(
body=f"SMS rappel envoyé à {reg.phone} "
f"pour {reg.event_id.name}"
)
limit=100 pour éviter les crons longs ; logue les erreurs via
_logger.info(...) ; respecte le timezone avec
fields.Datetime.context_timestamp().
Le résultat pour InfoSphere
Trois mois après le déploiement des 4 scénarios automatisés sur Odoo CE :
0 €
de licence Enterprise — tout fonctionne sur Community Edition native
-65%
de no-show aux événements (SMS J-1 automatisé, 6,3% vs 18% avant)
+240
contacts ajoutés automatiquement à la liste Prospects événements
100%
des grosses commandes suivies sous 48h (vs 60% avant l'alerte auto)
Récapitulatif — Les bonnes pratiques
- ✅ Filtrer serré — un filtre domaine précis évite les déclenchements inutiles et les boucles
- ✅ Python minimaliste — chaque action serveur fait une seule chose, pour la lisibilité et le debug
- ✅ Logguer les exécutions avec
message_postsur l'enregistrement — traçabilité gratuite
- ✅ Désactiver avant suppression — un simple toggle active permet de tester sans perdre la config
- ✅ Crons < 5 min — au-delà, passe en queue job asynchrone pour ne pas bloquer
- ✅ Backup avant prod — un mauvais filtre peut envoyer 1000 emails en 10 secondes
En résumé
Odoo 19 Community Edition fournit les briques
base_automation, ir.actions.server et
ir.cron — trio suffisant pour automatiser 80% des scénarios
marketing sans passer à Enterprise. Les PME algériennes gagnent ainsi
la puissance de Marketing Automation sans le coût de licence.
Prochaine étape (S6·4/4) : clôturer la Saison 6 avec le scoring et la qualification des leads — attribuer des points automatiques aux prospects selon leur comportement (ouverture email, visite page prix, réponse NPS) pour router les hot leads vers le commercial.
🎯 Approfondir — Marketing & Communication
Autres articles du même domaine :
Site Web, eCommerce & Engagement
Marketing & Communication
Marketing & Communication
Suite de la Saison 6 — Marketing & Communication
Articles complémentaires
Sur les mêmes thématiques : #intermediaire#avance
🎯 Marketing & Communication · Saison 6
📦 Stocks & Logistique · Saison 1
📦 Stocks & Logistique · Saison 1