chore: CRM-NEW baseline
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
/**
|
||||
* Yehwang LibreDesk widget 接入脚本(新栈)
|
||||
*
|
||||
* 用法:页面里先设置 window.YehwangChatConfig,再引入本脚本。
|
||||
*
|
||||
* <script>
|
||||
* window.YehwangChatConfig = {
|
||||
* baseURL: 'http://192.168.31.61:9000',
|
||||
* inboxID: '10fd5207-d235-4c49-beaa-a65eed0ddd0e',
|
||||
* identityURL: 'http://192.168.31.61:4100/identity',
|
||||
* siteJWT: window.__SITE_JWT__ || null // 站点登录后注入
|
||||
* };
|
||||
* </script>
|
||||
* <script async src="/ai-snippet.js"></script>
|
||||
*
|
||||
* 有 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();
|
||||
})();
|
||||
Reference in New Issue
Block a user