Налаштування Webhook-інтеграцій Strapi
Strapi відправляє вебхуки при створенні, зміні й видаленні записів. Це основний механізм для інтеграції з зовнішніми системами й інвалідації кеша фронтенду.
Налаштування вебхуків в Admin
Settings → Webhooks → Add new webhook:
- Name: Next.js Revalidation
-
URL:
https://mysite.com/api/revalidate -
Headers:
{ "x-webhook-secret": "my-secret" } -
Events: вибрати
entry.create,entry.update,entry.publish
Вебхук через код
// config/functions/bootstrap.js
// Програмна реєстрація вебхука
module.exports = async ({ strapi }) => {
await strapi.query('webhook').create({
data: {
name: 'CRM Sync',
url: process.env.CRM_WEBHOOK_URL,
headers: { 'Authorization': `Bearer ${process.env.CRM_TOKEN}` },
events: ['entry.create', 'entry.update'],
enabled: true,
},
})
}
Структура вебхук-evento
{
"event": "entry.update",
"createdAt": "2024-01-15T10:30:00.000Z",
"model": "article",
"uid": "api::article.article",
"entry": {
"id": 42,
"title": "Updated Title",
"slug": "updated-title",
"publishedAt": "2024-01-15T10:30:00.000Z"
}
}
Обработчик вебхука в Next.js
// app/api/webhooks/strapi/route.ts
import { revalidateTag, revalidatePath } from 'next/cache'
export async function POST(req: Request) {
const secret = req.headers.get('x-webhook-secret')
if (secret !== process.env.STRAPI_WEBHOOK_SECRET) {
return Response.json({ error: 'Unauthorized' }, { status: 401 })
}
const body = await req.json()
const { model, event, entry } = body
console.log(`Strapi webhook: ${event} on ${model}`, entry?.id)
// Інвалідувати кеш по моделі
revalidateTag(model)
// Інвалідувати конкретну сторінку
const pathMap: Record<string, (entry: any) => string> = {
article: (e) => `/articles/${e.slug}`,
page: (e) => `/${e.slug}`,
category: (e) => `/categories/${e.slug}`,
}
if (pathMap[model] && entry?.slug) {
revalidatePath(pathMap[model](entry))
}
// Для homepage/settings — інвалідувати весь сайт
if (['global', 'homepage', 'settings'].includes(model)) {
revalidatePath('/', 'layout')
}
return Response.json({ revalidated: true })
}
Інтеграція зі Slack
// Сповіщення про нові комментарі
module.exports = (config, { strapi }) => ({
async afterCreate(event) {
const { result } = event
if (event.model.uid === 'api::comment.comment') {
await fetch(process.env.SLACK_WEBHOOK_URL, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
text: `Новий комментар від ${result.author}: "${result.text.slice(0, 100)}"`,
}),
})
}
},
})
Часові рамки
Налаштування вебхуків та інтеграції з ISR Next.js — 0,5–1 день. Складні інтеграції з CRM/ERP — 2–3 дні.







