From 96f5c796a69cfe982749093c55734afd9416176d Mon Sep 17 00:00:00 2001 From: Rogee Date: Sat, 1 Aug 2026 22:59:57 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20widget=20SDK=E6=97=A0=E6=B3=95=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E7=9A=84=E4=B8=89=E4=B8=AA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Vite proxy缺少/widget转发 — SDK调用/widget/init等API时被SPA fallback 拦截返回HTML。添加/widget proxy并bypass HTML页面请求到/widget.html。 2. ParseWebWidgetConfig类型不匹配 — seed数据中channel_config JSON的 "continuity_via_email":""是空字符串,但Go结构体字段是bool, json.Unmarshal报UnmarshalTypeError导致整个config解析失败, findInboxByWebsiteToken跳过该inbox。容忍类型不匹配错误, 只对JSON语法错误返回error。 3. dev模式SDK bundle不可用 — /sdk/js/sdk.js在Vite dev模式下无构建产物, 被SPA fallback返回HTML。构建SDK后放入public/供dev server静态提供。 --- backend/internal/service/widget_service.go | 9 +- frontend/public/sdk/js/sdk.js | 300 +++++++++++++++++++++ frontend/vite.config.ts | 11 + 3 files changed, 319 insertions(+), 1 deletion(-) create mode 100644 frontend/public/sdk/js/sdk.js diff --git a/backend/internal/service/widget_service.go b/backend/internal/service/widget_service.go index dfb7b5dc..03b8063c 100644 --- a/backend/internal/service/widget_service.go +++ b/backend/internal/service/widget_service.go @@ -1759,7 +1759,14 @@ func ParseWebWidgetConfig(channelConfig string) (*WebWidgetConfig, error) { } var config WebWidgetConfig if err := json.Unmarshal([]byte(channelConfig), &config); err != nil { - return nil, fmt.Errorf("invalid JSON: %w", err) + // Tolerate type mismatch errors (e.g., "" for a bool field). + // Rails/Chatwoot seed data sometimes serializes boolean fields as + // empty strings, which Go's strict json.Unmarshal rejects. Go still + // populates fields that parse correctly (e.g. website_token), so we + // only abort on genuine JSON syntax errors. + if _, isTypeErr := err.(*json.UnmarshalTypeError); !isTypeErr { + return nil, fmt.Errorf("invalid JSON: %w", err) + } } return &config, nil } diff --git a/frontend/public/sdk/js/sdk.js b/frontend/public/sdk/js/sdk.js new file mode 100644 index 00000000..292e76d8 --- /dev/null +++ b/frontend/public/sdk/js/sdk.js @@ -0,0 +1,300 @@ +(function(){"use strict";/*! js-cookie v3.0.8 | MIT */function _(e){for(var o=1;o"u")){u=_({},o,u),typeof u.expires=="number"&&(u.expires=new Date(Date.now()+u.expires*864e5)),u.expires&&(u.expires=u.expires.toUTCString()),a=encodeURIComponent(a).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var i="";for(var b in u)u[b]&&(i+="; "+b,u[b]!==!0&&(i+="="+u[b].split(";")[0]));return document.cookie=a+"="+e.write(n,a)+i}}function c(a){if(!(typeof document>"u"||arguments.length&&!a)){for(var n=document.cookie?document.cookie.split("; "):[],u={},i=0;i