# Notifications API BotServer provides RESTful endpoints for managing notifications across multiple channels including push notifications, in-app alerts, and message broadcasting. ## Overview The Notifications API enables: - Push notifications to users - Broadcast messages to groups - Alert management - Notification preferences - Delivery tracking ## Base URL ``` http://localhost:8080/api/v1/notifications ``` ## Authentication All Notifications API requests require authentication: ```http Authorization: Bearer ``` ## Endpoints ### Send Notification **POST** `/send` Send a notification to one or more recipients. **Request Body:** ```json { "recipients": ["user123", "user456"], "title": "System Update", "message": "Maintenance scheduled for tonight", "priority": "normal", "channels": ["web", "email"], "data": { "action": "view_details", "url": "/maintenance" } } ``` **Response:** ```json { "notification_id": "ntf_abc123", "recipients_count": 2, "status": "queued", "delivery": { "web": "pending", "email": "pending" } } ``` ### Broadcast Message **POST** `/broadcast` Send a message to all users or a specific group. **Request Body:** ```json { "target": "all", "filters": { "channel": "web", "last_active": "7d" }, "message": { "title": "New Feature Available", "body": "Check out our latest update!", "image_url": "https://example.com/feature.png" }, "schedule": "2024-01-15T14:00:00Z" } ``` **Response:** ```json { "broadcast_id": "brd_xyz789", "target_count": 1250, "scheduled_for": "2024-01-15T14:00:00Z", "status": "scheduled" } ``` ### Get Notification Status **GET** `/notifications/{notification_id}` Get the status of a sent notification. **Response:** ```json { "notification_id": "ntf_abc123", "created_at": "2024-01-15T10:00:00Z", "status": "delivered", "delivery_details": [ { "recipient": "user123", "channel": "web", "status": "delivered", "delivered_at": "2024-01-15T10:00:05Z" }, { "recipient": "user123", "channel": "email", "status": "delivered", "delivered_at": "2024-01-15T10:00:10Z" } ] } ``` ### List Notifications **GET** `/notifications` List sent notifications with optional filters. **Query Parameters:** - `page` - Page number (default: 1) - `limit` - Items per page (default: 20) - `status` - Filter by status - `channel` - Filter by channel - `start_date` - Start date filter - `end_date` - End date filter **Response:** ```json { "notifications": [ { "notification_id": "ntf_abc123", "title": "System Update", "status": "delivered", "created_at": "2024-01-15T10:00:00Z", "recipients_count": 2 } ], "total": 150, "page": 1, "limit": 20 } ``` ### Mark as Read **PATCH** `/notifications/{notification_id}/read` Mark a notification as read by the current user. **Response:** ```json { "notification_id": "ntf_abc123", "marked_as_read": true, "read_at": "2024-01-15T10:05:00Z" } ``` ### Delete Notification **DELETE** `/notifications/{notification_id}` Delete a notification from the system. **Response:** ```json { "deleted": true, "notification_id": "ntf_abc123" } ``` ## User Preferences ### Get Preferences **GET** `/users/{user_id}/preferences` Get notification preferences for a user. **Response:** ```json { "user_id": "user123", "preferences": { "email": { "enabled": true, "frequency": "immediate" }, "push": { "enabled": true, "quiet_hours": { "enabled": true, "start": "22:00", "end": "08:00" } }, "sms": { "enabled": false }, "categories": { "system": true, "marketing": false, "updates": true } } } ``` ### Update Preferences **PATCH** `/users/{user_id}/preferences` Update notification preferences. **Request Body:** ```json { "email": { "enabled": false }, "push": { "quiet_hours": { "enabled": true, "start": "23:00", "end": "07:00" } } } ``` ## Notification Templates ### Create Template **POST** `/templates` Create a reusable notification template. **Request Body:** ```json { "name": "welcome_message", "title": "Welcome to {{app_name}}", "body": "Hi {{user_name}}, welcome to our platform!", "channels": ["email", "push"], "variables": ["app_name", "user_name"] } ``` ### Use Template **POST** `/send/template` Send notification using a template. **Request Body:** ```json { "template": "welcome_message", "recipients": ["user789"], "variables": { "app_name": "BotServer", "user_name": "John" } } ``` ## Notification Types ### System Notifications Critical system messages and alerts. ```json { "type": "system", "priority": "high", "persistent": true, "require_acknowledgment": true } ``` ### User Notifications Personal messages and updates. ```json { "type": "user", "priority": "normal", "expires_at": "2024-01-22T10:00:00Z" } ``` ### Broadcast Notifications Mass communications to multiple users. ```json { "type": "broadcast", "target": "segment", "segment_id": "active_users" } ``` ## Delivery Channels ### Web Push Browser push notifications. ```json { "channel": "web", "options": { "icon": "https://example.com/icon.png", "badge": "https://example.com/badge.png", "vibrate": [200, 100, 200], "require_interaction": false } } ``` ### Email Email notifications with rich content. ```json { "channel": "email", "options": { "from": "noreply@example.com", "reply_to": "support@example.com", "attachments": [], "html": true } } ``` ### SMS Text message notifications. ```json { "channel": "sms", "options": { "sender_id": "BOTSERV", "unicode": true } } ``` ### In-App Notifications within the application. ```json { "channel": "in_app", "options": { "persist": true, "category": "updates" } } ``` ## Webhook Events ### Delivery Events Configure webhooks to receive delivery updates. ```json { "event": "notification.delivered", "notification_id": "ntf_abc123", "recipient": "user123", "channel": "email", "delivered_at": "2024-01-15T10:00:10Z" } ``` ### Interaction Events Track user interactions with notifications. ```json { "event": "notification.clicked", "notification_id": "ntf_abc123", "user_id": "user123", "clicked_at": "2024-01-15T10:05:00Z", "action": "view_details" } ``` ## Error Responses ### 400 Bad Request ```json { "error": "invalid_recipients", "message": "One or more recipients are invalid", "invalid_recipients": ["unknown_user"] } ``` ### 429 Rate Limit ```json { "error": "rate_limit_exceeded", "message": "Notification send limit exceeded", "limit": 100, "window": "1h", "retry_after": 3600 } ``` ## Usage Examples ### Send Simple Notification ```bash curl -X POST \ -H "Authorization: Bearer token123" \ -H "Content-Type: application/json" \ -d '{ "recipients": ["user123"], "title": "Hello", "message": "This is a test notification" }' \ http://localhost:8080/api/v1/notifications/send ``` ### Schedule Broadcast ```bash curl -X POST \ -H "Authorization: Bearer token123" \ -H "Content-Type: application/json" \ -d '{ "target": "all", "message": { "title": "Scheduled Maintenance", "body": "System will be unavailable from 2 AM to 4 AM" }, "schedule": "2024-01-20T02:00:00Z" }' \ http://localhost:8080/api/v1/notifications/broadcast ``` ## Best Practices 1. **Batch Notifications**: Send to multiple recipients in one request 2. **Use Templates**: Maintain consistent messaging 3. **Respect Preferences**: Check user settings before sending 4. **Handle Failures**: Implement retry logic 5. **Track Delivery**: Monitor delivery rates 6. **Avoid Spam**: Rate limit and deduplicate messages ## Rate Limits | Operation | Limit | Window | |-----------|-------|--------| | Send Notification | 100/hour | Per user | | Broadcast | 10/day | Per account | | Template Creation | 20/day | Per account | ## Related APIs - [User API](./user-security.md) - User management - [WebSocket API](../chapter-04/web-interface.md) - Real-time notifications - [Email API](./keyword-send-mail.md) - Email notifications