Fejlesztők → Webhooks

Webhookok

A NameOcean aláírt JSON-eseményt küld az Ön HTTPS-végpontjára, amikor valami történik a fiókjában, így a kódja reagálhat, ahelyett, hogy folyamatosan lekérdezne.

Végpont hozzáadása

A Vezérlőpult → Webhookok menüben, az API segítségével, vagy MCP-n keresztül az AI-asszisztensétől kérve (create_webhook). Válasszon eseménytípusokat, csoportokat, például dns.*, vagy az összes eseményt. A válasz tartalmazza az aláírási titkot (whsec_…).

curl
$ curl -X POST https://nameocean.net/api/v1/webhooks \
    -H "Authorization: Bearer $NAMEOCEAN_API_KEY" -H "Content-Type: application/json" \
    -d '{"url": "https://example.com/hooks/nameocean", "events": ["dns.*", "ssl.issued", "domain.expiring"]}'

Az URL-nek https-nek kell lennie egy nyilvános szerveren. Válaszoljon bármilyen 2xx kóddal 10 másodpercen belül; a lassú műveleteket a válasz után végezze.

Mit kap

POST https://example.com/hooks/nameocean
Content-Type: application/json
X-NameOcean-Event: dns.record.created
X-NameOcean-Delivery: whd_7c1e0f9a2b3d4e5f6a7b8c9d
X-NameOcean-Signature: t=1794300000,v1=5f2b…

{
  "id": "evt_3a9f1c2e4b5d6a7c8e9f0a1b",
  "type": "dns.record.created",
  "created": "2026-11-10T09:20:00+00:00",
  "data": {
    "zone": "example.com",
    "record": {"id": 4211, "type": "A", "hostname": "www", "ip": "203.0.113.10", "ttl": "1h"}
  }
}

Az esemény azonosítója változatlan marad, amikor egy kézbesítést újrapróbálnak vagy újraküldenek: ennek alapján hagyja ki a már feldolgozott eseményeket. Az események nem feltétlenül sorrendben érkeznek.

Az aláírás ellenőrzése

A t a kérés Unix-időbélyege, a v1 pedig a t, egy pont és a nyers törzs hexadecimális HMAC-SHA256 értéke, az Ön titkos kulcsával aláírva. Számítsa ki a nyers bájtokon, még a JSON feldolgozása előtt, az összehasonlítást végezze állandó idejű módon, és utasítsa el az öt percnél régebbi időbélyegeket.

X-NameOcean-Signature
t=1794300000,v1=hex(HMAC_SHA256(secret, "1794300000." + raw_body))
Python
import hashlib, hmac, time

def verify(secret: str, header: str, body: bytes, tolerance: int = 300) -> bool:
    fields = dict(part.split("=", 1) for part in header.split(","))
    ts = int(fields["t"])
    if abs(time.time() - ts) > tolerance:
        return False
    expected = hmac.new(secret.encode(), f"{ts}.".encode() + body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, fields.get("v1", ""))
Node.js
import crypto from "node:crypto";

export function verify(secret, header, rawBody, tolerance = 300) {
  const fields = Object.fromEntries(header.split(",").map((p) => p.split("=", 2)));
  const ts = Number(fields.t);
  if (Math.abs(Date.now() / 1000 - ts) > tolerance) return false;
  const expected = crypto.createHmac("sha256", secret).update(`${ts}.`).update(rawBody).digest("hex");
  const got = Buffer.from(fields.v1 || "", "hex");
  return got.length === 32 && crypto.timingSafeEqual(Buffer.from(expected, "hex"), got);
}
Go
func Verify(secret, header string, body []byte) bool {
	var ts int64
	var v1 string
	for _, part := range strings.Split(header, ",") {
		k, v, _ := strings.Cut(part, "=")
		switch k {
		case "t":
			ts, _ = strconv.ParseInt(v, 10, 64)
		case "v1":
			v1 = v
		}
	}
	if d := time.Now().Unix() - ts; d > 300 || d < -300 {
		return false
	}
	mac := hmac.New(sha256.New, []byte(secret))
	fmt.Fprintf(mac, "%d.", ts)
	mac.Write(body)
	return hmac.Equal([]byte(hex.EncodeToString(mac.Sum(nil))), []byte(v1))
}

Újrapróbálkozások és kikapcsolás

A válasz nélküli, időtúllépéses, 5xx, 408 vagy 429 kóddal végződő kézbesítést a rendszer újrapróbálja a következő ütemezés szerint: 1m, 5m, 30m, 2h, 5h, 10h, 10h – összesen 8 kísérlet nagyjából egy nap alatt. Bármely más 4xx kód esetén a kézbesítés azonnal sikertelen. Ha 5 egymást követő kézbesítés véglegesen sikertelen, a végpont kikapcsol, és Ön e-mailt kap róla; visszakapcsolhatja a vezérlőpulton vagy a PATCH active: true kéréssel. Minden kézbesítés – az állapotkóddal és a válasza elejével együtt – megtekinthető a vezérlőpulton és a GET /api/v1/webhooks/{id}/deliveries címen, ahol egy-egy kézbesítést újra is küldhet.

Események

domain.registeredEgy domaint regisztráltak a fiókjában.
domain.renewedEgy domain lejárati dátuma későbbre került (megújítás).
domain.expiringEgy domain 30, 7 vagy 1 nap múlva lejár.
domain.expiredEgy domain tegnap lejárt.
domain.nameservers.updatedEgy domain névszerverei megváltoztak.
domain.transfer.startedBejövő vagy kimenő transzfert kérelmeztek a regisztrynél.
domain.transfer.completedEgy transzfer befejeződött.
domain.transfer.failedEgy transzfert elutasítottak vagy visszavontak.
dns.zone.createdEgy DNS-zóna létrejött.
dns.zone.deletedEgy DNS-zóna törölve lett.
dns.record.createdEgy DNS-rekord hozzá lett adva.
dns.record.updatedEgy DNS-rekord megváltozott.
dns.record.deletedEgy DNS-rekord törölve lett.
ssl.issuedEgy tanúsítvány először lett kiállítva.
ssl.renewedEgy tanúsítvány meg lett újítva.
ssl.expiringEgy tanúsítvány 7 nap múlva lejár, és még nincs megújítva.
email.mailbox.createdEgy postafiókot adtak hozzá az egyik levelezési domainjéhez.
email.mailbox.deletedEgy postafiók és a benne lévő levelek törölve lettek.
email.forwarding.enabledAz e-mail-továbbítás be lett kapcsolva egy domainnél.
email.forwarding.disabledAz e-mail-továbbítás ki lett kapcsolva egy domainnél – Ön kapcsolta ki, vagy a domain már nem felelt meg a feltételeknek (az ok az eseményben található).
webhook.testA Tesztküldés gomb megnyomásakor kerül elküldésre; figyelmen kívül hagyja a végpont eseményszűrőjét.

A data mező tartalmazza a domaint vagy zónát és az objektumot: a rekordot (módosításkor a previous értékkel), a lejárati dátumot, a névszervereket (a previous értékkel). Az egyes objektumok pontos mezői megegyeznek a REST API mezőivel.

A beérkező e-mailek is továbbíthatók egy URL-re: ezt címenként állíthatja be az E-mail-továbbítás oldalon. Ezek a kérések ugyanazokat a fejléceket és aláírást használják, X-NameOcean-Event: email.received értékkel.

Jó tudni

  • A NameOcean csak nyilvános címekre küld kéréseket, ezt minden kézbesítéskor újra ellenőrzi, és soha nem követi az átirányításokat.
  • Ha a titok kiszivárog, cserélje le a vezérlőpulton; az eseményeket azonnal az új titokkal írjuk alá.
  • A Teszt küldése azonnal egy webhook.test eseményt küld, a végpont eseményszűrőjétől függetlenül.