Интеграция CMS

Подключите блоги GrowthDailySeo к вашему проекту

Платформа создаёт черновики → webhook уведомляет ваш backend → вы получаете HTML и SEO-метаданные через API и сохраняете в CMS, сайт Next.js или приложение.

GrowthDailySeo генерирует SEO-статьи для блога. Ваше приложение остаётся источником истины для публикации — используйте наш API для синхронизации заголовка, excerpt, contentHtml, FAQ-схемы и meta-полей в вашем текущем стеке.

Типичная интеграция (push + pull)

  1. Создайте API-ключ и URL webhook в разделе Интеграции
  2. В webhook article.ready проверьте HMAC и прочитайте slug из payload
  3. GET /api/v1/sites/{siteId}/posts/{slug} → импортируйте contentHtml в базу данных или CMS
Пример обработчика webhook
// 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
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 });
}