Package Exports
- @trigidigital/n8n-nodes-chatbot-enchanced
- @trigidigital/n8n-nodes-chatbot-enchanced/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@trigidigital/n8n-nodes-chatbot-enchanced) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
🤖 n8n-nodes-chatbot-enhanced
🚀 Production-ready chatbot enhancement node for n8n workflows with Redis/Valkey/Upstash integration and real-time trigger capabilities.
⚡ High-performance architecture supporting 100-200+ operations per second with enterprise-grade error handling, streamlined outputs, and lean codebase.
🔥 Core Features:
- 💾 Buffer Message: Collect messages with human-like timing and basic anti-spam filtering
- 🚨 Spam detection: Advanced content filtering with pattern matching and flood protection
- ⏱️ Rate Limit: Smart request throttling with burst protection and adaptive penalties
- 📡 Real-Time Redis Trigger: Instant workflow activation on Redis key changes
- 📊 3 Clean Outputs: Success, Spam, and Process streams for organized workflow management
- 🔧 Multi-Provider Support: Redis, Valkey (recommended), and Upstash compatibility
Installation
Operations
Credentials
Compatibility
Usage
Resources
Version history
Installation
Follow the installation guide in the n8n community nodes documentation.
Install the package in your n8n installation:
# In your n8n installation directory
npm install @trigidigital/n8n-nodes-chatbot-enchancedOr install directly from npm registry:
npm install -g @trigidigital/n8n-nodes-chatbot-enchanced🎯 Available Nodes
This package includes two powerful nodes for comprehensive chatbot management:
1. 🤖 ChatBot Enhanced (Regular Node)
Advanced message processing with intelligent anti-spam protection
📋 Operations
- 💾 Buffer Message: Collect messages with human-like delays and basic spam filtering
- 🚨 Spam detection: Dedicated spam analysis with pattern matching and flood protection
- ⏱️ Rate Limit: Smart request throttling with burst protection and adaptive penalties
🔄 Streamlined Outputs (v1.0.0)
The node provides 3 focused outputs for clean workflow management:
- ✅ Success: Clean, processed messages and successful operations
- 🚨 Spam: Detected spam messages with detailed analysis and confidence scores
- ⚙️ Process: Status updates, buffered messages, and operational metadata
2. 🚨 ChatBot Enhanced - Trigger (Trigger Node)
Real-time Redis/Valkey monitoring using native Redis Keyspace Notifications
🎯 Native Redis Technology - No Polling Required
This trigger leverages Redis Keyspace Notifications, a built-in Redis feature for real-time event monitoring:
- 📡 Keyspace Notifications: Uses Redis
CONFIG SET notify-keyspace-events KEAfor instant event delivery - 🔄 Pub/Sub Architecture: Native Redis publish/subscribe mechanism (not custom polling/cron)
- ⚡ Channel Patterns: Subscribes to
__keyspace@{db}__:{pattern}channels for targeted monitoring - 🎯 Zero Latency: Events delivered within <100ms of actual Redis operations
- 🚀 Enterprise-Grade: Production-ready real-time data synchronization
⚡ Real-Time Capabilities
- 🔍 Key Pattern Monitoring: Track specific Redis key patterns (e.g.,
chatbot:*,session:*) - 📡 Event Type Filtering: Monitor SET, DEL, EXPIRED, and EVICTED operations
- 🛡️ Rate limiting: Built-in protection against event storms (100-1000 events/second)
- 🔄 Auto-Reconnection: Resilient connection handling with exponential backoff
- 📊 Value Retrieval: Automatic value fetching for SET events and intelligent caching for DEL events
⚠️ PRODUCTION RISKS - READ BEFORE DEPLOYING
🚨 Critical Performance Impact:
- Redis Server Load: Keyspace notifications add 5-15% CPU overhead
- Network Bandwidth: Each monitored event generates network traffic
- n8n Memory Usage: Trigger instances consume ~10MB+ memory each
- Connection Limits: 2 Redis connections per trigger (main + subscriber)
🛑 Potential Issues:
- Event Storms: High-frequency keys can overwhelm workflows (100-1000+ events/sec)
- Memory Leaks: Poor pattern design can accumulate excessive cached values
- Network Failures: Connection drops result in missed events (no event replay)
- Race Conditions: Rapid key updates may cause value mismatches
✅ Risk Mitigation:
// SAFE Configuration Example
{
keyPattern: "chatbot:session:*", // Specific, not "*"
eventTypes: ["set", "del"], // Only needed events
rateLimitEnabled: true, // Always enabled
maxEventsPerSecond: 100 // Conservative limit
}🔧 Production Requirements:
- Redis Config:
CONFIG SET notify-keyspace-events KEA(automatically configured by trigger) - Pattern Specificity: Never use
*wildcard in production - Monitoring: Track Redis CPU, n8n memory, and event rates
- Health Checks: Implement trigger connectivity monitoring
- Circuit Breakers: Stop triggers during Redis outages
🎯 Why Redis Keyspace Notifications vs Traditional Polling?
| Method | Redis Keyspace Notifications | Traditional Polling/Cron |
|---|---|---|
| Latency | <100ms real-time | 5-60 seconds delayed |
| CPU Usage | Low (event-driven) | High (constant queries) |
| Network Traffic | Minimal (only changes) | High (regular polls) |
| Accuracy | 100% accurate events | Can miss rapid changes |
| Scalability | Scales with events | Scales with poll frequency |
| Resource Efficiency | ✅ Very efficient | ❌ Wasteful |
Technical Implementation:
// Redis automatically publishes to these channels:
__keyspace@0__:chatbot:session:user123 // Channel
"set" // Message (event type)
// Your trigger subscribes and receives instant notifications
// No database polling, no missed events, no delays!🚀 Performance Specifications
Regular Node (ChatBot Enhanced)
- Throughput: 100-200+ operations per second
- Latency: 10-50ms average response time (including Redis I/O)
- Memory Usage: ~5-15MB per active session buffer
- Reliability: Enterprise-grade error handling with automatic Redis reconnection
- Scalability: Supports Redis clusters and high-availability setups
Trigger Node (ChatBot Enhanced - Trigger)
- Event Latency: <100ms from Redis change to n8n trigger (thanks to Keyspace Notifications)
- Throughput: 100-1000 events/second (configurable rate limiting with token bucket)
- Memory Usage: ~10MB base + ~1KB per cached key value
- Connection Architecture: 2 dedicated Redis connections (main client + pub/sub subscriber)
- Reliability: Auto-reconnection with exponential backoff (5 attempts, max 30s delay)
- Technology: Native Redis Keyspace Notifications (
notify-keyspace-events KEA) - Channel Subscription: Pattern-based
__keyspace@{db}__:{pattern}monitoring
Provider-Specific Performance
| Provider | Latency | Throughput | Reliability | Best For |
|---|---|---|---|---|
| Local Redis | 1-5ms | 1000+ ops/sec | High | Development, Low-latency |
| Valkey | 1-5ms | 1200+ ops/sec | High | Production, Performance |
| Upstash | 50-200ms | 100-500 ops/sec | Very High | Serverless, Global scale |
🔐 Redis Credentials & Compatibility
🎯 IMPORTANT: This node ONLY supports Redis-compatible databases. The following providers are supported:
✅ Supported Providers
1. 🔴 Redis (Version 6.0+)
- Open Source: Redis 6.0-7.2 (fully supported)
- Redis Stack: All Redis Stack features supported
- Redis Enterprise: Production-grade with advanced features
- Self-Hosted: Any Redis 6.0+ installation
2. 🟦 Valkey (Version 7.2+) - 🏆 HIGHLY RECOMMENDED FOR SELF-HOSTED
- Superior Performance: ~15-20% better memory efficiency vs Redis
- Trigger Stability: More stable for real-time Redis trigger operations
- Open Source: 100% open source fork of Redis 7.2
- Drop-in Replacement: Perfect Redis compatibility with better performance
- Future-Proof: No licensing concerns like Redis 7.4+
- Active Development: Community-driven with frequent stability improvements
- Production Ready: Optimized for enterprise workloads and trigger reliability
3. ☁️ Upstash - CLOUD RECOMMENDED
- Serverless Redis: Global edge locations with sub-10ms latency
- REST API: HTTP-based Redis interface (supports Redis protocol too)
- Auto-Scaling: Automatic scaling based on usage
- Built-in Security: TLS encryption and authentication by default
- Free Tier: 10,000 commands daily for testing
🔧 Connection Configuration Options
Individual Fields
- Host: Redis server hostname/IP
- Port: Redis server port (default: 6379)
- Database: Redis database number (0-15)
- Authentication Type: None, Password Only, or Username & Password
- SSL/TLS: Enable encrypted connections
🔐 Authentication Methods
| Method | Redis Version | Use Case | Security Level |
|---|---|---|---|
| None | All | Development/Local | ⚠️ Low |
| Password Only | All | Basic production | 🟡 Medium |
| Username + Password | 6.0+ | Advanced production | 🟢 High |
| SSL/TLS | All | Cloud/Internet | 🔒 Very High |
🚨 UPSTASH SPECIAL CONFIGURATION
Upstash requires specific settings for optimal performance:
// Upstash Connection Settings
{
host: "your-endpoint.upstash.io",
port: 6380,
password: "your-upstash-password",
ssl: true, // Always required
authType: "password", // Username not needed
connectionTimeout: 10000, // Higher timeout for global latency
}⚠️ Upstash Limitations:
- Global Latency: 50-200ms depending on region
- Command Limits: Rate limiting based on plan
- Redis Modules: Limited Redis module support
- Persistence: Automatic persistence (cannot be disabled)
🧪 Connection Testing
All credential configurations include automatic connection testing:
- ✅ Connection Validation: Tests host/port connectivity
- ✅ Authentication Check: Validates credentials
- ✅ Database Access: Confirms database permissions
- ✅ SSL Handshake: Verifies certificate chain (if SSL enabled)
- ✅ Command Execution: Tests basic Redis operations (PING, SET, GET)
🔒 Security Best Practices
Production Security Checklist
- Use SSL/TLS for all external connections
- Enable Authentication (password minimum, username+password preferred)
- Network Isolation: Redis server not exposed to internet
- Regular Password Rotation: Change credentials quarterly
- Connection Limits: Monitor Redis connection counts
- Audit Logging: Enable Redis command logging for security events
Credential Storage Security
- n8n Encryption: Credentials encrypted at rest in n8n database
- Environment Variables: Use env vars for sensitive production credentials
- Credential Isolation: Separate credentials for dev/staging/production
- Access Control: Limit credential access to authorized team members
❌ Unsupported Databases
The following databases are NOT compatible:
- ❌ MongoDB: Different protocol and data model
- ❌ MySQL/PostgreSQL: SQL databases, not key-value stores
- ❌ Elasticsearch: Search engine, different API
- ❌ DynamoDB: AWS NoSQL service, different protocol
- ❌ Memcached: Similar but incompatible protocol
- ❌ Apache Cassandra: Wide-column store, different architecture
Compatibility
- Minimum n8n version: 1.0.0
- Node.js version: 20.15 or higher
- Redis/Valkey version: 6.0 or higher (recommended)
- Tested against: n8n versions 1.0.0+
Known Compatibility Issues
- Redis versions below 6.0 may not support username/password authentication
- Some advanced features require Redis 6.2+ for optimal performance
- SSL/TLS features require proper certificate configuration
💡 Usage Guide
🚀 Quick Start
Step 1: Setup Redis Credentials
- Go to n8n Credentials → Create New → Redis
- Choose your provider and configuration:
- Redis/Valkey: Use connection string or individual fields
- Upstash: Always use SSL and password authentication
- Test Connection to verify setup
Step 2A: Add Regular Node (ChatBot Enhanced)
- Drag Node: Add "ChatBot Enhanced" to your workflow
- Select Credentials: Choose your Redis credentials
- Choose Operation:
Buffer Message- For human-like response timingSpam detection- For content filteringRate Limit- For request throttling
- Configure Parameters (see examples below)
- Connect Outputs: Success, Spam, and Process outputs
Step 2B: Add Trigger Node (ChatBot Enhanced - Trigger)
- Drag Trigger: Add "ChatBot Enhanced - Trigger" to start workflow
- Select Credentials: Choose your Redis credentials
- Configure Monitoring:
- Key Pattern:
chatbot:session:*(be specific!) - Event Types:
["SET", "DEL"](only what you need) - Rate limiting: Keep enabled (100 events/sec)
- Key Pattern:
- Test Trigger: Create a test key in Redis
🎆 Complete Workflow Examples
Example 1: Human-Like Chatbot with Spam Protection
Webhook → ChatBot Enhanced (Buffer message) → AI Processing
↓ (Spam Output)
Spam HandlerConfiguration:
// ChatBot Enhanced Node - Buffer message Operation
Session Key: {{$json.from}} // User ID from webhook
Message Content: {{$json.message}} // User message
Buffer Time: 15 // 15-second human-like delay
Buffer Size: 50 // Max 50 messages per batch
Buffer Pattern: "Collect & Send All" // Send all messages together
Anti-Spam Detection: "Repeated Text" // Basic spam filtering
// Connect Outputs:
// Success → Continue to AI processing
// Spam → Send warning message
// Process → Log buffering statusExample 2: Real-Time Session Management
Redis Trigger → Session Processor → User NotificationConfiguration:
// ChatBot Enhanced - Trigger Node
Key Pattern: "session:active:*" // Monitor active sessions
Event Types: ["SET", "EXPIRED"] // New sessions and expiry
Max Events Per Second: 50 // Conservative limit
Include Metadata: true // For debugging
// Processes:
// SET events → Welcome new user
// EXPIRED events → Send "session ended" notificationExample 3: Advanced Content Filtering Pipeline
Webhook → Spam detection → Rate limit → Content ProcessingConfiguration:
// Node 1: ChatBot Enhanced - Spam detection
Detection Type: "Combined Detection" // Multiple methods
Action: "Block" // Block spam completely
Similarity Threshold: 85 // 85% similarity = spam
Predefined Patterns: ["URLs", "Emails"] // Block URLs and emails
// Node 2: ChatBot Enhanced - Rate limit Operation
Limit Type: "Per User" // Individual user limits
Algorithm: "Token Bucket" // Allow message bursts
Max Requests: 20 // 20 messages per minute
Burst Limit: 5 // Allow 5-message bursts👥 Real-World Use Cases
Use Case 1: WhatsApp Business Bot
// Problem: Users send multiple messages rapidly
// Solution: Buffer messages for 10 seconds, then respond once
Buffer message Configuration:
{
sessionKey: "{{$json.from}}", // WhatsApp number
messageContent: "{{$json.body}}", // Message text
bufferTime: 10, // Wait 10 seconds
antiSpamType: "flood" // Prevent message flooding
}
// Workflow:
// User: "Hello"
// User: "How are you?"
// User: "I need help"
// Bot waits 10 seconds...
// Bot: Processes all 3 messages together, responds onceUse Case 2: Gaming Chat Moderation
// Problem: Players send spam and toxic content
// Solution: Multi-layer spam detection with automatic penalties
Spam detection Configuration:
{
detectionType: "combined", // All detection methods
spamAction: "block", // Block spam messages
predefinedPatterns: ["urls", "repeated_chars"],
customPatterns: "(noob|toxic|banned)", // Game-specific patterns
floodMaxMessages: 5, // Max 5 messages per minute
floodTimeWindow: 60
}
Rate limit Configuration:
{
limitType: "smart_adaptive", // Learns user patterns
maxRequests: 30, // 30 messages per minute
penaltyMultiplier: 3.0, // 3x penalty for violations
enableAdaptive: true // Adjust limits automatically
}Use Case 3: Customer Support Queue Management
// Problem: Monitor support ticket status changes in real-time
// Solution: Redis trigger monitors ticket keys, routes to appropriate agents
Trigger Configuration:
{
keyPattern: "support🎫*", // All support tickets
eventTypes: ["set", "del", "expired"], // Status changes
rateLimitEnabled: true, // Prevent event storms
maxEventsPerSecond: 200 // Handle high ticket volume
}
// Event Handling:
// SET → New ticket or status update → Notify agent
// EXPIRED → Ticket timeout → Escalate to supervisor
// DEL → Ticket resolved → Send satisfaction survey🚀 Advanced Chatbot Scenarios - Redis Trigger + Built-in Redis Node
💡 Philosophy: Keep this custom node simple while leveraging n8n's built-in Redis node for complex logic. This approach helps users learn in-memory database concepts without overwhelming custom node complexity.
Scenario 1: Auto Follow-Up Based on Phone Number Sessions
Redis Node (SET with TTL) → Redis Trigger (EXPIRED) → WhatsApp Follow-upWorkflow Design:
// Step 1: User starts conversation - Use built-in Redis Node
// Node: Redis (Built-in n8n node)
Action: "Set"
Key: "session☎️{{$json.from}}" // e.g., session☎️+628123456789
Value: JSON.stringify({
lastMessage: "{{$json.body}}",
timestamp: "{{new Date().toISOString()}}",
stage: "awaiting_response"
})
TTL: 120 // 2 minutes auto-expire
// Step 2: Monitor session expiry - Use ChatBot Enhanced Trigger
// Node: ChatBot Enhanced - Trigger
Key Pattern: "session☎️*"
Event Types: ["EXPIRED"] // Only expired events
Max Events Per Second: 50
// Step 3: Auto follow-up logic - Use built-in nodes
// When trigger fires with expired session:
// → Check if user is still active with Redis GET
// → Send follow-up message via WhatsApp/Telegram
// → Create new session with different TTLComplete Workflow Example:
[Webhook: New WhatsApp Message]
↓
[Built-in Redis Node: SET session with 2min TTL]
↓
[ChatBot Enhanced: Process message with buffer/spam detection]
↓
[Send Response via WhatsApp Node]
// Parallel workflow triggered by expiry:
[ChatBot Enhanced - Trigger: Monitor session☎️*]
↓ (EXPIRED event)
[Built-in Redis Node: GET user profile for context]
↓
[IF: User hasn't responded AND conversation unfinished]
↓
[WhatsApp Node: Send follow-up message]
↓
[Built-in Redis Node: SET new session with 5min TTL]Scenario 2: Smart Session Management with Redis TTL
// Learning Opportunity: Master Redis TTL patterns for chatbots
// Phase 1: Initial Contact (5 min TTL)
Key: "chat:initial:+628123456789"
Value: { stage: "greeting", attempts: 1 }
TTL: 300 seconds
// Phase 2: Active Conversation (30 min TTL)
Key: "chat:active:+628123456789"
Value: { stage: "conversation", context: "support_request" }
TTL: 1800 seconds
// Phase 3: Dormant Session (24 hours TTL)
Key: "chat:dormant:+628123456789"
Value: { stage: "dormant", lastActivity: timestamp }
TTL: 86400 seconds
// Trigger monitors ALL patterns:
Key Pattern: "chat:*:*"
Event Types: ["SET", "EXPIRED"]
// Business Logic via Built-in Redis + IF Nodes:
// EXPIRED chat:initial:* → Send "Still need help?" message
// EXPIRED chat:active:* → Move to dormant state
// EXPIRED chat:dormant:* → Archive conversation history
// SET chat:active:* → Cancel dormant timersScenario 3: E-commerce Cart Abandonment Recovery
Shopping Flow → Redis TTL → Auto Recovery → Conversion TrackingImplementation:
// Step 1: Cart Creation (Built-in Redis Node)
Key: "cart:{{$json.userId}}:{{$json.cartId}}"
Value: {
items: [/* cart items */],
total: 150000,
stage: "active",
phone: "+628123456789"
}
TTL: 1800 // 30 minutes
// Step 2: Trigger Setup (ChatBot Enhanced - Trigger)
Key Pattern: "cart:*:*"
Event Types: ["EXPIRED", "SET", "DEL"]
// Step 3: Recovery Logic (Built-in nodes)
// EXPIRED → Check if cart value > 100k → Send discount offer
// SET → Reset abandonment timer
// DEL → Conversion completed, send thank you message
// Advanced: Multi-stage abandonment
// 15 min: "Complete your purchase for 5% discount"
// 30 min: "10% discount expires in 5 minutes!"
// 60 min: "We've saved your cart, return anytime"Scenario 4: Customer Service Priority Queue
// Priority-based customer routing using Redis scoring
// High Priority (VIP customers) - 1 hour response time
Key Pattern: "support:vip:*"
TTL: 3600
Trigger Action: Immediate supervisor notification
// Regular Priority - 4 hour response time
Key Pattern: "support:regular:*"
TTL: 14400
Trigger Action: Agent assignment
// Low Priority (FAQ-level) - 24 hour response time
Key Pattern: "support:faq:*"
TTL: 86400
Trigger Action: Auto-response with FAQ links
// Escalation Logic:
// EXPIRED support:vip:* → Emergency escalation + SMS alert
// EXPIRED support:regular:* → Move to priority queue
// EXPIRED support:faq:* → Archive or auto-closeScenario 5: Multi-Channel Session Synchronization
// Sync conversations across WhatsApp, Telegram, Web Chat
// Unified Session Key Pattern
Key Pattern: "unified:{{phone_number}}:*"
// Channel-specific keys with same phone number:
"unified:+628123456789:whatsapp" // TTL: 30 min
"unified:+628123456789:telegram" // TTL: 30 min
"unified:+628123456789:webchat" // TTL: 15 min
// Trigger monitors all channels:
Key Pattern: "unified:*:*"
Event Types: ["SET", "EXPIRED"]
// Smart routing logic:
// SET on any channel → Extend TTL on all other channels
// EXPIRED on primary channel → Switch context to active channel
// Multiple SET events → Detect channel switching, maintain context🎓 Learning Redis In-Memory Database Concepts
Why This Approach Works:
- 🎯 Focused Custom Node: Only handles chatbot-specific features (buffer, spam, triggers)
- 🧠 Redis Learning: Users master Redis TTL, patterns, and data structures with built-in nodes
- 🔄 Flexibility: Mix and match Redis operations without custom node limitations
- 📚 Skill Development: Users learn enterprise-level in-memory database patterns
Redis Concepts You'll Master:
- TTL Management: Auto-expiring keys for session management
- Key Pattern Design: Hierarchical naming for organized data
- Pub/Sub Events: Real-time notifications via Keyspace events
- Data Structures: JSON storage, counters, sets for complex logic
- Memory Optimization: Efficient key naming and cleanup strategies
Built-in Redis Node Operations to Combine:
GET/SET- Basic key-value operationsEXPIRE/TTL- Time-based session managementEXISTS- Conditional logic branchingINCR/DECR- Counters for rate limitingHGET/HSET- Hash operations for user profilesSADD/SMEMBERS- Sets for user groups/tags
🛠 Configuration Best Practices
✅ DO - Production Ready
// Specific key patterns
keyPattern: "myapp:session:*" // Good - specific
keyPattern: "cache:user:profile:*" // Good - hierarchical
// Conservative settings
maxEventsPerSecond: 100 // Safe default
connectionTimeout: 5000 // 5-second timeout
reconnectAttempts: 5 // Limited retries
// Essential monitoring
includeMetadata: true // For debugging
rateLimitEnabled: true // Always enabled❌ DON'T - Dangerous in Production
// Dangerous patterns
keyPattern: "*" // NEVER - monitors everything
keyPattern: "user:*" // Too broad - millions of events
// Risky settings
maxEventsPerSecond: 10000 // Will overwhelm workflows
rateLimitEnabled: false // Dangerous - no protection
reconnectAttempts: 100 // Excessive reconnection
// Performance killers
keyPattern: "analytics:*" // High-frequency events
eventTypes: ["set", "del", "expired", "evicted"] // All events = overload📊 Monitoring & Debugging
Essential Metrics to Track
// Redis Metrics
- Connection count (max 2 per trigger)
- CPU usage (should not exceed +15%)
- Memory usage (monitor growth)
- Command/second rate
// n8n Metrics
- Workflow execution count
- Node memory consumption
- Error rates per operation
- Buffer overflow incidents
// Business Metrics
- Spam detection accuracy
- False positive rates
- User satisfaction scores
- Response time improvementsDebug Configuration
// Enable verbose logging
{
includeMetadata: true, // Adds debug info
advancedOptions: {
connectionTimeout: 10000, // Longer timeout for testing
includeMetadata: true // Detailed event data
}
}
// Watch for these log messages:
// "🔥 REDIS EVENT RECEIVED" - Confirms trigger working
// "📝 PARSED EVENT DATA" - Shows event processing
// "💾 Using cached value" - Value caching working
// "🚦 EVENT FILTERED" - Event filtering active🔄 Migration & Upgrades
From Basic Redis to Valkey
- Deploy Valkey alongside existing Redis
- Update n8n credentials with Valkey connection details
- Test thoroughly with non-production workflows
- Migrate gradually - start with less critical workflows
- Monitor performance - expect 15-20% improvement
- Decommission Redis after successful migration
From Self-Hosted to Upstash
- Create Upstash database (free tier available)
- Update connection settings:
- Enable SSL/TLS
- Use password authentication
- Increase connection timeout to 10s
- Test latency impact (expect 50-200ms increase)
- Adjust buffer times if needed for global latency
- Monitor command usage against Upstash limits
📚 Expression Reference
Common Expressions
// Dynamic session keys
Session Key: {{$json.userId || $json.from || $json.sessionId || "anonymous"}}
// Message content extraction
Message Content: {{$json.message || $json.text || $json.body || $json.content}}
// Conditional buffer time
Buffer Time: {{$json.urgent ? 5 : 30}} // 5s for urgent, 30s for normal
// Dynamic spam thresholds
Similarity Threshold: {{$json.chatType === "support" ? 90 : 80}}
// Environment-based patterns
Key Pattern: {{$vars.environment}}.chatbot.session.*Advanced Expressions
// User role-based rate limiting
Max Requests: {{$json.userRole === "premium" ? 100 : 20}}
// Time-based buffer adjustment
Buffer Time: {{new Date().getHours() >= 9 && new Date().getHours() <= 17 ? 15 : 60}}
// Multi-field message combining
Message Content: {{[$json.text, $json.attachment?.caption].filter(Boolean).join(' ')}}
// Conditional spam action
Spam Action: {{$json.isFirstTimeUser ? "warn" : "block"}}🎯 Message Buffering + 🛡️ Anti-Spam - Human-Like Response (v1.0.0)
⏱️ Optimized TimedBuffer Implementation with Built-in Anti-Spam Protection - The core feature for human-like chatbot responses:
🧠 How It Works (TimedBuffer Logic + Anti-Spam)
// REAL BEHAVIOR with anti-spam protection:
Chat 1: "Hello" → Master Execution: Start 10s timer, wait...
Chat 2: "How are you?" → Slave Execution: Add to buffer, extend timer, return "pending"
Chat 3: "spam spam spam" → Slave Execution: 🛡️ BLOCKED by anti-spam detection!
Chat 4: "What's your name?" → Slave Execution: Add to buffer, extend timer, return "pending"
After 10 seconds → Master Execution: Return CLEAN MESSAGES only!
// Output: ["Hello", "How are you?", "What's your name?"] (spam filtered out)🛡️ Anti-Spam Detection Features
- Repeated Text Detection: Automatically blocks duplicate or very similar messages
- Flood Protection: Prevents rapid message spamming within time windows
- Pattern Recognition: Detects URLs, excessive caps, phone numbers, emails
- Custom Regex Patterns: Advanced users can define custom spam patterns
- Configurable Actions: Block, delay, or mark spam messages
- Smart Filtering: Only clean messages are included in the final batch
🔄 Execution Pattern
- Master Execution: First message creates buffer, waits for timer, collects all messages
- Slave Executions: Subsequent messages extend timer, add to buffer, return immediately
- Natural Delay: Human-like response delay (not instant robot replies)
- Batch Collection: All messages returned together after timeout
⚙️ Configuration Examples
Buffer message Operation
// Basic Message Buffering
Session Key: {{$json.userId}}
Message Content: {{$json.message}}
Buffer Time: 30 // seconds
Buffer Size: 100 // max messages
Buffer Pattern: "collect_send" // send all at once
// Anti-Spam Protection (Optional - for backward compatibility)
Anti-Spam Detection: "Repeated Text" // Basic spam detectionSpam detection Operation (Dedicated)
// Advanced Spam detection
Session Key: {{$json.userId}}
Message Content: {{$json.message}}
Detection Type: "Combined Detection" // Multiple methods
Action on Detection: "Block" // Block spam messages
Similarity Threshold: 80 // % similarity for repeated content
Flood Max Messages: 10 // messages per time window
Flood Time Window: 60 // seconds
Predefined Patterns: ["URLs", "Emails"] // Built-in pattern detectionRate limit Operation
// Smart Rate limit
Session Key: {{$json.userId}}
Limit Type: "Per User" // or "Global", "Smart Adaptive"
Algorithm: "Token Bucket" // Allow bursts
Max Requests: 10 // per time window
Time Window: 60 // seconds
Burst Limit: 15 // max burst sizeRedis Trigger Configuration
// Safe Production Setup
Key Monitoring: "Choose Key" // Never use "Track All" in production
Key Pattern: "chatbot:session:*" // Specific pattern
Event Types: ["SET", "DEL"] // Only needed events
Rate limiting: true // Always enabled
Max Events Per Second: 100 // Conservative limit
// Advanced Options
Connection Timeout: 5000 // ms
Reconnect Attempts: 5 // before giving up
Include Event Metadata: true // For debugging🎯 Perfect For:
- Human-like Chatbots: Wait for multiple messages before responding (like humans do)
- Conversation Context: Collect user's complete thought before processing
- Natural UX: Avoid instant robot-like responses + filter out spam
- WhatsApp/Telegram Style: Mimic how humans read 2-3 messages then respond
- 🛡️ Customer Support: Automatically handle spam attempts and repeated messages
- 🚀 High-Volume Bots: Built-in protection against abuse and flooding
⚠️ Production Requirements:
- Execution Timeout: Set workflow timeout to 60 seconds
- Redis Monitoring: Health checks for buffer persistence
- Resource Planning: Each session = 1 long-running execution
- Traffic Limits: Optimal for 5-50 concurrent users
📊 Response Types by Operation
Buffer message Responses
// Buffered (Chat 2,3,4...)
{
"type": "buffered",
"status": "pending",
"message": "How are you?",
"spamDetection": {
"isSpam": false,
"actionTaken": "allowed"
}
}
// Spam Blocked
{
"type": "spam_blocked",
"status": "blocked",
"message": "spam spam spam",
"spamDetection": {
"isSpam": true,
"spamType": "repeated",
"confidence": 95,
"actionTaken": "blocked"
}
}
// Batch Ready (After timer - Clean Messages Only!)
{
"type": "buffer_flush",
"trigger": "time",
"messages": ["Hello", "How are you?", "What's your name?"],
"totalMessages": 4,
"spamAnalysis": {
"spamDetected": true,
"spamCount": 1,
"cleanCount": 3
},
"sessionId": "user123",
"timestamp": 1754429268590
}Spam detection Responses
// Spam Detected
{
"type": "spam_detected",
"message": "spam content here",
"spamType": "repeated",
"confidence": 95,
"actionTaken": "blocked",
"reason": "Message similarity above threshold",
"sessionId": "user123",
"timestamp": 1754429268590
}
// Clean Message
{
"type": "clean_message",
"message": "hello there",
"confidence": 5,
"sessionId": "user123",
"timestamp": 1754429268590
}Rate limit Responses
// Request Allowed
{
"type": "rate_limit_allowed",
"message": "user message",
"remainingRequests": 7,
"resetTime": 1754429328590,
"algorithm": "token_bucket",
"sessionId": "user123"
}
// Rate Limit Exceeded
{
"type": "rate_limit_exceeded",
"message": "blocked message",
"remainingRequests": 0,
"retryAfter": 45,
"sessionId": "user123"
}Redis Trigger Event Data
// Redis Key Change Event
{
"eventType": "set",
"key": "chatbot:session:user123",
"value": "session_data_here",
"database": 0,
"timestamp": "2025-08-05T10:30:45.123Z",
"metadata": {
"pattern": "chatbot:session:*",
"triggerId": "trigger-node-id",
"workflowId": "workflow-id",
"nodeVersion": 1
}
}🏗️ Architecture & Performance
Lean Architecture (v1.0.0):
- 🔧 RedisManager: Connection handling with auto-retry and health checks
- 🛡️ SpamDetector: Hash-based similarity detection, flood protection, pattern matching
- ⏱️ RateLimiter: Token bucket and sliding window algorithms with penalties
- 🚨 RedisTriggerManager: Real-time keyspace notification monitoring with event filtering
Performance Optimizations:
- Connection pooling for high-volume scenarios
- Batch processing for Redis operations
- Memory compression for large datasets
- TTL-based automatic cleanup
- Health monitoring and alerting
Resources
- n8n community nodes documentation
- Redis Documentation
- Valkey Documentation
- n8n Expression Reference
- Node.js Redis Client
Version history
1.0.0 (Current) - Production-Ready Stable Release
🎯 PRODUCTION-READY ARCHITECTURE
- Lean Codebase: 56% size reduction by removing unused enterprise features
- Focused Operations: Buffer message, spam detection, and rate limiting as core operations
- Streamlined Outputs: 3 clean outputs (Success, Spam, Process) for organized workflows
- Optimized Performance: Production-ready for 100-200+ operations per second
🚨 REDIS KEYSPACE NOTIFICATIONS TRIGGER
- Native Redis Technology: Uses Redis
notify-keyspace-events KEAfor real-time monitoring - Pub/Sub Architecture: Dedicated subscriber connection to
__keyspace@{db}__:{pattern}channels - Zero-Polling Design: Event-driven notifications (no database polling/cron jobs required)
- Sub-100ms Latency: Instant workflow activation on Redis key changes
- Event Type Filtering: SET, DEL, EXPIRED, and EVICTED operations with smart filtering
- Pattern Matching: Advanced glob pattern support (
*,?,**) for targeted monitoring - Enterprise Reliability: Auto-reconnection, rate limiting, and value caching
- Production Ready: Comprehensive error handling and performance optimization
🛡️ COMPREHENSIVE SPAM PROTECTION
- Multiple Detection: Repeated content, flood protection, pattern matching
- Configurable Actions: Block, delay, mark, or warn spam messages
- Pattern Library: Built-in detection for URLs, emails, phone numbers
- Custom Patterns: User-defined regex pattern support
- Hash-Based Performance: Efficient similarity detection with Redis persistence
⏱️ SMART RATE LIMITING
- Token Bucket & Sliding Window: Multiple algorithm support
- Per-User/Global Limits: Flexible limiting strategies
- Penalty System: Automatic violation penalties
- Burst Protection: Configurable burst limits
✨ DEVELOPER EXPERIENCE
- Clear Parameter Organization: Intuitive parameter grouping
- Real-Time Validation: Instant parameter validation with helpful errors
- Built-In Testing: Connection testing and configuration validation
- Debug Support: Comprehensive metadata for troubleshooting