Hi Khalaf,
Following up on this one — it's built and shipped now, as of TicketsCAD v4.2.25.
The shape ended up very close to what you proposed. A small external adapter process talks to your PBX (Asterisk/FreePBX over AMI, or a generic webhook receiver for hosted SIP trunk providers like 3CX or Grandstream UCM setups) and normalizes whatever your system sends into one canonical event shape, which it then posts to TicketsCAD over a bearer-token-authenticated endpoint. TicketsCAD itself never speaks SIP, AMI, or ARI directly — same pattern as the DMR bridge, one adapter per external system rather than the CAD trying to understand every PBX's native API.
What you get on the CAD side: every logged-in, permission-holding dispatcher sees a live ring notification the moment a call comes in, with a distinct ring tone. The first person to click Answer atomically claims it — no double-dispatch race — and gets a New Incident form in a new tab, pre-filled with the caller's number and, once claimed, their prior incident history.
On the repeat-caller lookup and RBAC question I flagged before — that got a real answer. There are two dedicated field-level permissions, one for caller history and one specifically for patient history, so an install can grant "can see this caller's past incidents" without also granting "can see their medical history." Five new permissions total cover the whole feature: who can see the call queue, who can claim a call, who can override an active claim or configure trunks, and the two field-level ones.
A few things worth knowing if you want to try it: claiming is a genuinely atomic database operation, so simultaneous clicks from two dispatchers can't both win. If the CAD's claim and the physical phone answer disagree — common on real PBX setups where only one extension can actually pick up — any qualified dispatcher can self-correct within a short configurable grace window, no supervisor approval needed for that first correction. It's keyboard-first too: arrow keys cycle between simultaneous calls, A claims, T reassigns or reclaims, Escape dismisses locally. Missed calls land in a collapsible panel instead of disappearing.
Admin setup is under Settings, Communications and Integrations, Inbound Calls — create a trunk there and you'll get a bearer token shown once, which is what you point your adapter at. The reference adapter is in the repo under services/sip-bridge, with both an Asterisk AMI mode and a generic webhook mode you could adapt directly for 3CX or Grandstream.
Since you offered to generate real inbound-call webhooks from your own 3CX and Grandstream setups — that's still genuinely useful, even with the feature already built. The generic webhook mode has one worked example adapter function in the reference code; a second one written against a real 3CX or Grandstream payload shape (rather than a guess) would harden it for anyone else running those systems. If you get a chance to try it against your own trunk and hit anything that doesn't fit, I'd want to hear about it.
73,
Eric