CMS entegrasyonu
GrowthDailySeo bloglarını projenize çekin
Platform taslak yazar → webhook backend'inizi bilgilendirir → API ile HTML + SEO meta verisini alıp CMS, Next.js sitesi veya uygulamanıza kaydedersiniz.
GrowthDailySeo sizin için SEO blog yazıları üretir. Yayınlama için kaynak doğruluğu sizin uygulamanızda kalır — başlık, özet, contentHtml, FAQ şeması ve meta alanlarını mevcut yığınınıza API ile senkronize edin.
Tipik entegrasyon (push + pull)
- Entegrasyonlar'da API anahtarı ve webhook URL'si oluşturun
- article.ready webhook'unda HMAC doğrulayın ve payload'dan slug okuyun
- GET /api/v1/sites/{siteId}/posts/{slug} → contentHtml'i veritabanınıza veya CMS'e aktarın
Webhook handler örneği
// Your API route — e.g. POST /api/growthdaily-webhook
import { createHmac, timingSafeEqual } from "crypto";
export async function POST(req: Request) {
const raw = await req.text();
const ts = req.headers.get("x-growthdaily-timestamp") ?? req.headers.get("x-figrush-timestamp") ?? "";
const sig = req.headers.get("x-growthdaily-signature") ?? req.headers.get("x-figrush-signature") ?? "";
const expected = createHmac("sha256", process.env.GROWTHDAILY_WEBHOOK_SECRET!)
.update(`${ts}.${raw}`)
.digest("hex");
if (!timingSafeEqual(Buffer.from(expected), Buffer.from(sig))) {
return new Response("invalid signature", { status: 401 });
}
const event = JSON.parse(raw);
if (event.event === "article.ready") {
await syncPostFromGrowthDaily(event.siteId, event.slug);
}
return Response.json({ ok: true });
}CMS içe aktarımı için tam yazıyı getir
async function syncPostFromGrowthDaily(siteId: string, slug: string) {
const res = await fetch(
`${process.env.GROWTHDAILY_API_BASE}/api/v1/sites/${siteId}/posts/${slug}`,
{ headers: { Authorization: `Bearer ${process.env.GROWTHDAILY_API_KEY}` } },
);
const post = await res.json();
// post.contentHtml, post.title, post.excerpt, post.seo, post.faqJsonLd
await db.posts.upsert({ slug: post.slug, html: post.contentHtml, ...post });
}