MOR sends an onboarding email when a user is created, packs the recordings from a search into one download, and accepts SIP TLS from phones that register through the proxy. Hangup-cause audio can be uploaded from the GUI. The Calls API can list suspected flash calls.
M4 sends alert mail from a template, puts a custom phrase on a SIP code, and handles SIP UPDATE separately on each call leg. An answered CDR export can show the originator rate and price in the user’s currency.
MOR
API
- Suspected flash calls — API v2 calls can filter calls that rang, were cancelled by the caller, and ended inside a short duration you set. The response includes post-dial delay, the real duration, and who hung up. You can limit the query by period, user, provider, or destination.
- Allowed addresses on a device —
device_updatesets the Allowed Addresses list withpermitanddeny, up to 10 IP and mask pairs. An empty value resets the list to allow all. Devices that authenticate by IP do not use this list.
Major Enhancements
Users
- Onboarding email — creating a user can send an email from an onboarding template. The template is edited with the usual email variables, and you choose whether the password is included. On a reseller’s user form the template and the send checkbox are shown. An empty address still creates the user and reports that the mail was not sent. Email variables User details
Recordings
- Download the recordings in one search — Download all on Recordings queues one archive per user for the current search. The user receives a link. Recording export files shows how much disk the archives use, with a folder, a size cap, and a retention period on Recordings → Settings.
Announcements
- Hangup-cause sounds from the GUI — Settings can upload a WAV or MP3 for a hangup-cause code and a language. A bad file stays on the form and is not installed. Accountants and users do not get this page.
Proxy
- SIP TLS on the proxy — phones that register through the proxy can use SIP TLS. TLS stays off until you turn it on. The check looks at the binary, the certificates, and TCP 5061, and prints what to fix when something is missing. A separate command installs a certificate you already have, or obtains one and renews it.
Additional Improvements
Number pools
- Number pools assigned to a customer — an administrator or a reseller assigns one or more number pools to a customer for outgoing CallerID. That customer’s devices, and the number-pool API, show only those pools.
Last Calls
- Incoming and outgoing for the end user — the end-user Last Calls page filters All, Outgoing, or Incoming.
- Billsec column — Last Calls can show Billsec, the billed duration after the tariff increment. The column is off until you enable it. Settings
Whitelist
- Whitelist search and export — Whitelisted IPs can be filtered on the list columns and exported.
Statistics
- CSV export of call and provider statistics — Statistics Calls and Statistics Providers export the current rows to CSV.
Call details
- Connection fee on Call Info — Call Info shows the connection fee charged on that call.
Devices
- Device created with no PIN — a No PIN checkbox leaves the PIN empty. PIN
- CallerID from DIDs keeps the original From — on a PJSIP trunk with Control by DIDs, a Diversion number that matches a DID on that device keeps the original From. Any other From is still replaced with a DID from the device. chan_sip is unchanged.
DIDs
- External server on the admin DID form — an administrator, a reseller, or an accountant who manages DIDs sets the SIP URI on SETTINGS → Billing → DIDs. The DID must already belong to a user. Assigning a device clears the URI.
did_details_updateaccepts the sameexternal_servervalue, and the DID list returns it when it is set.
Rates
- Start and end time on All Rates — the All Rates list shows the start time and end time that rate details already store.
Providers
- Longer provider rule Cut and Add — Cut and Add accept 39 characters. When the cell is too narrow, the full value is on the tooltip, and the column can be widened.
Bug Fix Report
- Croatian translation file — the Croatian interface file was named for Costa Rica. The file is the Croatian locale.
- Calls archive destination after a bad FTP save — saving archiving with invalid FTP credentials switched the destination to the database. If the destination was a file archive, that choice is kept.
- Call to an unregistered device — a DID call to a device that is not registered at the proxy came back as 603 Declined. The caller receives 480 Temporarily Unavailable.
- Busy from the provider still returned 486 — with Interpret BUSY as FAILED and Change Failed Code To set, a provider SIP 486 still reached the caller as 486. The caller receives SIP 503. With one provider, the call does not hunt further.
- Video codecs on PJSIP devices — video codecs were hidden on a PJSIP device and on the default device. H.261, H.263, H.263+, H.264, and VP8 can be turned on, and a new PJSIP device inherits the default device.
- Common-use providers left after a purge — deleting a reseller with Purge left common-use provider rows that the list would not delete. Purge removes those rows, and a row that is already orphaned can be deleted from Common Use Providers.
- SMS send failed — the SMS send API failed on every request. It accepts the message again.
- Prepaid invoice extra page — Show additional details on a separate page, for a prepaid invoice, was taken from the postpaid invoice settings. A prepaid invoice uses the prepaid setting.
- Codecs and voicemail ignored on device update —
device_updateaccepted codec and voicemail fields and did not save them. The codec list and its order are saved, voicemail can be turned on or off, the voicemail password is saved, and an empty voicemail email clears the stored address. A FAX device still rejects a codec change. - Subscribe MWI stored on the wrong row — Subscribe MWI yes and no wrote the mailbox onto the opposite PJSIP rows. A phone that subscribed received no mailbox, and a phone that did not subscribe received the unsolicited notice. The mailbox is stored on the row that matches the setting.
- Rate missing after a prefix changed group — moving a prefix to a destination group updated the database and left the running core on the old group, so the call failed with no rate. The prefix map is rebuilt on the next cache pass. Calls already using the previous map finish on it.
- Device status after an update on main and backup — on a main and backup pair, an update could drop device registration and leave the main server showing the wrong status. Device status keeps the registration across that update.
M4
Major Enhancements
Alerts
- Alert email from a template — an alert can use an email template for the raise message and the clear message, and a second pair when Notify to User is on. Leaving the template empty keeps the plain text the alert sent before. The webhook body is unchanged. Emails Email variables
SIP signaling
- SIP UPDATE on each leg — an origination point and a termination point each choose whether SIP UPDATE is passed through or handled locally, and each has its own session timer. Local handling answers the session refresh on that leg, so a terminator that requires UPDATE can be connected to an originator that does not send it. A new origination point inherits the default connection point. Termination points
Additional Improvements
CDR export
- Originator rate and price in the user’s currency — an answered CDR export can write Originator Rate and Originator Price in the currency selected for that user, the same amounts the currency view shows on screen.
Disconnect codes
- Custom reason phrase — a disconnect code can send its own SIP reason text. One 503 can say “DNI Not Whitelisted” while every other 503 stays “Service Unavailable”. The phrase is edited on the global group and on a custom group.
Invoices
- Standard and manual payment on the invoice list — Customer Invoices shows the type, Standard or Manual Payment, and the list filters to one type.
- Invoice list spreadsheet — Customer Invoices exports the current search to an XLSX file, including number, status, period, prices, and currency.
Rate notifications
- Decimal places in the spreadsheet — the rate-notification template sets how many digits follow the decimal point in the XLSX file, from 0 to 8. The default is 8.
Termination points
- PAI as CallerID on a new termination point — a new Termination Point is created with Send PAI Number as CallerID (From:) to TP set to Never.
API tools
- Generate hash from the menu — Generate hash opens from the GUI. The same page was only reachable by its URL.
Tariffs
- Manual import saved as a template — the column mapping from a manual tariff import can be saved under a name and applied again as an auto-import template. Automatic tariff import
Bug Fix Report
- DID import buttons — on Import from CSV, step 2, the buttons were drawn on the scrollbar. The Next step label sits under the buttons.
- CLI groups left out of a rate notification — a rate that belongs to a CLI group was omitted from the notification. Those rates are included.
- Core crash during rating — the core crashed while looking up a rate on a live call. That lookup no longer crashes the core.
- Answer with no SDP — with reliable provisional responses enabled, a 200 OK could be sent with no SDP. The answer includes the SDP.
- Long rate-difference numbers — Rate Difference in the notification spreadsheet could show a long unrounded fraction. The cell uses the decimal places set on the template.
- CDR export written on the backup — on a main and backup pair, an export started from the main server could be built on the backup. The download link pointed at the main server and returned 404. The backup does not run that export.
- SMS delivery and IP location lookup failed — sending an SMS over HTTP, and looking up a location for an IP address, both failed. Both run again.
- Calls failed with 503 after a short call — a billing request could reuse a media port that had just been freed, and the next call failed with SIP 503. New billing ports stay above the media range, including after a reboot.
- Media proxy memory grew with every call — the media proxy kept memory after each call until the server ran out of RAM and other processes stopped. That memory is released when the call ends.
- New calls rejected with hangup cause 302 — a burst of failed calls held active-call slots for up to five seconds, and further calls were rejected with hangup cause 302. Failed calls that never became active calls are cleared about once a second.
Earlier notes in this series: 2026 September Development Update and 2026 August Development Update.
Contact Kolmisoft if you want the onboarding email, SIP TLS, or per-leg SIP UPDATE on your switch.
Want these October changes on your switch?
Contact Kolmisoft about the onboarding email, SIP TLS, or SIP UPDATE on each call leg.