diff --git a/apps/desktop-client/src/shared/publisher-errors.test.ts b/apps/desktop-client/src/shared/publisher-errors.test.ts index bb9136c..a65a658 100644 --- a/apps/desktop-client/src/shared/publisher-errors.test.ts +++ b/apps/desktop-client/src/shared/publisher-errors.test.ts @@ -1,6 +1,7 @@ import { describe, expect, it } from 'vitest' import { + BAIJIAHAO_CHALLENGE_REQUIRED_MESSAGE, PUBLISH_ACCOUNT_NOT_LOGGED_IN_MESSAGE, QIEHAO_REAL_NAME_AUTH_MESSAGE, WANGYIHAO_DRAFT_SAVE_PARAMETER_MESSAGE, @@ -8,6 +9,7 @@ import { WANGYIHAO_TOKEN_MISSING_MESSAGE, WEIXIN_GZH_PUBLIC_URL_MISSING_MESSAGE, isQiehaoRealNameAuthError, + normalizeBaijiahaoPublishErrorMessage, normalizePublisherErrorMessage, normalizePublisherLoginErrorMessage, normalizeQiehaoPublishErrorMessage, @@ -76,6 +78,18 @@ describe('publisher error normalization', () => { ).toBe(WANGYIHAO_PUBLISH_CLICK_MESSAGE) }) + it('normalizes Baijiahao challenge-required failures', () => { + expect(normalizePublisherErrorMessage('baijiahao_challenge_required')).toBe( + BAIJIAHAO_CHALLENGE_REQUIRED_MESSAGE, + ) + expect( + normalizePublisherErrorMessage('baijiahao_challenge_required:您所在网络环境异常,请完成验证'), + ).toBe(BAIJIAHAO_CHALLENGE_REQUIRED_MESSAGE) + expect(normalizeBaijiahaoPublishErrorMessage('Error: baijiahao_challenge_required')).toBe( + BAIJIAHAO_CHALLENGE_REQUIRED_MESSAGE, + ) + }) + it('normalizes Weixin GZH missing public URL failures', () => { expect(normalizePublisherErrorMessage('weixin_gzh_public_url_missing:100000093')).toBe( WEIXIN_GZH_PUBLIC_URL_MISSING_MESSAGE, diff --git a/apps/desktop-client/src/shared/publisher-errors.ts b/apps/desktop-client/src/shared/publisher-errors.ts index e89d695..09303ef 100644 --- a/apps/desktop-client/src/shared/publisher-errors.ts +++ b/apps/desktop-client/src/shared/publisher-errors.ts @@ -10,6 +10,8 @@ export const WANGYIHAO_PUBLISH_CLICK_MESSAGE = '网易号草稿已保存,但自动发布未完成。请打开网易号后台确认草稿状态后重试。' export const WEIXIN_GZH_PUBLIC_URL_MISSING_MESSAGE = '微信公众号可能已触发管理员/运营者授权发布,桌面端未能获取到文章外链。请打开公众号后台完成授权发布,并在发表记录中确认文章链接。' +export const BAIJIAHAO_CHALLENGE_REQUIRED_MESSAGE = + '百家号检测到网络环境异常,需要人机验证。请打开百家号后台手动完成一次发稿或验证后再重试发布。' const PUBLISH_PLATFORM_LABELS: Record = { baijiahao: '百家号', @@ -124,12 +126,27 @@ export function normalizeWeixinGzhPublishErrorMessage( return normalized } +export function normalizeBaijiahaoPublishErrorMessage( + message: string | null | undefined, +): string | null { + const normalized = normalizeErrorText(message) + if (!normalized) { + return null + } + + if (/\bbaijiahao_challenge_required\b/i.test(normalized)) { + return BAIJIAHAO_CHALLENGE_REQUIRED_MESSAGE + } + return normalized +} + export function normalizePublisherErrorMessage(message: string | null | undefined): string | null { if (message === 'compliance_blocked') { return '内容合规检测已阻断本次发布,请修改文章后重新发布。' } const qiehaoMessage = normalizeQiehaoPublishErrorMessage(message) const wangyihaoMessage = normalizeWangyihaoPublishErrorMessage(qiehaoMessage) - const loginMessage = normalizePublisherLoginErrorMessage(wangyihaoMessage) + const baijiahaoMessage = normalizeBaijiahaoPublishErrorMessage(wangyihaoMessage) + const loginMessage = normalizePublisherLoginErrorMessage(baijiahaoMessage) return normalizeWeixinGzhPublishErrorMessage(loginMessage) }