Release notes — Version 2.3
What changed in each version 2.3 release, newest first, as published with the release.
v2.3.9
Released 2026-10-04
- Customer portal: new page "Live calls" - end customers see their own calls in progress (status, direction, numbers, destination country, their own device, duration). It refreshes every few seconds while the page is open. Provider, IP address, server, channel and other customers' names are never shown.
- Customer portal: new page "My globe" - the customer's own devices on the globe and, for every outgoing call in progress, a line from the device to the destination country.
- Customer portal: export of the customer's own calls as CSV or Excel for a chosen period. Off by default: switch it on per customer with the new box "Portal: export calls" in the user form; "Default user" has the same box for new customers. Every change is written to the action log.
- New permission "Export calls" for the call export. All roles and system users that could export before keep it, and the read-only preset for new system users includes it.
- Live calls, the NOC screen, the call list, the call export and the XML API no longer show the user name, device name or ID of a caller who belongs to another customer. End customers who open the staff live-calls page are taken to their portal page; the NOC screen is no longer available to them.
- Live calls: a blocked account, or a device without the "Calls" switch, no longer receives the list of calls in progress.
- Devices: a customer device with "Trunk: Yes" can be saved again. The portal login box is switched off with an explanation instead of an error message (a trunk cannot sign in to the portal); provider devices are still refused.
- Call list and call export: the provider and purchase price columns and the margin tile are shown only to users who may see providers. Before, a system user without the provider permission saw empty columns. The INFO link to the call details now follows the call details permission.
v2.3.8
Released 2026-10-03
- Calls: the page no longer loads any calls until a period is chosen. The filter is pre-set to today, one click on Search shows today. Before, every visit of the page counted and summed all calls of the system, which made it slow on large systems.
- Calls in the customer portal (My calls) follow the same rule: choose a period first, the filter is pre-set to today.
- Calls: the links "Last calls" on users and providers, the user link in a call row and "Back" on a call detail page now open the list of a day instead of an empty page.
- Exports: every table export now also offers XLSX next to CSV. XLSX opens in columns in Excel and LibreOffice, with dates as dates, numbers as numbers and phone numbers as text. Excel calculates with 15 significant digits, the CSV file stays authoritative.
- Exports: CSV files stay as before (semicolon, English column names) and now all use the same line ending (CRLF).
- Exports: columns with a UTC time get an additional column with the local time at the end (for example "Date (local)").
- Exports: a shortened export now says so inside the file: last line "# INCOMPLETE" in CSV, sheet "Notice" in XLSX. Before, the call export cut at 10,000 rows without any hint. Also in the scheduled e-mail exports.
- Exports: the call export requires a period and explains this instead of returning only the newest calls.
- Exports: text cells that start with =, +, -, @ or a control character are protected so that a spreadsheet does not run them as a formula.
- Exports: the payments export and the invoice XLSX now calculate net amounts and totals exactly; before, they could deviate in the last digits.
- Exports: the invoice XLSX export now respects the period and issue-date filters, and the invoice CSV export respects the "hidden" filter. Before, both buttons could return different invoices.
- Scheduled CDR and aggregate e-mail exports: new field "Format" (CSV or XLSX, default CSV).
- Mail log: shows for staff the triggering function, attempts, message ID and server response; SMTP server, port and login only for users who may view the e-mail settings. The SMTP password is never stored.
- Mail log: new CSV and XLSX export for admin and accountant (a period is required).
- Mail log: technical error details of failed mails are shown to staff only; other viewers see a short notice.
- E-mail sending: the SMTP settings of a reseller are now used as one complete set (own server with own login and password, or completely the operator's); they are no longer mixed field by field.
- Database: the tables and customer fields of the removed automatic blacklist are deleted. After this update a rollback is possible only back to v2.3.5.3.
v2.3.7
Released 2026-10-03
- Date filters now have a time of day (24-hour clock) on every list: calls, portal calls, usage, recordings, all statistics pages, payments, credit notes, action log and mail log. Leave the time empty and you get the whole day, exactly as before. CSV exports and the profit PDF use the same window as the page.
- "Until 23:59" includes the whole last minute, so day totals on these pages stay equal to the invoice.
- If the end of a period lies before its start, the list stays empty and says so, instead of quietly swapping the two.
- Payments, credit notes, the action log and the mail log no longer leave out entries from the last second of a day (their filter ended at 23:59:59 before).
- Re-rating (CDR > Re-rating) can now be limited to a time of day; without a time it re-rates whole days as before. Invoices, disputes, saved aggregate exports and the statement of account keep whole days.
- All date-and-time inputs (cron actions, subscriptions, manual payment, credit note, tariff import, add rate, alert schedules) now use the same 24-hour field. The browser's own field showed AM/PM on some computers.
- Daylight saving: a time that exists twice (last Sunday of October, 02:00-02:59) counts from its first and until its last occurrence; a time that does not exist (last Sunday of March, 02:00-02:59) starts at 03:00.
- Credit notes can now be filtered by issue date and by payment date.
- The release date on the update page no longer shows the day before for browsers east of the server.
v2.3.6
Released 2026-10-03
- Dates and times now look the same in every language: dates as DD.MM.YYYY, times in 24-hour format (00:05, 14:05), always in the billing time zone of the system. Before, English, Albanian and Arabic showed 12-hour times (12:05 AM), and a browser in another time zone showed other times than the invoice.
- Invoice PDFs, statement of account PDFs and e-mails also use DD.MM.YYYY. The e-mail variables date and current_date now give the local day (between 00:00 and 02:00 they gave the previous day), the invoice list PDF and alert e-mails show the time with its time zone.
- Fixed: the recordings search did not find recordings when "from" and "to" were the same day, and the last day of a range was always missing. It now searches whole local days, like invoices and the call list.
- Fixed: editing a CDR dispute or an automatic aggregate export showed the start date one day too early, and saving moved the start back by one day.
- The web service now checks its own time zone: the System status page has a new line "Web service time zone", /api/health reports tz ok or mismatch, and a mismatch at start raises the time zone alarm.
- Messages from currencies, services, invoices, credit notes, payments, queues and re-rating are shown in the language of the user. Before, some appeared in German or as internal codes.
- The GeoIP download error on the NOC page and the globe is shown in the language of the reader.
- More texts are translated in all languages; in German the Rate column now says "Preis" (it showed the same word as Fee), the caller ID options of the device form and the task names on the Background tasks page are translated.
v2.3.5.3
Released 2026-10-03
- Removed the automatic blacklist: the score pages (source/destination prefix and number scores), their CSV import and the blacklist part of the monitoring settings are gone. The "Disable ChanSpy" switch stays and works as before; it is now under Monitoring -> Listen in (ChanSpy).
- Device settings (codecs, fax-to-email recipients, voicemail) can now only be changed by logins that have the right to edit devices.
- A device that still has DIDs assigned can no longer be deleted: you get a message to assign the DIDs to another device first. Before, the DIDs kept pointing to the deleted device.
- Incoming calls to a DID are now only connected to a device that belongs to the owner of the DID.
- SIP text messages (MESSAGE) are no longer handled like calls: they no longer stay in Live Calls as a call and no longer use a licence channel.
- Live Calls, the NOC screen, call tracing and the call list (including its CSV export and provider filter) show provider, source IP, channel, server and provider costs only to administrators and accountants. A system login needs the right "Providers: view" to keep seeing them.
- Trunk devices: the call log now says when an incoming call is sent to the trunk without DID digits.
v2.3.5.2
Released 2026-10-02
- DIDs: the bulk management can now assign DIDs to a customer's trunk device — choose the user and one of the user's trunks.
- DIDs: in the DID list you can tick individual numbers and open the bulk management for exactly this selection instead of a number range. The selection is kept while paging (at most 500 numbers).
- DIDs: a selection that is no longer complete (a number was deleted or is outside your area) is refused as a whole — nothing is changed partially.
- DIDs: the device filter of the DID list and the status box of a DID now also show trunk devices (before, a DID on a trunk showed only "#" and a number).
- DIDs: assigning a single DID to a trunk now checks that the trunk belongs to the owner of the DID and respects the reseller setting for trunk assignment.
v2.3.5.1
Released 2026-10-02
- Devices: new setting "Trunk" for a customer's own PBX that is connected by IP.
- Incoming calls to DIDs assigned to a trunk device now carry the dialed DID number, so the customer's PBX can route each number itself. Before, the number was missing and the PBX rejected the call.
- Call forwarding rules of a trunk device are not applied (the PBX decides); voicemail still answers if the PBX cannot be reached.
v2.3.5
Released 2026-10-01
- Statistics are faster: completed days are now read from daily totals that the background service keeps up to date, the current day is still calculated live. Calls per day (and export), Profit (and PDF), User, Provider and System statistics and the dashboard figures show exactly the same numbers as before.
- When an old call is changed later (re-rating, manual correction), its day is recalculated automatically; a safety run recalculates yesterday and today every night.
- After the update the daily totals are filled once in the background (a few minutes on large systems); during this time the pages keep showing correct figures.
- Usage report: at most 5,000 rows (the totals stay complete), a time limit of 8 seconds with a clear notice instead of an error page, and an invalid date falls back to the default period. A report grouped only by user, provider or day is read from the daily totals and is fast also for long periods.
v2.3.4
Released 2026-10-01
- Set up a phone with Linphone by QR code: on a device page (and for customers under My devices) the button "Set up phone (Linphone)" shows a QR code. Scan it in the Linphone app on Android or iPhone and the SIP account is configured - no typing of user name, password or server. The code works once and for 10 minutes; every download is logged with its IP address.
- New page Logs (System, administrators): read and search the Asterisk log and the service logs in the browser - newest first, errors in red, warnings in yellow. From a call in the call list, "Show in log" jumps to the matching lines.
- New page Diagnostics (System, administrators): run one of 17 fixed, read-only Asterisk queries (active channels, endpoints, registrations, contacts, transports, uptime, version and more) with one click and see the output. Every query is logged.
- Providers: new button "Check path" runs ping and a route trace to the provider's address and shows the result.
v2.3.3.2
Released 2026-10-01
- My calls (customer area): new tiles above the list show the number of calls, the total duration and the total cost for exactly the calls that match the filter, over all pages.
- New page My usage (customer area, below My calls): customers see their own calls grouped by device, destination, day or hour - calls, answered, ASR, duration, ACD and cost - for up to 31 days. Device logins see only their own device.
- Quality routing: an LCR can again be set to the order "Quality" - administrators only, with a quality routing rule. Providers are then tried by the rule's formula (ASR, ACD, total/answered/failed calls, billsec, price), best value first, measured from the dial attempts of the last 24 hours. Providers without measurements come last, ordered by price. If anything is missing or fails, the call is routed by price as before.
- New page Quality Routing Statistics (Routing & Billing, below Quality routing): per provider the counted calls, ASR, ACD, billsec, price and the resulting value for an LCR and a destination number.
- LCR order "Price" now really sorts providers by their purchase rate for the dialled number (cheapest first, providers without a rate last). Before, the call used the provider priority instead. Only LCRs with more than one active provider are affected.
- Exchange rates of tariffs in a foreign currency are read again at least once a minute; before, a changed rate was only used after a restart of the background service.
- The routing probe (Routing > Probe) shows the purchase rates and, for quality LCRs, the quality values used for the order.
v2.3.3.1
Released 2026-09-30
- Globe: the destination country of outgoing calls is now always coloured, also when customer devices are located in the same country, and its marker stays small even with many simultaneous calls.
v2.3.3
Released 2026-09-30
- Default user template: six new settings - call limit, source and destination static list mode, time zone, recordings retention (days) and recordings quota (MB). They apply to new users created on the New user page and by the CSV import.
- The CSV user import (Tools > Import user data) now applies the Default user template (postpaid, blocked, tariff, LCR, currency, language, credit, daily limit, max call rate, balance warning, invoice generation, recordings, call limit, static lists, time zone). A value in the CSV still wins. Before, imported users always got fixed built-in values.
- Default user template: invalid choices are rejected when saving. Tariffs and LCRs the creator may not assign, the user type, and recording settings (without recording rights) are never taken from the template.
- The Default user page is now in the sidebar under Customers, for administrators, resellers and partners.
- XML API: partner accounts no longer receive provider purchase prices in the call list, and tariff rates respect customer boundaries - resellers see only their own customers, users and partners only themselves.
- Automatic exports: the fallback period and the next run follow calendar days across daylight-saving changes, and file names use the local date.
- Recalculate invoices: the message now reports the number of invoices actually replaced.
v2.3.2
Released 2026-09-30
- Invoice runs now show live progress on the Generate invoices and Recalculate invoices pages, and the real result at the end (including any customer skipped because of an error) - also after a dropped connection or a page reload. Invoice runs are also listed under Background tasks.
- Free internal calls (phone to phone within the same customer, ring-group and forwarding legs, the free part of a transferred call) and rejected incoming calls no longer appear on invoices. A customer who has only such calls in the period no longer gets an invoice, unless 'generate empty invoices' is turned on.
- The per-customer setting for zero-price calls on invoices now works: when it is off, only calls with a price above zero are listed on the invoice.
- Recalculate invoices: an old unpaid, unsent invoice that no longer has any billable call is now removed, and the message says so. Before, the button did not start at all.
- Hourly flat-rate billing: if one subscription cannot be charged, the others are still charged in the same run. Each failure is logged by user ID and the run is reported as failed instead of 'finished'. A retry never charges twice. Daily and monthly subscription billing log every user that could not be charged in the same way.
- Daily subscription services now always charge the previous calendar day, also around daylight-saving changes. Before, after the spring change one day was charged twice and the next day not at all.
- Automatic CDR exports follow calendar days across daylight-saving changes and include calls in the last second of the period.
- Incoming calls and quick-forward calls now assign the paying device the way current Asterisk expects. The Asterisk log no longer fills with a 'deprecated' warning on every incoming call. Who is billed for a call is unchanged.
- Security: a partner account no longer sees rates, prices or costs of calls paid by another customer, in the call list, the CSV export and the XML API. In the XML API a partner account now only gets its own calls, statements and rates, and a reseller no longer sees the prices of calls paid outside its own customers. Administrators and accountants see the same as before.
- Calls page: with the 'multiple attempts' filter on, the summary tiles now count only the filtered calls, so they match the list and the CSV export.
- A call routed to a local device by a localization rule but billed normally no longer shows up as a free internal call.
- Recordings: an additional safety check before a recording is deleted.
- A user's language (and the default language for new users) is now checked when saved: an unsupported new value is rejected with a message, an existing value keeps working, and an old unsupported default no longer blocks creating new users.
- Updates now add the time zone to both services' settings on servers that were installed before v2.2.2 and never had it, so daily statistics, usage and exports switch day at local midnight. This takes effect from the next update.
- Closing a DID through the API now uses calendar days for the 'closed until' date, the same as the web interface.
v2.3.1.6
Released 2026-09-29
- Call map (Statistics): the destination-country view now shows its countries. It looked countries up by the wrong code and stayed empty; 32 countries were also missing from the map, among them Kosovo.
- Globe: an outgoing call now travels on to its destination country (device, server, provider, destination country). A destination country appears only while calls to it are running, and its size shows how many. The side panel lists the destination countries of the moment.
v2.3.1.5
Released 2026-09-29
- New: Globe (Overview > Globe). Your server, your customers' devices and your provider trunks on a world globe, with country and city. Calls in progress travel as light dots from device to server to provider. Zoom with the mouse wheel, two fingers or a double-click, drag to turn; after two minutes without input the globe returns to its start view. Visible to administrators and accountants with the system statistics right.
- New: the control room shows a smaller globe next to the 24-hour curve; its button opens the full globe. The control room and the globe now follow the colour theme you have chosen (until now they were always dark).
- Country and city come from the free DB-IP City Lite database. Each server downloads it by itself once a month (about 60 MB); no IP address is sent to an outside service. The page names the source, as its licence requires.
- Call map (Statistics): the world map now ships with Voiplix. The browser no longer loads map tiles from OpenStreetMap.
- Security: the live data behind the control room, active calls, search, recordings and call captures now checks your session exactly like every page does.
v2.3.1.4
Released 2026-09-28
- Confirmation dialogs: every red confirm button now names its action (Restart, Update, Roll back, Hang up, Reset, Delete ...). In 2.3.1.3 many of them said "Delete" even when nothing was deleted, for example when restarting the server.
- Call details: a timeline shows ringing and talk time with the coloured hangup cause, and a price breakdown shows step by step how the price came about (prefix, tariff, rate per minute, billing increment, billed seconds, price) together with the margin.
- Users: a balance gauge shows how far a customer is from being blocked, using the same limit the system uses when a call starts; yellow only below the warning level set for the customer.
- Statistics: Calls per day, Profit and Loss-making calls show data bars; losses are marked in red.
- Providers: the list shows the live trunk state (registered or reachable, response time) and the answer rate of the last hour.
- New page Routing probe (Routing menu): enter a number and see which providers a call would try, in which order and at which price. Nothing is dialled and nothing is changed.
- Global search (Ctrl+K): find users, devices, DIDs, providers, invoices and pages from anywhere, limited to what your account may see.
- Calls list: coloured hangup causes and summary tiles for the current filter (number of calls, answer rate, average duration, revenue).
- Dashboard: calls of the last 24 hours compared with yesterday. New Control room page: a full-screen live view for a second screen.
- Look and feel: an accent colour in every theme, smoother page changes with a loading bar, numbers that count up, clearer status dots, and own pages for errors and "page not found".
- Settings > Branding: choose the default theme for everyone on this system who has not picked one.
- Long lists (devices, users, providers, LCR, PBX pools): the row actions are grouped in a "..." menu; delete sits at the bottom, in red.
- Device, user and provider forms: a save bar appears as soon as something is changed, and leaving the page with unsaved changes asks first.
- Empty lists say what is missing and offer the next step. Registration and "last login" times are shown as "3 min ago", with the exact time on hover.
- Copy buttons for the SIP password and the PJSIP preview.
- Several texts and watchdog warnings were reworded in all languages.
v2.3.1.3
Released 2026-09-28
- The whole interface has a new, consistent layout: every list, detail, settings and report page and every sub-page and tab now follows the same structure — a back link above the title, the title with its main actions on the right, tabs on pages with sub-pages, settings grouped into cards, tables in one style, and short choices as button rows or switches.
- Delete, terminate and similar actions everywhere ask in a proper confirmation window instead of the browser pop-up; "Saved" and error messages appear at the top right; warnings and errors on a page are shown in one consistent box.
- Light theme: the page background is slightly tinted so the white cards stand out.
- Active calls: the three counters at the top now follow the filter (customer, device, status …) like the list below; the total stays in the "X of Y" line.
- Usage report, invoice generation and invoice recalculation: choose the customer from a list instead of typing a user ID. The list only shows customers you are allowed to see.
- Device defaults now cover every device setting that has a default in the old system: limits, announcements, recordings, caller ID mode, SIP options, session timers and the codecs with their order. Values you never saved keep today's behaviour for new devices.
- Devices and device defaults: a value outside the fixed list (NAT, DTMF, device type, transport, reinvite, RPID) is now rejected with a message instead of being saved unchecked. An existing old value can still be saved unchanged.
- Wide tables scroll sideways instead of being cut off.
- The sidebar has a search field for the menu (Ctrl+K).
- Some input fields showed German example text in every language; they now follow the chosen language.
v2.3.1.2
Released 2026-09-27
- Daily call statistics, the usage report and the nightly statistics e-mail now all cut the day at your local midnight, the same boundary the invoice uses. Before this they cut at UTC midnight, so calls made late in the evening were counted on the following day and the figures disagreed with the invoice for the same period.
- E-mail templates are now chosen correctly even when the account language is stored in a different spelling, for example "DE" instead of "de". Before this such an account silently received the English template although a template in its language existed.
- The "multiple attempts" filter on the call list is now available to the operator and the accountant only, and it no longer silently shortens its result. Before this a large result was cut down without any notice, and the total and the CSV export were cut with it.
- Provider order "Price" in a routing group now sorts by the actual rate, converted with the provider currency exchange rate, as the reference system does. Before this it did not compare rates at all.
- Provider order "Quality" is no longer offered for selection because it only sorted by provider name and never measured quality. A routing group that still has it stored keeps working, keeps showing it, and now uses the same order as "Price".
- A server only has to have an AMI secret if its type actually uses AMI. For an Asterisk server, saving without a secret is now refused with a clear message, and the connection test states when no secret is set. Before this an empty secret was silently replaced by a built-in default, so a wrong secret looked like a working one.
- The average profit per day on the profit page is no longer too low in the month with the autumn clock change. Before this the calculation assumed every day has exactly 24 hours, so that month was counted as one day too long.
- The end of a selected period now includes its very last fraction of a second, exactly as the invoice does.
- Several internal self-checks were stored in a place where the check list did not find them, so they were never run. They now have a reader and run with every acceptance. Correcting this immediately uncovered two of the problems listed above.
- The restart notice of the watchdog now uses the brand name from the settings and falls back to the host name only if that is not available.
- Two new build gates: one refuses a release if a dangerous key management option is used anywhere in the tree, the other refuses a release if the billing time zone is not pinned for both services.
v2.3.1.1
Released 2026-09-26
- If the phone system is stopped hard while a call is being recorded - a power cut, an out-of-memory kill - the call record and the balance deduction are now written together or not at all. Until now a record could be left behind without its deduction: the call was listed, but nothing was charged for it. Nothing about how calls are priced has changed.
- New internal check: one test now guards, in a single run, that a customer never sees the minute rate or the call price of another customer in the call list, the CSV export, the portal or the XML interface, and that revenue figures count only the calls a customer paid for. This was introduced with the previous release and had no automated check until now.
v2.3.1
Released 2026-09-26
- Incoming calls now record who received them. The destination device, the destination customer and the provider of the called number are stored with the call. Until now all three fields stayed empty on every single call.
- Internal calls between two extensions are now shown as internal in the call list and on the live page. Until now they appeared as outgoing.
- In the customer portal, end customers now also see their incoming calls. Until now the portal listed only outgoing calls, without saying so.
- The person who was called can now play back and delete the recording of a call they took part in, the same way the previous system did it.
- A customer can no longer read the minute rate or the call price of another customer when both took part in the same call. The call itself is still listed for both sides; only the money of the other side is hidden. The same now applies to the CSV export and to the XML interface.
- Revenue, self cost and profit in the statistics now count only the calls a customer actually paid for. Counts of calls, minutes and answer rate still count both sides.
- The dial plan no longer uses an Asterisk function that Asterisk itself marks as outdated. It wrote a warning line into the phone system log for every outgoing call, which made that log grow far faster than it needed to. Call billing is unchanged. No action is needed on your side: the dial plan is rebuilt automatically while the update installs.
v2.3.0
Released 2026-09-26
- CSV and XLS exports: column names are now stable English in every export route and no longer change with the interface language. If one of your scripts reads an export by column name, adjust it once for this version.
- Email templates now have a language. The template is chosen by the language of the recipient, with English as the fallback.
- The four German default templates were split: the German text stays as the German version, the Albanian half of three of them became its own Albanian version, and a new English version is now the default. A template you edited yourself is never touched.
- The mail log shows its error messages in your language instead of German.
- Device overview (All details): group titles and field labels are translated. Names of Asterisk settings such as Host, Port or Qualify stay as they are on purpose, so the page can still be compared with the switch.
- LCR time windows: weekday names follow your language instead of always being German.
- Provider and terminator contact forms, user list, user form, quality routing, import wizard, tariff conversion, SMS provider form, tools page and the statistics cards: the remaining fixed labels are translated.
- Confirmation questions before deleting a currency, a subscription or a set of invoices are translated.
- SMS list: status text, tooltip and date follow your language. The XML interface keeps its English text unchanged.
- Provider deviation details: the sentence about the measuring window is one translatable sentence now and reads correctly in every language.
- Dictionary: 137 keys that carried translations but were never shown were merged into the key that is actually used, so 380 translated values became visible. 20 unused leftovers were removed.
- New check in the release build: German plain text outside the page markup can no longer grow unnoticed.
- Watchdog: the reboot message now names the machine it runs on instead of always naming one fixed host.
- Three internal test scripts fixed that could report success without having tested anything.