9b4a25799f
Replace fixed ackText with a rule-based AckProvider that picks response templates by message type and intent (translate, summary, rewrite, poster, ppt, mindmap, code, search, schedule). Pure sync, zero I/O, auto-falls back to config.ackText on any error. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
30 lines
1.1 KiB
JavaScript
30 lines
1.1 KiB
JavaScript
import { resolveIntent } from './ack-intent.mjs';
|
|
import { selectBuilder } from './ack-builders.mjs';
|
|
|
|
function readConfig(config) {
|
|
return {
|
|
randomEnabled: config?.ackRandomEnabled !== false,
|
|
nicknameEnabled: config?.ackNicknameEnabled !== false,
|
|
};
|
|
}
|
|
|
|
// intent: normalizeWechatInboundIntent output ({ msgType, agentText, ... })
|
|
// nickname: resolved display name string (empty string if unavailable)
|
|
// config: loadWechatMpConfig output (plus ackRandomEnabled, ackNicknameEnabled)
|
|
// fallbackText: config.ackText — returned on any error
|
|
export function buildAckText({ intent, nickname, config, fallbackText }) {
|
|
try {
|
|
const cfg = readConfig(config);
|
|
const ctx = {
|
|
msgType: String(intent?.msgType ?? 'text'),
|
|
nickname: String(nickname ?? ''),
|
|
intent: resolveIntent(intent?.msgType, intent?.agentText),
|
|
randomEnabled: cfg.randomEnabled,
|
|
nicknameEnabled: cfg.nicknameEnabled,
|
|
};
|
|
return selectBuilder(ctx).build(ctx);
|
|
} catch {
|
|
return fallbackText ?? '已收到,正在处理,完成后发到这里。';
|
|
}
|
|
}
|