最近在开发一个小程序的UGC功能时,我遇到了一个棘手的问题:用户发布的评论和动态中时不时会出现一些违规内容。刚开始觉得人工审核应该够用,但上线后才发现,面对海量用户内容,人工审核不仅效率低下,而且容易漏判。这时候我才意识到,必须得有一套自动化的内容安全过滤机制。
微信小程序提供的security.msgSecCheck API就是专门为解决这个问题而生的。它能自动检测文本内容是否包含违法违规信息,准确率相当高。我在实际项目中测试过,对于常见的敏感词、违规用语,识别率能达到95%以上。最重要的是,这个API调用简单,集成方便,特别适合中小型开发团队快速实现内容安全防护。
要使用security.msgSecCheck API,首先得开通小程序的云开发功能。这个步骤很多新手容易忽略,结果后面调用API时总是报错。我刚开始就踩过这个坑,折腾了半天才发现问题出在这里。
具体操作很简单:登录微信公众平台,进入小程序管理后台,在左侧菜单找到"云开发",点击开通。系统会提示你创建一个环境,建议选择离你用户群体最近的区域,比如国内用户就选华东或华南区域。
开通云开发后,需要在项目中配置云函数目录。这里有个小技巧:如果你使用的是微信开发者工具的最新版本,可以直接在项目根目录右键选择"新建云函数目录"。工具会自动帮你生成必要的配置文件。
在project.config.json中添加如下配置:
json复制{
"cloudfunctionRoot": "cloudfunctions/"
}
接下来我们要创建一个专门用于内容审核的云函数。我建议命名为"ContentCheck",这样一看就知道是做什么用的。在cloudfunctions目录下新建文件夹,右键选择"新建Node.js云函数"。
核心代码其实很简单:
javascript复制const cloud = require('wx-server-sdk')
cloud.init()
exports.main = async (event, context) => {
try {
return await cloud.openapi.security.msgSecCheck({
content: event.txt
})
} catch (err) {
return err
}
}
这段代码的关键点在于:
很多开发者容易忽略权限配置这一步,导致API调用失败。在云函数的config.json中需要明确声明使用security.msgSecCheck的权限:
json复制{
"permissions": {
"openapi": [
"security.msgSecCheck"
]
}
}
配置完成后,记得右键点击云函数目录,选择"上传并部署"。我第一次用时没注意这个步骤,结果调试了半天才发现函数根本没部署到云端。
在前端页面中,我们通过wx.cloud.callFunction来调用刚才创建的云函数。这里分享一个实战中的优化技巧:最好把调用封装成一个独立函数,方便多处复用。
javascript复制function checkContent(text) {
return new Promise((resolve, reject) => {
wx.cloud.callFunction({
name: 'ContentCheck',
data: { txt: text },
success: resolve,
fail: reject
})
})
}
security.msgSecCheck返回的结果中,最需要关注的是errCode。当内容违规时,会返回87014错误码。这时候要给用户友好的提示,而不是直接把技术错误抛给用户。
javascript复制checkContent(userInput).then(res => {
if (res.result.errCode === 87014) {
wx.showToast({
title: '您输入的内容包含违规信息',
icon: 'none'
})
} else {
// 内容安全,继续业务流程
}
}).catch(err => {
console.error('审核失败', err)
})
在实际项目中,我还遇到过网络波动导致审核失败的情况。这时候比较好的做法是让用户稍后再试,而不是直接允许发布未经审核的内容。
随着用户量增长,内容审核的调用频率会大幅上升。这时候可以考虑以下几个优化点:
有些内容虽然不违规,但可能不适合展示,比如广告、联系方式等。这时候可以结合自定义关键词过滤:
javascript复制const customKeywords = ['微信', '电话', '加我']
function hasCustomKeywords(text) {
return customKeywords.some(keyword => text.includes(keyword))
}
在调用security.msgSecCheck之前,先检查是否包含这些自定义关键词,可以更灵活地控制内容展示策略。
在实际使用中,可能会遇到各种调用失败的情况。根据我的经验,最常见的问题有:
建议按照这个顺序逐步排查,可以节省很多调试时间。
除了87014表示内容违规外,其他常见错误码还有:
遇到这些错误时,需要检查对应的配置是否正确。我在项目初期就遇到过40001错误,后来发现是云环境初始化时没传正确的环境ID。