- Shipped
- September 3, 2026 at 10:54 PM UTC
- Author
- Kamo
- Commit
- a2ef02a
RingCentral and JustCall publish INBOUND_RINGING from their webhooks. FreePBX and KamoPBX publish nothing -- they are the customer's own Asterisk and nothing was watching it. That gap is where the mobile softphone's push wake was blind: with no ringing event there is nothing to wake a handset whose SIP registration the OS has reclaimed, so the call is missed and nobody finds out. POST /internal/voip/ring resolves the extension to a member and publishes the same voip.call.{orgId}.{memberId} event the webhook providers already emit. kamo-asterisk-support calls it from its AMI event stream through ApiService's API-key surface. The extension is resolved by scanning the instance's configs rather than through a derived query, so this needs no shared-library change to ship; an instance holds tens of extensions and it runs once per ringing call. An extension no member owns answers 200 {published:false} rather than 404. Ring groups, IVRs and desk phones with nobody behind them are ordinary traffic, and a PBX helper that starts logging errors for ordinary traffic is one an administrator turns off. /internal/voip is already on InternalAuthFilter's list and exempt from OTK, so no security configuration changes here. Non-persisting, like the webhook paths: InstanceSyncService stays the single writer of PHONE_CALL_LOG.