Proje 2: Otomatik Blog Yayın Hattı (API + Webhook)
Bir Notion sayfasından otomatik blog yazısı + meta + sosyal post + yayın akışı.
Şükrü Yusuf KAYA
10 min read
AdvancedMimari#
Tetik: Notion sayfası "Status" sütunu "Ready" olunca webhook tetikler.
Pipeline: 5 adım, ~30 saniye.
Çıktı: blog yayında + sosyal medya kuyruğunda + Slack'te bildirim.
typescript
// app/api/publish-blog/route.ts (Vercel)import { NextRequest, NextResponse } from "next/server";import { OpenAI } from "openai";import { z } from "zod";import { zodResponseFormat } from "openai/helpers/zod"; const openai = new OpenAI(); const SEOPackage = z.object({ title: z.string().max(60), description: z.string().max(155), slug: z.string(), keywords: z.array(z.string()).max(10),}); const SocialPosts = z.object({ linkedin: z.string().max(2000), twitter: z.string().max(280), instagram: z.string().max(500),}); export async function POST(req: NextRequest) { const { notion_page_id, content } = await req.json(); // 1. SEO paketi üret const seo = await openai.beta.chat.completions.parse({ model: "gpt-5", messages: [ { role: "system", content: "SEO uzmanısın. JSON döndür." }, { role: "user", content: `Bu yazı için SEO paketi: ${content.slice(0, 3000)}` }, ], response_format: zodResponseFormat(SEOPackage, "seo"), }); // 2. Sosyal post'ları üret const social = await openai.beta.chat.completions.parse({ model: "gpt-5", messages: [ { role: "system", content: "Sosyal medya copywriter'ısın." }, { role: "user", content: `Bu blog yazısı için 3 platform için post: ${content.slice(0, 2000)}` }, ], response_format: zodResponseFormat(SocialPosts, "social"), }); // 3. CMS'e yayınla await fetch(process.env.CMS_API_URL!, { method: "POST", headers: { "Authorization": `Bearer ${process.env.CMS_TOKEN}` }, body: JSON.stringify({ content, ...seo.choices[0].message.parsed, }), }); // 4. Buffer'a sosyal kuyruk await fetch("https://api.buffer.com/1/updates/create.json", { method: "POST", body: JSON.stringify(social.choices[0].message.parsed), }); // 5. Slack bildirim await fetch(process.env.SLACK_WEBHOOK!, { method: "POST", body: JSON.stringify({ text: `✅ Yeni blog yayında: ${seo.choices[0].message.parsed.title}`, }), }); return NextResponse.json({ success: true });}Vercel function — 5 adımlı blog pipeline.
Özet#
✓ Notion → webhook → API → CMS + Sosyal + Slack
✓ ~30 sn'de tam yayın
✓ SEO + 3 platform + bildirim otomatik
Sıradaki proje: Müşteri destek botu.
Yorumlar & Soru-Cevap
(0)Yorum yazmak için giriş yap.
Yorumlar yükleniyor...
Related Content
Modül 1: Başlangıç ve Temeller
ChatGPT Nedir? Tarihçe, Evrim ve Bugünün Manzarası
Start LearningModül 1: Başlangıç ve Temeller
Hesap Açma ve Plan Karşılaştırması: Free, Plus, Pro, Team, Enterprise
Start LearningModül 1: Başlangıç ve Temeller