Tuto — Veille automatisée avec Symfony (Scheduler + Messenger)
Public visé : développeur Symfony qui veut planifier un traitement récurrent.
Objectif : poser le squelette du pipeline de veille (specs/ia-veille.md) : une tâche planifiée collecte des sources, puis un handler asynchrone résume et propose une entrée.
Les deux briques
- Scheduler : déclenche une tâche à intervalle régulier (cron applicatif, en PHP).
- Messenger : traite les messages en asynchrone (résilience, reprise, parallélisme).
Idée : le Scheduler émet un message « collecter la veille » à la cadence voulue ; un handler Messenger fait le travail.
1. Le message et son handler
final class CollectVeille { public function __construct(public string $theme = 'ia') {} } #[AsMessageHandler] final class CollectVeilleHandler { public function __construct( private SourceFetcher $fetcher, // récupère les flux private Deduplicator $dedup, // filtre le déjà -vu private Summarizer $summarizer, // résumé via Claude private VeilleWriter $writer, // écrit une proposition ) {} public function __invoke(CollectVeille $msg): void { foreach ($this->fetcher->fetch($msg->theme) as $item) { if ($this->dedup->seen($item)) { continue; } $summary = $this->summarizer->summarize($item); // conserve la source + lien $this->writer->propose($msg->theme, $item, $summary); // brouillon, pas publication } } }
2. Planifier l'émission (Scheduler)
#[AsSchedule('veille')] final class VeilleSchedule implements ScheduleProviderInterface { public function getSchedule(): Schedule { return (new Schedule())->add( RecurringMessage::cron('0 7 * * *', new CollectVeille('ia')) // tous les jours 7h ); } }
La cadence (
veille.schedule) et les sources (veille.sources) viennent de la configuration (spec §6).
3. Exécuter
- Lancer le worker Messenger :
php bin/console messenger:consume scheduler_veille async. - Le Scheduler émet
CollectVeilleà l'heure prévue ; le handler traite chaque item.
4. Garde-fous (non négociables)
- Sortie = proposition dans
pilotage/veille/, révisée par un humain — jamais de publication automatique. - Juridique : résumer + lien vers le texte officiel (CNIL, EUR-Lex), aucune affirmation faisant autorité (cf. fiche 6.1).
- Sources : citer systématiquement ; respecter les conditions d'utilisation des sources (résumé + lien, pas de copie intégrale).
Pour aller plus loin
- Spec veille :
specs/ia-veille.md - Veille existante (destination) :
pilotage/veille/README.md - Agents & automatisation (cadre) : fiche 4.5