dukcapil/NOTIFICATION_API.md
2025-09-08 12:24:37 +07:00

278 lines
6.0 KiB
Markdown

# Notification Service API Documentation
## Overview
The notification service integrates with Novu to manage subscribers and trigger notifications. It automatically creates/manages Novu subscribers based on user data and provides endpoints for triggering notifications.
## Configuration
Add your Novu credentials to `infra/development.yaml`:
```yaml
novu:
api_key: 'your-novu-api-key' # Get from Novu dashboard
application_id: 'your-app-id' # Optional
base_url: 'https://api.novu.co' # Optional, defaults to Novu cloud
```
## Features
1. **Automatic Subscriber Management**
- Subscribers are automatically created when users are created
- Subscriber ID = User ID (UUID)
- Subscribers are updated when user data changes
- Subscribers are deleted when users are deleted
2. **On-Demand Subscriber Creation**
- If a subscriber doesn't exist when triggering a notification, it's created automatically
- Ensures notifications can always be sent
## API Endpoints
### Current User Endpoints (Authenticated users)
#### 1. Trigger Notification for Current User
```http
POST /api/v1/notifications/me/trigger
Authorization: Bearer {token}
{
"template_id": "welcome-email",
"template_data": {
"username": "John Doe",
"action_url": "https://example.com/confirm"
},
"overrides": {
"email": {
"subject": "Custom Subject",
"from": "custom@example.com"
}
}
}
```
#### 2. Get Current User's Subscriber Info
```http
GET /api/v1/notifications/me/subscriber
Authorization: Bearer {token}
```
Response:
```json
{
"subscriber_id": "uuid",
"email": "user@example.com",
"first_name": "John",
"data": {
"userId": "uuid",
"roles": [...],
"departments": [...]
}
}
```
#### 3. Update Current User's Channel Credentials
```http
PUT /api/v1/notifications/me/channel
Authorization: Bearer {token}
{
"channel": "push",
"credentials": {
"deviceTokens": ["token1", "token2"]
}
}
```
### Admin Endpoints (Requires `notification.admin` permission)
#### 1. Trigger Notification for Any User
```http
POST /api/v1/notifications/trigger
Authorization: Bearer {token}
{
"user_id": "user-uuid",
"template_id": "order-status",
"template_data": {
"orderNumber": "12345",
"status": "shipped"
},
"to": {
"email": "override@example.com",
"phone": "+1234567890"
}
}
```
#### 2. Bulk Trigger Notifications
```http
POST /api/v1/notifications/bulk-trigger
Authorization: Bearer {token}
{
"template_id": "announcement",
"user_ids": ["uuid1", "uuid2", "uuid3"],
"template_data": {
"message": "System maintenance scheduled"
}
}
```
Response:
```json
{
"success": true,
"total_sent": 3,
"total_failed": 0,
"results": [
{
"user_id": "uuid1",
"success": true,
"transaction_id": "tx-123"
}
]
}
```
#### 3. Get Any User's Subscriber Info
```http
GET /api/v1/notifications/subscribers/{userId}
Authorization: Bearer {token}
```
#### 4. Update Any User's Channel Credentials
```http
PUT /api/v1/notifications/subscribers/channel
Authorization: Bearer {token}
{
"user_id": "user-uuid",
"channel": "sms",
"credentials": {
"phoneNumber": "+1234567890"
}
}
```
## Notification Channels
Supported channels:
- `email` - Email notifications
- `sms` - SMS notifications
- `push` - Push notifications
- `in_app` - In-app notifications
- `chat` - Chat notifications (Slack, Discord, etc.)
## Template Data
Template data is passed to Novu templates for variable substitution:
```json
{
"template_data": {
"username": "{{username}}",
"orderNumber": "{{orderNumber}}",
"customField": "{{customField}}"
}
}
```
## Overrides
You can override notification content per channel:
```json
{
"overrides": {
"email": {
"subject": "Custom Subject",
"body": "Custom HTML body",
"from": "noreply@company.com"
},
"sms": {
"content": "Custom SMS message",
"from": "+1234567890"
},
"push": {
"title": "Custom Title",
"content": "Custom push message"
},
"in_app": {
"content": "Custom in-app message"
}
}
}
```
## Error Handling
The service handles errors gracefully:
- Missing Novu configuration: Returns success=false with appropriate message
- Missing subscriber: Automatically creates subscriber before sending
- Failed notifications: Returns detailed error messages
## Integration with User Management
The notification service is integrated with user management:
1. **User Creation**: Automatically creates Novu subscriber
2. **User Update**: Updates subscriber data
3. **User Deletion**: Removes subscriber from Novu
4. **User Data Sync**: Subscriber includes user roles and departments
## Usage Examples
### Send Welcome Email
```javascript
// POST /api/v1/notifications/me/trigger
{
"template_id": "welcome",
"template_data": {
"firstName": "John",
"verificationUrl": "https://app.com/verify/123"
}
}
```
### Send Order Confirmation
```javascript
// POST /api/v1/notifications/trigger
{
"user_id": "customer-uuid",
"template_id": "order-confirmation",
"template_data": {
"orderNumber": "ORD-2024-001",
"items": [...],
"total": "$99.99"
}
}
```
### Send Bulk Announcement
```javascript
// POST /api/v1/notifications/bulk-trigger
{
"template_id": "system-announcement",
"user_ids": ["uuid1", "uuid2", "uuid3"],
"template_data": {
"title": "Scheduled Maintenance",
"message": "System will be down for maintenance on Sunday",
"startTime": "2024-01-14 00:00",
"endTime": "2024-01-14 04:00"
}
}
```
## Testing
1. Ensure Novu API key is configured
2. Create a test user
3. Create a notification template in Novu dashboard
4. Use the template ID to send test notifications
## Troubleshooting
1. **"notification service not configured"**: Add Novu API key to configuration
2. **"failed to create subscriber"**: Check user data and Novu API key
3. **"template not found"**: Ensure template exists in Novu dashboard
4. **No notification received**: Check Novu dashboard for delivery status