- Introduced SYNC_STRATEGY_ARCHIVE.md detailing the sync process, status values, and flow for updating entities from EspoCRM to Advoware and vice versa. - Created SYNC_TEMPLATE.md as a guide for implementing new syncs, including field definitions, mapper examples, sync utilities, event handlers, and cron jobs. - Added README_SYNC.md for the Beteiligte sync event handler, outlining its functionality, event subscriptions, optimizations, error handling, and performance metrics.
VMH Webhook & Sync Steps
Dieser Ordner enthält die Webhook-Receiver für EspoCRM und den Event-basierten Synchronisations-Handler für Beteiligte-Entitäten.
Übersicht
Die VMH-Steps implementieren eine vollständige Webhook-Pipeline:
- Webhook Receiver empfangen Events von EspoCRM
- Redis Deduplication verhindert Mehrfachverarbeitung
- Event Emission triggert die Synchronisation
- Sync Handler verarbeitet die Änderungen (aktuell Placeholder)
Webhook Receiver Steps
1. Create Webhook (webhook/beteiligte_create_api_step.py)
Zweck: Empfängt Create-Webhooks von EspoCRM für neue Beteiligte-Entitäten.
Konfiguration:
- Type: api
- Name: VMH Webhook Beteiligte Create
- Path:
/vmh/webhook/beteiligte/create - Method: POST
- Flows: vmh
- Emits:
vmh.beteiligte.create
Funktionalität:
- Verarbeitet Batch-Payloads von EspoCRM
- Extrahiert Entity-IDs aus dem Payload
- Redis-basierte Deduplikation mit
vmh:beteiligte:create_pending - Emittiert Events für neue Entities
Payload Format:
[
{
"id": "entity-123",
"name": "John Doe",
"createdAt": "2025-01-20T10:00:00Z"
}
]
Response:
{
"status": "received",
"action": "create",
"new_ids_count": 1,
"total_ids_in_batch": 1
}
2. Update Webhook (webhook/beteiligte_update_api_step.py)
Zweck: Empfängt Update-Webhooks von EspoCRM für geänderte Beteiligte-Entitäten.
Konfiguration:
- Type: api
- Name: VMH Webhook Beteiligte Update
- Path:
/vmh/webhook/beteiligte/update - Method: POST
- Flows: vmh
- Emits:
vmh.beteiligte.update
Funktionalität:
- Ähnlich zum Create-Webhook
- Verwendet
vmh:beteiligte:update_pendingfür Deduplikation - Emittiert
vmh.beteiligte.updateEvents
3. Delete Webhook (webhook/beteiligte_delete_api_step.py)
Zweck: Empfängt Delete-Webhooks von EspoCRM für gelöschte Beteiligte-Entitäten.
Konfiguration:
- Type: api
- Name: VMH Webhook Beteiligte Delete
- Path:
/vmh/webhook/beteiligte/delete - Method: POST
- Flows: vmh
- Emits:
vmh.beteiligte.delete
Funktionalität:
- Ähnlich zum Create-Webhook
- Verwendet
vmh:beteiligte:delete_pendingfür Deduplikation - Emittiert
vmh.beteiligte.deleteEvents
Sync Handler Step
Event Sync Handler (beteiligte_sync_event_step.py)
Zweck: Zentraler Event-Handler für die Synchronisation von Beteiligte-Änderungen.
Konfiguration:
- Type: event
- Name: VMH Beteiligte Sync
- Subscribes:
vmh.beteiligte.create,vmh.beteiligte.update,vmh.beteiligte.delete - Flows: vmh
- Emits: (none)
Funktionalität:
- Empfängt Events von allen Webhook-Receivern
- Aktuell Placeholder-Implementierung (nur Logging)
- Entfernt verarbeitete IDs aus Redis-Pending-Queues
- Bereit für Integration mit EspoCRM-API
Event Data Format:
{
"entity_id": "entity-123",
"action": "create",
"source": "webhook",
"timestamp": "2025-01-20T10:00:00Z"
}
Redis Deduplication
Queue-Struktur
vmh:beteiligte:create_pending- IDs warten auf Create-Syncvmh:beteiligte:update_pending- IDs warten auf Update-Syncvmh:beteiligte:delete_pending- IDs warten auf Delete-Sync
Deduplication Logic
- Sammle alle Entity-IDs aus Webhook-Payload
- Prüfe gegen bestehende Pending-Queue
- Nur neue IDs werden zur Queue hinzugefügt und Events emittiert
- Sync-Handler entfernt erfolgreich verarbeitete IDs
Testing
Webhook Simulation
# Create Webhook
curl -X POST "http://localhost:3000/vmh/webhook/beteiligte/create" \
-H "Content-Type: application/json" \
-d '[{"id": "test-123", "name": "Test Entity"}]'
# Update Webhook
curl -X POST "http://localhost:3000/vmh/webhook/beteiligte/update" \
-H "Content-Type: application/json" \
-d '[{"id": "test-123", "name": "Updated Entity"}]'
# Delete Webhook
curl -X POST "http://localhost:3000/vmh/webhook/beteiligte/delete" \
-H "Content-Type: application/json" \
-d '[{"id": "test-123"}]'
Redis Monitoring
# Prüfe Pending-Queues
redis-cli SMEMBERS vmh:beteiligte:create_pending
redis-cli SMEMBERS vmh:beteiligte:update_pending
redis-cli SMEMBERS vmh:beteiligte:delete_pending
Log Monitoring
motia logs | grep "VMH Webhook"
motia logs | grep "PLATZHALTER"
Konfiguration
Umgebungsvariablen
REDIS_HOST- Redis HostREDIS_PORT- Redis PortREDIS_DB_ADVOWARE_CACHE- Redis Database für CachingESPOCRM_WEBHOOK_SECRET- Webhook Secret für Authentifizierung
Dependencies
config.py- Konfigurationsmanagementservices/advoware.py- Advoware API Client (für zukünftige Integration)
Erweiterungen
Geplante Features
- Vollständige EspoCRM-API-Integration im Sync-Handler
- Batch-Verarbeitung für große Datenmengen
- Retry-Logic für fehlgeschlagene Syncs
- Metriken und Monitoring
- Webhook-Authentifizierung mit Secrets
Error Handling
- Detaillierte Fehlerlogs
- Graceful Handling von Redis-Verbindungsfehlern
- Payload-Validation
- Dead-Letter-Queues für fehlgeschlagene Events
Security
- Webhook-Secret Validation
- Input-Sanitization
- Rate-Limiting für Webhook-Endpunkte