KamoCRM

Live Change Log

Every feature, fix and improvement, posted as it ships. Nothing is held back for a launch.

17,374
Total Changes
5,891
Features
5,258
Fixes
30
Projects
Filter by project
All Projects17,374AIService242APIService174BillingService157ConversionService110DaemonService137DocsService223ESigService91EmailService568InitializerService329KBService151KlusterServices738MCPGatewayService235MediaService592RAGService79SecurityService1,822TranslateService62VOIPService248VectorService11kamo-apps26kamo-asterisk-support27kamo-capcha17kamo-capcha-widget4kamo-internal8,321kamo-login335kamo-marketing641kamo-nowww20kamo-register213kamo-shared-library1,631kamo-signer-monorepo56kamolos114
Filter by type
All TypesBuild16CI523Chore773Docs3,252Feature5,891Fix5,258Other993Performance165Refactor278Revert23Style42Test159Upgrade1
October 23, 2026
FeatureVOIPService

Refuse a phone extension past the organization's licenses

Owner rule 2026-10-22: per-user add-ons bill the licenses purchased; how many extensions may be in use is limited only by them. Before an extension is put into ...

KamoΒ·20h ago
October 21, 2026
FixVOIPService

A carrier-only organization can hold text threads again (SITP CARRIERSMS)

VOIP_CONVERSATIONS.INSTANCE_ID was NOT NULL in production, although the entity and **************** both say an org that texts through a carrier and runs no pho...

KamoΒ·2d ago
FixVOIPService

An MMS part is stored in one transaction of its own (SITP MMS)

Live check in sp00verify: the picture was fetched and its object written, then the dat's final 'published' save failed (JpaSystemException) because the backgrou...

KamoΒ·2d ago
FixVOIPService

The MMS part claim names its states as parameters, so Hibernate 6.2 can read it at boot (SITP MMS)

8eda899's deploy never rolled: Spring Data validates every @Query at startup and Hibernate 6.2 cannot interpret a nested enum's FQN literal **************** so ...

KamoΒ·2d ago
October 19, 2026
FeatureVOIPService

Keep the pictures and files people text in, for every provider (SITP MMS)

VOIPService stored only the words of an inbound MMS, so nobody (person or SI) could see what was texted in. Now every inbound rail reads its media and VOIPServi...

KamoΒ·4d ago
FixVOIPService

A closed god-mode window is closed here too (shared SessionPlatformFacts reader)

Seventeen VOIPService gates (CallController, the VoIP admin controllers, the SMS inventory and bulk-text controllers, DoNotContactController, RecordingAccessSer...

KamoΒ·4d ago
October 18, 2026
FixVOIPService

One's own text numbers need the Phone tab's rights, not a bare session (SITP TP11)

ACCESS_VOIP, or MANAGE_EXTENSIONS / MANAGE_VOIP_SETTINGS: the rights settings/member opens its Phone tab on, so nobody who sees the card today loses it.

KamoΒ·5d ago
FixVOIPService

The members' text-template door refuses flat {error, code, reason} (SITP TP11)

The shape every member-facing VOIPService refusal has, so the Tool Plane and the browser read the reason without unwrapping a nested object.

KamoΒ·5d ago
FeatureVOIPService

The softphone's own surfaces check ACCESS_VOIP, and members get a session door to text templates (SITP TP11)

- CallController (call history, own voicemail list/read/archive, queues, agent state), missed-calls-seen, the do-not-contact check and SMS send now check ACCE...

KamoΒ·5d ago
FeatureVOIPService

Settings β†’ Phone β†’ Do not block β€” the API, the suggestions, and STOP texts that skip the company's own lines

Owner 2026-10-15: "remove it and add it to a do-not-block list". The allowlist beside the do-not-contact list, for the organization's own numbers and staff line...

KamoΒ·5d ago
October 15, 2026
ChoreVOIPService

One-time backfill of the do-not-contact list from earlier opt-outs

Run once on 2026-10-15 05:07Z (yb-tserver-0, admin role), by key from the opt-out tables only (no lead, contact or member table is read): CALL from SI-call "sto...

KamoΒ·1w ago
ChoreVOIPService

Delete the do-not-contact backfill after its run

Ran 2026-10-15 05:07Z; a second run inserted nothing (re-runnable, ON CONFLICT). Entries added (each with its ADDED event): CALL 2 (VOICE_OPT_OUT: +194929899...

KamoΒ·1w ago
FeatureVOIPService

The organization's do-not-contact list β€” VOIPService owns it, texts check it, STOP and START write it

Owner 2026-10-15: one company-wide do-not-contact list per organization, scoped per channel ("Only that channel"). - DDL **************** (DO_NOT_CONTACT, DO_N...

KamoΒ·1w ago
October 14, 2026
FeatureVOIPService

Ai-lines names the number a missed call can be returned to

Each line of /ai-lines?orgId= carries callbackNumber: the SI's own line, else a number assigned to it, else its phone server's main number, else the org's only ...

KamoΒ·1w ago
FixVOIPService

Seal member VoIP credentials at rest with PlatformSecretCipher; re-seal legacy rows at boot

**************** held each member's access token, refresh token (Teams, RingCentral OAuth) and RingCentral JWT assertion exactly as the provider issued them. Ev...

KamoΒ·1w ago
FixVOIPService

/api/voip/webhook answers a form post 415 and a non-JSON body 400, never a silent 200

A form-encoded post (Twilio, Sinch, Vonage pointed at the wrong address) fell into readTree(), failed, and was answered 200, so the carrier never retried and th...

KamoΒ·1w ago
October 11, 2026
FixVOIPService

A FreePBX voicemail deleted on the PBX stops counting on the phone badge

A deleted message is just absent from its mailbox's listing, so the sync never touched its row again and it stayed unread, badged for good. A row whose mailbox ...

KamoΒ·1w ago
FixVOIPService

Marking a FreePBX voicemail heard reaches the phone server, and the badge follows at once

A FreePBX message id is mailbox/msgId, so PUT /voicemail/{id}/read never matched a route for it and the PBX was never told: the message stayed in INBOX and the ...

KamoΒ·1w ago
FeatureVOIPService

Decision 4 on every recording read β€” participants, their chain, VIEW_CALL_LOGS, a linked lead's readers, in every org (KamoCollab CP05 Task 21)

RecordingController now runs tenancy (404), then the PHI capability (403), then CallRecordingAccess through access/RecordingAccessService (403 RECORDING_NOT_PER...

KamoΒ·1w ago
FeatureVOIPService

The CP05 DDL for Confidential markers on calls

KamoCollab CP05 Task 5 (spec 5.1, D8, D27): recordings and phone_call_log each gain is_confidential, confidential_set_by_member_id and confidential_set_at. Hand...

KamoΒ·1w ago
FixVOIPService

A re-read call keeps the member it was first credited to

CallLogIngestService.ingest set the member (and extension) on every re-read of a settled CDR, resolved from whoever holds the extension now. When ext 7900 passe...

KamoΒ·1w ago
October 6, 2026
FixVOIPService

The JustCall contact import finishes β€” paced, resumable, and no longer skipping pages

Harmony Home Loans' import had never once completed (no JustCall book or integration exists for any member). Three defects: 1. One burst per tick: it read ever...

KamoΒ·2w ago
FeatureVOIPService

V7 β€” which colleague is calling from an internal extension (SP92 calls)

GET **************** (KAMOAI_INTERNAL_SECRET) answers the active member of the phone server's org that the extension is ACTIVE-ly assigned to, or 404 NO_MEMBER....

KamoΒ·2w ago
FixVOIPService

JustCall calls are credited to the agent who took them, and Sales Dialer calls sync

Checked against Harmony Home Loans' JustCall account (read-only GETs): the newest 100 of its 1,058 /calls match PHONE_CALL_LOG one for one, so the ordinary log ...

KamoΒ·2w ago
October 5, 2026
FixVOIPService

The phone badge counts voicemails in your own mailbox, not the whole phone server

The nav phone icon's voicemail line counted every unread message on the member's phone server **************** on the premise that the softphone's Voicemail tab...

KamoΒ·2w ago
FixVOIPService

A shared voicemail box tells only members who manage the phone server (SP98 T26, final review M-2)

The box's list, audio, read and delete answer only MANAGE_VOIP_SETTINGS (or a god-mode window), and Settings' picker offers only those members, but SharedVoicem...

KamoΒ·2w ago
FixVOIPService

An AI member's line has an outside-calls switch like anyone's, so one hired while new extensions were denied can be allowed (SP93 final fix)

V12 (PUT **************** no longer refuses an AI line with 409 AI_LINE. A new AI line starts as the phone server's setting for new extensions says (SP93-T5-1),...

KamoΒ·2w ago
FixVOIPService

Recordings and voicemail audio are written, not refused with a 500

The recording and voicemail audio endpoints are declared ResponseEntity<?>, because they also answer JSON, and returned a StreamingResponseBody lambda. Spring p...

KamoΒ·2w ago
FixVOIPService

Recordings and FreePBX voicemail play: the pod reaches MinIO

VOIPService streams every call recording and every FreePBX voicemail in Settings out of MinIO, but it never configured MinIO: the shared MinIOConfig defaults ap...

KamoΒ·2w ago
October 4, 2026
FeatureVOIPService

Shared voicemail boxes, and FreePBX voicemail audio from the message itself

Shared boxes (SP98-N-2). A mailbox on the PBX that no Kamo extension is (K1M1's 8100, "KamoCRM Main Line") was never synced. The sweep's single AMI session now ...

KamoΒ·2w ago
FixVOIPService

A FreePBX address is judged when it is set or moved, and amiPort must be a port

The FreePBX settings form sends back every field it shows. Judging each submitted baseUrl and amiHost refused K1M1, whose two addresses are cluster-internal bec...

KamoΒ·2w ago
FixVOIPService

KamoPBX users get the password Kazoo requires, and no provider token is ever stored

Kazoo refuses a user that has a username and no password (400 data.password.required), so every KamoPBX extension and AI line failed; Luna's hire fell through t...

KamoΒ·2w ago
FeatureVOIPService

The PBX's managed policy carries the toll-fraud block list (SP93 T7)

/internal/voip/pbx-config answers blockedPatterns, the phone server's guards as Asterisk patterns **************** for kamo-asterisk-support's [kamo-toll-fraud-...

KamoΒ·2w ago
FeatureVOIPService

The phone server's toll-fraud guards for KamoAI's pre-flight check (SP93 T6)

GET **************** answers {blockInternational, blockPremiumRate, blockHighRiskAreaCodes, blockedPrefixes} for one phone server, read by its id; a server that...

KamoΒ·2w ago
FeatureVOIPService

New extensions start as the phone server's outbound setting says (SP93 T5)

A new extension, a person's or an AI member's line, now starts allowed to dial outside only when its phone server's newExtensionsOutboundAllowed setting is on. ...

KamoΒ·2w ago
FeatureVOIPService

The phone server's outbound policy in the AI voice settings (SP93 T4)

GET and PUT **************** carry SP93's five fields: newExtensionsOutboundAllowed, blockInternational, blockPremiumRate, blockHighRiskAreaCodes and blockedPre...

KamoΒ·2w ago
FeatureVOIPService

The DDL file for the phone server's outbound policy

SP93 Task 1. Five NOT NULL DEFAULT columns on AI_VOICE_INSTANCE_SETTINGS: **************** BLOCK_INTERNATIONAL, BLOCK_PREMIUM_RATE, BLOCK_HIGH_RISK_AREA_CODES a...

KamoΒ·2w ago
September 29, 2026
FeatureVOIPService

The phone server's team line for an AI member's unnamed transfer

SP95 D10: the AI voice settings take defaultTransferExtension (digits, like the fallback; blank clears it) and echo it. The new internal route GET *************...

KamoΒ·3w ago
FeatureVOIPService

The DDL file for the phone server's team line

SP95 Task 2. **************** a nullable VARCHAR(20) that holds the extension an AI's unnamed transfer rings (the team line, 8200 on the k1m1 FreePBX). Hand-app...

KamoΒ·3w ago
September 28, 2026
FeatureVOIPService

Teams calling connects send the api.kamouniverse.com redirect

The owner has added **************** to the platform Microsoft app, keeping the api.kamocrm.com one. Both hosts serve the path. Completes aa7b608, which moved R...

KamoΒ·3w ago
FeatureVOIPService

RingCentral connects send the api.kamouniverse.com redirect

The owner added **************** to the platform RingCentral app and kept the api.kamocrm.com one; both hosts serve the path. Teams calling uses the same path o...

KamoΒ·3w ago
FixVOIPService

Settings voicemail plays a FreePBX message from its paired upload

Settings -> Phone -> Voicemails plays each row through /voicemails/{id}/audio, which asked the provider for the audio. FreePBX serves no voicemail audio over an...

KamoΒ·3w ago
FixVOIPService

Phone OAuth hops return the platform's members to internal.kamouniverse.com

kamouniverse.com is the platform's primary apex (kamo-shared-library 0e8cf90f). Sign-in ranks it first for the platform organization, the one organization holdi...

KamoΒ·3w ago
FixVOIPService

Read JustCall voicemail with INCOMING_VOICEMAIL, and file each under its agent

JustCall answers call_type=VOICEMAIL with 400 ("call_type must be one of ... INCOMING_VOICEMAIL"), so not one of the 241 voicemails on the JustCall account ever...

KamoΒ·3w ago
FixVOIPService

A PBX ring event rings only members of the key's own org

APIService vouches for the API key's org in X-Org-Id and takes the phone server id from a header the key holder writes. The ring seam ignored the org, so any ke...

KamoΒ·3w ago

Like what you see shipping?

All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.

Start Free ForeverView Pricing