import json import datetime # HINWEIS: Loop-Prevention wurde auf EspoCRM-Seite implementiert # rowId-Updates triggern keine Webhooks mehr, daher keine Filterung nötig config = { 'type': 'api', 'name': 'VMH Webhook Beteiligte Update', 'description': 'Empfängt Update-Webhooks von EspoCRM für Beteiligte', 'path': '/vmh/webhook/beteiligte/update', 'method': 'POST', 'flows': ['vmh'], 'emits': ['vmh.beteiligte.update'] } async def handler(req, context): try: payload = req.get('body', []) context.logger.info("VMH Webhook Beteiligte Update empfangen") context.logger.info(f"Payload: {json.dumps(payload, indent=2, ensure_ascii=False)}") # Sammle alle IDs aus dem Batch entity_ids = set() if isinstance(payload, list): for entity in payload: if isinstance(entity, dict) and 'id' in entity: entity_ids.add(entity['id']) elif isinstance(payload, dict) and 'id' in payload: entity_ids.add(payload['id']) context.logger.info(f"{len(entity_ids)} IDs zum Update-Sync gefunden") # Emittiere Events direkt (Deduplizierung erfolgt im Event-Handler via Lock) for entity_id in entity_ids: await context.emit({ 'topic': 'vmh.beteiligte.update', 'data': { 'entity_id': entity_id, 'action': 'update', 'source': 'webhook', 'timestamp': req.get('timestamp') or datetime.datetime.now().isoformat() } }) context.logger.info(f"VMH Update Webhook verarbeitet: {len(entity_ids)} Events emittiert") return { 'status': 200, 'body': { 'status': 'received', 'action': 'update', 'ids_count': len(entity_ids) } } except Exception as e: context.logger.error(f"Fehler beim Verarbeiten des VMH Update Webhooks: {e}") context.logger.error(f"Request: {req}") return { 'status': 500, 'body': { 'error': 'Internal server error', 'details': str(e) } }