Changelog
Ce qui est nouveau.
Chaque amélioration apportée à la plateforme, à mesure qu'elle est livrée.
· kamo-marketing
Ajouter Flowroute à la page du centre d'intégrations
· kamo-marketing
Ajouter Flowroute à INTEGRATED AVEC la bannière
· kamo-internal
Afficher l'état précis de la connexion du fournisseur à partir du champ connecté
Remplace l'ancienne logique qui a montré "Connected" pour n'importe quel fournisseur sans synchronisation erreur (y compris les fournisseurs flamboyants qui n'ont jamais été testés). Nouveau badge à trois états piloté par est connecté (nulle/vrai/faux): - null/jamais testé - gris "Non testé" (HelpOutlineIcon) - faux et rouge "Non connecté" (ErrorOutlineIcon) - true - erreur de synchronisation - ambre "Erreur de synchronisation" (WarningAmberIcon) - true et vert "connecté" (CheckCircleIcon) - RingCentral no OAuth et ambre "Needs reauth" (inchangé)
· VOIPService
Résultat du test de connexion persisté à champ connecté
- test() écrans d'évaluation est connecté/faux à DB après chaque bilan de santé - update() resets est connecté à nul lorsque la configJson change (les paramètres de vérification peuvent être modifiés). ont changé, nécessitant un nouvel essai avant de montrer Connected) - toDto() expose est connecté de sorte que le frontend peut distinguer: jamais testé / Connecté/non connecté
· kamo-shared-library
Ajouter champ connecté à VoipProviderInstance
Booléen nul: nul - jamais testé, vrai - le dernier test est passé, faux - a échoué. Exige de la migration du schéma KamoInitializerService pour ajouter la colonne IS-CONNECTED.
· kamo-marketing
Montrez une bannière d'offre active avec compte à rebours en direct milliseconde
Fetfond le côté serveur de promotion actif sur la page d'accueil et rend un HeroOfferBanner entre le sous-titre et l'appel gratuit pour toujours. La bannière indique le montant de la remise, la durée et un compte à rebours réel à 50 ms) avec un animation Bordure à gradient-glow et balayage en brillance. Ne rend rien lorsqu'il n'y a pas d'activité ou de promotions non expirées.
· kamo-internal
Fil disponible/Indisponible passant au backend et correction du bogue de la présence OFFLINE
- Renommé la puce sous-couronne/active disponible/indisponible dans NavTop - S'assurer la disponibilité initiale sur le monture et les bascules via l'API nouvelle me/disponibilité - Ajouter champ isdisable à l'interface membre et MemberItem prop - MemberListpasss isDisponible de la réponse par le département à MemberItem - L'article membre montre l'étiquette EN LIGNE/FAP L'AFTILINE/UNVADIÉ avec une couleur orange pour indisponible - Correction d'un bogue OFFLINE: ajouter un changement de visibilité au rythme cardiaque et une reprise périodique en vrac des 120 s
· SecurityService
Ajouter être disponible à la réponse par département et aux critères d'évaluation de la disponibilité
· InitializerService
Le remblai est disponible. VRAI pour les membres existants.
· kamo-shared-library
Ajouter un champ disponible pour la mise à la disposition des membres
· kamo-internal
Supprimer l'onglet Access et les domaines et le composant DomainManager
· kamo-marketing
Insigne d'une lecture en direct et rebond sur un nouveau message d'agent
- Maintient LiveSupportPanel monté hors écran pendant que le widget est minimisé (uniquement lorsqu'une session de soutien existe) de sorte que l'abonnement STOMP reste vivants et sur UnreadMessage feux pour les messages entrants de l'agent même lorsque le visiteur ne regarde pas le chat. - Anime l'insigne avec une échelle de printemps sur chaque changement de comptage (clé astuce remonte l'élément) plus un pingon de taillet continu pendant le temps. - Rebondit et incline la languette minimisée elle-même chaque fois que le compte monte, Et le teinte en rouge avec une lueur de sorte qu'il attire l'attention de l'autre côté de la page. - handleExpand efface déjà le comptage sur ouvert, donc aucun changement n'est nécessaire Là.
· MediaService
Diffusé en attente de comptage - non lu sur l'agent lire - envoyer un visiteur
- - maintenant délégués à - donc le compte reflète les sessions avec des messages de visiteurs non lus et des diminutions lorsque agent appelle marqueAsRead. - Nouveau public et aide. - - maintenant a) re-rediffusion de l'agent par session non lue charge utile après la dernière mise en garde et b) appelle Aidez-vous donc le navtop SupportButton reste en synchronisme sans attendre le prochain sondage des années 60. - - appelle aussi l'assistante de sorte que le les bosses de l'ordinateur navable vivent lorsqu'un visiteur envoie. Le nombre d'ordinateurs à moto correspond maintenant à l'état de badge par ligne immédiatement après clic et après un rafraîchissement du navigateur.
· kamo-shared-library
Nombre non lu et aide à la recherche par session
Ajout - donc le topbe La badge de soutienButton peut compter les tickets d'assistance qui ont réellement besoin attention (ne pas louer les messages des visiteurs) au lieu de PRE-TICKET/NEW statut. Le compte est lu directement à partir du DB afin qu'il survive à un rafraîchissement. Ajout également de MediaService peut résoudre l'org propriétaire à partir d'un GUID de session après markAsRead.
· KlusterServices
Ajouter des supports à la liste de provisionnement des sous-domaines
· kamo-internal
Ajouter un sous-domaine multimédia aux alias DNS requis
· kamo-internal
Ajouter la colonne d'emplacement au réseau de données sur les billets
Lire directement sur le supportTicketDTO (maintenant instantané sur l'entité du billet à l'adresse suivante: temps de création - pas d'aller-retour supplémentaire). Drapeau des rendus - ville/région/pays avec l'IP montré en infobulle; retombe dans un tableau em lorsqu'il n'y a pas de données géographiques est sur le billet. Le point de vue de l'agent uniquement. TicketHeader consomme déjà les mêmes champs DTO, donc l'outil pop-up La fenêtre montre maintenant l'instantané aussi - pas de GeoLite ou de table ronde des visiteurs lire sur le rendu.
· kamo-shared-library
Snapshot visitor geo sur l'entité de billetterie
Ajout du VISITOR-IP-ADDRESS, VISITOR-COUNRY-CODE, VISITOR-COUNTRY-NAME, Colonnes VISITOR-CITY, VISITOR-SUBDIVISION. Capturé lors de la création des billets de sorte que les points d'extrémité de la liste/détail n'ont jamais à faire un balayage de l'aire de répartition GeoLite ou une consultation séparée de la table des visiteurs à l'heure de lecture. KamoInitializerService (hibernate.ddl-auto: update) ajoutera le les colonnes lors de la prochaine course; les lignes existantes retombent dans le procès-verbal du visiteur Country StockéCode dans toDTO.
· MediaService
Ajouter /ws/public-chat-natif webSocket à côté de SockJS
Enregistre un deuxième critère d'évaluation STOMP sans SockJS à /ws/public-chat-natif de sorte que le frontend peut se connecter à une prise WebSocket native (brokerURL) sans en avoir besoin la bibliothèque sockjs-client, qui enregistre un gestionnaire de déchargement qui viole le Autorisations-Policy du site. Le critère d'évaluation original/ws/chat public SockJS est conservé. pour la rétrocompatibilité.
· kamo-internal
Bader à perticket non lue et filtre « Nouveaux messages seulement »
- La liste des billets montre une badge de bulles de discussion avec le compte non lu à côté de chaque fois que la session a des messages plus récents que ceux de l'agent dernier message visualisé. - Ajoute un commutateur de filtre "Nouveaux messages seulement" à la barre de filtrage. - TicketChat est maintenant appelé - sur initiale charger et chaque fois qu'un message entrant arrive, donc le badge s'éclaircit comme l'agent lit la conversation. S'appuie sur le changement de bibliothèque kmo-partred qui s'élargit findChatMembershipsPar MemberId pour inclure les sessions SUPPORT-TICKET, plus la diffusion de MediaService en z
· MediaService
Diffuser non lu compte de l'agent sur le message adressé aux visiteurs
Après qu'un visiteur a envoyé un message de soutien, poussez les derniers comptes non lus charge utile à - donc la liste des billets de l'agent la mise à jour du compteur de badge et de navtop en temps réel. Rétroviseurs de l'émission dans MediaController.sendMessage pour les discussions entre membres.
· kamo-shared-library
Inclure les sessions de SUPPORT-TICKET dans la requête d'adhésion non lue
findChatMembershipsByMemberId retourne maintenant des adhésions pour le CHAT et Types de sessions SUPPORT-TICKET, de sorte que le nombre de participants par membre non lu infrastructure (et unreadCountsByMember, /topic/chat/unread/memberId) diffusions, GET et couvertures automatiques Des tickets d'assistance aussi. Les agents voient les indicateurs de nouveau-message par billet dans la liste des billets et un badge total non lue combiné dans le top pour le dessus.
· KlusterServices
Production infaillible2ban avec les prisons du PJSIP et l'état persistant
- Ajouter fail2ban-configmap.yaml avec [asterisk et [freepbx-web, l'augmentation progressive de l'interdiction (1h-24h-30d plafond), LAN ignoreip, et a Fil de filtre asterisk-security.conf ciblé PJSIP SecurityEvent records - Mount fail2ban-config ConfigMap et hostPath /var/lib/pbx/fail2ban (ban) l'état persiste à travers les redémarrages de la nacelle) dans les déploiements k1m1 et k2m1 - Configts de fils dans startup.sh avant le démarrage du client fail2ban-client sur les deux nœuds
· kamo-shared-library
Ajouter resetHastachmentsForFolder requête à ConversationRepository
Permet la synchronisation à réinitialiser les drapeaux de fixation avant de réindexer. Une détection MIME corrigée peut reconstruire le champ à partir de données de fixation réelles.
· KlusterServices
Intégrer Coqui TTS avec la voix norman (VCTK p267)
- Déployer un serveur coqui-tts (modèle VCTK VITS, CPU uniquement) en tant que service ClusterIP sur le port 5002 avec cache modèle à /var/lib/coqui-tts sur k1m1 - Injectez coqui-tts.agi dans /var/lib/assèche-blocs sur chaque botte: appelle l'API HTTP, cache 8 kHz mono WAV sous sons/coqui-tts/, flux par l'intermédiaire d'AGI STREAM FILE - utiliser AGI(coqui-tts.agi,texte) dans n'importe quel contexte d'analyse - Écrire say.conf sur chaque boot pour acheminer toutes les fonctions de l'Astérisque intégrées (chiffres, chiffres, dates, heures) par l'intermédiaire de Coqui TTS
· KlusterServices
Ajouter LAN DNS gousse pour DNS split-DNS sur k1m1
Déployer un dnsmasq pod avec hostNetwork sur k1m1 qui écoute 192.168.4.22:53. Désirce pbx.k1.kluster.kamocrm.com Les téléphones LAN atteignent le PBX directement sans épingle à cheveux NAT. Tous les autres Les questions sont transmises au 8.8.8.8/8.8.4.4. Le routeur DHCP doit être pointé vers 192.168.4.22 comme le serveur DNS principal. pour que les clients LAN prennent ce point.
· kamo-internal
Onglets de configuration de la plate-forme (Général / VOIP et SMS / Utilisateur de système / Avancé)
Enveloppe et dans ParamètresView avec quatre onglets: - Généralités: aperçu de la plate-forme en lecture seule - total, serveur téléphonique actif nombre d'instances, nombre d'instances de fournisseur de SMS actifs, dernière synchronisation VOIP globale Timbre-heure. Lire de nouveaux - VOIP et SMS: éditer voipSyncIntervalMinutes (1..1440) et voipSyncEnabled, surface lastGlobalVoipSyncAt, plus un bouton "Run global sync now" qui appelle SecurityService et VOIPService /internal/voip/sync-global. - Utilisateur du système: les subventions existantes de l'utilisateur de l'utilisateur du système, supprimées ConfigurationClient in mot in an textuelle dans un composant d'onglet (pas de changement de comportement). - Avancé: bouton parallèle "Trigger global VOIP sync now" pour ops, plus un message explicite d'état vide pour les futurs contrôles. ConfigurationClient est maintenant un tatouage mince. utiliserPlatformAdminGuard reste en place au niveau de l'orchestre de sorte que les quatre onglets sont fermés.
· DaemonService
Emploi de synchronisation VOIP globale (intervalle adminable)
VoipGlobalSyncJob coche chaque minute et, sur chaque tique, lit le SystemConfiguration singleton pour décider si une synchronisation globale est due: - Si voipSyncEnabled est faux et saut. - Si LastGlobalVoipSyncAt et voipSyncIntervalMinutes - maintenant - sautez. - Sinon : POST /internal/voip/sync-global à VOIPService avec le En-tête InternalAuthFilter; mettre à jour lastGlobalVoipSyncAt sur le succès. Cela permet aux opérateurs de plate-forme d'ajuster la cadence au moment de l'exécution à partir de VOIP : SMS sans redémarrer DaemonService ou touchant des expressions cron. Inscrite à QuartzConfig en marge des emplois existants. k8s/configmap.yaml ajoute la tic cron (par défaut de 1 minute) et kamo.services.voip.base-url interne.auth.secret donc l'appel HTTP sortant peut authentifier.
· SecurityService
Critères d'évaluation de la configuration du système et de la plate-forme-examen
Surface de configuration à l'échelle de la plate-forme, fermée par le propriétaire de haut niveau existant Garde (matches SystemUserConfig's requireTopLevelOwner pattern). Critères d'évaluation: GET /api/security/system-config et retour singleton row - PUT /api/security/system-config et mise à jour voipSyncIntervalMinutes / voipSyncEnabled. Mises à jour partielles appuyés; validation intervalle 1..1440 minutes. GET/api/sécurité/élévation de la plateforme et des statistiques agrégées (total, les nombres d'instances de téléphonie active/de gestion de marché, last syncempomètre amincissement, courant intervalle - drapeau activé). - POST Appels VOIPService /internal/voip/sync-global via InternalAuththFilter (interne auth secret) de sorte que les opérateurs de plate-forme peuvent déclencher une synchronisation VOIP globale à la demande de la nouvelle configuration de la plate-forme, la configuration VOIP, l'onglet SMS / onglet Avancé. Config: - kamo.services.voip.base-url (par défaut à VOIPService cluster-local service URL). - Reuses existantes interne.auth.secret.
· VOIPService
Contrôleurs de ressources par instance - org ag - synchronisation interne
Persibilités CRUD (extensions / utilisateurs / appareils / messagerie vocale): - VoipExtensionsContrôleur à VoipUsersContrôleur à /api/voip/instances/zid/utilisateurs - VoipDevicesContrôleur à - VoipVoicemailContrôleur à l'adresse suivante: - Chaque GET accepte 'rafraîchir 'vraisons de force de la part du fournisseur et de la cache de rafraîchissements; D'autre part, il sert à partir du cache local pour l'interface utilisateur d'utilisateurs. - Chaque chemin d'écriture appelle le fournisseur ET renforce le cache local de sorte que les vues restent cohérentes sans attendre la prochaine synchronisation programmée. - La messagerie vocale GET /-vmId/audio diffuse l'audio brut de l'utilisateur via Streaming ResponseseBody pour que l'UI puisse 'audio src'... . . . . . . . . . . . . . . . . . . . Org-aggregate (VoipOrgAggregateController at /api/voip/org): - /extensions, /utilisateurs, /dispositifs, /voicemails renvoient des lignes sur chaque instance avec les pilules d'instance, instanceNo. UI les rend dans le cadre de l'agglomération onglets/réglages/caractéristiques/téléphone. - /restauration de santé ContrôleHealth() sur chaque instance active en parallèle par instance (via les comptes mis en cache de InstanceSyncService), retourne InstanceHealthDto[. - POST/sync exécute InstanceSyncService contre chaque instance active de la l'ordre de courant. Augmente le bouton de niveau locataire "Synchroniser cet org maintenant" dans l'UI. Synchronisation interne (VoipInternalSyncController): - POST /internal/voip/sync-global boucles toutes les instances actives à l'échelle de la plate-forme. Appelé par l'emploi de Quartz prévu par DaemonService. Protégé par les InternalAuthFilter dans VOIPService. Construit en vert.

Votre univers vous attend.
Commencez gratuitement en quelques minutes. Ajoutez des produits quand vous êtes prêt. Pas de migration, pas de nouvelles connexions.
Gratuit pour toujours — aucune carte de crédit requise