உள்ளடக்கத்திற்குச் செல்லவும்
KAMOUniverse

மாற்று பதிவேடு

என்ன புதிது.

அது கப்பல்கள் போல், தளத்தில் ஒவ்வொரு மேம்பாடு.

  1. · kamo-internal

    Use org short name and description in HTML head

    DynamicMetaLoader now sets document.title to siteNameShort (was siteName) and writes the org description into the meta description tag. Static layout.tsx fallback updated to generic values.

  2. · SecurityService

    Include org description in config.json

    Add description field to buildConfigJson() and pass org.getDescription() from writeConfigFiles() so the themed config.json carries the org's description for frontends to use in HTML meta tags.

  3. · kamo-internal

    Color ticket list globe by requestor chat connection

  4. · MediaService

    Add requestor presence lookup for ticket list agents

  5. · kamo-internal

    Add includeCompany to market popup and companyName to leads

    Market add/edit popup (LeadMarketManager): - Radio control "Track Company Name" / "Individual Only" (required) - Defaults to unset on new market; pre-fills on edit - Validated and sent as includeCompany in create/update request Leads datagrid (LeadManager): - Company column shows companyName for leads from includeCompany markets - Shows "No Specified" when includeCompany=true but name is blank - Shows "—" for markets where includeCompany=false/null - Quick search (AG Grid quickFilter) automatically includes company values Create lead form (CreateLeadClient): - Conditionally renders Company Name text field when market includeCompany=true - Field is optional (max 50 chars), wired into submit payload via leadsApi leadsApi: companyName mapped through createLead and updateLead requests

  6. · InitializerService

    Add include_company and company_name columns

    LeadCompanyColumnRunner (Order 40) idempotently adds: - lead_markets.include_company (BOOLEAN, nullable) — tracks whether a market requires company name on leads - leads.company_name (VARCHAR(50), nullable) — stores company name at the lead level when the market has includeCompany=true

  7. · SecurityService

    Expose includeCompany in intake-config and market-config responses

    Both **************** and **************** now include the includeCompany flag so the frontend knows whether to show the company name field on lead creation.

  8. · kamo-shared-library

    Add includeCompany to LeadMarket and companyName to Lead

    - LeadMarket entity gets include_company (Boolean, nullable) - Lead entity gets company_name (String, max 50, nullable) - LeadMarketDTO, CreateLeadMarketRequest, UpdateLeadMarketRequest carry includeCompany - LeadDTO carries companyName and exposes includeCompany inside MarketInfoDTO - **************** carry companyName - LeadMarketService wires includeCompany on create/update - LeadService wires companyName on create/update and preserves it across mortgage type conversions

  9. · kamo-internal

    Show sales type path in Add Lead subtitle

    Append the market's Sales Type and Sub-Type to the "Adding to" line so the form mirrors the labels used in the Edit Market popup at **************** Renders as "Adding to {Market} (Service > Residential Mortgage)" when a sub-type is set, "Adding to {Market} (Service)" when only a parent is set, and "Adding to {Market}" when no sales type is set.

  10. · kamo-internal

    Unified PhoneSdk supporting RingCentral + sip.js (FreePBX)

    The softphone hook used to instantiate ringcentral-web-phone unconditionally, which threw on any FreePBX credential shape because that SDK is hard-coded to RingCentral's WSS provisioning format. - New PhoneSdk interface defines a provider-agnostic surface (start, stop, invite, **************** plus a PhoneSdkSession with **************** - RingCentralPhoneSdk wraps ringcentral-web-phone, preserving the existing RC behaviour. - SipJsPhoneSdk wraps sip.js (UserAgent + Registerer + Inviter/Invitation), attaches remote audio via the negotiated peer connection, supports in-dialog re-INVITE for hold/unhold, and refers for transfer. - createPhoneSdk picks the adapter from creds.provider (RING_CENTRAL, FREE_PBX, KAMO_PBX). - useSoftphone now drives the unified SDK and surfaces the real SDK error text in registrationError instead of the generic 'Phone SDK failed to initialize' string. - Adds sip.js@0.21.2 dependency.

  11. · VOIPService

    WSS-aware SIP credentials for browser softphones

    The /api/voip/sip/credentials endpoint now returns credentials a browser-side SIP stack can actually use: WSS transport, public domain, and a wsServers URL. - SipController resolves the member's MemberVoipConfig, validates VOIP is enabled and an extension is assigned, then routes to the member's specific instance (not the org's primary). Returns descriptive 409s when the member isn't configured rather than producing empty credentials. - SipInfo gains wsServers for SIP-over-WebSocket; SipCredentialsResult gains provider so the frontend picks the right SDK adapter (RingCentral WebPhone vs SIP.js for FreePBX/KamoPBX). - FreePBXProvider derives the SIP domain from the configured baseUrl and defaults wsServers to wss://<host>:8089/ws. Per-instance overrides (sipDomain, sipWsServer, sipWssPort, sipTransport) read from configJson cover split deployments where SIP terminates on a different hostname or Traefik terminates TLS at /ws on port 443. - PhoneProviderFactory parses the new optional configJson fields and feeds them into a SipTransportConfig record on FreePBXProvider. - RingCentralProvider tags its credentials with provider=RING_CENTRAL.

  12. · KlusterServices

    Add WSS WebRTC transport for browser softphones

    Asterisk's chan_pjsip now binds a plain WebSocket transport on 0.0.0.0:8089 and Traefik terminates TLS at **************** (port 443) so kamo-internal can register browser softphones over the existing wildcard cert without managing certs inside the pod. - configmap-k1m1.yaml: startup.sh writes pjsip.transports_custom.conf with the WS transport and pjsip.endpoint_custom_post.conf with webrtc=yes overrides for the existing extensions (8080, 2523), pinned to the WS transport. - service.yaml: expose port 8089 (sip-ws) on the freepbx Service so the new IngressRoute can target it; the pod is on hostNetwork so this maps to the k1m1 host's port 8089. - ingressroute-ws.yaml: HostRegexp + PathPrefix(/ws) at priority 100 routes WebSocket upgrades to freepbx:8089 *without* the kamo-middlewares chain — that chain includes compress, which would corrupt SIP-over-WS frames.

  13. · SecurityService

    Add /names endpoint returning id→name for all members regardless of state

    The by-department endpoint filters to active TeamMembers only, but extension assignments may reference base Members or inactive members. Use /names for ID→name resolution where coverage matters more than activity state.

  14. · kamo-internal

    Single-lead Add Lead form at /leads/new

    Refactor Add Lead from an in-page multi-tab pane into a dedicated route at /leads/new so it can be linked directly. The current market is passed through as ?marketId= and pre-selected. Lead Market, Vendor, and Product are now required; the contact requires at least one of first/last/preferred name and one of email or phone. Mortgage sub-type fields and any market custom-form fields flagged isDisplayOnIntake are rendered inline. On success, redirects to /leads/view/{id}.

  15. · SecurityService

    Add **************** endpoint

    Returns salesType, subType, and customForms for a market by marketId so the Add Lead form can render sub-type fields and intake custom forms without first creating a lead.

  16. · kamo-internal

    Add Display on Intake toggle, auto-lock when Required is enabled

  17. · kamo-internal

    Add isDisplayOnIntake to FormField TypeScript types

  18. · kamo-shared-library

    Coerce isDisplayOnIntake=true when isRequired=true in CustomFormService

  19. · kamo-shared-library

    Add isDisplayOnIntake to create/update request DTOs

  20. · kamo-shared-library

    Expose isDisplayOnIntake in FormFieldDTO

  21. · kamo-shared-library

    Add IS_DISPLAY_ON_INTAKE column to FormField entity

  22. · kamo-internal

    Link assigned member name to their phone settings page

  23. · kamo-internal

    Add member name display and unassign button to per-instance extensions tab

  24. · kamo-internal

    Show member names and add Unassign action to org-level extensions tab

  25. · kamo-internal

    Wire VOIP configuration to provider+extension selectors with assignment enforcement

  26. · kamo-internal

    Add typed DTOs, unassign API method, and update MembershipPermissionsTab VOIP types

  27. · VOIPService

    Add DELETE assignment endpoint to VoipExtensionsController for admin unassign

  28. · VOIPService

    Add MemberVoipConfigController for member VOIP config with extension assignment

  29. · kamo-shared-library

    Add findByAssignedMemberId query methods to PhoneExtensionRepository

  30. · kamo-internal

    Persist active mailbox in URL query params

    Switching mailboxes now updates the URL (?mailboxType, ?mailboxId, ?mailbox) so refreshing the browser restores the same mailbox. MessageBrowser reads window.location.search in its lazy useState initializer to restore activeMailbox before the first render, and pushes URL updates via router.replace on every mailbox-changed event. FolderSidebar reads the same URL params after getAccessibleMailboxes resolves so the dropdown reflects the restored selection.

உங்கள் உலகம் காத்திருக்கிறது.

நிமிடங்களில் இலவசமாகத் தொடங்கவும். நீங்கள் தயாராக இருக்கும் போது பொருட்களை சேர்க்கவும் - எந்த மாற்றமும் இல்லை, புதிய உள்நுழைவுகள் இல்லை.

எப்பொழுதும் இலவசம் — கடன் அட்டை தேவையில்லை