diff --git a/app/api/canvas/clawd-chat/route.ts b/app/api/canvas/clawd-chat/route.ts index bfa0afebd..dee09ee7d 100644 --- a/app/api/canvas/clawd-chat/route.ts +++ b/app/api/canvas/clawd-chat/route.ts @@ -41,6 +41,20 @@ function createConversationId(userId: string, chatId: string) { return `site-user-${userId}-canvas-${chatId}`; } +function getOpenClawUserName(user: { + id: string; + name?: string | null; + email?: string | null; +}) { + const name = String(user.name || "").trim(); + if (name) return name; + + const email = String(user.email || "").trim(); + if (email) return email; + + return user.id; +} + function isRequestFile(value: FormDataEntryValue): value is File { return ( typeof value === "object" && @@ -198,6 +212,7 @@ export async function POST(request: Request) { const userMessageId = parsed.userMessageId || generateUUID(); const assistantMessageId = generateUUID(); const conversationId = createConversationId(session.user.id, parsed.id); + const openClawUserName = getOpenClawUserName(session.user); const endpoint = `${config.baseUrl}/api/chat`; let upstreamPayload: unknown = null; @@ -215,13 +230,17 @@ export async function POST(request: Request) { body: JSON.stringify({ conversation_id: conversationId, user_id: session.user.id, - user_name: session.user.name || session.user.email || "", + user_name: openClawUserName, + username: openClawUserName, message: upstreamMessage, metadata: { source: "ai_chatbot_canvas", page: "/canvas", tenant: "default", chat_id: parsed.id, + user_id: session.user.id, + user_name: openClawUserName, + username: openClawUserName, spreadsheet_files: spreadsheetMarkdownResult?.files || undefined, spreadsheet_markdown_truncated: spreadsheetMarkdownResult?.truncated || undefined,