Changelog
Qué hay de nuevo.
Cada mejora de la plataforma, a medida que se envía.
· kamo-internal
Disponibilidad de alambreProvider en PresenceWrapper
· kamo-internal
Añadir useDisponibilidadWebSocket ganchón y DisponibilidadContext
· SecurityService
Disponibilidad de miembros de auto-set AVAILABLE en el inicio de sesión, AWAY en logout
· MediaService
Añada el relé NATS-STOMP para el estado de disponibilidad de los miembros
· SecurityService
Actualizar las endpoints de disponibilidad para utilizar MemberDisponibilidadStatus enum
· SecurityService
Añadir DisponibilidadVierir de los editores para actualizaciones de estado de los miembros
· InitializerService
Migrate members.is-disponible para disponibilidad.status enum
· kamo-shared-library
Reemplazar esDisponible de booleano con MemberAdisibilidadStatus enum
· kamo-asterisk-support
Enrich se manifiestan en la carga con datos de Aseca CDR. de llamadas-ID
Añade el enriquecimiento opcional de los CDR de MySQL para que la pestaña de la historia del sufordario pueda exhibir que llamó (o se llamaba). Cuando se configura ASTERISK-CDR-DSN como secreto de Forgejo, el ayudante: - Queries asteriskcdrdb.cdr para el únicoId de la llamada antes de subir - Parses CLID en llamanteIdNum y llamanteIdName - Derivas dirección de llamada (inbound/outbound) de src/dst vs extensión - Incluye un bloque de cdr en el manifiesto de carga El enriquecimiento de los CDR es opt-in y se degrada con gracia: si el DSN está ausente o la búsqueda falla, las subidas proceden sin que se llame-ID (comportamiento existente). Añade go-sql-driver/mysql v1.7.1; Dockerfile corre go mod ordenado para poblar Sue durante la construcción de Docker para que no se necesite una instalación local Go.
· ConversionService
Parse CDR campos de identificación de la carga
Cuando el kamo-astorisk-support incluye una sección de cdr en la carga manifiesto (poblado cuando se configura ASTERISK-CDR-DSN), ConversionService extractos llamanteIdNum, llamanteIdName, callDirection, y disposición y disposición los pasa a través de RecordingMetadata para que la fila de grabación se almacene con contexto completo de identificación de llamadas.
· InitializerService
Añadir columnas de llamadas de CDR-ID a la tabla de grabaciones (pedido 40)
Añada llamaer.id.num, llamada.id.name, llamada.dirección, y llama.result columnas a la tabla de grabaciones para que la pestaña de la historia del suave puede mostrar que llamó sin depender del oleoducto FreePBX CDR disponible.
· kamo-shared-library
Añadir campos de llamadas de CDR a la entidad de grabación
Añade llamanteIdNum, llamanteIdName, llama Direction y llama columnas de resultados a la entidad de grabación para que el kamo-asterisk-support pueda almacenar Asterisk CDR metadatos junto al archivo de audio. GrabaciónMetadata gana emparej campos; un constructor compatible hacia atrás permite pasar a los llamantes existentes null para los cuatro sin cambios.
· kamo-internal
Añadir la opción de método de pago COMP al asistente de pedido de suscripción
COMP es un backend válido PaymentMethod enum valor para cortesía becas de plataforma-admin, pero faltaba del tipo frontend y el mago Sólo se ofreció INVOICE y AUTO-BILL. Añadido COMP a la SubscriptionPaymentMethod union y lo expuso como una opción de radio.
· kamo-internal
Mostrar la plataforma dominio kamocrm en la entrada de dominio personalizado
Superficie el nombre de host activo *.kamocrm.com en el flujo de dominio adicional y detecta dominios personalizados excluyendo URLs kamocrm en lugar de predeterminada-flag solo.
· kamo-internal
Mostrar administrar el botón de dominio para los propietarios de org de alto nivel y los miembros del sistema
· kamo-internal
Mostrar botón de facturación para los propietarios de org sin cuenta
Cuando un propietario abre la cuenta de factura de planes y sin cuentas de facturación existen, exhiba un aviso de bootstrap en lugar de la "contacta tu Mensaje del dueño de org. El botón llama POST /api/security/account/ bootstrap-billing (idempotot) luego vuelve a cargar cuentas sobre el éxito.
· SecurityService
Añadir endpoint de bootstrap-billing para orgs preexistentes
POST ************* desencadenante el mismo Configuración idempotente como gancho de creación de sub-org (BillingSetupService .setupForSubOrgCreation) pero puede ser llamado bajo demanda por un propietario de org. Esto maneja orgs que fueron creados antes del refactor de facturación y por lo tanto, nunca recibió una Cuenta Suscripción.
· kamo-internal
Conversiones de ola 3, solución de retroceso, y auto-traducir CI
- Reemplazar todas las cuerdas inglesas duras con t() llamadas a través de la ola 3 componentes (chat, casa club, apoyo, notas, tuberías, leads, nav, etc.) - Merge wave 3 fragmentos en mensajes/en.json (19 teclas) - Arreglar los valores de marcadores de posición de la sección de casa en en.json (bienvenido, eslogan, texto de piedor, cuentasDesc/networkEnsc interpolación de la UCI) - Arreglar el texto de bienvenida móvil en page.tsx para usar t() en lugar de cuerdas duras - Fix request.ts: profundo-merge English como base para todos los archivos locales, así que Los archivos locales desaparecidos (pre-traz-CI) sirven inglés en lugar de estrellarse, y locales parcialmente traducidos vuelven a inglés por faltar a llaves - Actualización ************* para que coincida con el desmarketing de kamo Patrón de traducir y reconstruir: despliegue inicial . TranslateService port-forward Comprar archivos locales de reconstrucción de la imagen con traducciones.
· kamo-register
Coloque el apodo en línea después del sufijo de nombre en la fila legal de nombres
· kamo-internal
Alambre siguiente-indello con member.language como fuente local
Añade la internacionalización basada en el principio a través de kamo-internal sin URL locale prefixi. Active locale se lee en la galleta kamo-locale, que espeja la preferencia del miembro autenticado en idioma (configurada a través de la Tarjeta de configuración regional en **************** Infraestructura: - i18n/locales.ts, i18n/request.ts: 22 locales compatibles que coincidan con el comercialización de kamo - /api/i18n/set-locale: escribe la galleta kamo-locale - LocaleBootstrap: sincroniza cookie a miembro.language en primera carga autenticada - I18nProviders: aplica el núcleo MUI, x-data-grid, x-date-pickers locales y fecha-fns adaptador locale al lenguaje activo - useFormatters: fecha / número de locale consciente / por ciento / ayudantes relativos a tiempo - MyAccountTab Regional Settings save: escribe la cookie . router.refresh( cuando el usuario cambia su propio idioma - scripts/translate.ts: construcción de lata de la traducción contra TranslateService (Mercado de mercadeo de kamo) - scripts/merge-fragments.ts, ********** herramienta para agregación de fragmentos clave por área en mensajes/en.json Cobertura: - mensajes/en.json semilla con común compartido.*, nav.*, teclas auth.* plus extracción inicial a través de 67 páginas y componentes (sguaje, plomos, comercio, configuración, cuenta, contactos, configuración/caracterices, configuración/miembro, componentes/configuraciones, componentes/herramientas/ai-chat, etc.). Muchas características las superficies todavía necesitan pases de extracción de seguimiento.
· VOIPService
Volver a las grabaciones de imágenes para la historia de la llamada . . . . . . . . .
FreePBX 17 no expone los mensajes de correo de voz a través de REST o GraphQL en esta instalación (el GraphQL vocal de tipo de devolución de buzón de devolución de buzón config, no mensajes, y /admin/api/api/rest/voicemail 404s), y el oleoducto CDR de Asterisk también no está funcional aquí (el error de la DECBC DSN manejado por separado en KlusterServices). Sin estos los pestañas del softphone se dejan vacíos incluso cuando las grabaciones de llamadas/VM existen en el lado de las imágenes. Cuando provider.getCallHistoria o proveedor.getVoicemails no devuelve nada, vuelve a enumerar las filas de listado de la tabla kamo.recordings scoped por (providerInstanceId, extensión, isVm). Los metadatos de llamadas-ID no se llevan a la grabación hoy, así que salimos de/de-Number en blanco. La fila todavía se reproduce a través de la herramienta de juego multimedia a través de la grabaciónId. El filtrado de archivos se conserva a través de ambos caminos por lo que una fila archivada a través de la caché permanece oculta en la recuperación también.
· kamo-shared-library
Pintado Buscando grabación por (instancia, extensión, isVm)
Usado por las pestañas del subidad como la fuente canónica de la verdad para las grabaciones de llamadas y los mensajes de voz cuando el proveedor de aguas arriba no puede enumerarlos, por ejemplo. FreePBX 17 no tiene REST/GraphQL voicemail-message API, y en esta instalación también se romeó el oleoducto CDR de Asterisk (separate ODBC misconfig en KlusterServices).
· SecurityService
Asiento de auto-aprovisionamiento KamoCRM en la creación de sub-org; promoción-propulsor-propiedad de endpoint
DerechoService camina Subscripción Miembro (no AccountMember) para calcular derechos de los miembros - la unión de características entre los subs de licencia activa, más la línea de base libre. El oyente de Redis gana un SUBSCRIPTION:-uid. handler. Nuevo BillingSetupService funciona en dos flujos: - crearOrganización (sub-orgo bajo KamoCRM): auto-crea un KamoCRM-org Miembro del creador, si está ausente, encuentra o crea una cuenta KamoCRM con ese Miembro como principal, abre una cuenta de nivel libreSubscripción apuntar al nuevo sub-org, y asienta al creador como licenciatario sub-gerente. - POST ************* talla un fresco Cuenta/sub de KamoCRM para un miembro de un sub-org existente, opcionalmente transfiriendo licenciatarios. Org-propiedad-sólo. Cae rutas de contabilidadController es Licenciante / canManageSubscripción desde el Cargos de clientes a nivel de cuenta de cuenta - esas banderas ahora viven en SuscripciónMiembro.
· InitializerService
Añadir el idioma de miembro .. . . . . . . .
Añade dos columnas de NO NULL a los miembros que respaldan la nueva Miembro de la lengua (VARCHAR DEFAULT 'ENGLISH') y miembro.defaultCurrency (VARCHAR(10) campos DEFAULT 'USD'). Las filas existentes se vuelven a llenar a la Fáchalos por lo que la restricción NO NULL se satisface sin un tiempo de in down ventana.
· kamo-register
Añadir paso de idioma, el recolector de zona horaria del país, desplazado *** corridas
- Nuevo paso de 'Mi Lengua' preseleccionado al mago, reflejando el país el trazado del paso. Lista los 22 locales apoyados por la comercialización como fichas de bandera con nombre nativo - punta de herramienta en inglés; preseleccionados de navigator.languages. - El paso de 'Mi País' ahora recoge una zona horaria junto al país, incuistida de ******************* y editable antes Siguiente. Ambos campos están obligados a avanzar. - El organismo de registro envía ahora idioma/zona de tiempo (más el país existente) al punto de final /registrado por lo que persisten en el nuevo Miembro. - Arreglado: El contenido de los pasos de seguridad puede ahora desplazarse verticalmente. paso fue el único sin contenedor desbordado, tan largos catálogos Empujó la tercera pregunta fuera de pantalla. - Arregación: El botón final ya no se mantiene inhabilitado cuando *** auto-verifica antes de que nuestro oyente se adhiera. Sustituyó la carrera de 100ms setTimeout con un Encierro hasta la construcción que también drena el estado actual del widget en Adjunto para los oyentes tardíos.
· kamo-internal
Añadir el idioma . moneda por defecto a la tarjeta de configuración regional
La tarjeta de configuración regional del perfil del miembro expone ahora el lenguaje editable (22 locales compatibles que reflejan el sitio de marketing) y Moneda por defecto (searchable Autocomplete) junto a Timezone. Los tres salvan juntos a través PUT /api/security/members/-. El modo de la vista muestra el nombre del idioma nativo con inglés entre paréntesis, más el símbolo de la moneda y el nombre completo.
· SecurityService
Lenguaje de miembro persista/zona/moneda en el registro
El endpoint /registro ahora acepta lenguaje, zona horaria y por defectoCurrency junto al campo del país existente. RegistroService establece país y zona horaria en el nuevo Usuario y aplica los cuatro campos regionales a la Miembro recién creado, derivando la moneda por defecto del país cartografía primariaCuando uno no se suministra (y cayer de nuevo al USD).
· kamo-shared-library
Mapear bloques de direcciones de clientes externos en AccountAddress en pull
Añadir AdapterDiretrosMapper ayudante que convierte un nodo de dirección JSON de cualquier proveedor en un EmbDireress y lo adjunta a una cuenta como una letra AccountAddress (SHIPPING/BILLING). Alambre del ayudante en los cuatro adaptadores cuyos endpoints de cliente exponen Bloques de dirección: - ShopifyCustomerAdapter: por defecto va a ambos envíos, direcciones restantes[] se convierten en registros de envío - WooCommerceCustomerAdapter: bloque de facturación - BILLING, bloque de envío - . - BigCommerceCustomerAdapter: direcciones[] divididas por campo de dirección. tipo - MagentoCustomerAdapter: direcciones[] dividido por ************* ids Adaptadores sin datos de dirección en sus cargas útiles de clientes (Ecwid, Wix, Shift4Shop, PrestaShop, OpenCart, Squarespace) continúan compilando sin cambios.
· kamo-internal
/cuenta/nueva copia-de-líprincipal UX, campos de nombres completos, dobles teléfonos, dirección; gestión de direcciones a nivel de cuenta
Frontend: - /cuenta/nuevo: por sección "Copiar desde el plomo" botones de la cabecera "Copiar todo desde el botón de plomo" (cuando deportarEjeceo param) - Sección de nombres: prefijo, primero, medio, último, sufijo - Teléfonos dobles (trabajo personal) con extensión y "Permitir texto" desorden - Sección de direcciones con forma de EmbDireress (line1, detalles, ciudad, subdivisión, postal, país) con "Use como facturación también" desfavorecido (por defecto) - Enviar nombre anidado/email/phoneNumbers payloads matching backend - cuentasApi: cuenta mecanografiada, AccountPhoneNumbers, AccountDirección; nuevos métodos: getAddresses, addAddress, updateDirección, deleteAddress, setPrimaryAddress - AccountViewClient: rendere la dirección de envío primaria desde el array de direcciones nuevas
· SecurityService
Soporte Nombre anidado/email/phoneNumbers - dirección de gestión de variables
- AccountController acepta nombre anidado/email/phoneNumbers JSON en POST/PUT - Dirección inicial en POST crea SHIPPING (y BILLING cuando se usaAsBillingToo set), establece punteros primarios - Añadir 5 direcciones endpoints: GET, POST, PUT, direcciones DELETE; PUT /addresses/-id-primario - Resumen de cuenta/detalla deje de exponer objeto, teléfonoNumbers objeto, envío/distribución de direcciones, punteros primarios - Referencias de campo de notas a nivel de cuenta (las notas de cuentas se eliminó anteriormente)

Tu universo está esperando.
Comience gratis en minutos y agregue productos cuando esté listo, sin migración ni nuevos inicios de sesión.
Gratis para siempre: no se requiere tarjeta de crédito