变更记录
什么是新的。
平台的每一个改进,随着它的出货。
· kamo-marketing
Add Flowroute to integrations hub page
· kamo-marketing
Add Flowroute to INTEGRATED WITH banner
· kamo-internal
Show accurate provider connection status from isConnected field
Replaces the old logic that showed "Connected" for any provider with no sync error (including brand-new providers that were never tested). New three-state badge driven by isConnected (null/true/false): - null / never tested → grey "Not tested" (HelpOutlineIcon) - false → red "Not connected" (ErrorOutlineIcon) - true + sync error → amber "Sync error" (WarningAmberIcon) - true → green "Connected" (CheckCircleIcon) - RingCentral no OAuth → amber "Needs reauth" (unchanged)
· VOIPService
Persist connection test result to isConnected field
- test() endpoint saves isConnected=true/false to DB after every health check - update() resets isConnected to null when configJson changes (credentials may have changed, requiring a re-test before showing Connected) - toDto() exposes isConnected so the frontend can distinguish: never tested / connected / not connected
· kamo-shared-library
Add isConnected field to VoipProviderInstance
Nullable Boolean: null = never tested, true = last test passed, false = failed. Requires KamoInitializerService schema migration to add IS_CONNECTED column.
· kamo-marketing
以活的毫秒倒计时显示活动报价横幅
在主页上获取活动促销服务器侧并制作一个 英雄OfferBanner在子标题和免费永远呼唤之间. 横幅显示折扣金额、持续时间和现场倒计时 动画版50ms 梯度- 光滑边框和闪烁的扫描 。 无活动时不渲染 或未期满的晋升.
· kamo-internal
连接可用/ 无法可用的切换到后端并修正 OFLINE 存在错误
- 将已暂停/ 激活的芯片重命名为 NavTop 中可用/无法使用 - 通过新的我/可用性API获取初始可用性并持续切换 - 在成员界面和成员项目道具中添加可操作字段 - 成员名单通行证可由各部门对成员项目作出回应 - 成员项目显示无橙色的ONLINE/OFFLINE/UNAVAILLL标签 - 修复 OFLINE 错误: 添加能见度变化心跳和120s周期批量重排
· SecurityService
添加可到各部门的反应和我的/可用性终点
· InitializerService
回填为 可用 = TRUE 对于现有成员
· kamo-shared-library
为成员可用性切换添加可操作字段
· kamo-internal
删除访问域标签和域管理器组件
· kamo-marketing
在新代理信件上直播未读徽章 + 弹出
- 在部件最小化时,保持安装在屏幕外的活支持板 (仅在支持会话存在时)所以 STOMP 订阅保留 仍然在未读信件中发生火灾,即使出现 访客不看聊天。 - 动画徽章在每次计数变化上都带有弹簧分级(关键把戏) 重挂元素)加连续的 Tailwind ping ring while > 零点。 - 弹出并倾斜最小的标签本身 当计数上升, 并用发光把它染成红色,从而吸引整个页面的注意力。 - 手柄 扩展后已经清除了打开的数, 所以不需要更改 在这里.
· MediaService
播放等待计数 + 在代理读取的访客发送
- 现在代表到 所以数 反映未读的访客信件和当 特工呼叫马克·阿斯雷德 - 新的公共帮助者。 - 现在(a)重播经纪人的 (b) 调用 帮助器,使导航支持按钮保持同步而不等待 下60年代的民意调查 - 也叫帮手 导航系统在访客发出时会爆炸 导航点数与每行徽章状态一致 在单击和浏览器刷新后.
· kamo-shared-library
未读计数 + 按会话查找帮助器
添加QQ所以导航 支持按钮徽章可以计算实际需要的支持票 注意( 有未读到的访客留言) 而不是仅仅 Pre TICKET/ NEW 状态。 计数从 DB 直接读取, 这样它能幸存的新鲜。 也添加了“所以媒体服务” 可以在标记 AsRead 之后从会话 GUID 中解析 org 所有人.
· KlusterServices
添加介质到子域证书提供列表
· kamo-internal
将媒体子域添加到所需的 DNS 化名
· kamo-internal
将位置列添加到票面数据格
读取 **************** 直接关闭支持TicketDTO(现在的票房实体快照在 创作时间——不增加往返. 旗下+城市/区域/国家 在工具提示中显示 IP; 当没有地理数据时, 返回到 em- dash 已经上场了 只有代理视图。 票头已经消耗了相同的 DTO 字段, 所以弹出工具 窗口现在也显示快照——不读 GeoLite 或访问者表 正在变形.
· kamo-shared-library
票房上的快照访客
添加 VISITOR IP 地址,VISITOR COUNTRY CODE,VISTOR COUNTRY NAME, 维基文库中相关的原始文献: 维基文库中相关的原始文献: 维基文库中相关的原始文献: 维基文库中相关的原始文献: 维基文库中相关的原始文献: 维基文库中相关的原始文献: 维基文库中相关的原始文献: 维基文库中相关的原始文献: 城市 维基文库中相关的原始文献: 维基文库中相关的原始文献: 维基文库中相关的原始文献: 维基文库中相关的原始文献: 维基文库中相关的原始文献: 维基文库中相关的原始文献: 维基文库中相关的原始文献: 维基文库中相关的原始文献 维基文库 维基文库中相关的原始文献: 维基文库 维基文库中的相关条目: 维基文库中相关的原始文献 维基文库 维基文库. 在创建票时抓取 所以列表/细节终点 从来不需要做 GeoLite 范围扫描或 阅读时间为单独的访客表。 (hibernate.ddl-auto:更新)将添加 下次运行时, 列; 已存在的行返回到访客记录 将countryCode存储在toDTO中.
· MediaService
与 SockJS 并列添加 /ws/ public- chat- nature 平地 WebSocket 端点
在/ws/公共-聊天-内语中登记第二个STOMP终点,而不使用SockJS 前端可以与本地的 WebSocket( 经纪人URL) 连接而无需 Sockjs-客户端图书馆,该图书馆登记了违反《公约》规定的卸货处理器。 网站权限政策. 原始/ws/公交SockJS端点保留 为后向相容性.
· kamo-internal
Per- ticket 未读徽章 + “ 只有新信件” 过滤器
- 车票列表显示一个带有未读数的聊天-泡泡徽章 门票 # 当会话消息比代理机更新时 上次查看的消息 。 - 在过滤栏上添加“ 只有新信件” 过滤开关 。 - 车票查特现在在初始点打电话 装入并当入境信息到达时, 徽章将澄清为 代理阅读谈话。 在拓宽的 kamo 共享- 图书馆变化上显示 查找Chat 成员列表 ByMemberId 包含支持 TIKET会话,并加 媒体服务广播
· MediaService
在访客消息中向代理播放未读数
访问者发出支持信息后,请按最新未读数 所以代理商的票单 徽章和导航计数器实时更新。 显示广播内容 Media Captain.sendMessage 供会员间聊天.
· kamo-shared-library
在未读成员查询中包含支持 TIKET会话
找到Chat Memberships ByMemberId 现在返回 CHAT 和 支持 TIKET 会话类型, 因此现有的每个成员未读数 基础设施(Get UnreadCountsby Member,/topic/chat/unread/{memberId}) 广播,得到QQ 自动覆盖 支持票也一样。 让代理人看到每盘新消息指标 在车票列表中 和综合的未读徽章 在航海上.
· KlusterServices
与PJSIP监狱和持续状态的禁产2
- 增加dauf2ban-configmap.yaml 与[asterisk]和[frepbx-web]监狱, 递增禁令升级(1h-24h-30d上限)、局域网忽略和a 用于 PJSIP 安全Event 记录的自定义星号安全.conf 过滤器 - Mount dauf2ban-configMap和主机Path/var/lib/pbx/fail2ban(ban) k1m1 和 k2m1 的部署中, 状态持续到整个吊舱重启时 。 - 启动中的线配置.sh 在两个节点上启动失败2ban-client前
· kamo-shared-library
Add resetHasAttachmentsForFolder query to ConversationRepository
Allows sync to reset stale has_attachments flags before re-indexing so corrected MIME detection can rebuild the field from actual attachment data.
· KlusterServices
Integrate Coqui TTS with norman voice (VCTK p267)
- Deploy coqui-tts server (VCTK VITS model, CPU-only) as ClusterIP service on port 5002 with model cache at /var/lib/coqui-tts on k1m1 - Inject coqui_tts.agi into /var/lib/asterisk/agi-bin on each boot: calls HTTP API, caches 8 kHz mono WAV under sounds/coqui-tts/, streams via AGI STREAM FILE — use AGI(coqui_tts.agi,text) in any dialplan context - Write say.conf on each boot to route all Asterisk built-in say functions (digits, numbers, dates, times) through Coqui TTS
· KlusterServices
在 k1m1 上为分拆 DNS 添加 LAN DNS 显示器
在 k1m1 上部署带有主机的 dnsmasq 显示器 192.168.4.22:53. overrides pbx.k1.kluster.kamocrm.com - > 192.168.4.22 (中文(简体) ). 因此局域网的电话直接到达PBX,没有NAT发夹. 所有其他 询问转至8.8.8.8/8.8.4。 路由器DHCP必须标明192.168.4.22为主要DNS服务器 给局域网的客户来接.
· kamo-internal
平台配置标签( General / VOIP & SMS / System user / Advanced)
环绕 在设置视图中有四个标签 : - 常规:只读平台概览——总类,活动电话服务器 实例计数, 活跃的短消息提供者实例计数, 上次全球 VOIP 同步 时间戳。 读自新QQ - VOIP & SMS:编辑voipSyncIntervalMinutes (1.1440)和voipSyncenabled, 上个 GlobalVoipSyncAt, 加上“ 运行全局同步” 按钮 称为安全服务 – VOIP服务 / 内部/投票/同步- 全球。 - 系统用户:现有系统用户访问授权UI,从 配置 Client 逐字记录到标签组件( 没有行为变化) 。 - 高级:并行的 Ops 的“Trigger Global VOIP同步”按钮,加 用于未来控件的明确的空态消息。 配置控制器现在是一个薄薄的标签管弦乐器. 使用PlatformAdminGuard软件 仍保留在管弦乐手一级,所以所有四个分页都封上.
· DaemonService
Global VOIP sync job (admin-tunable interval)
VoipGlobalSyncJob ticks every minute and, on each tick, reads the SystemConfiguration singleton to decide whether a global sync is due: - If voipSyncEnabled is false → skip. - If lastGlobalVoipSyncAt + voipSyncIntervalMinutes > now → skip. - Otherwise: POST /internal/voip/sync-global to VOIPService with the InternalAuthFilter header; update lastGlobalVoipSyncAt on success. This lets platform operators adjust the cadence at runtime from **************** → VOIP & SMS without restarting DaemonService or touching cron expressions. Registered in QuartzConfig alongside the existing jobs. k8s/configmap.yaml adds the tick cron (1-minute default) and kamo.services.voip.base-url + internal.auth.secret so the outbound HTTP call can authenticate.
· SecurityService
系统配置 + 平台概览终点
平台全平台配置表面,由现有顶层所有者守门 guard (matches SystemUserConfig Captain's request ToplevelOwner type). 防守(Matches SystemUserConfig Captain's required ToplevelOwner pattern) 防守(系统用户控制控制器需要ToplevelOwner 模式). 终点 : - 获得/api/安全/系统配置——返回单通行 - PUT/api/安全/系统配置——更新voipSyncIntervalminutes/ 相声同步. 部分更新 支持; 验证执行 间隔为1.1440分. - 获得/api/安全/平台-概览——汇总数据(总数, 正在运行的电话/短信实例计数, 上次同步时间戳, 当前 间隔 + 启用的旗帜 。 - 后・・・ 通过内部AuthFilter调用 VOIPService / 内部/投票/同步- 全球 auth secret),所以平台操作员可以根据需求点出全球VOIP同步 新建平台配置 ~ VOIP & SMS 标签 / 高级标签 。 配置 : - kamo.service.voip.base-url(默认为VOIPService集群-本地服务URL). - 重用现有的内部机密.
· VOIPService
内部同步
代理资源 CRUD(扩展/用户/设备/语音邮件): - VoipExtensions Captain at QQ) 互联网档案馆的存檔,存档日期2011-12-02. - 在/api/voip/Instances/{id}/用户的用户控制器 - VoipDevices 主计长在... - VoipVoicemail Captain at QQ (英语) (英语). - 每一个接受? 新鲜=真 从提供者和刷新缓存; 以其他方式从本地缓存中获取 snappy UI。 - 每一个写入路径呼叫提供者,并更新本地缓存,以便汇总 视图保持一致,而不等待下一次预定同步。 - Voicemail get/{vmId}/audio 流出提供者的原始音频,通过 流式响应(ReponseBody),所以UI可以直接"Audio src=.". Org-aggregate(VoipOrgAggregate主计长,地址:/api/voip/org): - 延伸、用户、设备、语音信箱 药丸 UI 将它们编为总和 选项卡。 - /健康检查每一次并行的活跃实例的健康() (通过SystemSyncService的缓存计数),返回SystemHealthDto[]. - POST / sync 运行 Ectory 同步服务以对抗每个活动实例 当前 org 。 将租户级的按钮“现在同步此鼠标”在UI中授权。 内部同步( Voip Internal 同步控制器) : - POST / 内部/ 播放/ 同步- 全球循环, 将所有正在运行的实例覆盖到整个平台。 由DaemonService预定的Quartz工作召集. 受现有 VOIPService中的"内部AuthFilter". 建筑绿色.
