Hopp til innholdet
Norsk journal om kunstig intelligens 247 artikler Oslo --:--
TokenPrat
[ Guide ] 3 min lesetid Av TokenPrat-redaksjonen

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.

Kjede av glødende glassrør som sender en lyspuls inn i en hjemmeserver

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

Mer om

Alle →
Gammel fisker med grått skjegg og gul regnjakke på en brygge ved stormfullt hav
· Guide

Steg, CFG og seed: Hva innstillingene i bildegeneratoren faktisk gjør – vist med egne testbilder

Tre tall styrer det meste av resultatet når du lager bilder i ComfyUI: antall steg, CFG og seed. Mange råd på nettet er skrevet for eldre modeller og stemmer ikke lenger. Vi testet med samme prompt på vår egen maskin, så du kan se forskjellen.

Mørk arbeidsplass med kode på skjermene, en hengelås og en venetiansk maske
· Guide

OpenCode med Venice: Slik setter du opp en kodeagent med private modeller – og hva «privat» betyr

OpenCode er en åpen kodeagent for terminalen som kan bruke nesten hvilken som helst språkmodell. Kobler du den til Venice, får du GLM, Kimi, Qwen og DeepSeek gjennom én API-nøkkel, med lagring av promptene slått av. Men ikke alle modellene hos Venice er like private.

Person ved kjøkkenbord bygger en app med fargerike kort på laptopen
· Guide

Google AI Studio Build: Fra én prompt til ferdig app – og fem ting du må sjekke før du deler den

Googles gratis AI Studio kan nå lage komplette nettsider og apper fra en beskrivelse, med database, innlogging og publisering på ett klikk. Det er imponerende raskt. Men standardoppsettet har noen feller som er lette å gå i.