feat(webhooks): Add webhook handlers for Beteiligte and Document entities

- Implemented create, update, and delete webhook handlers for Beteiligte.
- Implemented create, update, and delete webhook handlers for Document entities.
- Added logging and error handling for each webhook handler.
- Created a universal step for generating document previews.
- Ensured payload validation and entity ID extraction for batch processing.
This commit is contained in:
bsiggel
2026-03-26 10:07:42 +00:00
parent 3459b9342f
commit 0c97d97726
31 changed files with 27 additions and 23 deletions

View File

@@ -1 +0,0 @@
# Akte sync steps unified sync across Advoware, EspoCRM, and xAI

View File

@@ -1 +0,0 @@
# Akte webhook steps

View File

View File

View File

@@ -356,16 +356,25 @@ async def _run_advoware_sync(
ctx.logger.error(f" ❌ Error for hnr {hnr} ({filename}): {e}")
results['errors'] += 1
# ── Ablage check ───────────────────────────────────────────────────
# ── Ablage check + Rubrum sync ─────────────────────────────────────
try:
akte_details = await advoware_service.get_akte(aktennummer)
if akte_details and akte_details.get('ablage') == 1:
ctx.logger.info("📁 Akte marked as ablage → deactivating")
await espocrm.update_entity('CAkten', akte_id, {
'aktivierungsstatus': 'deaktiviert',
})
if akte_details:
espo_update: Dict[str, Any] = {}
if akte_details.get('ablage') == 1:
ctx.logger.info("📁 Akte marked as ablage → deactivating")
espo_update['aktivierungsstatus'] = 'deaktiviert'
rubrum = akte_details.get('rubrum')
if rubrum and rubrum != akte.get('rubrum'):
espo_update['rubrum'] = rubrum
ctx.logger.info(f"📝 Rubrum synced: {rubrum[:80]}")
if espo_update:
await espocrm.update_entity('CAkten', akte_id, espo_update)
except Exception as e:
ctx.logger.warn(f"⚠️ Ablage check failed: {e}")
ctx.logger.warn(f"⚠️ Ablage/Rubrum check failed: {e}")
return results

View File

View File

@@ -19,7 +19,7 @@ config = {
"name": "Akte Webhook - EspoCRM",
"description": "Empfängt EspoCRM-Webhooks für CAkten und queued Entity-IDs für den Sync",
"flows": ["akte-sync"],
"triggers": [http("POST", "/akte/webhook/update")],
"triggers": [http("POST", "/crm/akte/webhook/update")],
"enqueues": [],
}

View File

@@ -10,7 +10,7 @@ config = {
"description": "Receives create webhooks from EspoCRM for Bankverbindungen",
"flows": ["vmh-bankverbindungen"],
"triggers": [
http("POST", "/vmh/webhook/bankverbindungen/create")
http("POST", "/crm/bankverbindungen/webhook/create")
],
"enqueues": ["vmh.bankverbindungen.create"],
}

View File

@@ -10,7 +10,7 @@ config = {
"description": "Receives delete webhooks from EspoCRM for Bankverbindungen",
"flows": ["vmh-bankverbindungen"],
"triggers": [
http("POST", "/vmh/webhook/bankverbindungen/delete")
http("POST", "/crm/bankverbindungen/webhook/delete")
],
"enqueues": ["vmh.bankverbindungen.delete"],
}

View File

@@ -10,7 +10,7 @@ config = {
"description": "Receives update webhooks from EspoCRM for Bankverbindungen",
"flows": ["vmh-bankverbindungen"],
"triggers": [
http("POST", "/vmh/webhook/bankverbindungen/update")
http("POST", "/crm/bankverbindungen/webhook/update")
],
"enqueues": ["vmh.bankverbindungen.update"],
}

View File

View File

@@ -10,7 +10,7 @@ config = {
"description": "Receives create webhooks from EspoCRM for Beteiligte",
"flows": ["vmh-beteiligte"],
"triggers": [
http("POST", "/vmh/webhook/beteiligte/create")
http("POST", "/crm/beteiligte/webhook/create")
],
"enqueues": ["vmh.beteiligte.create"],
}

View File

@@ -10,7 +10,7 @@ config = {
"description": "Receives delete webhooks from EspoCRM for Beteiligte",
"flows": ["vmh-beteiligte"],
"triggers": [
http("POST", "/vmh/webhook/beteiligte/delete")
http("POST", "/crm/beteiligte/webhook/delete")
],
"enqueues": ["vmh.beteiligte.delete"],
}

View File

@@ -10,7 +10,7 @@ config = {
"description": "Receives update webhooks from EspoCRM for Beteiligte",
"flows": ["vmh-beteiligte"],
"triggers": [
http("POST", "/vmh/webhook/beteiligte/update")
http("POST", "/crm/beteiligte/webhook/update")
],
"enqueues": ["vmh.beteiligte.update"],
}

View File

View File

@@ -8,7 +8,7 @@ config = {
"description": "Receives update webhooks from EspoCRM for CAIKnowledge entities",
"flows": ["vmh-aiknowledge"],
"triggers": [
http("POST", "/vmh/webhook/aiknowledge/update")
http("POST", "/crm/document/webhook/aiknowledge/update")
],
"enqueues": ["aiknowledge.sync"],
}

View File

@@ -10,7 +10,7 @@ config = {
"description": "Empfängt Create-Webhooks von EspoCRM für Documents",
"flows": ["vmh-documents"],
"triggers": [
http("POST", "/vmh/webhook/document/create")
http("POST", "/crm/document/webhook/create")
],
"enqueues": ["vmh.document.create"],
}

View File

@@ -10,7 +10,7 @@ config = {
"description": "Empfängt Delete-Webhooks von EspoCRM für Documents",
"flows": ["vmh-documents"],
"triggers": [
http("POST", "/vmh/webhook/document/delete")
http("POST", "/crm/document/webhook/delete")
],
"enqueues": ["vmh.document.delete"],
}

View File

@@ -10,7 +10,7 @@ config = {
"description": "Empfängt Update-Webhooks von EspoCRM für Documents",
"flows": ["vmh-documents"],
"triggers": [
http("POST", "/vmh/webhook/document/update")
http("POST", "/crm/document/webhook/update")
],
"enqueues": ["vmh.document.update"],
}

View File

@@ -1 +0,0 @@
# Shared steps used across multiple modules

View File

@@ -1 +0,0 @@
"""VMH Steps"""

View File

@@ -1 +0,0 @@
"""VMH Webhook Steps"""