环境:
@wecom/aibot-node-sdk v1.0.4
Node.js v24.14.0
Windows 10
问题描述:
企微服务端通过 WebSocket 推送的消息中, text.content 字段可能包含未转义的控制字符(如垂直制表符 \u000b / \x0b 、零宽字符 \u200c 等)。当前 index.cjs.js 和 index.esm.js 中的 this.ws.on('message', ...) 处理函数直接调用 JSON.parse(raw) ,遇到这些字符时会抛出:
Bad control character in string literal in JSON at position 454
复现方式:
用户在企业微信客户端输入含有特殊字符的文本(如复制粘贴含垂直制表符的内容),服务端推送的 WebSocket frame 中该字符未被转义,导致 SDK 解析失败。
修复方案:
在 JSON.parse(raw) 前增加控制字符清洗:
const sanitized = raw.replace(
/[\x00-\x08\x0b\x0c\x0e-\x1f\u200b-\u200f\u2028\u2029\u202a-\u202e\u2060-\u206f\ufeff\ufff9-\ufffb]/g,
(ch) => '\\u' + ch.charCodeAt(0).toString(16).padStart(4, '0')
);
const frame = JSON.parse(sanitized);
环境:
@wecom/aibot-node-sdk v1.0.4
Node.js v24.14.0
Windows 10
问题描述:
企微服务端通过 WebSocket 推送的消息中, text.content 字段可能包含未转义的控制字符(如垂直制表符 \u000b / \x0b 、零宽字符 \u200c 等)。当前 index.cjs.js 和 index.esm.js 中的 this.ws.on('message', ...) 处理函数直接调用 JSON.parse(raw) ,遇到这些字符时会抛出:
Bad control character in string literal in JSON at position 454
复现方式:
用户在企业微信客户端输入含有特殊字符的文本(如复制粘贴含垂直制表符的内容),服务端推送的 WebSocket frame 中该字符未被转义,导致 SDK 解析失败。
修复方案:
在 JSON.parse(raw) 前增加控制字符清洗: