Angalia ishara ya routing, endelea leadUid, reassign chat juu ya hoja ya kuongoza
- createSupportSession takes a signed routingToken (not preferredAgentMemberId); verified via ChatRoutingTokenCodec + cluster internal.auth.secret, enforces ...
Exclude non-ACTIVE members from chat participation & routing
A non-ACTIVE **************** member must not appear as, or be targeted as, a live chat participant. Gate every chat path on the shared-lib **************** pre...
Make WebChatIntegration create() @Transactional (no orphaned key on integration-save failure)
Snapshot mtandao-chat ushirikiano id juu ya msaada mgeni + tiketi
Resolves the WebChatIntegration by creatingKeyHash (enabled-filtered, consistent with bootstrap()/AI-prompt resolution) once in createSupportSession and stamps ...
Chaguo la bootstrap config
Adds an internal GET **************** that resolves a WebChatIntegration by X-Public-Chat-Key-Hash and returns its resolved design/behavior config (default-fill...
Wire optional mediaservice-push secret for FCM/APNs credentials
Mounts the FCM service-account JSON + APNs .p8 from an optional `mediaservice-push` secret at /etc/kamo/push and sets the APNs key-id/team-id from the same secr...
WebChatIntegration CRUD (mints key + integration, org-scoped)
Org-facing management API for the Phase-2 web-chat settings tab. On create, mints the underlying PublicChatApiKey (same key-gen approach as PublicChatKeyControl...
Bust APIService key cache immediately on public-chat key toggle/delete
Persist creating key hash on public-chat visitor + ticket for attribution
Resolve public-chat system member per-org (drop hardcoded snadjafinia alias)
createSupportSession, createPublicTicket, and the owner notification helpers all resolved the org's "system member" via a hardcoded usernameAlias="snadjafinia" ...
Mobile push dispatch (FCM data + direct APNs) with presence gate
kuzungumza incoming (MediaController), tiketi ya msaada (Huduma ya Usaidizi) SMS/voicemail (VoipStompRelayController), kijamii ***** Uwepo-gated kama mtumiaji w...
Accept X-***-Token on REST; slide TTL with per-session timeout
OTKPreAuthFilter resolves X-***-Token when no X-OTK is present (same call MediaService REST without the BFF. KSessionService now slides the Redis TTL with the s...
Reach the borrower's OWN officer directly, no support-right gate
Drop the ACCEPT_SUPPORT_TICKETS requirement from assignToPreferredAgent: the borrower's assigned loan officer is reachable regardless of whether they're a confi...
Direct-to-assigned-LO routing + LO presence endpoint
Powers the borrower portal's merged LO/chat widget: - **************** direct-assigns a public-chat ticket to a SPECIFIC agent (the borrower's assigned loan o...
Stop putting message content into missed-message emails
Remove messagePreview computation, the ledger PREVIEW write, and the messagePreview template variable; drop the includePreview preference. Emails now carry send...
Missed-message email notifications (chat + support) with per-source suppression
Kudumu NATS watumiaji chat-email-notifier juu ya chat.session.> kulisha MESSAGE EMAIL NOTICES ledger (PENDING/SENT, per-sender kwa ajili ya kuzungumza, kwa-tick...
Rebuild for shared-lib GeoLite bounded lookup (2-4ms hit+miss)
Picks up kamo-shared-library 011a73e — GeoLookupService's findByIpInRange now LIMIT-1-bounded instead of scanning to exhaustion on gap/high IPs (measured 5-13s ...
Rebuild on shared-lib resolver hotfix (boot crash: LenderProfileRepository)
Nyakati za mwisho za kuonekana + mwisho wa wingi
Picha zote na Wizara ya Mambo ya Ndani ya Nchi. .................................................................... Alikumbuka wakati wa uhai wake. Picha zote ...
AI auto-tag + caption via org's providers (P3)
MaterialAiController POST **************** verifies ownership, mints a short-lived signed material URL, and calls AIService's internal vision endpoint (org's ow...
MaterialAnalyticsController — record events + aggregates
Picha ya ****** (rekodi) + GET / analytics (kwa-mahesabu ya nyenzo) Aina ya + org.
MaterialReviewController — status map + set-status
GET /api/media/materials/reviews (org-wide imgId→status map) + POST to set a material's status (validated, reviewer-stamped, upsert).
MaterialCampaignController - CRUD + kipengee ramani + kuongeza / remove
/api/media/materials/campaigns: list/create/update/delete, GET /items (org-wide imgId↔campaignId map), POST /add + /remove with org-ownership checks.
MaterialTagController - tag CRUD + kugawa / saini + ramani ya kazi
/api/media/materials/tags: list/create/delete tags, GET /assignments (org-wide imgId↔tagId map the workspace joins client-side), POST /assign + /unassign with o...
Endpoints za kiungo cha umma (unda / orodha / revoke) + huduma iliyofuatiliwa
Adds POST/GET /api/media/materials/links and DELETE /links/{id} backed by MaterialShareLink, and resolves managed tokens on the public GET first (checking revok...
Endelea bendera zilizopangwa za kidole kupitia update iliyopangwa
Same detached-entity orphanRemoval issue as the conversion pipeline: the headless sweep held a detached ImgDat and save()/merge() cascaded into the images colle...
Thumbnail scheduled-generated materials in-process
A headless sweep can't drive ConversionService's OTK thumbnail pipeline, so generate a page-0 PNG thumbnail via ImageIO right after storing the export — schedul...
Scheduled generation — sweep runs recipes on a cadence
- CanvaScheduleController: CRUD for org schedules (recipe + cadence + hour/day + optional social targets), computes nextRunAt - CanvaGenerationService: headle...
Saved autofill recipes CRUD (org-scoped)
CanvaRecipeController: GET/POST /api/media/canva/recipes + DELETE /{id} — save/list/soft-delete a named brand-template + field mapping, scoped to the caller's o...
Kutoa Media Service ndani.auth. siri (mlos-internal-auth) kwa barua pepe za muhtasari
MediaService -> EmailService /api/email/templates/send (meeting-summary) needs INTERNAL_AUTH_SECRET to match EmailService's internal.auth.secret.
Autofill ya Biashara - templates za bidhaa za data
- CanvaApiClient: list brand templates (dataset=non_empty), get dataset, asset-upload jobs, create/get autofill jobs - CanvaController: GET /brand-templates, ...
Short-lived signed public URLs for marketing assets
Lets social providers (Meta) and email fetch a specific material for a bounded window without exposing the private imaging-materials bucket. - MaterialUrlSigne...
Kuingiza faili katika Canva kama kubuni inayoweza kuhaririwa
Kwa mfano, *** (Uzalishaji wa Design) - CanvaController POST /imports (multipart) → kuunda kazi ya kuagiza → mhariri Kiungo cha kina na uwiano state kwa kurudi-...
Wrap recording upload so MediaService compiles
MinIOStorageService.upload throws a checked Exception that ingest() neither caught nor declared — build break on top of the isGuest fix. Wrap it and rethrow as ...
Verify return-nav JWT signature; tidy token refresh
- CanvaJwtVerifier: verify the correlation_jwt's Ed25519 signature against Canva's JWKS (/connect/keys), plus aud/exp/type; keys cached by kid. Return-nav n...
MeetingParticipant.isGuest() (was getGuest, won't compile); repoint transcribe to generic endpoint
MeetingParticipant exposes isGuest() (primitive boolean getter), not getGuest(). Also point the summary transcribe call at the shared /api/conversion/transcribe...
Kurekodi ingest, uhifadhi /quota, matumizi ya kuhifadhi, bomba la muhtasari
Kuunganisha Udhibiti: ndani (X-Internal-Auth) ingest mwisho wa jibri Kukamilisha.sh posts kumaliza rekodi. -Kuunganisha Huduma: upload rekodi kwa kila-org MinIO...
Canva Connect OAuth + designs/export backend
- CanvaApiClient: PKCE authorize, token exchange/refresh/revoke, users, designs (create/list), export jobs, byte fetch - CanvaTokenService: encrypted per-memb...
Scheduled-meeting start reminders + guest-link expiry
- MeetingReminderSweep: @Scheduled sweeper that fires a realtime "meeting starting" reminder to invited members at (start − reminderMinutesBefore) on ******...
Persist invited participants, enforce MANAGE_MEET_SETTINGS, drop double-invite path
- createMeeting: invited members are numeric snowflake IDs, not UUID strings — route them through longToUUID like the creator. Previously UUID.fromString th...
Unified Chats feed across member/support/social sessions
GET /api/media/sessions/chat now accepts a `categories` filter (chat, support, social; default all) and returns one globally most-recent-first, merge of the per...
Surface parent-org shared topics in request-support popup
Child-org users could not see their parent org's shared support topics (assignToOwnOrg=false) when requesting support, because the popup only fetched own-org to...
Org-guard the /topic/leads/rt/{orgId} realtime subscription
Cross-tenant SUBSCRIBE guard for the new lead real-time topic, mirroring the existing /topic/social/feed guard: a member may only subscribe to their own org's l...
Unified timeline backend (feed persistence, adapters, live relay)
Huduma ya Jamii inaendelea machapisho / maoni kwenye schema ya MediaSession / MediaObj (kutumia mfano wa mazungumzo); SocialFeedMapper hujenga DTOs waya; Social...
X (Twitter) + Discord adapters
- XAdapter: Mtandao wa Shughuli za Akaunti (CRC Challenge + x-twitter-webhooks-signature HMAC kuthibitisha), normalizeInbound (direct ujumbe events, echo-skip)...
Rebuild dhidi ya pamoja-lib MediaObjTransit date created fix (kubali-hook mwanachama kujiunga)
M4 Meta adapters + OAuth + 24h window + M2 hardening
- Meta adapters (Messenger/Instagram): fix invalid _caption send (caption now a follow-up message), bytes-upload via Graph Attachment Upload API, URI encode f...
Je, unaona nini kuhusu usafiri?
Kila moja ya hizi updates ardhi katika nafasi yako ya kazi moja kwa moja. Kuanza bure na kuangalia kukua wiki baada ya wiki.