1. Problemet: meddelanden är den minst lästa meddelandetypen på Discord
Varje community-administratör känner igen mönstret. Du skriver ett noggrant meddelande, fäster det, pingar alla, och inom en timme är det begravt under memes och två argument. Discord är en realtidsström utan ett redaktionellt lager. En medlem som loggade in på tisdagen kommer aldrig att se vad du postade på måndagen.
En veckosammanfattning ersätter den satsningen med ett annat kontrakt. Istället för att trycka in fler meddelanden i strömmen, drar den ut veckan ur strömmen och återpublicerar den som ett strukturerat, överskådligt dokument. Sammanfattningen genereras från medlemskonversationer, inte från administratörsmeddelanden. Denna skillnad är det som gör att det inte känns som marknadsföring.
2. Pipelinjen: sampla, klustra, skriva, publicera
Sovereign-sammanfattningsjobbet körs varje måndag kl. 09:00 UTC. Det samplar de senaste 7 dagarnas meddelanden (upp till 100, behåller endast verkligt innehåll längre än 3 tecken), bestämmer målspråket från en prioritetskedja — dashboard-språk, sedan klientinställningar, sedan Discord-serverns föredragna språk, sedan en fallback — och överlämnar urvalet till LLM under ett strikt prompt-kontrakt.
Det kontraktet är kvalitetskontrollen. Prompten förbjuder företagsfluff, begränsar utdata till 15–20 rader och tvingar fram en fast struktur med tre block: viktiga höjdpunkter (3–4 faktabaserade punkter), framgångar och mätvärden (2 korta punkter) och två prioriteringar för den kommande veckan. Modellen instrueras att basera varje rad på de verkliga meddelandena i urvalet. Den uppfinner inte benchmarks.
Den publicerade sammanfattningen lagras med dess veckogränser, sammanfattning och toppämnen, så att samma innehåll kan spelas upp igen som ett nyhetsbrev via e-post, en forumtråd eller ett fäst kanalmeddelande.
// 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. Publicering: Founder webhooken, inte ett bot-inlägg
Sovereign publicerar sammanfattningen via en kanal-webhook klädd med communityns varumärkesprofil — grundarens eller företagets namn och avatar, aldrig botens användarnamn. Medlemmar läser det som en mänsklig röst, vilket förändrar både engagemang och förtroende.
Discord begränsar meddelanden till 2 000 tecken, så pipelinen delar upp sammanfattningen i bitar om 1 900 tecken och publicerar bitarna i sekvens. Om ingen webhook är tillgänglig, faller boten tillbaka till ett normalt meddelande. En mekanism, två vägar, ingen duplicerad logik.
Sammanfattningsprompten förbjuder uttryckligen företagsfluff och generisk marknadsföring. Om veckan inte producerade några verkliga höjdpunkter, säger sammanfattningen det. En ärlig tunn vecka förtjänar mer förtroende än en uppfunnen imponerande vecka.