Fra webhook til lokal AI: Slik får n8n og Ollama til å jobbe hver gang du publiserer
Vi har tidligere forklart hva en webhook er. Nå bygger vi en: Hver gang et nytt innlegg publiseres, sender bloggen en webhook til n8n, en lokal språkmodell i Ollama skriver et kort sammendrag, og resultatet havner i Slack eller Discord. Alt kjører på din egen maskin.
Byggeklossene
Hvis du trenger en oppfriskning på hva en webhook er, har vi skrevet om det i Hva er en webhook, egentlig?. Kort sagt: I stedet for at du spør en tjeneste om noe nytt har skjedd, sier tjenesten fra selv.
Oppsettet i denne guiden har tre deler:
- Ghost – eller en annen tjeneste som kan sende webhooks – som gir beskjed når et innlegg publiseres.
- n8n, et automatiseringsverktøy med visuell flyt, som tar imot webhooken og styrer resten.
- Ollama, som kjører språkmodellen lokalt.
Zapier og Make kan også ta imot webhooks, men de er skytjenester. Med n8n og Ollama kan hele kjeden kjøres hjemme.
Én ting om n8n først: Den gratis, selvhostede versjonen er ikke åpen kildekode i streng forstand. Den bruker Sustainable Use License, som lar deg bruke den fritt for egne formål, også i egen bedrift, men ikke selge den videre som en tjeneste.
Steg 1: Start n8n og Ollama
Det enkleste er å kjøre begge i Docker på samme maskin. Last ned en modell i Ollama som er god på kortere tekster og norsk – for eksempel en av de mindre Gemma 4-modellene. I n8n kobler du til Ollama med noden Ollama Chat Model, som peker på Ollama-tjenesten din (vanligvis port 11434).
Steg 2: Lag webhooken i n8n
Opprett en ny arbeidsflyt og legg til en Webhook-node:
- Metode: POST.
- Gi den en lang, tilfeldig sti, så adressen ikke kan gjettes.
- Sett svarmodus til Immediately. Dette er viktig: Ghost venter bare to sekunder på svar før den gir opp. Språkmodellen trenger lengre tid enn det, så n8n må svare med en gang og gjøre jobben etterpå.
n8n gir deg to adresser: en testadresse som viser dataene i editoren, og en produksjonsadresse som brukes når arbeidsflyten er aktivert.
Steg 3: Koble til Ghost
I Ghost går du til Settings → Integrations, oppretter en egen integrasjon og legger til en webhook. Velg hendelsen Post published, lim inn n8n-adressen, og fyll inn en hemmelighet – en lang tilfeldig streng.
Ghost-serveren må kunne nå n8n. Kjører begge på samme server, er det enkelt. Kjører n8n hjemme, trenger du en sikker tunnel, for eksempel Cloudflare Tunnel eller Tailscale Funnel, i stedet for å åpne porter i ruteren.
Steg 4: Sjekk at det faktisk er Ghost som ringer
En åpen webhook-adresse kan i prinsippet kalles av hvem som helst. Når du har fylt inn en hemmelighet, signerer Ghost hver melding med headeren X-Ghost-Signature. Ifølge Ghosts kildekode er signaturen en HMAC-SHA256 av meldingsinnholdet med tidsstempelet lagt til på slutten, nøkkelen er hemmeligheten, og tidsstempelet er i millisekunder.
Legg en Code-node rett etter webhooken som sjekker dette:
const crypto = require('crypto');
const hemmelighet = 'DIN_HEMMELIGHET';
const header = $json.headers['x-ghost-signature'] || '';
const [, signatur, ts] = header.match(/sha256=([a-f0-9]+), t=(\d+)/) || [];
const forventet = crypto.createHmac('sha256', hemmelighet)
.update(JSON.stringify($json.body) + ts).digest('hex');
if (!signatur || signatur !== forventet || Date.now() - Number(ts) > 5 * 60 * 1000) {
throw new Error('Ugyldig eller gammel signatur');
}
return $input.all();
For at Code-noden skal få bruke crypto, må n8n startes med miljøvariabelen NODE_FUNCTION_ALLOW_BUILTIN=crypto. Legg gjerne også inn Ghost-serverens IP-adresse i webhookens tillatelsesliste. Ghost kan ikke sende egne headere, så n8ns innebygde header-autentisering fungerer ikke her – signaturen er sikringen.
Steg 5: La språkmodellen jobbe
Nå kommer AI-delen. Legg til en Basic LLM Chain- eller AI Agent-node koblet til Ollama Chat Model, og gi den en enkel instruks:
Skriv et sammendrag på to setninger på norsk av dette blogginnlegget. Tittel: {{ $json.body.post.current.title }}. Innhold: {{ $json.body.post.current.html }}
Til slutt legger du til en node for Slack, Discord eller e-post som sender sammendraget sammen med lenken til innlegget (post.current.url).
Bygg videre
Når kjeden fungerer, er det lett å bytte ut delene. Samme mønster kan foreslå innlegg til sosiale medier, oversette ingressen, lagre alle nye innlegg i et regneark, eller varsle deg når noen legger igjen en kommentar. Webhooken er bare starten – det er det som skjer etterpå, som gjør den nyttig.
Start smått, som råteksten vår også anbefalte: én tjeneste, én modell, én mottaker. Og test med testadressen før du aktiverer flyten.
Ressurser
- n8n: Webhook-noden – adresser, svarmodus og sikkerhet
- n8n: Ollama Model – oppkobling mot Ollama
- Ghost: webhook-signaturen i kildekoden – hvordan signaturen lages
- n8n – automatiseringsplattformen