Changelog
Qué hay de nuevo.
Cada mejora de la plataforma, a medida que se envía.
· kamo-marketing
Añadir Flowroute a la página de centro de integraciones
· kamo-marketing
Añadir Flowroute a INTEGRATED CON banner
· kamo-internal
Mostrar el estado de conexión del proveedor preciso desde el campo está conectado
Sustituya la vieja lógica que mostraba "Conectada" para cualquier proveedor sin sincronización error (incluyendo nuevos proveedores que nunca fueron probados). Se ha conectado nueva insignia de tres estados impulsada por isConnected (nula/verdad/falso): - null / nunca probado . gris "No probado" (HelpOutlineIcon) - falso rojo "No conectado" (ErrorOutlineIcon) - true . error de sincronización á ámbar "Error de Sincronización" (WarningAmberIcon) - verdadero "Conectado" verde (CheckCircleIcon) - RingCentral no OAuth Amber "Needs reauth" (sin cambios)
· VOIPService
Resultado de la prueba de conexión persista es campo Connected
- prueba() salvadas de endpoint isConnected=true/false a DB después de cada chequeo médico - actualización() reintenimiento está conectado a nulo cuando se cambia la configuraciónJson (credenciales pueden han cambiado, requiriendo una nueva prueba antes de mostrar Connected) - toDto() las exposiciones se Conectó para que el frontend pueda distinguir: nunca probado / conectados / no conectados
· kamo-shared-library
Añadir es Campo conectado a VoipProviderInstance
Nullable Boolean: null = nunca probado, true = última prueba pasada, false = fallido. Requiere KamoInitializerServicemigración del esquema para añadir la columna IS-CONNECTED.
· kamo-marketing
Mostrar en activo banner con cuenta atrás de milisegundo en vivo
Trae el lado del servidor de promoción activa en la página de inicio y renderiza un HeroOfferBanner entre la subdirectora y la llamada de free-forever. El banner muestra el monto de descuento, la duración y una cuenta rejista en vivo ************* a 50ms) con un animado borde de gradiente-brillo y barrido brillante. No se devuelve nada cuando no hay actividad o no-expiró la promoción.
· kamo-internal
Alambre disponible/Cambio no disponible para backend y arreglar el fallo de la presencia de OFFLINE
- Renombre Chip Pausado/Activo para Disponible/Undisto en NavTop -Echaje la disponibilidad inicial en el montaje y persista conmutar a través de nueva yo/disponibilidad API - Añadir es un campo disponible a la interfaz de los miembros y miembroItem prop - Los pases de publicación de la Lista de los Estados Miembros están disponibles de la respuesta departamental a MemberItem - MemberItem muestra la etiqueta ONLINE/OFFLINE/UNAVAILABLE con color naranja para no estar disponible - Arregir el fallo OFFLINE: añadir visibilidadchange latidos del corazón y 120s a granel periódica re-fetch
· SecurityService
Añadir esDisponible para la respuesta por departamento y yo/puntos de endo de disponibilidad
· InitializerService
Backfill is-available = TRUE para los miembros existentes
· kamo-shared-library
Añadir esCaso disponible para la disponibilidad de miembros para conmutar
· kamo-internal
Eliminar la pestaña Acceso y Dominios y el componente DomainManager
· kamo-marketing
En vivo sin leer - rebote en nuevo mensaje de agente
- Mantenga LiveSupportPanel montado fuera de pantalla mientras el widget se minimiza (úbda cuando existe una sesión de soporte) por lo que la suscripción STOMP se queda con vida y enUnreadMessage se dispara para los mensajes de agente entrantes incluso cuando El visitante no está mirando la charla. - Anima la insignia con una escala de primavera en cada cambio de cuenta (truco clave remonta el elemento) más un anillo de ping Tailwind continuo mientras que más de 0. - Rebotes e inclina la pestaña minimizada en sí cada vez que sube el conteo, y lo tire rojo con un resbrillo para que atrapa la atención del otro lado de la página. - handleExpand ya despeja la cuenta abierta, así que no se necesita ningún cambio necesario Ahí.
· MediaService
Transmisión pendiente de recuento y sin leer en agente read & visitante enviar
- **************** ahora los delegados a ************* por lo que el conde refleja sesiones con mensajes de visitante sin leer y decrementos cuando el agente llama marcaAsRead. - Nuevo público **************** ayudante. - ************* ahora (a) retransmitir el agente la carga útil no leída de la sesión después de los últimos avances de la vista y (b) llama a la ayuda para que el navtop SupportButton se quede en sincronía sin esperar la siguiente encuesta de los años 60. - ************* también llama al ayudante así que el Los babos de navtop en vivo cuando un visitante envía. El conteo de navtop coincide ahora con el estado de la insignia por fílgara de inmediato. después de hacer clic y después de una actualización del navegador.
· kamo-shared-library
Conteo basado en la lectura y ayudante de buscar por sesión
Añade ************* por lo que el navtop El distintivo SupportButton puede contar los boletos de apoyo que realmente necesitan atención (tenga mensajes de visitante sin leer) en lugar de sólo PRE-TICKET/NEW estado. El conteo se lee directamente del DB por lo que sobrevive a una refresca. También añade **************** por lo que MediaService puede resolver el propietario de org de una sesión GUID después de MarkAsRead.
· KlusterServices
Añadir los medios de comunicación a la lista de aprovisionamiento de certificados de subdominio
· kamo-internal
Añadir subdominio de medios a los a alias DNS requeridos
· kamo-internal
Añadir Columna de ubicación a la red de datos ticket
Lee ******************* directamente fuera de SupportTicketDTO (sinapshot de nieve en la entidad del boleto en tiempo de creación, sin viaje extra de ida y vuelta). Bandera de las densas - ciudad/región/país con la IP mostraba en una punta de herramienta; cae de nuevo a un em-dash cuando no hay datos geo está en el billete. Sólo la vista de la Agente. TicketHeader ya consume los mismos campos de DTO, por lo que la herramienta emergente window muestra la instantánea también. No GeoLite o visitante-mesa lee en render.
· kamo-shared-library
Entrada visitante geo en entidad de boletos
Adds VISITOR.IP-ADDRESS, VISITOR-COUNTRY-CODE, VISITOR-COUNTRY-NAME, VISITOR-CIDAD, columnas VISITOR-SUBDIVISION. Capturado en la creación de entradas por lo que los endpoints de la lista/detalle nunca tienen que hacer un escaneo de la gama GeoLite o una mirada de mesa de visitante separada a la hora de la lectura. KamoInitializerService (hibernate.ddl-auto: update) añadirá el columnas cuando se ejecuten a continuación; las filas existentes vuelven a la de los visitantes paísCode en la DTO.
· MediaService
Añadir /ws/public-chat-native plain WebSocket endpoint junto a SockJS
Registre un segundo punto final STOMP sin SockJS en /ws/public-chat-native para que el frontend puede conectarse con un WebSocket nativo (brokerURL) sin necesidad de la biblioteca de calcelos-cliente, que registra un manejador de descargas que viola el Permisos-Policy del sitio. El punto final original /ws/public-chat SockJS se mantiene para la compatibilidad hacia atrás.
· kamo-internal
Insignia de lectura por entradas sin leer
- La lista de entradas muestra una insignia de la burbuja de chat con el conteo sin leer al lado boleto cada vez que la sesión tenga mensajes más nuevos que el del agente. último mensaje visto. - Añade un interruptor de filtro 'solo de mensajes nuevos' a la barra de filtro. - TicketChat ahora llama ************* en la inicial carga y cada vez que llega un mensaje entrante, así que la insignia se borra como el agente lee la conversación. Relies en el cambio de biblioteca compartida de kamo que se amplía findChatMembershipsByMemberId incluir sesiones de SUPPORT-TICKET, además la transmisión de MediaService en ****************
· MediaService
Transmisión no lee cuenta con agente en mensaje de visitante
Después de que un visitante envía un mensaje de apoyo, empuja los últimos recuentos no leídos carga útil a ************* por lo que la lista de entradas del agente identificación y actualización de contador de navtop en tiempo real. Espejos de la emisión en MediaController.sendMensaje para chats de miembros a miembros.
· kamo-shared-library
Incluya sesiones de SUPPORT-TICKET en consulta de membresía no leída
findhatMembershipsByMemberId ahora devuelve membresías tanto para CHAT como Tipos de sesión de APOORT-TICKET, por lo que el actual recuento no leído por miembros infraestructura (getUnreadCountsByMember, /topic/chat/unread/-memberId. emisiones, GET ************* portadas automáticamente boletos de apoyo también. Lets agentes ver indicadores de nuevo mensaje por boleto en la lista de entradas y una insignia total combinada sin leer en el navtop.
· KlusterServices
Falla la producción en cárceles de PJSIP y estado persistente
- Añadir fall2ban-configmap.yaml con [asterisk] y [freepbx-web] jails, Escalada de prohibición incremental (1h-24h-30d techo), LAN ignoreip, y a personal personal asterisk-security.conf filtro apuntando registros PJSIP SecurityEvent - Montar fail2ban-config ConfigMap y hostPath /var/lib/pbx/fail2ban (ban Estado persiste a través de reinicios de vainas) tanto en despliegues k1m1 como k2m1 - Configs de alambre en startup.sh antes de falla2ban-cliente comienzo en ambos nodos
· kamo-shared-library
Añadir resetHasAttachmentsForFolder consulta a ConversationRepository
Permite la sincronización para restablecer las banderas de los adjuntos rane antes de volver a indexar La detección corregida de MIME puede reconstruir el campo a partir de datos de adjuntos reales.
· KlusterServices
Integrar Coqui TTS con voz norman (VCTK p267)
- Implemente servidor de coqui-tts (modelo VCTK VITS, solo CPU) como servicio de ClusterIP en el puerto 5002 con caché modelo a /var/lib/coqui-tts en k1m1 - Inject coqui-tts.agi en /var/lib/asterisk/agi-bin en cada bota: llama HTTP API, aliché 8 kHz mono WAV bajo sonidos/coqui-tts/, streams A través de AGI STREAM FILE - use AGI(coqui.tts.agi,text) en cualquier contexto de dialplan - Escribir say.conf en cada bota para enrutar todas las funciones de asterisk incorporadas-in decir (digitales, números, fechas, horarios) a través de Coqui TTS
· KlusterServices
Añadir LAN DNS pod para split-DNS en k1m1
Despliegue una pod dnsmasq con hostNetwork en k1m1 que escucha en 192.168.4.22:53. Sobre-eschugas pbx.k1.kluster.kamocrm.com - 192.168.4.22 Así que los teléfonos LAN llegan directamente al PBX sin horquilla NAT. Todos los demás Las consultas se remiten a 8.8.8.8.8.8.8.4.4. El route DHCP debe apuntarse a 192.168.4.22 como el servidor DNS primario para los clientes de LAN recoger esto.
· kamo-internal
pestañas de configuración de la plataforma (General / VOIP & SMS / Usuario del Sistema / Advanced)
Envuelve ************* en SettingsView con cuatro pestañas: - General: vista general de la plataforma de sólo lectura - orgs totales, servidor telefónico activo conteo de casos, conteo activo de instancia de proveedor SMS, última sincronización global VOIP Estampilla de tiempo. Lee de nuevo **************** - VOIP & SMS: edit voipSyncIntervalMinutes (1..1440) y voipSyncEnabled, superficie lastGlobalVoipSyncEn, además de un botón "Run global sincronización ahora" que llamadas SecurityService - VOIPService /internal/voip/sync-global. - Usuario del Sistema: Usuarios de Acceso al Usuario existente UI, levantado de ConfiguraciónClient literalmente en un componente de pestañas (sin cambio de comportamiento). - Avanzado: botón paralelo "Trigger global VOIP sincroniza ahora" botón para operaciones, además de un mensaje explícito de estado vacío para futuros controles. ConfigurationClient es ahora un orquestador de tabsinas delgada. usePlatformAdminGuard permanece en su lugar a nivel de orquestador por lo que las cuatro pestañas están cerradas.
· DaemonService
Trabajo global de sincronización VOIP (intervalo a laminación-tunable)
VoipGlobalSyncJob se marca cada minuto y, en cada garrafa, lee el SystemConfiguration singleton para decidir si se debe una sincronización global: - Si voipSyncEnabled es falso. - If lastGlobalVoipSyncEn voipSyncIntervalMinutes, ahora skip. - De lo contrario: POST /internal/voip/sync-global a VOIPService con el InternaAuthFilter header; actualización lastGlobalVoipSyncEn el éxito. Esto permite a los operadores de plataformas ajustar la cadencia en tiempo de ejecución desde ******************* . VOIP & SMS sin reiniciar DaemonService o conmovedoras expresiones cron. Registrado en QuartzConfig junto con los trabajos existentes. k8s/configmap.yaml añade el cron de garra en una letra (1 minuto por defecto) y kamo.services.voip.base-url interno.auth.secret para que la llamada HTTP saliente pueda autenticarse.
· SecurityService
Sistema-config . platform-overview endpoints
Superficie de configuración de ancho de plataforma, cerrada por el propietario de alto nivel existente guardia (parejas SystemUserConfigController's requireTopLevelOwner patrón). Puntos finales: - GET /api/security/system-config . - PUT /api/security/system-config , update voipSyncIntervalMinutes / voipSyncEnabled. Actualizaciones parciales de apoyo; aplicación de la validación intervalo 1,.1440 minutos. - GET /api/security/platform-overview . Estadísticas agregadas (orgs totales, conteo de instancia de teléfono activa/SMS, última sincronización, actual intervalos y bandera activada). - POST ************* Llamadas VOIPService /internal/voip/sync-global via InternalAuthFilter (internal secreto) para que los operadores de plataformas puedan despedir una sincronización global de VOIP a petición de la nueva configuración de la plataforma de la pestaña VOIP y SMS / Pestaña Avanzada. Config: - kamo.services.voip.base-url (fals a VOIPService cluster-local service URL). - Reutiliza internamente.auth.secret.
· VOIPService
Controladores de recursos por insperance . org aggregate .
Recurso de instancia CRUD (extensiones / usuarios / dispositivos / buzón de voz): - VoipExtensionController en ************* - VoipUsersController at /api/voip/instances/.id/users - VoipDevicesController en **************** - VoipVoicemailController en **************** - Cada GET acepta ?refresh=true para forzar latch de proveedor y refrescar la caché; de lo contrario sirve desde caché local para la interfaz de usuario. - Cada ruta de escritura llama al proveedor Y alza caché local para que el agregado Las vistas se mantienen consistentes sin esperar a la siguiente sincronización programada. - Voicemail GET /-vmId-/audio transmite el audio crudo del proveedor a través de StreamingResponseBody para que la interfaz de usuario pueda "audio src=..." directamente. Org-aggregate (VoipOrgAggregateController at /api/voip/org): - /extensiones, /usuarios, /dispositivos, /voicemails devuelve filas a través de cada instancia con píldoras de instanceName. La interfaz de usuario las convierte en el agregado pestañas en /settings/caractericidad/phone. - /health runs checkHealth() en cada instancia activa en paralelo por-instancia (a través de los recuentos en caché de InstanceSyncService), devuelve InstanceHealthDto[]. - POST /sync runs InstanceSyncService contra cada instancia activa de la actual org. Aporta el botón de nivel de inquilino "Sync this org now" en la interfaz de usuario. Sincronización interna (VoipInternalSyncController): - POST /internal/voip/sync-global bucles todas instancias activas plataforma en toda la plataforma. Llamado por el trabajo programado de Quartz de DaemonService. Protegido por la InternaAuthFilter en VOIPService. Construye verde.

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