向 GraphQL 客户端添加 XHR/ Acept 信头和字符串响应解析
与 FreePBX TokenCache 相同的模式: 添加 X- requested- With + 接受: 应用程序/json 以压制 FreePBX 的 HTML 重定向回复,并切换所有三个呼叫站点 从响应实体<JsonNode>到响应实体<String> 手动对象Mapper.readTree() 所以非JSO...
添加 AcceptQHR 信头和原始字符串响应
FreePBX通过集群 DNS 调用时正在返回文本/ html, 因为 主机头与配置的 PBQHOSTNAME 不符 。 添加中 接受: 应用程序/json和 X- 请求使用: XMLHttp 请告诉 FreePBX 返回 JSON 错误,而不是重定向到 HTML 页面。 由响应实体<JsonNode> 切换为响应实...
校正 FreepBX API 的 OAuth2 范围字符串
FreePBX 瞄准镜是顶级标识符 : “ gql”( 所有 GraphQL) 和 'rest'(全为REST). 模块格式“ gql: read” 表示 GQL 名称为“ 已读 ” , 它不存在, 导致无效的 scope 400 错误 .
将 com.kamo.z. shared. commerce 纳入仓库扫描
最新卡莫共享图书馆宣传 **************** (不修改.dao.services) 建筑师依赖 **************** **************** 这个 服务通过 VOIPService 组件扫描加载,但其寄存器是 超出范围,在启动时引起不满意的依赖性例外. 将 com.kamo.z. s...
Bump kamo-shared-library to 1.4.0
Docker Stage 1 builds kamo-shared-library main (now 1.4.0) and installs it to the local .m2; the service pom still referenced 1.0.0 which Maven could not find, ...
Handle RC webhook validation token; make body optional for verification requests
Explicitly stringify Long IDs in SmsController responses
**************** Long-as-string approach was not taking effect. Directly call .toString() on all Long IDs in the controller flat-map responses to guarantee no J...
Serialize Long IDs as strings to prevent JS precision loss
CockroachDB unique_rowid() generates 64-bit integers larger than Number.MAX_SAFE_INTEGER (2^53-1). JS JSON.parse silently rounds them, causing conversation ID m...
Return flat map from send endpoint to prevent LazyInitializationException
VoipMessage.conversation is FetchType.LAZY; after @Transactional commits, Jackson serializing the entity would throw LazyInitializationException causing a 500, ...
Fall back to org mainPhoneNumber when member has no VOIP config
Members without an individual MemberVoipConfig (or no fromPhoneNumber set) now use the org's mainPhoneNumber from VoipProviderConfig as the outbound number, ins...
Remove getJwtKey() from WebhookController after OAuth migration
Signature validation used jwtKey as HMAC secret which no longer exists on VoipProviderConfig. Skip validation for now consistent with ****************
Use correct session key casing for orgID and memberID
KSessionService stores keys as orgID and memberID (capital D). Both controllers were calling .get("orgId") and .get("memberId") which always returns null, causi...