Files
remoteconn-gitea/apps/miniprogram/pages/terminal/voiceGatewayError.js
2026-03-21 18:57:10 +08:00

62 lines
1.7 KiB
JavaScript

/* global module, require */
const { resolveVoicePrivacyErrorMessage } = require("./voicePrivacy");
/**
* 统一收敛语音网关错误:
* 1. 隐私权限错误优先翻译,避免误报为网关问题;
* 2. `url not in domain list` 单独归类为 socket 合法域名问题;
* 3. 其他 `connectSocket:fail` 视为网络或网关配置问题,不再误导成域名问题。
*/
function normalizeMessage(input, fallback) {
if (typeof input === "string" && input.trim()) return input.trim();
return typeof fallback === "string" ? fallback : "";
}
function resolveVoiceGatewayErrorState(input, fallback) {
const raw = normalizeMessage(input, fallback);
if (!raw) {
return { message: "", showSocketDomainModal: false };
}
const privacyMessage = resolveVoicePrivacyErrorMessage(raw, raw);
if (privacyMessage !== raw) {
return { message: privacyMessage, showSocketDomainModal: false };
}
if (/auth deny|scope\.record|authorize/i.test(raw)) {
return {
message: "麦克风权限未开启,请在设置中允许录音",
showSocketDomainModal: false
};
}
if (/url not in domain list/i.test(raw)) {
return {
message: "语音网关连接失败,请检查小程序 socket 合法域名",
showSocketDomainModal: true
};
}
if (/ready_timeout|连接超时/i.test(raw)) {
return {
message: "语音服务连接超时,请稍后重试",
showSocketDomainModal: false
};
}
if (/connectSocket:fail/i.test(raw)) {
return {
message: "语音网关连接失败,请检查网络或网关配置",
showSocketDomainModal: false
};
}
return { message: raw, showSocketDomainModal: false };
}
module.exports = {
resolveVoiceGatewayErrorState
};