46 lines
1.6 KiB
JavaScript
46 lines
1.6 KiB
JavaScript
import { getStorageFun, TOKEN_NAME } from "@/utils/auth.js";
|
|
import { Authorization, KEFU_BASE_URL } from "@/utils/config.js";
|
|
|
|
function resolveQiaobaoBaseUrl() {
|
|
let baseUrl = KEFU_BASE_URL;
|
|
|
|
// H5 本地联调时,管理后台测试域名可能尚未部署最新桥宝接口。
|
|
// 只让 localhost/127.0.0.1 的开发页面访问本机 8080,App、小程序及线上 H5 不受影响。
|
|
// #ifdef H5
|
|
if (typeof window !== "undefined" && ["localhost", "127.0.0.1"].includes(window.location.hostname)) {
|
|
baseUrl = `http://${window.location.hostname}:8080`;
|
|
}
|
|
// #endif
|
|
|
|
return String(baseUrl).replace(/\/+$/, "");
|
|
}
|
|
|
|
/** Stateless Qiaobao chat. It is intentionally separate from formal customer service. */
|
|
export function chatWithQiaobao(payload) {
|
|
return new Promise((resolve, reject) => {
|
|
uni.request({
|
|
url: `${resolveQiaobaoBaseUrl()}/qiaobao/chat`,
|
|
method: "POST",
|
|
data: payload,
|
|
timeout: 30000,
|
|
header: {
|
|
Authorization,
|
|
"HSM-AUTH": getStorageFun(TOKEN_NAME) || "",
|
|
"content-type": "application/json",
|
|
},
|
|
success: ({ data, statusCode }) => {
|
|
let value = data;
|
|
if (typeof value === "string") {
|
|
try { value = JSON.parse(value); } catch (error) { /* keep original */ }
|
|
}
|
|
if (statusCode >= 200 && statusCode < 300 && value?.bizcode === 100) {
|
|
resolve(value.data || {});
|
|
return;
|
|
}
|
|
reject(new Error(value?.msg || "桥宝暂时无法回答"));
|
|
},
|
|
fail: (error) => reject(error || new Error("网络连接失败")),
|
|
});
|
|
});
|
|
}
|