内部同步
代理资源 CRUD(扩展/用户/设备/语音邮件): - VoipExtensions Captain at QQ) 互联网档案馆的存檔,存档日期2011-12-02. - 在/api/voip/Instances/{id}/用户的用户控制器 - VoipDevices 主计长在... - VoipVoicemail C...
多功能提供者重构 + 完全 FreePBX + Flowroute 短消息
核心模型变化:一个Org → 许多VoipProviderInstances(是:每个Org一个). 每个提供者API的呼叫现在都进行实例扫描. 电话提供接口 : - 新的扩展/用户/设备CRUD+语音信箱音频/图像描述方法。 - 新能力旗(扩展管理、用户管理、设备管理; 语音邮件Transcription). 默认...
为 kamo- shared- library 更新而重建( CREATE CHILD ORG 右侧 + 应用到旗帜)
拉出新的"角色权利Type.CREATE CHILD ORG (id 131)","ChildOrg Security Model"上三个应用到旗帜,两个13-arg服务超载,以及应用ModelEnforcement Service创建者类型的帮助.
为 kamo- shared- library 更新而重建( appConfig upsert- only fix)
取出不再删除其服务类型不在呼叫者有效载荷中的AppConfig行所加的硬化的QQ——防止在收到部分有效载荷时失去静态数据.
为 kamo- share- library 更新而重建( 有效的- feature 解析器)
取出新的应用模式强制服务方法(compute AvailabilitysMap, isAppive Enabled,得到App-Enabled AppTypes, Ccompute Effective Features),因此当它查询或g特性状态时,这个服务可以使用模型化的特性解析.
Bump kamo-share-library 至 1.5.0 用于应用模型执行
将此项服务带入 kamo- share- library 1. 5.0 , 因此它可以接收新的应用模式执行服务, 儿童安全模式AppConfig实体, ServiceAvailable Type enum, Organization. (原始内容存档于2018-09-21). 是私有列,并扩展模板种子钩.
Rebuild for kamo-shared-library update (runtime force rules + DEFAULT fallback in MemberRightsAppliedService)
Triggers a rebuild so this service picks up the updated **************** that applies template force rules and DEFAULT-template fallbacks on top of the existing...
Rebuild for kamo-shared-library update (master model, default role templates, force-rule resolver)
Triggers a rebuild so this service pulls the new kamo-shared-library revision containing Organization.branchTypeID, Organization.masterModelID, ****************...
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, ...
Add InternalAuthFilter + POST /api/bulktext/send for service-to-service SMS (SP3)
Handle RC webhook validation token; make body optional for verification requests
Add MMS attachment support — multipart send, base64 storage, image display
- RingCentralProvider: override sendSms with multipart/form-data MMS path - VoipMessageService: accept attachment bytes, store base64 data URL in attachmentUrl ...
Add call event webhook pipeline; branch SMS vs telephony events before processing
Add capabilities, SIP credentials, and call management REST controllers
Implement RingCentral call management methods (sip, history, voicemail, presence, queues)
Extend PhoneProvider interface with call management methods; update stubs
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 ****************
Refactor RingCentral to OAuth 2.0 Authorization Code flow
- New OAuthController: /oauth/start (returns authUrl), /oauth/callback (exchanges code, saves tokens), /oauth/status, DELETE /oauth/token - OTKValidationFilte...
Read RingCentral client-id/secret from platform config, not per-org DB
Client ID and Secret identify the Kamo app on RingCentral's platform — they are shared across all orgs. Inject them from Spring Boot properties (backed by the K...
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...
Add Dockerfile for VOIPService
Matches the shared-library + service two-stage build pattern used by EmailService and other Java services.
