---
type: step
category: api
name: VMH Webhook Beteiligte Create
version: 1.0.0
status: active
tags: [webhook, espocrm, vmh, beteiligte, create]
dependencies:
  - redis
emits: [vmh.beteiligte.create]
---

# VMH Webhook Beteiligte Create Step

## Zweck
Empfängt Create-Webhooks von EspoCRM für neue Beteiligte-Entitäten. Dedupliziert via Redis und emittiert Events für asynchrone Verarbeitung.

## Config
```python
{
    'type': 'api',
    'name': 'VMH Webhook Beteiligte Create',
    'path': '/vmh/webhook/beteiligte/create',
    'method': 'POST',
    'emits': ['vmh.beteiligte.create'],
    'flows': ['vmh']
}
```

## Input
```bash
POST /vmh/webhook/beteiligte/create
Content-Type: application/json

[
  {
    "id": "entity-123",
    "name": "Max Mustermann",
    "createdAt": "2026-02-07T10:00:00Z"
  },
  {
    "id": "entity-456",
    "name": "Maria Schmidt"
  }
]
```

**Format**: Array von Entitäten (Batch-Support)

## Output
```json
{
  "status": "received",
  "action": "create",
  "new_ids_count": 2,
  "total_ids_in_batch": 2
}
```

## Verhalten

1. **Extract IDs** von allen Entitäten im Batch
2. **Redis Deduplication**:
   ```python
   pending_key = 'vmh:beteiligte:create_pending'
   existing_ids = redis.smembers(pending_key)
   new_ids = input_ids - existing_ids
   redis.sadd(pending_key, *new_ids)
   ```
3. **Emit Events** nur für neue IDs:
   ```python
   for entity_id in new_ids:
       await context.emit({
           'topic': 'vmh.beteiligte.create',
           'data': {
               'entity_id': entity_id,
               'action': 'create',
               'source': 'webhook',
               'timestamp': timestamp
           }
       })
   ```

## Redis Keys
- `vmh:beteiligte:create_pending` (SET): IDs in create queue
- No TTL (permanent until processed)

## Deduplication Logic
**Problem**: EspoCRM kann Webhooks mehrfach senden
**Solution**: Redis SET speichert alle pending IDs
- Neue IDs → Events emittiert
- Bereits vorhandene IDs → Skipped

## Testing
```bash
# Test webhook
curl -X POST "http://localhost:3000/vmh/webhook/beteiligte/create" \
  -H "Content-Type: application/json" \
  -d '[{"id": "test-123", "name": "Test"}]'

# Check Redis
redis-cli -n 1 SMEMBERS vmh:beteiligte:create_pending

# Clear Redis (testing)
redis-cli -n 1 DEL vmh:beteiligte:create_pending
```

## Error Handling
- Invalid JSON: 400 error
- Redis unavailable: Loggen, aber nicht crashen (kann zu Duplikaten führen)
- Event emission error: Loggen und fortfahren

## Monitoring
```
[INFO] VMH Webhook Beteiligte Create empfangen
[INFO] Create Entity ID gefunden: entity-123
[INFO] 2 neue IDs zur Create-Sync-Queue hinzugefügt
[INFO] Create-Event emittiert für ID: entity-123
```

## Related Steps
- [beteiligte_update_api_step.md](beteiligte_update_api_step.md) - Update webhooks
- [beteiligte_delete_api_step.md](beteiligte_delete_api_step.md) - Delete webhooks
- [beteiligte_sync_event_step.md](../beteiligte_sync_event_step.md) - Consumes events
