/** * Yehwang LibreDesk widget 接入脚本(新栈) * * 用法:页面里先设置 window.YehwangChatConfig,再引入本脚本。 * * * * * 有 siteJWT:走 bridge /identity 验签换 LibreDesk widget JWT(生产路径)。 * 无 siteJWT:匿名访客。 */ (function () { var cfg = window.YehwangChatConfig || {}; var baseURL = String(cfg.baseURL || 'http://192.168.31.61:9000').replace(/\/+$/, ''); var inboxID = cfg.inboxID || '10fd5207-d235-4c49-beaa-a65eed0ddd0e'; var identityURL = cfg.identityURL || 'http://192.168.31.61:4100/identity'; var state = { loaded: false, userJWT: null }; function loadWidget() { if (state.loaded) return; state.loaded = true; window.LibredeskSettings = { baseURL: baseURL, inboxID: inboxID }; if (state.userJWT) window.LibredeskSettings.userJWT = state.userJWT; var s = document.createElement('script'); s.async = true; s.src = baseURL + '/widget.js'; document.head.appendChild(s); } function postIdentity(body) { return fetch(identityURL, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body), }).then(function (res) { if (!res.ok) throw new Error('identity HTTP ' + res.status); return res.json(); }); } async function resolveUserJWT() { if (cfg.userJWT) return cfg.userJWT; if (cfg.siteJWT) { var out = await postIdentity({ token: cfg.siteJWT }); return out.userJWT; } // 仅开发联调:直接传 email(需要 bridge IDENTITY_DEV_MODE=true) if (cfg.demoEmail) { var dev = await postIdentity({ email: cfg.demoEmail, externalUserId: cfg.demoExternalId || cfg.demoEmail, firstName: cfg.demoFirstName || 'Customer', lastName: cfg.demoLastName || '', }); return dev.userJWT; } return null; } async function boot() { if (cfg.siteJWT || cfg.demoEmail || cfg.userJWT) { try { state.userJWT = await resolveUserJWT(); } catch (e) { // 身份失败不阻塞 widget,降级为匿名会话 console.warn('[YehwangChat] identity failed, fallback to anonymous:', e.message); } } loadWidget(); } window.YehwangChat = { /** 页面登录状态变化后可调用:重新设置 JWT 并重载(简单做法:刷新页面) */ setSiteJWT: function (jwt) { cfg.siteJWT = jwt; }, isLoggedIn: function () { return Boolean(state.userJWT); }, }; boot(); })();