1. Le problème : les annonces sont le type de message le moins lu sur Discord
Chaque administrateur de communauté connaît le schéma. Vous rédigez une annonce soignée, l'épinglez, mentionnez tout le monde, et en moins d'une heure, elle est ensevelie sous les mèmes et deux disputes. Discord est un flux en temps réel sans couche éditoriale. Un membre qui s'est connecté le mardi ne verra jamais ce que vous avez publié le lundi.
Un résumé hebdomadaire remplace ce pari par un contrat différent. Au lieu de pousser plus de messages dans le flux, il extrait la semaine du flux et la republie sous la forme d'un document structuré et facile à parcourir. Le résumé est généré à partir des conversations des membres, et non des annonces de l'administrateur. C'est cette distinction qui l'empêche de ressembler à du marketing.
2. Le pipeline : échantillonner, regrouper, rédiger, publier
La tâche de résumé Sovereign s'exécute chaque lundi à 09:00 UTC. Elle échantillonne les messages des 7 derniers jours (jusqu'à 100, en ne conservant que le contenu réel de plus de 3 caractères), détermine la langue cible à partir d'une chaîne de priorité — langue du tableau de bord, puis paramètres du locataire, puis locale préférée de la guilde Discord, puis une option de secours — et transmet l'échantillon au LLM sous un contrat de prompt strict.
Ce contrat est le contrôle qualité. Le prompt interdit le remplissage corporatif, limite la sortie à 15-20 lignes, et impose une structure fixe en trois blocs : points saillants clés (3-4 puces factuelles), victoires et métriques (2 points courts), et deux priorités pour la semaine à venir. Le modèle est instruit de baser chaque ligne sur les messages réels de l'échantillon. Il n'invente pas de repères.
Le résumé publié est stocké avec ses limites de semaine, son sommaire et ses principaux sujets, de sorte que le même contenu peut être rejoué sous forme d'e-mail de newsletter, de fil de discussion de forum ou de message de canal épinglé.
// Language resolution: dashboard UI > tenant settings > guild locale > fallback
const LANG_PRIORITY = [targetLang, settings.language, guildLocale, 'fr'];
const effectiveLang = LANG_PRIORITY.find(Boolean);
// 7-day sampling window, max 100 messages, real content only
const weekStart = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000);
const sample = await prisma.unifiedMessage.findMany({
where: { member: { tenantId }, createdAt: { gte: weekStart } },
orderBy: { createdAt: 'asc' },
take: 100
});
// Prompt contract enforced on the LLM:
// 1. Key highlights: 3-4 factual bullets taken from real messages
// 2. Wins & metrics: 2 short points
// 3. Focus for the week: 2 priorities
// Hard cap: 15-20 lines. Corporate filler: forbidden.3. Publication : le webhook du Fondateur, pas une publication de bot
Sovereign publie le résumé via un webhook de canal habillé du profil de marque de la communauté — nom et avatar du fondateur ou de l'entreprise, jamais le nom d'utilisateur du bot. Les membres le lisent comme une voix humaine, ce qui modifie à la fois l'engagement et la confiance.
Discord limite les messages à 2 000 caractères, donc le pipeline découpe le résumé à 1 900 caractères et publie les morceaux en séquence. Si aucun webhook n'est disponible, le bot utilise un message normal. Un mécanisme, deux chemins, aucune logique dupliquée.
Le prompt du résumé interdit explicitement le remplissage corporatif et le marketing générique. Si la semaine n'a produit aucun point saillant réel, le résumé le mentionne. Une semaine creuse honnête inspire plus confiance qu'une semaine impressionnante inventée.