Overview
NotificationsService provides:- Discord webhook integration for real-time alerts
- Rich embed formatting with conversation links and context
- Severity-based styling (error, warning, info)
- Integration with Railway logs, Langfuse traces, and Linear issues
- Customer information display for support context
Core Methods
send_discord_notification
notification: DiscordNotification- Notification data and formatting- Returns boolean indicating success/failure
- Sends rich Discord embeds with contextual links and customer info
Data Models
DiscordNotification
title: str- Notification title (auto-generated if empty)description: str- Main notification messagestore_name: str- Store/location name for contextconversation_id: str- Conversation identifier for linkingcolor: int- Discord embed color (auto-set by severity)customer_name: str- Customer name (optional)customer_phone: str- Customer phone number (optional)customer_orders_count: int- Customer order history count (optional)trace_url: str- Langfuse trace URL (optional)severity: str- Severity level (error, warning, info)linear_url: str- Linear issue URL (optional)linear_identifier: str- Linear issue ID (optional)
SeverityLevel
ERROR- Red styling with 🚨 emojiWARNING- Orange styling with ⚠️ emojiINFO- Blue styling with ℹ️ emoji
Rich Discord Integration
Embed Features
- Clickable Title: Links directly to conversation in webapp
- Severity Styling: Color-coded embeds with appropriate emojis
- Customer Context: Name, phone, order history when available
- Conversation Link: Direct link to conversation in Chataigne webapp
- Langfuse Integration: Trace links for debugging and analysis
- Railway Logs: Time-windowed log links for system debugging
- Linear Integration: Issue tracking links when created
- Timezone Support: Europe/Zurich timezone for timestamps
Link Generation
- Conversation:
https://app.chataigne.ai/whatsapp/messages?conversationId={id} - Railway Logs: Environment-specific log URLs with time windows
- Langfuse Traces: Automatic trace URL detection from context
- Linear Issues: Direct links to created issues with identifiers
Usage in Codebase
API Dependencies
- leclerk/api/dependencies.py:34 - FastAPI dependency for service injection
- leclerk/services/init.py:3 - Service export and availability
Route Integration
NotificationsService is used in API routes for error alerting:Message Route
- leclerk/api/routes/message.py:16 - Import notifications dependency
- leclerk/api/routes/message.py:37 - Service injection in message endpoint
- Used to alert on message processing failures and errors
Event Route
- leclerk/api/routes/event.py:15 - Import notifications dependency
- leclerk/api/routes/event.py:31 - Service injection in event endpoint
- Used to alert on event processing failures and webhook issues
Error Reporting Workflow
- Error Detection: Exception caught in API routes
- Context Gathering: Customer info, conversation data, trace URLs collected
- Issue Creation: Linear issue created (optional)
- Notification: Discord notification sent with all context links
- Support Response: Team can quickly access conversation, traces, and logs
Environment Configuration
Railway Integration
- Environment Mapping: Production, staging, demo environment IDs
- Log Windows: 1-minute time windows around notification time
- Project Integration: Chataigne-specific Railway project configuration
Discord Configuration
- Webhook URL: Configurable Discord webhook endpoint
- Embed Limits: Handles Discord’s embed size and field limitations
- Error Handling: Graceful fallback when webhook is unavailable
Multi-Channel Architecture
The service is designed for extensibility:- Current: Discord webhook support
- Future: Slack, email, SMS integration points
- Pluggable: New notification channels can be added easily
- Conditional: Channel selection based on severity or context