Как Автоматизировать Рассылку с Помощью ИИ-агента
Агент Claude читает мою очередь контента, выбирает самый сильный угол недели, составляет рассылку в моём стиле, сегментирует список по уровню вовлечённости и планирует отправку через API Kit — всё без того, чтобы я открывал редактор. Я просматриваю отрендеренный превью и нажимаю «Одобрить». Сложная творческая работа — моя; механическое исполнение — агента.
Каждую среду. 28 400+ читателей. Никакой воды.
✓ Проверьте почту — нажмите ссылку подтверждения, чтобы завершить подписку.
✓ Вы подписаны!
✓ Вы уже в списке.
Содержание
Обновлено июнь 2026.
TL;DR: Агент Claude читает мою очередь контента, выбирает самый сильный угол недели, составляет рассылку в моём стиле, сегментирует список по уровню вовлечённости и планирует отправку через API Kit — всё без того, чтобы я открывал редактор. Я просматриваю отрендеренный превью и нажимаю «Одобрить». Сложная творческая работа — моя; механическое исполнение — агента.
[Заметка оператора] Рассылка, которая отправляется последовательно, обходит ту, что «лучше», но выходит когда приходит вдохновение. Ограничением были накладные расходы на исполнение, а не идеи. Идеи были; не хватало пропускной способности, чтобы форматировать, планировать и сегментировать их каждую неделю. Агент устранил этот разрыв.
Реальное узкое место в большинстве рабочих процессов рассылки
Большинство советов по автоматизации рассылок фокусируются на неправильном: приветственные последовательности, автоматизации, логика тегирования. Это хорошо, но не решает проблему создания контента неделю за неделей.
Настоящая помеха вот в чём: вы знаете, что хотите сказать, но садиться форматировать, писать варианты строки темы, выбирать правильный сегмент и планировать в нужное время стоит 2-3 часа переключения контекста в неделю. Умножьте на 52 недели — и вы потратите целую рабочую неделю только на отправку рассылок.
Агент обрабатывает каждый шаг после «я знаю, каков угол этой недели».
Стек, который я использую
- Kit (бывший ConvertKit) — платформа электронной почты. Отличный API, надёжная маркировка подписчиков, чистая аналитика. API, дружественный к агентам, убедил меня.
- 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, чтобы иметь запись
Что по-прежнему моё
Идея. Тема в очереди — моя. Угол — мой. Агент — отличный исполнитель чёткого брифа; это не стратегический уровень. Если я положу плохую тему в очередь, получу хорошо написанную рассылку о плохой теме.
Также: ворота первой проверки. Каждая отправка проходит через мои глаза перед выходом. Это не изменится.
Итог оператора
Если вы тратите более часа в неделю на механику рассылки — форматирование, планирование, сегментацию — вам следует автоматизировать это. API Kit чистый, cron-триггер Worker надёжен как скала, а качество черновиков Claude достаточно высокое, чтобы я одобрял ~90% первых черновиков без изменений. Постройте очередь в Airtable, подключите Worker и вернитесь к созданию идей вместо выполнения отправок.
Каждую среду. 28 400+ читателей. Никакой воды.
✓ Проверьте почту — нажмите ссылку подтверждения, чтобы завершить подписку.
✓ Вы подписаны!
✓ Вы уже в списке.
Получайте ИИ-руководство на почту
Каждую среду. 28 400+ читателей. Никакой воды.
Проверьте почту.
Мы отправили письмо для подтверждения — нажмите на ссылку, чтобы завершить подписку. Проверьте папку «Спам», если не видите его в течение минуты.
Вы подписаны.
Добро пожаловать — следующий выпуск скоро придёт на вашу почту.
Вы уже в списке — ждите выпуск каждую среду.