Разработка интеграций для Ghost через Webhooks/Zapier
Ghost отправляет webhooks при публикации, обновлении, создании членств и других событиях. Через Zapier или собственный обработчик эти события соединяются с внешними системами без написания кастомного кода Ghost.
Настройка Webhooks
Ghost Admin → Settings → Integrations → Add custom integration → Webhooks. Доступные события:
-
post.published/post.unpublished/post.deleted -
page.published -
member.added/member.updated/member.deleted -
tag.added/tag.deleted -
subscriber.added
Webhook-обработчик (Node.js/Express)
import crypto from 'crypto';
function verifyGhostWebhook(body: Buffer, signature: string, secret: string): boolean {
const hmac = crypto.createHmac('sha256', secret);
hmac.update(body);
return hmac.digest('hex') === signature.split('sha256=')[1];
}
app.post('/webhooks/ghost', express.raw({ type: 'application/json' }), (req, res) => {
const sig = req.headers['x-ghost-signature'] as string;
if (!verifyGhostWebhook(req.body, sig, process.env.GHOST_WEBHOOK_SECRET!)) {
return res.sendStatus(401);
}
const payload = JSON.parse(req.body.toString());
const event = req.headers['x-ghost-event']; // 'post.published'
handleGhostEvent(event as string, payload);
res.sendStatus(200);
});
async function handleGhostEvent(event: string, payload: any) {
switch (event) {
case 'post.published':
// Отправить в Slack, обновить sitemap, уведомить Telegram-канал
await notifySlack(payload.post.current);
await rebuildSitemap();
break;
case 'member.added':
await addToMailchimp(payload.member.current);
break;
}
}
Zapier-интеграция
Ghost имеет официальный Zapier app. Примеры Zaps:
- Ghost → Slack: уведомление в канал при публикации
- Ghost → Twitter/X: автопостинг с заголовком и ссылкой
- Ghost → Airtable: логирование новых членов
- Ghost → ConvertKit: добавление подписчиков в email-последовательность
Для нестандартных событий — Zapier Webhooks (Catch Hook):
Trigger: Ghost webhook → Zapier Webhook URL
Action: POST to Zapier → любое действие в 6000+ сервисов
Автоматический кросс-постинг в соцсети
// При post.published
async function crossPost(post: GhostPost) {
const text = `${post.title}\n\n${post.excerpt || ''}\n\n${post.url}`;
// Twitter/X через API v2
await twitterClient.v2.tweet({
text: text.substring(0, 280),
});
// Telegram
await bot.sendMessage(CHANNEL_ID, text, {
parse_mode: 'HTML',
reply_markup: {
inline_keyboard: [[{ text: 'Читать', url: post.url }]],
},
});
}
Настройка 2–3 webhook-интеграций (Slack + Telegram + sitemap rebuild) — 4–8 часов. Zapier-автоматизации без кода — 1–2 часа.







