Changelog
Was ist neu?
Jede Verbesserung an der Plattform, wie sie geliefert wird.
· kamo-internal
Wire Verfügbarkeit Anbieter in PresenceWrapper
· kamo-internal
useAvailabilityWebSocket-Hook und AvailabilityContext hinzufügen
· SecurityService
Auto-Set Mitgliedsverfügbarkeit bei Anmeldung, AWAY beim Logout VERFÜUNG
· MediaService
NATS-STOMP-Relais für den Status der Mitgliedsverfügbarkeit hinzufügen
· SecurityService
Aktualisierung der Verfügbarkeits-Endpunkte für MemberAvailabilityStatus enum
· SecurityService
VerfügbarkeitPublisher für Status-Updates der Mitglieder hinzufügen
· InitializerService
Migrate members.is_ available to available_status enum
· kamo-shared-library
Ersetzen istAvailable boolean mit MemberAvailabilityStatus enum
· kamo-asterisk-support
Enrich Upload Manifests mit Asterisk CDR Anrufer-ID-Daten
Fügt optionale MySQL CDR Anreicherung, so dass die Softphone-Historie Registerkarte kann anzeigen, wer angerufen hat (oder aufgerufen wurde). Wenn ASTERISK_CDR_DSN konfiguriert ist als Forgejo Repo-Geheimnis, der Helfer: - Queries aiskcdrdb.cdr für den Aufruf uniqueId vor dem Hochladen - Parses CLID in callerIdNum und callerIdName - Derives Anrufrichtung (inbound/outbound) von src/dst vs Verlängerung - Beinhaltet einen cdr{-Block im Upload-Manifest CDR-Anreicherung ist Opt-in und anmutig degradiert: wenn die DSN fehlt oder die Nachsicht versagt, Uploads gehen ohne Anrufer-ID (bestehendes Verhalten). Fügt go-sql-driver/mysql v1.7.1 hinzu; Dockerfile läuft go mod ordentlich zu besetzen go.sum während des Docker Builds, so dass keine lokale Go-Installation benötigt wird.
· ConversionService
Parse CDR Anrufer-ID Felder aus Upload manifest
Wenn Kamo-Sasterisk-Unterstützung einen cdr{-Abschnitt im Upload enthält manifest (besiedelt, wenn ASTERISK_CDR_DSN konfiguriert ist), ConversionService extrahiert AnruferIdNum, callerIdName, CallDirection und Disposition und geht sie durch RecordingMetadata, so dass die Recording-Reihe mit vollständigen Caller-ID-Kontext.
· InitializerService
CDR-Caller-ID-Spalten zur Aufzeichnungstabelle hinzufügen (Bestellung 40)
Fügt caller_id_num, caller_id_name, call_direction und call_result hinzu Spalten zur Aufnahme-Tabelle, so dass die Softphone-Historie-Tab anzeigen kann die anriefen, ohne sich darauf zu verlassen, dass die FreePBX CDR-Pipeline verfügbar war.
· kamo-shared-library
CDR-Caller-ID-Felder zu Recording-Entity hinzufügen
Fügt CallerIdNum, callerIdName, callDirection und callResult Spalten hinzu an die Recording Entity so kamo-asterisk-Unterstützung kann Asterisk CDR speichern Metadaten neben der Audiodatei. RecordingMetadata gewinnt Matching Felder; ein rückwärtskompatibler Konstruktor lässt bestehende Anrufer passieren null für alle vier ohne Veränderung.
· kamo-internal
COMP Zahlungsmethode hinzufügen, um Assistenten zu bestellen
COMP ist ein gültiges Backend PaymentMethod enum Wert für kostenlosen Plattform-Admin Zuschüsse, aber fehlte von der Frontend-Typ und Assistent UI - nur INVOICE und AUTO_BILL wurden angeboten. COMP zu der hinzugefügt AbonnementPaymentMethod Union und exponierte es als Radio-Option.
· kamo-internal
Plattform kamocrm-Domain auf benutzerdefinierten Domain-Eintrag anzeigen
Oberfläche des aktiven *.kamocrm.com Hostname auf dem Add-Domain-Flow und erkennen eigene Domains, indem Sie die Kamocrm-URLs ausschließen, anstatt nur Standard-Flagge.
· kamo-internal
Domain-Taste für Top-Level-Besitzer und Systemmitglieder anzeigen
· kamo-internal
Eingemessene Abrechnungstaste für org-Besitzer ohne Konto anzeigen
Wenn ein Org-Besitzer öffnet die Pläne-Rechnungskarte und keine Rechnungskonten existieren, zeigen eine Bootstrap Prompt statt der generischen "Kontakt org Besitzer-Nachricht. Der Button ruft POST /api/security/account/ Bootstrap-billing (idempotent) lädt dann Konten auf Erfolg.
· SecurityService
Bootstrap-billing Endpunkt für bereits existierende Orgs hinzufügen
POST ************ löst das Gleiche aus idempotent Setup als Sub-Oro-Erstellungshaken (BillingSetupService .setupForSubOrgCreation) kann aber von einem org-Besitzer on-demand genannt werden. Diese Griffe orgs, die vor dem Abrechnung Refactor erstellt wurden und daher nie ein Konto + Konto-Abonnement erhalten.
· kamo-internal
Wave 3 Konvertierungen, Fallback fix und automatisch übersetzen CI
- Ersetzen Sie alle hart codierten englischen Strings durch t() Aufrufe über Welle 3 Komponenten (Chat, Clubhaus, Support, Notizen, Pipeline, Leads, nist, etc.) - Merge Welle 3 Fragmente in Nachrichten/en.json (+19 Tasten) - Beheben Sie die Wertung der Heimplatzhalter in en.json (Willkommen, Slogan, Footer Text, accountsDesc/networkDesc ICU interpolation) - Behebt Handy-Wunschtext in page.tsx, um t() anstelle von hartcodierten Strings zu verwenden - Beheben request.ts: Deep-merge Englisch als Basis für alle Locale-Dateien so fehlende Locale-Dateien (pre-translate-CI) servieren Englisch statt abzustürzen, und teilweise übersetzte Locales fallen zurück auf Englisch für fehlende Schlüssel - Update ************ zu kamo-marketing's Übersetzen-und-Rebuild-Muster: Ersteinsatz - TranslateService-Port-Forward "Loeszeichendateien begehen" - Bild mit Übersetzungen wieder aufbauen . redeploy
· kamo-register
Platz Spitzname inline nach Namenssuffix auf legale Namenszeile
· kamo-internal
Wire next-intl mit member.language als Locale source
Fügt Next-int-basierte Internationalisierung über kamo-internal ohne URL locale Präfixes. Aktive Locale wird aus dem kamo-locale Cookie gelesen, das Spiegelt die authentifizierte "Sprache"-Vorzug des authentifizierten Mitglieds wider (über die Regionale Einstellungskarte in ************ Infrastruktur: - i18n/locales.ts, i18n/request.ts: 22 unterstützte Locales passend zu kamo-marketing - /api/i18n/set-locale: schreibt das Kamo-locale Cookie - LocaleBootstrap: synchronisiert Cookie mit Member.language auf der ersten authentifizierten Last - I18nProviders: bewirbt MUI Core, x-data-grid, x-date-pickers locales und date-fns Adapter lokalisieren zur aktiven Sprache - useFormatters: locale-aware date / number / Prozent / Relativ-time helpers - MyAccountTab Regional Settings speichern: schreibt das Cookie + router.refresh() wenn der Benutzer seine eigene Sprache ändert - Skripte/translate.ts: Build-Time Delta Übersetzung gegen TranslateService (Spiegel-Kamm-Marketing-Muster) - Scripts/Merge-fragments.ts, ************ Werkzeug für Aggregation von Schlüsselfragmenten pro Gebiet in Nachrichten/en.json Deckung: - Nachrichten/en.json mit gemeinsamer gemeinsamem.*, n.V.*, auth.* Schlüssel plus Erstabnahme über 67 Seiten und Komponenten (Dashboard, Leads, commerce, Einstellungen, Konto, Kontakte, Einstellungen/Funktionen, Einstellungen/Mitglied, Komponenten/Einstellungen, Komponenten/Tools/ai-Chat, etc.). Viele Funktion Oberflächen benötigen noch Nachlauf-Extraktionspässe.
· VOIPService
Zurückfallen auf bildgebende Aufnahmen für Anrufhistorie + Voicemails
FreePBX 17 gibt Voicemail-Nachrichten über REST oder GraphQL auf dieser Installation nicht offen (der GraphQL-Sprachnachrichtentyp gibt Mailbox-Konfiguration zurück, nicht Nachrichten und /admin/api/Api/Ruhe/Rest/Ruhe/Voicemail 404s), und auch die CDR-Pipeline von Asterisk ist hier nicht funktionsunfähig (ODBC DSN misconfig wird separat in KlusterServices behandelt). Ohne diese werden die Softphone-Tabs auch dann leer, wenn Anruf-/VM-Aufnahmen auf der Bildseite existieren. Wenn provider.getCallHistory oder provider.getVoicemails nichts zurückgibt, greifen Sie zurück auf die Auflistung von Zeilen aus der kamo.recordings Tabelle von (providerInstanceId, Erweiterung, istVm). Caller-ID Metadaten werden heute nicht auf Recording durchgeführt, so dass wir von/vonNumber leer abgehen - die Zeile wird immer noch über das Mediaplayer-Tool via recordingId abgespielt. Die Archivfilterung ist über beide Wege erhalten, so dass eine über den Cache archivierte Zeile auch im Fallback verborgen bleibt.
· kamo-shared-library
Paginierte Aufnahmesuche von (Instance, Erweiterung, isVm)
Wird von den Softphone-Tabs als kanonische Wahrheitsquelle für Anrufaufzeichnungen und Sprachnachrichten verwendet, wenn der vorgeschaltete Anbieter sie nicht auflisten kann. FreePBX 17 hat keine REST/GraphQL Voicemail-Message API, und auf dieser Installation ist auch die CDR-Pipeline von Asterisk defekt (separate ODBC misconfig fix in KlusterServices).
· SecurityService
Auto-Vorsicht KamoCRM Sitz auf Sub-Or-Erschaffung; Förderung-Billing-Besitzer-Endpunkt
EntitlementService geht Abonnementmitglied (nicht AccountMember) zu berechnen Mitgliedsansprüche - die Vereinigung von Funktionen über aktive Lizenznehmer subs, plus die Freie Grundlinie. Der Redis-Hörer erhält einen SUBSCRIPTION:<uid-Handler. Neuer BillingSetupService läuft in zwei Strömen: - erstellenOrganisation (sub-org unter KamoCRM): auto-create ein KamoCRM-Or Mitglied für den Schöpfer, wenn abwesend, findet-oder-erschafft ein KamoCRM-Konto mit diesem Mitglied als primärer, öffnet eine Free-Tier-KontoAbonnementAErscheinung Targeting der neuen Sub-Or, und setzt sich der Schöpfer als Lizenznehmer + Sub-Manager. - POST **************** schnitzt KamoCRM Konto/sub für ein Mitglied eines bestehenden Unter-Or, optional Übertragung benannter Lizenznehmer. Nur Org-Besitzer-nur. AccountController Routen Drop isLicensee / canwalageSubskription von der Konto-Level-Kunden Nutzlasten - diese Flaggen leben jetzt auf Abonnementsmitglied.
· InitializerService
Mitgliedssprache + default_currency Spalten hinzufügen
Fügt zwei NOT NULL Spalten zur Mitgliedertabelle hinzu, die die neue Member.language (VARCHAR DEFAULT 'ENGLISH') und Member.defaultCurrency (VARCHAR(10) DEFAULT 'USD') Felder. Bestehende Reihen werden auf die Standardmäßig ist die NOT NULL Einschränkung ohne Ausfallzeit befriedigt Fenster.
· kamo-register
Sprachschritt hinzufügen, Land Zeitzonen-Picker, scroll + *** Korrekturen
- Neuer 'Meine Sprache' Schritt vor dem Assistenten, Spiegelung des Landes Schritt-Layout. Listet die 22 marketing-unterstützten Lokale als Flag-Fliesen mit nativem Namen + Englischer Tooltip; Vorwähler von navigator.languages. - 'Mein Land' Schritt sammelt jetzt eine Zeitzone neben dem Land, zahlungsunfähig von ************ und editierbar vor Als nächstes. Beide Felder sind erforderlich, um voranzukommen. - Registrierungsstelle sendet jetzt Sprache/Zeitzone (plus das bestehende Land) auf den /registr Endpunkt, damit sie auf dem neuen Mitglied beharrt werden. - Fix: Sicherheitsfragen Schritt Inhalt kann jetzt vertikal scrollen Schritt war der einzige ohne Überlauf-Container, so lange Kataloge schob die dritte Frage aus dem Bildschirm. - Betätigen: Beenden-Button bleibt nicht mehr deaktiviert, wenn *** auto-verifies bevor unser Zuhörer anheftet. Ersetzen Sie die 100ms gesetztTimeout-Rennen mit einem Umfrage-bis-mounted anhängen, die auch entwässert den aktuellen Zustand des Widgets auf für späte Zuhörer anhängen.
· kamo-internal
Sprache + Standardwährung zu Regional Settings Karte hinzufügen
Die Regionale Einstellungskarte des Mitgliedsprofils stellt jetzt editierbare Sprache frei (22 unterstützte Locales, die die Marketing-Website spiegeln) und Default Currency (durchsuchbares Autocomplete) neben Timezone. Alle drei sparen zusammen über PUT /api/security/members/{id'. Ansichtsmodus zeigt den Namen der Muttersprache mit Englisch in Klammern, dazu das Währungssymbol und den vollständigen Namen.
· SecurityService
Persist Mitgliedschaft Sprache/Zeitzone/währung auf Anmeldung
Der /register Endpunkt akzeptiert nun Sprache, Zeitzone und Default-Wurde neben dem bestehenden Länderfeld. RegistrierungService setzt Land und Zeitzone auf den neuen Benutzer und wendet alle vier regionalen Felder an frisch geschaffenes Mitglied, das die Standardwährung aus der Landeswährung ableiten Primärwährungskartierung, wenn man nicht geliefert wird (und zurückfällt auf USD).
· kamo-shared-library
Karte externe Kundenadresse blockiert in KontoAdresse am Pull
AdapterAddressMapper Helfer hinzufügen, der einen JSON-Adressknoten von jedem konvertiert Anbieter in eine EmbAddress und legt es an ein Konto als getippt AccountAddress (SHIPPING/BILLING). Den Helfer in die vier Adapter übersetzen, deren Kundenendpunkte freilegen Adressblöcke: - ShopifyCustomerAdapter: default_address geht an beide Versand+Billing, Restadressen[] werden zu Versandaufzeichnungen - WooCommerceCustomerAdapter: Abrechnungsblock -- BILLING, Versandblock -- SHIPPING - BigCommerceCustomerAdapter: Adressen[] aufgeteilt nach address_type - MagentoCustomerAdapter: Adressen[] aufgeteilt durch ************ ids Adapter ohne Adressdaten in der Kunden-Naploads (Ecwid, Wix, Shift4Shop, PrestaShop, OpenCart, Squarespace) kompilieren weiterhin unverändert.
· kamo-internal
/account/new copy-from-lead UX, vollständige Namensfelder, Dual Phones, Adresse; Account-Level-Adressverwaltung
Frontend: - /account/new: pro Abschnitt "Kopieren von Lead" Button + Kopf "Kopierlich alles von Blei"-Button (wenn leadId param) - Name Abschnitt: Präfix, zuerst, Mitte, Last, Suffix - Dual-Telefone (persönliche + Arbeit) mit Erweiterung und "Text erlauben" umschalten - Adress-Sektion mit EmbAddress-Form (Linie1, Details, Stadt, Unterteilung, Post, Land) mit "Verwendung auch" umschalten (Standard) - Einsendet name/email/phoneNumbers passende Backend - accountsApi: getippter AccountName, AccountPhoneNumbers, AccountAddress; neue Methoden: getAddresses, addAddress, updateAddress, deleteAddress, setPrimaryAddress - AccountViewClient: Primärversandadresse aus neuen Adressen-Array anzeigen
· SecurityService
Unterstützung verschachtelter Name/E-Mail/TelefonZahlen + Adressverwaltung Endpunkte
- AccountController akzeptiert verschachtelten Namen/E-Mail/Telefonnummern JSON auf POST/PUT - Erste Adresse auf POST erstellt SHIPPING (und BILLING, wenn useAsBillingToo-Set), setzt primäre Hinweise - Hinzufügen von 5 Adressen Endpunkte: GET, POST, PUT, DELETE Adressen; PUT /addresses/{id'/primary - Kontoübersicht/Detail-Belichtungsobjekt, TelefonNumbers-Objekt, Versand/Rechnungsadressenlisten, Primärzeiger-Zeiger - Drop Account-Level-Notizen Field Referenzen (Account.notes wurde früher entfernt)

Euer Universum wartet.
Fügen Sie Produkte hinzu, wann immer Sie möchten – keine Migration, keine neuen Anmeldungen.
Für immer kostenlos – keine Kreditkarte erforderlich