{"record":{"id":"0a24c5191e6383c1","repo":"RocketChat/Rocket.Chat","slug":"invalid-user-data-received-from-rocket-chat-cloud","errorCode":null,"errorMessage":"Invalid user data received from Rocket.Chat Cloud","messagePattern":"Invalid user data received from Rocket\\.Chat Cloud","errorType":"exception","errorClass":"CloudWorkspaceConnectionError","httpStatus":500,"severity":"error","filePath":"apps/meteor/server/modules/core-apps/cloudAnnouncements.module.ts","lineNumber":144,"sourceCode":"\t\t\t\t\tusername: payload.user.username,\n\t\t\t\t\tname: payload.user.name,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tif ('visitor' in payload && payload.visitor) {\n\t\t\treturn {\n\t\t\t\tvisitor: {\n\t\t\t\t\tid: payload.visitor.id,\n\t\t\t\t\tusername: payload.visitor.username,\n\t\t\t\t\tname: payload.visitor.name,\n\t\t\t\t\tdepartment: payload.visitor.department,\n\t\t\t\t\tphone: payload.visitor.phone,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tthrow new CloudWorkspaceConnectionError(`Invalid user data received from Rocket.Chat Cloud`);\n\t}\n\n\t/**\n\t * Transform the payload received from the Core App back to the format the UI sends from the client\n\t */\n\tprotected getInteraction(\n\t\tpayload: UiKitCoreAppBlockActionPayload | UiKitCoreAppViewSubmitPayload | UiKitCoreAppViewClosedPayload,\n\t): UiKit.UserInteraction {\n\t\tif (payload.type === 'blockAction' && payload.container?.type === 'message') {\n\t\t\tconst {\n\t\t\t\tactionId,\n\t\t\t\tpayload: { blockId, value },\n\t\t\t\tmessage,\n\t\t\t\troom,\n\t\t\t\ttriggerId,\n\t\t\t} = payload;\n\n\t\t\tif (!actionId || !blockId || !triggerId) {","sourceCodeStart":126,"sourceCodeEnd":162,"githubUrl":"https://github.com/RocketChat/Rocket.Chat/blob/b2c16d5842cbe6b69b59bdf6fc5e5f1afcd1f0b0/apps/meteor/server/modules/core-apps/cloudAnnouncements.module.ts#L126-L162","documentation":"`CloudAnnouncementsModule.getInteractant` decides who is interacting with a cloud announcement: a logged-in user (`payload.user`) or a livechat visitor (`payload.visitor`). If the payload identifies neither, it throws `CloudWorkspaceConnectionError('Invalid user data received from Rocket.Chat Cloud')`. Despite the message, this fires locally while transforming the interaction payload — the same error class is also used for genuine cloud connection failures (e.g. non-OK responses in `pushUserInteraction`), so check the message to distinguish them.","triggerScenarios":"A `blockAction` or `viewSubmit` on `cloud-announcements-core` (or the fire-and-forget `viewClosed` forward) whose payload contains neither `user` nor `visitor` — e.g. anonymous interactions, synthetic payloads, or a payload shape change that dropped the interactant fields.","commonSituations":"Livechat visitors whose visitor object failed to propagate; custom dispatchers building core-app payloads by hand; version mismatches between client payload builders and the server module; misreading the message as a network problem when it is actually a payload problem.","solutions":["Attach `user: { _id, username, name }` (or the livechat `visitor` object) to the interaction payload before dispatching to the module.","If the workspace uses an offline license, note `pushUserInteraction` also fails fast via `assertNotOfflineLicense()` — confirm the license state before debugging payloads.","Catch `CloudWorkspaceConnectionError` at the call site and inspect `err.message`: 'Invalid user data...' means payload, 'Failed to connect...' means cloud reachability/token."],"exampleFix":"// before\nawait module.blockAction({ appId: 'cloud-announcements-core', type: 'blockAction', actionId, payload: { blockId, value }, triggerId } as any);\n\n// after\nawait module.blockAction({ appId: 'cloud-announcements-core', type: 'blockAction', user: { _id, username, name }, actionId, payload: { blockId, value }, triggerId } as any);","handlingStrategy":"try-catch","validationCode":"const hasInteractant = (\n  payload: UiKitCoreAppBlockActionPayload | UiKitCoreAppViewSubmitPayload | UiKitCoreAppViewClosedPayload,\n): boolean => Boolean(payload.user || ('visitor' in payload && payload.visitor));\n\nif (hasInteractant(payload)) {\n  await module.blockAction(payload);\n}","typeGuard":"function hasCloudInteractant(\n  payload: UiKitCoreAppBlockActionPayload | UiKitCoreAppViewSubmitPayload | UiKitCoreAppViewClosedPayload,\n): payload is (UiKitCoreAppBlockActionPayload | UiKitCoreAppViewSubmitPayload | UiKitCoreAppViewClosedPayload) & { user?: { _id: string }; visitor?: unknown } {\n  return Boolean(payload.user || ('visitor' in payload && payload.visitor));\n}","tryCatchPattern":"import { CloudWorkspaceConnectionError } from '../../lib/errors/CloudWorkspaceConnectionError';\n\ntry {\n  await module.blockAction(payload);\n} catch (error) {\n  if (error instanceof CloudWorkspaceConnectionError && error.message.includes('Invalid user data')) {\n    // payload lacks user/visitor: fix the payload, do not retry\n  } else if (error instanceof CloudWorkspaceConnectionError) {\n    // genuine cloud connectivity/token issue: check Cloud_Url, token, license\n  }\n}","preventionTips":["Always attach user or livechat visitor to cloud-announcement interactions","Distinguish payload errors from connectivity errors by the message on CloudWorkspaceConnectionError","Keep client and server payload builders in the same version line"],"tags":["cloud","announcements","uikit","livechat","payload-validation"],"backgroundTag":"cloud-workspace-connection-error","analyzedSha":"b2c16d5842cbe6b69b59bdf6fc5e5f1afcd1f0b0","analyzedAt":"2026-08-18T15:26:39.429Z","contentChangedAt":"2026-08-18T15:26:39.429Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}