كيفية أتمتة نشرتك البريدية بوكيل ذكاء اصطناعي
يقرأ وكيل Claude قائمة انتظار المحتوى الخاصة بي، ويختار أقوى زاوية للأسبوع، ويصيغ النشرة البريدية بصوتي، ويقسم القائمة حسب مستوى التفاعل، ويجدول الإرسال عبر واجهة برمجة تطبيقات Kit — كل ذلك دون أن أفتح محرراً. أراجع معاينة مُصيَّرة وأضغط موافقة. العمل الإبداعي الصعب لي؛ التنفيذ الميكانيكي للوكيل.
كل أربعاء. أكثر من 28,400 مشترك. بدون حشو.
✓ تحقق من بريدك — انقر على رابط التأكيد لإكمال الاشتراك.
✓ تم اشتراكك!
✓ أنت مشترك بالفعل.
جدول المحتويات
محدث يونيو 2026.
خلاصة: يقرأ وكيل Claude قائمة انتظار المحتوى الخاصة بي، ويختار أقوى زاوية للأسبوع، ويصيغ النشرة البريدية بصوتي، ويقسم القائمة حسب مستوى التفاعل، ويجدول الإرسال عبر واجهة برمجة تطبيقات Kit — كل ذلك دون أن أفتح محرراً. أراجع معاينة مُصيَّرة وأضغط موافقة. العمل الإبداعي الصعب لي؛ التنفيذ الميكانيكي للوكيل.
[ملاحظة المشغّل] نشرة بريدية تُرسَل باستمرار تتفوق على نشرة “أفضل” لكنها تُرسَل حين يحلو لصاحبها. القيد كان العبء التنفيذي وليس الأفكار. كانت لديّ أفكار؛ لم يكن لديّ النطاق الترددي لتنسيقها وجدولتها وتقسيمها كل أسبوع. أزال الوكيل ذلك الفجوة.
الاختناق الحقيقي في معظم سير عمل النشرات البريدية
تركز معظم نصائح أتمتة النشرات البريدية على الشيء الخطأ: تسلسلات الترحيب، والأتمتة، ومنطق الوسم. هذا جيد، لكنه لا يحل مشكلة الإنشاء الأسبوعية.
العائق الحقيقي هو: تعرف ما تريد قوله، لكن الجلوس لتنسيقه وكتابة متغيرات سطر الموضوع واختيار الشريحة الصحيحة وجدولته في الوقت المناسب يكلف 2-3 ساعات من تبديل السياق أسبوعياً. اضرب في 52 أسبوعاً وستجد أنك أمضيت أسبوع عمل كامل في إرسال النشرات البريدية فحسب.
يتعامل الوكيل مع كل خطوة بعد “أعرف ما هي زاوية هذا الأسبوع.”
المجموعة التقنية التي أستخدمها
- Kit (المعروف سابقاً بـ ConvertKit) — منصة البريد الإلكتروني. واجهة برمجة تطبيقات ممتازة، وسم موثوق للمشتركين، تحليلات نظيفة. واجهة برمجة التطبيقات الصديقة للوكلاء هي ما أقنعني.
- Claude (Anthropic SDK) — طبقة التوليد
- Cloudflare Workers — مشغّل مجدوَل (يعمل كل ثلاثاء الساعة 8 صباحاً CT)
- Airtable — قائمة انتظار المحتوى وصندوق وارد الموافقة
إذا لم تكن على Kit، فإن نفس النمط يعمل مع أي منصة تمتلك واجهة REST API لإنشاء وجدولة البث.
الخطوة 1: قائمة انتظار المحتوى
يحتاج الوكيل إلى مصدر حقيقي لـ”ما الذي نكتب عنه.” لديّ جدول Airtable بالأعمدة:
Topic— الزاوية أو السؤالStatus— Queue / Approved / SentTier— هل هذا لجميع المشتركين أم للمشتركين النشطين فقطNotes— أي قيود (تجنب هذا الأسلوب، أدرج هذا الرابط، إلخ.)
كل أسبوع، أقضي 10 دقائق في إضافة 2-3 مواضيع إلى القائمة. هذا هو مساهمتي الإبداعية. الباقي عمل الوكيل.
الخطوة 2: وكيل المسودة
// workers/newsletter-agent/index.ts
import Anthropic from "@anthropic-ai/sdk";
import Airtable from "airtable";
const client = new Anthropic();
const VOICE_SYSTEM = `You are writing a weekly newsletter for Alejandro Rioja's subscribers.
His audience: founders and operators interested in AI agents, SEO, and growing a one-person business.
Voice: direct, first-person, practitioner. No hype, no "exciting times," no excessive bullet lists.
Structure every newsletter as:
1. One-sentence hook (the problem or observation)
2. The core insight (3–5 paragraphs, no headers, conversational)
3. One concrete action the reader can take this week
4. A short sign-off (2 sentences max)
Subject line: specific, outcome-oriented, under 50 chars. No clickbait.
Return JSON: { "subject": "...", "preheader": "...", "body": "..." }`;
async function getNextTopic(): Promise<{ id: string; topic: string; notes: string; tier: string }> {
const base = new Airtable({ apiKey: process.env.AIRTABLE_API_KEY }).base(process.env.AIRTABLE_BASE_ID!);
const records = await base("Newsletter Queue")
.select({ filterByFormula: "{Status} = 'Queue'", sort: [{ field: "Created", direction: "asc" }], maxRecords: 1 })
.firstPage();
if (!records.length) throw new Error("Queue is empty. Add topics.");
const r = records[0];
return { id: r.id, topic: r.get("Topic") as string, notes: (r.get("Notes") as string) ?? "", tier: (r.get("Tier") as string) ?? "all" };
}
async function draftNewsletter(topic: string, notes: string): Promise<{ subject: string; preheader: string; body: string }> {
const msg = await client.messages.create({
model: "claude-sonnet-4-6",
max_tokens: 2048,
system: VOICE_SYSTEM,
messages: [{ role: "user", content: `Write this week's newsletter on: "${topic}". Additional notes: ${notes || "none"}` }],
});
const text = (msg.content[0] as any).text.replace(/```json\n?/, "").replace(/```/, "").trim();
return JSON.parse(text);
}
async function scheduleWithKit(draft: { subject: string; preheader: string; body: string }, tier: string): Promise<string> {
const segmentId = tier === "engaged" ? process.env.KIT_ENGAGED_SEGMENT_ID : null;
const sendAt = new Date();
sendAt.setDate(sendAt.getDate() + ((4 - sendAt.getDay() + 7) % 7)); // next Thursday
sendAt.setHours(9, 0, 0, 0); // 9am CT
const payload: any = {
broadcast: {
subject: draft.subject,
content: draft.body,
description: draft.preheader,
send_at: sendAt.toISOString(),
email_layout_template: "minimal",
},
};
if (segmentId) payload.broadcast.segment_id = segmentId;
const res = await fetch("https://api.kit.com/v4/broadcasts", {
method: "POST",
headers: { "Content-Type": "application/json", "X-Kit-Api-Key": process.env.KIT_API_KEY! },
body: JSON.stringify(payload),
});
const data = await res.json();
return data.broadcast?.id ?? "";
}
export default {
async scheduled(_event: ScheduledEvent, env: Env) {
// Inject env vars
Object.assign(process.env, env);
const { id, topic, notes, tier } = await getNextTopic();
const draft = await draftNewsletter(topic, notes);
const broadcastId = await scheduleWithKit(draft, tier);
// Mark as Approved in Airtable (not Sent — human reviews the Kit preview before confirm)
const base = new Airtable({ apiKey: env.AIRTABLE_API_KEY }).base(env.AIRTABLE_BASE_ID);
await base("Newsletter Queue").update(id, { Status: "Approved", KitBroadcastId: broadcastId });
console.log(`Scheduled broadcast ${broadcastId} for topic: ${topic}`);
},
};الخطوة 3: خطوة الموافقة
ينشئ الوكيل البث في حالة المسودة في Kit ويضع علامة على سجل Airtable بـ”Approved.” يرسل لي Kit إشعاراً برابط المعاينة. أنقر عليه وأقرأه، وإذا بدا صحيحاً، أؤكد الإرسال. إذا أردت تغييرات، أعدّل مباشرة في Kit.
هذا هو البوابة التي تمنع الوكيل من الاستقلالية الكاملة في البريد الصادر. أثق بالمسودات في حوالي 90% من الوقت. 10% التي ألتقطها في المراجعة — نبرة غير صحيحة قليلاً، إحصاء أريد التحقق منه، رابط أريد إضافته — تستحق مراجعة 3 دقائق.
ما يتولاه الوكيل مما لا أريد فعله مطلقاً
- كتابة متغيرات سطر الموضوع واختيار الأفضل
- تنسيق نص ما قبل الرأس
- حساب وقت الإرسال المناسب (جمهوري يفتح صباح الخميس؛ الوكيل يعرف ذلك)
- التقسيم بشكل صحيح بناءً على مستوى الموضوع
- تسجيل كل شيء في Airtable للاحتفاظ بسجل
ما لا يزال ملكي
الفكرة. الموضوع في قائمة الانتظار ملكي. الزاوية ملكي. الوكيل منفّذ ممتاز لموجز واضح؛ إنه ليس طبقة استراتيجية. إذا وضعت موضوعاً سيئاً في القائمة، أحصل على نشرة بريدية مكتوبة جيداً عن موضوع سيئ.
أيضاً: بوابة المراجعة الأولى. كل إرسال يمر أمام عيني قبل خروجه. هذا لن يتغير.
خلاصة المشغّل
إذا كنت تقضي أكثر من ساعة أسبوعياً في ميكانيكيات النشرة البريدية — التنسيق والجدولة والتقسيم — فيجب أن تؤتمتها. واجهة برمجة تطبيقات Kit نظيفة، ومشغّل Worker cron صلب كالصخرة، وجودة مسودة Claude عالية بما يكفي لأوافق على نحو 90% من المسودات الأولى دون تغييرات. ابنِ القائمة في Airtable، وصِل Worker، وعُد إلى إنشاء الأفكار بدلاً من تنفيذ الإرسال.
كل أربعاء. أكثر من 28,400 مشترك. بدون حشو.
✓ تحقق من بريدك — انقر على رابط التأكيد لإكمال الاشتراك.
✓ تم اشتراكك!
✓ أنت مشترك بالفعل.
احصل على دليل الذكاء الاصطناعي في صندوق بريدك
كل أربعاء. أكثر من 28,400 مشترك. بدون حشو.
تحقق من بريدك الوارد.
أرسلنا إليك رسالة تأكيد — انقر على الرابط لإكمال اشتراكك. تحقق من مجلد الرسائل غير المرغوب فيها إذا لم تصلك خلال دقيقة.
تم اشتراكك.
مرحبًا — سيصل العدد القادم إلى بريدك قريبًا.
أنت مشترك بالفعل — ترقّبه كل أربعاء.