Настройка 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,
},
})
}
Структура вебхук-события
{
"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 дня.







