Download the PHP package opencontent/ocwebhookserver-ls without Composer
On this page you can find all versions of the php package opencontent/ocwebhookserver-ls. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download opencontent/ocwebhookserver-ls
More information about opencontent/ocwebhookserver-ls
Files in opencontent/ocwebhookserver-ls
Package ocwebhookserver-ls
Short Description Opencontent Webhook Server
License GPL-2.0
Informations about the package ocwebhookserver-ls
ocwebhookserver
Estensione eZ Publish legacy per la configurazione e l'invio di webhook HTTP e messaggi Kafka al verificarsi di eventi sul CMS (pubblicazione, cancellazione, ecc.).
Architettura
Outbox pattern
Ogni evento genera uno o più job scritti in DB con stato PENDING prima che
venga tentato qualsiasi invio. Questo garantisce che nessun evento venga perso
anche in caso di crash del processo o timeout del broker.
Modalità di invio
Ogni trigger dichiara la propria modalità tramite getQueueHandler():
| Modalità | Costante | Comportamento |
|---|---|---|
| Immediata | HANDLER_IMMEDIATE |
Il job viene eseguito subito nel processo corrente. Se fallisce rimane FAILED in DB e il cron lo riprova. |
| Differita | HANDLER_SCHEDULED |
Il job rimane PENDING in DB; il worker o il cron lo eseguono in background. |
Il trigger post_publish usa HANDLER_IMMEDIATE — l'evento Kafka viene inviato
in sincrono durante la pubblicazione del contenuto.
Transport: HTTP e Kafka
Il transport è determinato dall'URL configurato nel webhook:
| URL | Transport |
|---|---|
https://esempio.com/webhook |
HTTP POST via Guzzle |
kafka://broker1:9092,broker2:9092/topic |
Produce su Kafka con header CloudEvents |
OCWebHookPusher rileva lo schema dell'URL e instrada il job al transport corretto.
La logica di retry è identica per entrambi: se l'invio fallisce il job torna
PENDING e viene ripreso dal cron.
Invio su Kafka
I messaggi Kafka seguono il formato CloudEvents 1.0 con binding Kafka: i metadati dell'evento stanno negli header del messaggio, il value contiene solo i dati dell'entità.
Header
| Header | Valore |
|---|---|
ce_specversion |
1.0 |
ce_id |
UUID v4 generato al produce |
ce_type |
it.opencity.<product>.<domain>.<event> (da KafkaCeTypeMap) |
ce_source |
urn:opencity:<product>:<tenant-uuid> |
ce_time |
ISO 8601 UTC, momento del produce |
content-type |
application/json |
oc_app_name |
nome variante prodotto (es. website-comuni) |
oc_app_version |
versione applicativo |
oc_retry_count |
numero di tentativi precedenti (0 al primo invio) |
Payload
Regole di formattazione del payload
- Tutti i timestamp in
entity.metae inentity.data(inclusi quelli annidati nei relation items) sono normalizzati a UTC (YYYY-MM-DDTHH:MM:SSZ). - Relation items: i campi camelCase di ocopendata vengono rinominati in snake_case
(
remoteId→remote_id,classIdentifier→class_identifier,mainNodeId→main_node_id). I campi ridondanticlass,languageselinkvengono eliminati. Il camponameviene risolto alla lingua del bloccoentity.data.<lang>corrente se è una mappa multilingua. content_urlnegli elementi relazionati: se l'elemento ha unmainNodeId, viene iniettatocontent_urlcon l'URL pubblico del nodo eZ.- Nomi canonici degli attributi: per i content type configurati in
OCWebHookKafkaFieldMap, gli attributi vengono rinominati ai nomi canonici di dominio (es.titolo→title,testo→description) per uniformità tra istanze con modelli dati diversi.
Configurazione
L'URL del webhook Kafka va configurato come:
Installazione
- Abilitare l'estensione in
site.ini - Rigenerare gli autoload e svuotare la cache
- Creare i webhook in
/webhook/list - Avviare il worker:
php extension/ocwebhookserver/bin/php/worker.php
Creare un trigger
- Implementare
OCWebHookTriggerInterface+OCWebHookTriggerQueueAwareInterface - Registrarlo in
webhook.ini [TriggersSettings] TriggerList[] - Emettere l'evento nel codice:
getQueueHandler() ha default HANDLER_SCHEDULED. Sovrascriverlo nel trigger
se l'invio deve essere sincrono (es. eventi Kafka su pubblicazione).
Vedi eventtypes/event/workflowwebhook/workflowwebhooktype.php come esempio.
Cron jobs
| Part | Script | Funzione |
|---|---|---|
frequent |
reset_running_jobs.php |
Riporta in PENDING i job bloccati in RUNNING da più di RunningJobTimeoutSeconds |