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Β·21h 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
October 18, 2026
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
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
October 11, 2026
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
October 6, 2026
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
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
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
September 27, 2026
FeatureVOIPService

PBX policy feed and AI voice admin endpoints

V7 GET /internal/voip/pbx-config (cluster secret) answers kamo-asterisk-support's policy pull through APIService and records the helper's heartbeat; a Redis fai...

KamoΒ·3w ago
FeatureVOIPService

Internal AI line endpoints for KamoAI

KamoΒ·3w ago
FeatureVOIPService

Provision, retire and resolve AI voice lines

Retire deletes the PBX extension only when it is still there, and a phone server in use that refuses the delete keeps the line and answers 502, so the minute SI...

KamoΒ·3w ago
FeatureVOIPService

AI voice lines on FreePBX, KamoPBX and Telnyx

A refused FreePBX addExtension (status false, no GraphQL error) now fails the AI line instead of recording one that rings nothing. Telnyx number lookups send th...

KamoΒ·3w ago
FeatureVOIPService

KamoAI internal surface guarded by its own secret

/api/voip/internal/** (SP13: AI lines, SIP credentials for LiveKit) takes KAMOAI_INTERNAL_SECRET, not the cluster secret; the cluster prefixes keep theirs. The ...

KamoΒ·3w ago
September 25, 2026
FeatureVOIPService

Announce new voicemails β€” live panel, phone push and a card

A voicemail the sweep writes for the first time, on an extension with an assigned member and received in the last 24 hours (spec D17), now publishes voip.voicem...

KamoΒ·4w ago
FeatureVOIPService

An inbound text raises an SMS_RECEIVED card

KamoΒ·4w ago
September 21, 2026
FeatureVOIPService

Pre-assign JustCall phone server id for callback URL

The new-phone form generates a UUID before create so the member can paste the webhook callback URL into JustCall while requesting API credentials. Create accept...

KamoΒ·4w ago
FeatureVOIPService

Serve JustCall callback URL for phone server setup

Adds GET /api/voip/setup so the settings UI can show the exact per-instance webhook URL without hardcoding the deployment host.

KamoΒ·4w ago
September 7, 2026
FeatureVOIPService

A number can be shared by several members, and one of them receives it

A single OWNER_MEMBER_ID could say "this number belongs to Sarah" and nothing else. Real desks are not shaped like that: a support line is answered by four peop...

KamoΒ·1mo ago
FeatureVOIPService

Serve the inbound webhook URL, from one definition

An administrator adding a text provider has to paste Kamo's inbound URL into the carrier's own console, and nothing told them what it was. Missing that step has...

KamoΒ·1mo ago
September 6, 2026
FeatureVOIPService

Actually create the Telnyx account setup, carry MMS, and let a carrier-only org hold threads

Three gaps, and the first was the feature not working at all. TELNYX PROVISIONING WAS DEFINED AND CALLED BY NOTHING TelnyxProvider.provision(), ensureMemberCr...

KamoΒ·1mo ago
FeatureVOIPService

Route texts by NUMBER, and add Telnyx on both sides of it

An organization can buy its DIDs and its texting from one company and answer the calls with another. Kamo could not express that: a member's texting was a prope...

KamoΒ·1mo ago
September 4, 2026
FeatureVOIPService

Fall back to the org's own hostname for the Teams redirect

A redirect the org typed into its own registration still wins outright β€” Microsoft requires the URI replayed on the token exchange to match the authorization by...

KamoΒ·1mo ago
FeatureVOIPService

Lock the shared sweeps, and run two pods

Every @Scheduled sweep here whose effect is shared now takes a named distributed lease through SingletonTaskRunner before it does anything, so it runs once acro...

KamoΒ·1mo ago
FeatureVOIPService

Teams Phone falls back to the org's own Entra app

The per-phone-server credentials still win β€” that is the most specific source. What changes is the fallback underneath them: the org's own MICROSOFT_TEAMS regis...

KamoΒ·1mo ago
September 3, 2026
FeatureVOIPService

Let an on-premise PBX report a ringing extension

RingCentral and JustCall publish INBOUND_RINGING from their webhooks. FreePBX and KamoPBX publish nothing -- they are the customer's own Asterisk and nothing wa...

KamoΒ·1mo ago
FeatureVOIPService

Wire JustCall in through the phone provider abstraction

JustCall (api.justcall.io/v2.1) as a full PhoneProvider: call history, texts, voicemail, recordings, the agent directory and availability, plus signed account w...

KamoΒ·1mo ago
August 27, 2026
FeatureVOIPService

Keyword interception at step 0 on the RingCentral rail (MS1 Task 4)

Today a STOP to a number no MEMBER_VOIP_CONFIG row owns hits the "No member found for to-number" branch and vanishes β€” and that branch is EXACTLY where an opted...

KamoΒ·1mo ago
FeatureVOIPService

SmsKeywordService β€” the one writer for inbound keywords (MS1 Task 3)

Closes the TODO Task 2 left behind. Until this commit a verified inbound STOP reached BulkTextInboundController, was recognised, was logged, and was then DROPPE...

KamoΒ·1mo ago
FeatureVOIPService

Carrier-facing inbound SMS webhook (MS1 Task 2)

POST **************** -- form-encoded or JSON, guarded by the CARRIER'S OWN SIGNATURE. Why a new endpoint. /api/voip/webhook cannot receive a STOP and fails si...

KamoΒ·1mo ago
FeatureVOIPService

Implement KamoPBX extension, user and device management

The provider advertised extensionManagement, userManagement and deviceManagement as true while implementing none of them, so the UI would have shown buttons tha...

KamoΒ·1mo ago
FeatureVOIPService

Decrypt the KamoPBX credential; test the refusal path

The master credential is stored as ciphertext by the platform settings UI, so it must be decrypted before use β€” handing ciphertext to the API as a password woul...

KamoΒ·1mo ago
FeatureVOIPService

Read KamoPBX platform config from the database

Adding a KamoPBX phone server failed with a raw Kubernetes DNS error β€” 'I/O error on PUT ... **************** β€” shown to an organization admin who can neither r...

KamoΒ·1mo ago
FeatureVOIPService

Provision a KamoPBX account when a phone server is created

Adding a KamoPBX phone server now creates the underlying account and writes the account id and realm back to configJson. Any configJson the client sent is DISCA...

KamoΒ·1mo 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