Add premium enterprise features - Analytics, CRM, AI Assistant, Advanced
ANALYTICS DASHBOARD - Real-time call metrics with interactive charts CRM INTEGRATION - Customer data, lifetime value, activity tracking AI ASSISTANT - Sentime...
Implement 100% enterprise VoIP desk phone features
Complete implementation of 100+ features matching Cisco 8800, Polycom VVX 600, Yealink T58A 7 Tabs: Dialpad, Speed Dial/BLF, History, Voicemail, Contacts, Queu...
Make softphone fully visible without scrolling - comprehensive compact layout
CHATBOX HEIGHT: - Changed from fixed 600px to 85% of viewport height - Uses Math.floor(window.innerHeight * 0.85) for responsive sizing - Provides much more ver...
Eliminate horizontal scrollbars and increase softphone visibility
LAYOUT FIXES: - Increase DOCKED_HEIGHT from 480px to 600px for better vertical space - Add explicit width constraints (minWidth, maxWidth) to SoftphonePanel roo...
Elevate softphone to enterprise-grade with premium features
ENTERPRISE FEATURES: - Call Recording with visual indicator and pulsing animation - Call Transfer functionality for seamless handoffs - Call Notes with expandab...
Add expandable softphone panel to ChatBox
- Add PhoneInTalk icon button to ChatBox header for softphone toggle - Create comprehensive SoftphonePanel component with full UI - Implement dialpad with 0-9, ...
Remove connected check and add debug logging for STOMP activation
STOMP client was not activating because connected check was preventing it. Added debug logs to diagnose.
Activate STOMP client only after SockJS opens
Critical bug fix: STOMP client was being activated before SockJS opened, causing immediate disconnect. Now waits for SockJS onopen event before activating STOMP...
为 WebSocket 连接启用 SockJS 倒置传输
如果 WebSocket 升级失败, 允许 xhr- sreaming 和 xhr- polling 作为倒计时 .
Enhance ChatBox with dynamic color system and increased height
- Increase message viewing area by 33% (DOCKED_HEIGHT: 360 -> 480) - Create ChatBoxStyles.tsx with dynamic CSS variable-based color system - Apply primary color...
将 ChatBox 设计现代化,使其具有专业的光泽
- 实施有细微灰色梯度的清洁白色背景 - 添加自定义滚动条样式与主色方案相结合 - 增强带有梯度背景和不对称边框的信息泡 - 使投入领域现代化,实现药片形设计和焦点环效应 - 更新头条,并改进外观样式和梯度背景 - 增加平滑的立方体相变和比例相变动画 - 为打字指标实施脉冲动 - 完善呼叫控制和收到的呼叫通知 - 使用...
在使用中删除无效的“ 活动” 属性检查ChatWebSocket
来自 @stomp/stompjs 的客户端类型没有“活性”属性 。 取消了无效的检查, 因为客户端. activate () 在客户端创建后立即被调用 .
Wait for SockJS to open before activating STOMP client
- Fix race condition where STOMP client activated before SockJS connection was ready - Move client.activate() to SockJS onopen callback - This should fix immedi...
Add TomcatConnectorCustomizer to force SSL keystore config
- Spring Boot's application.yml SSL config not being applied - Use TomcatConnectorCustomizer to programmatically set keystore - Forces connector to use /etc/ssl...
Hardcode SSL settings in ConfigMap for production
- Removed environment variable placeholders - Hardcoded port 8443, SSL enabled, keystore path - Fixes Spring Boot not resolving env vars correctly
Correct Spring Boot SSL environment variable names
- Changed SSL_ENABLED to SERVER_SSL_ENABLED - Changed SSL_KEY_STORE to SERVER_SSL_KEY_STORE - Changed SSL_KEY_STORE_PASSWORD to SERVER_SSL_KEY_STORE_PASSWORD - ...
前往端口 8443 的全程 WebRTC API 请求
- 更新所有 WebRTC API 路由以使用媒体 。{域}: 8443 - 不再将Traefik用于WebRTC终点 - 匹配媒体API和WebSocket配置
所有媒体服务请求到端口 8443 (通过Traefik)
- 更新所有媒体 API 路线以使用媒体 。{域}: 8443 - 不再使用Traefik媒体服务 - API和WebSocket都直接去8443港 - 内部。{域}像以前一样继续通过Traefik
Simplify to HTTPS:8443 only, remove dual port config
- MediaService runs ONLY on port 8443 (HTTPS) - No more Traefik routing for MediaService - Removed DualPortConfig complexity - All traffic (API + WebSocket) goe...
Use SSLHostConfig API for Tomcat SSL configuration
- Use SSLHostConfig and SSLHostConfigCertificate (correct Tomcat API) - Configure certificate via **************** - Fixes compilation errors with setAttribute/...
Use setAttribute for Tomcat SSL configuration
- Changed from setKeystoreFile/Pass/Type/Alias to setAttribute - Tomcat 10+ uses setAttribute for SSL properties - Fixes compilation errors
Run MediaService on BOTH ports 80 (HTTP API) and 8443 (HTTPS WebSocket)
- Reverted service.yaml and ingressroute.yaml to use port 80 - Removed forced SERVER_PORT and SSL_ENABLED env vars - Added DualPortConfig to programmatically ad...
连接8443(外部)端口,该端口通向节点30843
- 路由器外接8443至k1m1节点30843 -浏览器使用media.kamocrm.com:8443 - 内部节点港为30843 (Kubernetes 有效范围)
Use NodePort 30843 instead of hostPort for WebSocket
- hostPort may be blocked by firewall rules - NodePort 30843 is in valid range (30000-32767) - Browser connects to external port 8443 - Router forwards 8443 -> ...
Add SSL configuration to k8s ConfigMap
- ConfigMap was missing SSL config from application.yml - Added server.ssl settings with environment variable support - Matches local application.yml configurat...
Use hostPort instead of NodePort for 8443
- NodePort range is 30000-32767, cannot use 8443 - Use hostPort to bind directly to host port 8443 - Removed service-websocket.yaml
为 WebSocket 连接到 MediaService 端口 8443
- 更新了WebSocket连接,使用media.kamocrm.com:8443 - 仅用于WebSocket交通的旁通车 - 使用直接连接媒体服务的HTTPS/HTTP1.1 - API电话通过Traefik继续使用标准路径
Expose MediaService on port 8443 for WebSocket over HTTPS/HTTP1.1
- Added NodePort service on 8443 for direct WebSocket access (bypasses Traefik) - Mount wildcard-kamocrm-com SSL certificate - Init container converts PEM to PK...
删除 HTTP/2 兼容性的 WebSocket 运输限制
-浏览器WebSocket API不支持HTTP/2(RFC 8441未执行) - 原生WebSocket需要HTTP/1.1 升级失败于 HTTP/2 - 让SockJS自动选择运输(xhr -- -- 流/xhr -- -- 通过HTTP/2) - 修复与 HTTP/2 的 WebSocket 连接失败
Restore HTTP/2 for WebSockets (RFC 8441 support)
- WebSockets CAN work over HTTP/2 via RFC 8441 - Removed TLSOption (not needed) - Removed ServersTransport reference (let HTTP/2 work) - Restored simple domain-...
Use explicit Host() for /ws route to enable TLSOption
- Changed /ws route from HostRegexp to Host(media.kamocrm.com) - TLSOption can only be applied to explicit hosts (not regex) - ALPN negotiation happens during T...
Force HTTP/1.1 for MediaService ONLY via TLSOption
- Created media-tls-http1 TLSOption with alpnProtocols: [http/1.1] - Referenced ONLY in media-route IngressRoute - Does not affect other Traefik routes - Fixes ...
Revert "fix(traefik): disable idle timeout for WebSocket connections"
This reverts commit ****************
Separate /ws route for WebSocket, keep HTTP/2 for API
- Added two routes: /ws for WebSocket (higher priority), rest for API - Only /ws uses media-websocket-transport (HTTP/2 disabled) - API routes can use HTTP/2 fo...
Use Host() instead of HostRegexp() for media-route
- Simplified to Host(media.kamocrm.com) - Avoids regex escaping issues with backticks - Tests show route is working with simple Host match
Force HTTP/1.1 via TLSOption for WebSocket compatibility
- Created TLSOption to disable HTTP/2 ALPN negotiation - Forces browsers to use HTTP/1.1 for media.kamocrm.com - WebSocket upgrades require HTTP/1.1 protocol - ...
Disable idle timeout for WebSocket connections
- Added idleTimeout=0 to websecure entrypoint - Prevents Traefik from closing WebSocket connections due to inactivity - Fixes SockJS WebSocket timeout issues
仅使用 WebSocket 运算( 残疾 XHR 投票)
- 将SockJS运输从[websocket,xhr-streaming,xhr-poling]改为[websocket] - 取消回落投票 - 纯网络锁接力 - 如果WebSocket不起作用,而不是有辱人格,那么失败的速度会很快
Add CORS middleware to media-route for cross-origin WebSocket
- Added cors middleware to allow cross-origin connections - Enables WebSocket connections from internal.* to media.* - Allows all origins, methods, and headers ...
将 WebSocket 直接连接到媒体.kamocrm.com
- 还原到原始方法:连接到媒体。 * 子域直接 - 消除不必要的同源复杂性 - 从中间软件被删除/ws绕行(不需要) - 内部入侵鲁特的路线被取消 - 媒体服务CORS已经允许所有来源 - 更简单更清洁的解决方案
从 kamowsmedia- service 中删除明确的命名空间引用
- 两种服务同名空间(kamo) - 不需要明确的名称空间参考 - 避免潜在的跨名称空间问题
从下一个删除/ws重写 。 配置(由Traefik处理)
- 已删除 Next.js 为/ws 路径重写 - 现由Traefik IngressRoute处理的WebSocket线路 - Traefik 内部路线.kamocrm.com/ws - > 直接媒体服务
通过Traefik直接向MediaService提供路线/ws请求
- 为入侵鲁特的路径增加专用路线 - 内部路线.kamocrm.com/ws - > 直接媒体服务 - 在WebSocket支助中使用与媒体路线相同的服务器运输 - 用于 WebSocket 连接的 Bypasses Next.js(Next.js 重写不支持 WS) - 更具体的路线首先与一般路线相匹配
允许/ws WebSocket 端点, 而无需认证重定向
- 将路径添加到中间软件绕行 - SockJS 需要连接到/ws/info而不重定向 - WebSocket连接仍然有 *** cookie - 解决WebSocket连接超时问题