This update modifies the php-fpm.service file to include additional ReadWritePaths for FreeSWITCH and FusionPBX. It checks for existing entries and updates the service file accordingly, followed by reloading and restarting the service.
Preserve IPv6 address brackets while converting enterprise originate variable blocks from [] to {}.
Previously all square brackets were globally rewritten, which corrupted valid IPv6 SIP URIs such as:
sip:user@[2001:db8::1]:5061
into invalid Sofia destinations:
sip:user@{2001:db8::1}:5061
causing HANDLE creation failures and DESTINATION_OUT_OF_ORDER errors for IPv6 endpoints.
This change keeps enterprise bridge delay/originate behavior intact while safely excluding IPv6 host literals from bracket conversion.
* Check table prefix on table_exists
* Enhance table_exists method prefix handling
Updated table_exists method to check if TABLE_PREFIX is not empty before adding it.
Didn't realize there are still valid reasons and people that like text based email. For this reason filtering out text based email type has been removed.
The old basic operator panel had a select list that would popup if a name was typed in the dialpad input box. This adds the select list to the new operator panel to allow the same functionality. This feature does not use the websocket connection.
- Reset $stream_files between loop iterations so files from a previous
category no longer carry over to the next when its directory is missing
- Guard scandir() return value before passing to count() to prevent
TypeError on PHP 8+ when the directory does not exist
- Show an error message when mkdir fails during upload (e.g. read-only
filesystem due to systemd ProtectSystem)
Adds a per-voicemail-box option that diverts the caller to an arbitrary
dialable destination instead of leaving a message. Useful for handing
voicemail off to an external service (e.g. Microsoft Teams, a paging
group, an answering service) while keeping the caller's original
Caller-ID intact for downstream logging.
The setting lives on the voicemail box (v_voicemails) — not on the
extension's follow-me/forwarding settings — so it only fires when a call
actually reaches voicemail.lua. It does not interact with the existing
"No Answer" forward on the call-forward page, nor with call-center,
ring-group, or FIFO no-answer handling: those mechanisms route the call
elsewhere before voicemail.lua ever runs, so the divert never triggers
on those paths in the first place.
Schema (v_voicemails, registered in app/voicemails/app_config.php so
upgrades pick it up automatically):
* alternate_voicemail_enabled boolean
* alternate_voicemail_destination text (any dialable string —
extension number, external
number, etc.)
UI is added to the voicemail edit screen
(app/voicemails/voicemail_edit.php) directly under "Mail To", mirroring
the toggle + destination input pattern used on the call-forward page.
Sanitisation matches the existing forward_*_destination fields
([^\*0-9] stripped).
Voicemail behaviour change is in
app/switch/resources/scripts/app/voicemail/index.lua: when a caller hits
a valid voicemail box and the box has the alternate voicemail location
enabled, the script transfers the call via session:transfer(destination,
"XML", context) BEFORE the greeting plays. session:transfer preserves
channel variables so the original Caller-ID is carried into the diverted
leg.
Override semantics — when enabled, the alternate location always wins.
The voicemail menu (voicemail_action == "check") path is unaffected, so
extension owners can still log in and review their existing messages.
Group-call safety net: the divert is intentionally skipped when the leg
is part of a call-center, ring-group, or FIFO bridge (detected via the
cc_side, cc_queue, dialed_extension, ring_group_uuid, or fifo_role
channel variables). In normal use these paths shouldn't reach the
voicemail Lua at all — the queue / group manages its own no-answer
behaviour upstream — but if one does land here for any reason, we don't
want a session:transfer to yank the leg out of the queue's control and
hijack the call to the alternate destination.