Webhook payload

Webhook payload reference

Presná schéma JSON payload-u, ktorý posielame na váš endpoint pri publikovaní článku. Použiteľné pre Next.js, Astro, Remix, SvelteKit, Express, PHP a akýkoľvek HTTP server.

Request

MethodPOST
URLvami zadaná Site URL (napr. https://mojfirma.sk/api/aio-webhook)
Timeout10 sekúnd
Content-Typeapplication/json

Headers

HeaderHodnotaKedy
Content-Typeapplication/jsonvždy
X-Webhook-Eventarticle.publishedlen pri publikovaní
X-Webhook-Signaturesha256=<HMAC hex>len pri publikovaní, ak je secret nastavený
AuthorizationBearer <apiKey>vždy, ak je API key nastavený

Payload schéma

Top-level polia

PoleTypPopis
eventstring„article.published" alebo „test"
timestampstring (ISO 8601)UTC čas odoslania webhook-u
sourcestringVždy „aio-tracking"
dataobjectTelo článku (chýba pri event="test")

Polia v data

PoleTypPopis
titlestringHlavný titulok článku (H1)
htmlContentstringCelý obsah článku ako HTML — pripravený na vloženie do <article>
excerptstringKrátky úryvok (~160 znakov) pre náhľady a OG description
coverImageUrloptstring (URL)Verejne dostupný URL cover obrázku (1200×630)
slugstringURL-friendly slug bez diakritiky (napr. ai-chatbot-pre-eshop)
seoTitlestringOptimalizovaný titulok pre <title> tag (max 60 znakov)
metaDescstringMeta description (max 160 znakov)
tagsoptstring[]Pole tagov / kategórií článku
schemaMarkupoptstring (JSON)Pripravený JSON-LD Article schema markup ako string

Príklady

Production payload (event: „article.published")

{
  "event": "article.published",
  "timestamp": "2026-05-15T10:00:00.000Z",
  "source": "aio-tracking",
  "data": {
    "title": "Ako využiť AI chatbot v slovenskom eshope",
    "htmlContent": "<h1>Úvod</h1><p>AI chatboty pomáhajú...</p>",
    "excerpt": "Krátky popis článku pre náhľady a meta description.",
    "coverImageUrl": "https://cdn.optimalizaciapreai.sk/cover.jpg",
    "slug": "ai-chatbot-pre-eshop",
    "seoTitle": "AI chatbot pre eshop — kompletný návod 2026",
    "metaDesc": "Ako AI chatbot zvyšuje konverzie v slovenských eshopoch.",
    "tags": ["chatbot", "eshop", "ai"],
    "schemaMarkup": "{\"@context\":\"https://schema.org\",\"@type\":\"Article\",...}"
  }
}

Test payload (Test Connection tlačidlo)

{
  "event": "test",
  "timestamp": "2026-05-15T10:00:00.000Z",
  "source": "aio-tracking"
}

Test request neobsahuje HMAC podpis ani X-Webhook-Event header.

Vo svojom endpoint-e najprv skontrolujte event === 'test' a vráťte 200 OK — verifikáciu podpisu spustite až pre event === 'article.published'. Vzorové snippety v návode pre Next.js to robia v správnom poradí.

HMAC verifikácia

Ak ste vo wizarde nastavili Webhook Secret, každý payload prichádza so SHA-256 HMAC podpisom v hlavičke x-webhook-signature. Overte ho takto:

import { createHmac, timingSafeEqual } from 'crypto'

const raw = await req.text()
const signature = req.headers.get('x-webhook-signature') || ''
const expected = 'sha256=' + createHmac('sha256', SECRET)
  .update(raw)
  .digest('hex')

const valid =
  signature.length === expected.length &&
  timingSafeEqual(Buffer.from(signature), Buffer.from(expected))

if (!valid) throw new Error('Invalid signature')

Použite timingSafeEqual

Bežné === porovnanie je zraniteľné na timing attack — útočník vie podľa času odpovede uhádnuť signature znak po znaku.

Očakávaná odpoveď

Váš endpoint by mal odpovedať 200 OK s JSON-om obsahujúcim:

{
  "externalId": "ai-chatbot-pre-eshop",
  "externalUrl": "https://mojfirma.sk/blog/ai-chatbot-pre-eshop"
}
  • externalId — identifier článku vo vašom systéme (DB ID, slug, atď.). Uložíme si ho pre prípadný update.
  • externalUrl — verejná URL, na ktorej je článok dostupný. Zobrazí sa v dashboarde ako „Publikované na… → otvoriť".

Pri chybe

Vráťte status 4xx alebo 5xx s JSON-om:

{ "error": "human-readable popis chyby" }

My zachytíme správu, označíme publikáciu ako neúspešnú a zákazník uvidí chybu v dashboarde.

Implementujete v Next.js?

Máme pre to detailný návod krok po kroku.

Otvoriť Next.js návod