- Shipped
- 27 Agosti 2026, 16:27 UTC
- Author
- Kamo
- Commit
- 51ea2c3
Completes the third call path. Staff-to-staff calls never touch the attendant — they go from-internal -> ext-local, where the Dial belongs to FreePBX — so [from-internal-custom] now intercepts real extensions and routes them through [kamo-internal-connect], which owns its Dial and can carry aA(). Interception is only safe because of two things checked first, not assumed: - from-internal-noxfer, which from-internal consults BEFORE from-internal-xfer, does not resolve extensions. Had it done so, from-internal-custom would never have been reached and this would have silently done nothing. - from-internal-custom is included by from-internal-xfer ahead of from-internal-additional, so it sees extensions first. Anything that is not a real extension is handed straight back to FreePBX, so nothing else on the internal dialplan changes. DIALPLAN_EXISTS is tested rather than assumed, because a bare Goto to a missing extension hangs up on the caller instead of playing "not in service". Regression-tested all three internal cases: - 8912 (real, offline) -> kamo-internal-connect, Dial PJSIP/8912,15,aA(...), userfield DS:CHANUNAVAIL/VM:default, falls to Voicemail - 8080 (real, online) -> Dial PJSIP/8080,15,aA(...), phone rang - 7777 (ext-test) -> still reaches ext-test and loops back through from-pstn - 3000 (bad number) -> still reaches bad-number. It writes no CDR row, which is not a failure: bad-number does ResetCDR() and CDR_PROP(disable)=true by design. BOTH parties hear the AGENT recording on internal calls: there is no customer on the call, so the client-facing wording would be addressed to someone who is not present. Each side is its own global, so that is a one-line change. Internal no-answer plays vm-nobodyavail when the extension has no mailbox — deliberately NOT the customer queue, which is where inbound callers fall back.