Pipeline-ul de notificare
Acest conținut nu este încă disponibil în limba selectată.
De la o cerere notify la un status persistent.
- Cerere —
POST /api/v1/notify/{id}(mașină, mTLS) sauPOST /api/admin/notify(consola UI).{id}=trackingIdales de client. - Rezolvare șablon — după
(sistem, templateKey, limba); conținutul per canal e randat cu{{variabile}}din cerere. - Persistare —
NotificationDispatchServicecreează oNotificare+ câte oLivrare(statusQUEUED) per canal cerut + un evenimentCREATED. - Publicare — pentru fiecare livrare se publică un
NotificationJobpe coadanotify.{canal}.{tier}. Job-ul poartă conținutul deja randat (stateless). - Consum — workerii
@RabbitListener(service/delivery) preiau job-ul și cheamăChannelSender-ul canalului. - Livrare — la succes →
Livrare.status=SENT+providerMessageId; la eșec → retry[10,30,60,120,300]s, apoiFAILED+.dlq. Fiecare tranziție scrie unEvenimentNotificare(QUEUED/SENT/FAILED). - Agregare — statusul
Notificarese recalculează din livrări (SENT/FAILED/PARTIAL/QUEUED). - Interogare —
GET /api/v1/notify/{id}(mașină) sau ecranul Status notificare (UI) → status agregat + cronologia evenimentelor.
Corpul unei cereri (mașină)
Section titled “Corpul unei cereri (mașină)”POST /api/v1/notify/TRK-2026-0001Content-Type: application/json
{ "template": "invoice-ready", "language": "ro", "variables": { "invoiceNumber": "F-123", "name": "Ion" }, "channels": [ { "channel": "email", "tier": "important", "recipient": "ion@example.md" }, { "channel": "telegram", "tier": "priority", "recipient": "@ion" } ]}Cozi & retry (RabbitMQ)
Section titled “Cozi & retry (RabbitMQ)”- 6 cozi
notify.{canal}.{tier}+ 6.dlq(NotifyQueues). - Retry
[10,30,60,120,300]s × 5; apoi dead-letter. - Concurență: priority = 4, important = 2 (
DeliveryProperties, env-overridable). - Consola cozilor (admin):
/api/admin/rabbit/queues— inspectează adâncimi, previzualizează mesaje, replay din DLQ, purge (vezi API-Reference).
Randare
Section titled “Randare”Câmpurile per canal din Template.continut sunt liber-formatate și randate cu {{variabila}}. Exemplu:
{ "email": { "subject": "Factura {{invoiceNumber}}", "body": "Salut {{name}}" }, "push": { "title": "Factură gata", "body": "{{invoiceNumber}} gata" }, "telegram": { "text": "Factura {{invoiceNumber}} este gata" }}Poarta reală la trimitere este prezența conținutului pe canal în șablon (nu allowedChannels, care e informativ).
Audit & forwarding
Section titled “Audit & forwarding”La markSent(...), pe lângă tranziția livrării, se declanșează (best-effort, @Async, nu blochează):
- GLog — fan-out de audit către serviciul centralizat gStack.
- MNotify — redirecționare mTLS către platforma guvernamentală (vezi MNotify-Forwarding).
Ambele scriu propriile evenimente și nu propagă excepții în pipeline-ul de livrare.