191 lines
6.1 KiB
Markdown
191 lines
6.1 KiB
Markdown
# Strapi Webhooks Configuration Guide
|
|
|
|
## Overview
|
|
This guide explains how to configure Strapi webhooks for automatic synchronization with the backend API. When articles or live blogs are published/updated/deleted in Strapi, webhooks will automatically trigger synchronization with the backend.
|
|
|
|
## Webhook Endpoints
|
|
|
|
The backend provides three webhook endpoints:
|
|
|
|
1. **Article-specific webhook**: `POST /api/v1/webhooks/strapi/article`
|
|
2. **Live Blog-specific webhook**: `POST /api/v1/webhooks/strapi/live-blog`
|
|
3. **Generic webhook**: `POST /api/v1/webhooks/strapi` (handles both)
|
|
|
|
All endpoints accept the following JSON format:
|
|
```json
|
|
{
|
|
"event": "entry.publish", // or "entry.update", "entry.delete", "entry.unpublish"
|
|
"model": "article", // or "live-blog"
|
|
"entry": {
|
|
"documentId": "unique-strapi-id"
|
|
}
|
|
}
|
|
```
|
|
|
|
## Configuration Steps
|
|
|
|
### Step 1: Access Strapi Admin Panel
|
|
1. Open your browser and go to: `http://localhost:1337/admin`
|
|
2. Log in with your admin credentials
|
|
|
|
### Step 2: Configure Webhooks
|
|
1. In the left sidebar, click on **Settings** (gear icon)
|
|
2. Click on **Webhooks** under the "GLOBAL SETTINGS" section
|
|
3. Click the **"Add new webhook"** button
|
|
|
|
### Step 3: Configure Article Webhook
|
|
**Basic Settings:**
|
|
- **Name**: `Backend Article Sync`
|
|
- **URL**: `http://localhost:3000/api/v1/webhooks/strapi/article`
|
|
- For Docker internal communication: `http://backend:3000/api/v1/webhooks/strapi/article`
|
|
- **Headers**: Add if needed (usually not required)
|
|
|
|
**Trigger Events:**
|
|
Select the following events for the "Article" content type:
|
|
- [x] **Create entry** (`entry.create`)
|
|
- [x] **Update entry** (`entry.update`)
|
|
- [x] **Delete entry** (`entry.delete`)
|
|
- [x] **Publish entry** (`entry.publish`)
|
|
- [x] **Unpublish entry** (`entry.unpublish`)
|
|
|
|
**Save the webhook.**
|
|
|
|
### Step 4: Configure Live Blog Webhook (Optional)
|
|
Repeat Step 3 for live blogs:
|
|
- **Name**: `Backend Live Blog Sync`
|
|
- **URL**: `http://localhost:3000/api/v1/webhooks/strapi/live-blog`
|
|
- Select events for the "Live Blog" content type
|
|
|
|
### Alternative: Single Generic Webhook
|
|
You can use a single webhook for all content types:
|
|
- **Name**: `Backend Generic Sync`
|
|
- **URL**: `http://localhost:3000/api/v1/webhooks/strapi`
|
|
- Select events for ALL relevant content types (Article, Live Blog)
|
|
|
|
## Testing Webhooks
|
|
|
|
### Manual Test
|
|
You can manually trigger a webhook to test the configuration:
|
|
|
|
```bash
|
|
# Test article webhook
|
|
curl -X POST http://localhost:3000/api/v1/webhooks/strapi/article \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"event": "entry.publish",
|
|
"model": "article",
|
|
"entry": {
|
|
"documentId": "your-article-id"
|
|
}
|
|
}'
|
|
|
|
# Test generic webhook
|
|
curl -X POST http://localhost:3000/api/v1/webhooks/strapi \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"event": "entry.publish",
|
|
"model": "article",
|
|
"entry": {
|
|
"documentId": "your-article-id"
|
|
}
|
|
}'
|
|
```
|
|
|
|
### Test from Strapi
|
|
1. In Strapi admin, edit any article
|
|
2. Click "Save" or "Publish"
|
|
3. Check backend logs for webhook receipt:
|
|
```bash
|
|
docker logs placebo-backend-dev --tail 20 | grep -i "webhook\|strapi"
|
|
```
|
|
|
|
## Manual Sync (Fallback)
|
|
If webhooks fail or for initial sync, use manual sync endpoints:
|
|
|
|
```bash
|
|
# Get authentication token first
|
|
curl -X POST http://localhost:3000/api/v1/auth/login \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"username":"your-username","password":"your-password"}'
|
|
|
|
# Sync all articles (requires auth)
|
|
curl -X POST http://localhost:3000/api/v1/webhooks/strapi/sync/all \
|
|
-H "Authorization: Bearer YOUR_TOKEN_HERE"
|
|
|
|
# Sync all live blogs
|
|
curl -X POST http://localhost:3000/api/v1/webhooks/strapi/sync/live-blogs \
|
|
-H "Authorization: Bearer YOUR_TOKEN_HERE"
|
|
|
|
# Sync everything
|
|
curl -X POST http://localhost:3000/api/v1/webhooks/strapi/sync/everything \
|
|
-H "Authorization: Bearer YOUR_TOKEN_HERE"
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Common Issues
|
|
|
|
1. **Webhook not received by backend**
|
|
- Check backend logs: `docker logs placebo-backend-dev --tail 50`
|
|
- Verify CORS is configured (should allow `http://localhost:1337`)
|
|
- Test webhook manually with curl
|
|
|
|
2. **401 Unauthorized error**
|
|
- Webhook endpoints are now public (no auth required)
|
|
- If getting 401, check that `@Public()` decorator is on webhook methods
|
|
|
|
3. **Webhook received but sync fails**
|
|
- Check Strapi API token in backend `.env.docker`
|
|
- Verify Strapi is accessible from backend container
|
|
- Check backend logs for specific error messages
|
|
|
|
4. **Article not appearing in frontend**
|
|
- Verify article is synced to backend: `curl http://localhost:3000/api/v1/articles`
|
|
- Check frontend browser console for errors
|
|
- Hard refresh frontend (Ctrl+F5)
|
|
|
|
### Log Monitoring
|
|
```bash
|
|
# Monitor backend logs for webhooks
|
|
docker logs -f placebo-backend-dev | grep -i "webhook\|strapi"
|
|
|
|
# Monitor Strapi logs
|
|
docker logs -f placebo-cms-dev
|
|
|
|
# Check if articles are in backend
|
|
curl -s "http://localhost:3000/api/v1/articles?status=published" | jq '.total'
|
|
```
|
|
|
|
## Docker Network Considerations
|
|
|
|
### Internal Docker Communication
|
|
- Within Docker network: Use `http://backend:3000` and `http://cms:1337`
|
|
- From host machine: Use `http://localhost:3000` and `http://localhost:1337`
|
|
|
|
### Webhook URL Examples
|
|
- **From Strapi container to Backend**: `http://backend:3000/api/v1/webhooks/strapi`
|
|
- **From Host to Backend**: `http://localhost:3000/api/v1/webhooks/strapi`
|
|
- **External/Production**: Use your domain: `https://api.yourdomain.com/api/v1/webhooks/strapi`
|
|
|
|
## Security Considerations
|
|
|
|
1. **Webhook endpoints are public** - ensure your backend is not exposed to the public internet in production
|
|
2. **Consider adding webhook signature verification** for production
|
|
3. **Use HTTPS in production** for all webhook calls
|
|
4. **Monitor webhook logs** for suspicious activity
|
|
|
|
## Verification Checklist
|
|
|
|
- [ ] Webhooks configured in Strapi admin
|
|
- [ ] Test webhook manually works
|
|
- [ ] Article publish in Strapi triggers sync
|
|
- [ ] Synced articles appear in backend API
|
|
- [ ] Frontend displays synced articles
|
|
- [ ] All event types tested (publish, update, delete)
|
|
|
|
## Support
|
|
If issues persist:
|
|
1. Check all service logs
|
|
2. Verify network connectivity between containers
|
|
3. Test each component independently
|
|
4. Review error messages in logs |