KamoCRM

Live Change Log

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

18,391
Total Changes
6,526
Features
5,537
Fixes
30
Projects
Filter by project
All Projects18,391AIService276APIService177BillingService161ConversionService117DaemonService146DocsService240ESigService93EmailService619InitializerService344KBService162KlusterServices769MCPGatewayService277MediaService620RAGService79SecurityService1,995TranslateService62VOIPService265VectorService11kamo-apps26kamo-asterisk-support28kamo-capcha17kamo-capcha-widget4kamo-internal8,691kamo-login342kamo-marketing642kamo-nowww20kamo-register213kamo-shared-library1,824kamo-signer-monorepo57kamolos114
Filter by type
All TypesBuild23CI525Chore794Docs3,286Feature6,526Fix5,537Other1,001Performance174Refactor281Revert23Style45Test175Upgrade1
October 5, 2026
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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo ago
FixVOIPService

Store inbound RingCentral texts, and stop re-registering live JustCall webhooks

RingCentral: the SMS subscription was the bare /message-store filter, whose notifications are a change summary with no message in it, and the reader looked for ...

Kamo·1mo ago
FixVOIPService

Read a FreePBX sweep's mailboxes over one manager session

The voicemail sweep runs inside syncInstance's database transaction and asked FreePBX extension by extension, each over a fresh AMI connect and login. A manager...

Kamo·1mo ago
FixVOIPService

Read FreePBX voicemail over the Asterisk Manager Interface

FreePBX's API has no voicemail messages: its voicemail module serves mailbox settings only. FreePBXProvider.getVoicemails GET /admin/api/api/rest/voicemail, a r...

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

Internal AI line endpoints for KamoAI

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

An inbound text raises an SMS_RECEIVED card

Kamo·1mo ago
September 24, 2026
FixVOIPService

Mint a RingCentral webhook verificationToken RingCentral accepts

RingCentral refuses a deliveryMode.verificationToken longer than 32 characters with CMN-101 "Parameter **************** value is invalid" (measured against the ...

Kamo·1mo ago
FixVOIPService

Only verified RingCentral webhooks are processed; calling needs a seat

The legacy path that processed a RingCentral call or SMS event with no instanceId, trusting the payload's own to-number, is removed together with its 2026-10-13...

Kamo·1mo ago
September 23, 2026
FixVOIPService

Pin kamo-shared-library 1.6.1, the only version that exists

The library moved to 1.6.1 and this service still asked for 1.6.0. There is no window in which both resolve: the library is never published to a remote, so the ...

Kamo·1mo ago
FixVOIPService

Right checks, SSRF/credential guards and cross-org fixes across VOIP

Findings 2-6 from the phone-system audit, fixed together because several share files. 2. HIGH — VoipInstanceController had no right check on any mutating endpo...

Kamo·1mo ago
FixVOIPService

Verify RingCentral webhooks before trusting them

RingCentral's inbound call/SMS webhooks were processed with zero verification: WebhookController routed telephony/message-store events straight into ***********...

Kamo·1mo 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·1mo 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·1mo ago
September 18, 2026
FixVOIPService

A number's owner travels as exact text, so saving it no longer re-owns it

GET /api/voip/numbers wrote ownerMemberId as the entity's Long. A member id is an INT8 past 2^53, so the settings page read it rounded: the owner was never foun...

Kamo·1mo ago
September 16, 2026
OtherVOIPService

Liveness probe on /actuator/health/liveness, not the DB-aware aggregate

The aggregate /actuator/health includes the DataSource indicator, so restarting the database failed liveness on every pod at once and restarted the whole platfo...

Kamo·1mo ago
OtherVOIPService

Release idle Hikari connections now that YSQL pooling is shared

The connection manager no longer pins sessions **************** so idle app connections no longer each hold a database backend. Keep the pool maximum, but stop ...

Kamo·1mo ago
September 13, 2026
FixVOIPService

Accept OCI image indexes when resolving the built digest [skip ci]

The images are pushed as OCI image indexes, so asking the registry for a single image manifest only answered 404, the digest came back empty and the check faile...

Kamo·1mo ago
FixVOIPService

Restart when a same-commit rebuild leaves pods on the old digest [skip ci]

The rollout step tried to detect a same-commit rebuild by comparing the Deployment's image reference before and after `set image`. "Apply manifests" has already...

Kamo·1mo ago
September 8, 2026
OtherVOIPService

Put the stream in the config the pod actually reads

The previous commit set nats.jetstream.stream in **************** shipped, deployed — and the new pod still logged NATS stream 'CHAT_MESSAGES' already exis...

Kamo·2mo ago
OtherVOIPService

Give voip.* a stream to live in, and stop lying about who sent the text

There was no VOIP_MESSAGES stream in NATS at all. Every `voip.*` publish answered 503 No Responders Available and both media pods logged, once, at boot: [V...

Kamo·2mo ago
September 7, 2026
OtherVOIPService

Record what the carrier says happened to a text, and check 10DLC before it matters

Sending now succeeds and nothing arrives. Telnyx accepts the message, returns an id, and Verizon then refuses to deliver it: status delivery_failed code ...

Kamo·2mo ago
OtherVOIPService

Normalise the sender at the gateway, and stop calling a refusal retryable

The previous commit normalised the sender number where it is stored in the number inventory and on the carrier, and the send still failed with the same carrier ...

Kamo·2mo ago
OtherVOIPService

Normalise sender numbers to E.164 before they reach a carrier

Sending a text failed with "The message could not be sent. Try again in a moment.". Telnyx's own answer, from the voipservice log, was specific: Telnyx POST ...

Kamo·2mo ago
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·2mo ago
FixVOIPService

Stop telling people to add the text provider they already added

Reported from a real setup, and the report was right. An organization running FreePBX added Telnyx as a text provider, opened the SMS window, and was shown Free...

Kamo·2mo ago
FixVOIPService

Tell a member the number is missing, not that their PBX cannot text

Reported from a real setup: an organization added Telnyx as a text provider, opened the SMS window, and was told "This phone server is a FreePBX PBX, which carr...

Kamo·2mo 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