Se rendre au contenu

Automatiser vos campagnes avec Odoo 19 CE

Saison 6 · Article 3/4 — Marketing & Communication
26 avril 2026 par
Automatiser vos campagnes avec Odoo 19 CE
B.Mustapha

Saison 6 · Article 3/4 — Marketing & Communication

Automatiser vos campagnes avec Odoo 19 CE

Le module Marketing Automation est réservé à Odoo Enterprise. Mais la majorité des PME algériennes tournent sur Community Edition — et s'en privent injustement. Bonne nouvelle : avec base_automation, ir.actions.server et ir.cron, on atteint 80% des fonctionnalités du module EE, sans aucun coût de licence. Voici comment InfoSphere orchestre ses scénarios automatisés sur Odoo 19 CE.

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.

4 scénarios d'automation CE InfoSphere

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 :

  1. Bienvenue newsletter — dès qu'un visiteur s'inscrit sur le site, lui envoyer automatiquement un message de bienvenue + le tagger à onboarder.
  2. Enrichissement CRM — chaque inscription d'événement confirmée alimente la liste Prospects événements du mass mailing pour relance ultérieure.
  3. Alerte grosse commande — dès qu'une sale.order dépasse 50 000 DZD, notifier l'équipe CRM pour organiser un suivi VIP sous 48h.
  4. 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 :

  1. Active le mode développeur (Paramètres → Activer le mode développeur)
  2. Va dans Apps
  3. Recherche « Automation Rules »
  4. Installe — un nouveau menu Technique → Automation Rules apparaît
Liste des 3 automation rules InfoSphere

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…)
  • Triggeron_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.

Formulaire automation bienvenue newsletter on_create

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.

Contraintes safe_eval : le sandbox de 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).

Formulaire automation event on_state_set

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.

Formulaire automation grosse commande sale.order

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',
    )
Pattern pro : ajoute 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.

Liste des ir.cron avec le cron SMS J-1

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}"
        )
Bonnes pratiques cron : limite toujours le scope avec 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_post sur 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 :

Sondages & quiz certifiants

Site Web, eCommerce & Engagement

Email Marketing

Marketing & Communication

SMS Marketing

Marketing & Communication

Suite de la Saison 6 — Marketing & Communication

Articles complémentaires

Sur les mêmes thématiques : #intermediaire#avance

Lead Scoring CE

🎯 Marketing & Communication · Saison 6

Unités de mesure

📦 Stocks & Logistique · Saison 1

Traçabilité lots & séries

📦 Stocks & Logistique · Saison 1

SMS Marketing avec Odoo 19
Saison 6 · Article 2/4 — Marketing & Communication