Fan-out
One request, many recipients and channels; each recipient gets its own delivery to track.
Notification gateway · Go + PostgreSQL
Send once, reach people where they are: email, Telegram, a CalixOne chat message — or a PCall voice call that reads the message aloud. PNotify queues every delivery, retries what fails and tells you what arrived.
{ "template": "order_confirmed", "data": {"name": "An", "order_id": "A1"}, "recipients": [ {"channel": "email", "to": "an@example.com"}, {"channel": "telegram", "to": "123456789"}, {"channel": "pcall_msg", "to": "calix1…"}, {"channel": "pcall_call","to": "calix1…"} ] } ← 202 Accepted (200 if the Idempotency-Key was seen)
What it does
A queue, retries and status per recipient — instead of a script that fires and forgets.
One request, many recipients and channels; each recipient gets its own delivery to track.
Every delivery is stored in PostgreSQL before it is sent, so a crash or restart never loses a notification.
Temporary errors are retried with growing delays; permanent ones stop at once instead of hammering a provider.
Templates ship inside the binary. Missing data keys are an error, so nothing half-filled is ever sent.
Reach people inside CalixOne: a chat message, or a call that rings the app and reads the message in a natural Vietnamese voice.
Send an Idempotency-Key and a retried request returns the original result instead of notifying twice.
How it works
Every recipient moves through the same visible states.
Your system calls POST /v1/notifications with a template, data and recipients. You get 202 back.
One delivery per recipient is stored as pending.
A worker claims the delivery and hands it to the channel: sending, then sent.
Channels that can confirm — PCall — report back by webhook: delivered or failed.
GET /v1/notifications/{id} lists every delivery with its status; dead means PNotify gave up.
FAQ
Delivery is at-least-once, so rarely yes. Use an Idempotency-Key to protect against your own retries; providers also get the delivery id.
The voice and chat layer of CalixOne. PNotify appears there as a bot account that messages people and can ring them and read the notification aloud.
It is not registered; deliveries for it end as dead with the reason “channel not configured”.
PNotify is deployed per customer. Get in touch and we will set up a sandbox with you.
Tell us who needs to be notified, about what, and how quickly.
Get in touch