内容审核

内容审核由两部分组成:敏感词词表 + 处置动作(发送时同步生效),以及审核任务(命中事实的异步复核)。二者共享同一份命中检测逻辑,但消息放行/拦截由同步处置决定。

概念​

处置动作发送时行为审核任务
block(默认)命中即拒绝,返回 1010,消息不入库action=blocked,无 messageId
replace消息入库,命中词替换为 ***action=replaced,带 messageId
  • 词表按应用隔离;写入包含 replaceWord 的词条会把处置动作切到 replace。
  • 审核任务默认 pending;可通过 decide 置为 approved / rejected,拒绝会回写消息扩展标记并触发 message.audit_result 回调。
  • 审核任务为内存环缓冲,重启后不保留;词表随应用状态持久化。

前置条件​

  • 服务端已启动(默认 http://127.0.0.1:8080),控制台入口 http://127.0.0.1:8080/console/#moderation。
  • 已设置 X-Admin-Secret(默认 dev-admin;控制台会保存在浏览器 localStorage 的 im.admin.secret)。
  • 已创建应用并在控制台顶部选中应用(模块接口路径都带 {appkey})。

步骤​

  1. 配置敏感词与动作

    写入词表;确认 action 是 block 还是 replace。

  2. 观察命中

    发送含敏感词的消息:block 返回 1010;replace 成功但正文被掩码。

  3. 处理待审任务

    列表按 status=pending;对任务执行 approve/reject。

  4. 确认审核结果回调

    拒绝后检查 message.audit_result 投递记录(回调需已开通并订阅该事件)。

参数表​

操作方法与路径请求体 / 参数
敏感词查询GET /api/admin/apps/{appkey}/sensitive-words—(返回 words/action)
敏感词设置POST /api/admin/apps/{appkey}/sensitive-words{words:[...],action?}
审核任务列表GET /api/admin/apps/{appkey}/moderation/tasksstatus(pending/approved/rejected)、offset、limit
审核决定POST /api/admin/apps/{appkey}/moderation/tasks/{task_id}/decide{decision:approve|reject,reason?}

示例​

写入词表 → 查待审 → 拒绝​

Shell
curl -sS -X POST "http://127.0.0.1:8080/api/admin/apps/demo/sensitive-words" \
  -H 'X-Admin-Secret: dev-admin' \
  -H 'content-type: application/json' \
  -d '{"words":["违禁词"],"action":"replace"}'

curl -sS -X GET "http://127.0.0.1:8080/api/admin/apps/demo/moderation/tasks?status=pending&limit=20" \
  -H 'X-Admin-Secret: dev-admin'

# 用上一步 items[].taskId
curl -sS -X POST "http://127.0.0.1:8080/api/admin/apps/demo/moderation/tasks/mt_1001/decide" \
  -H 'X-Admin-Secret: dev-admin' \
  -H 'content-type: application/json' \
  -d '{"decision":"reject","reason":"违规"}'

常见问题​

关闭 sensitive_words 服务后敏感词还生效吗?​

生效。过滤只要求词表非空;该开关只门禁 6 个词表管理接口。

reject 后消息会撤回吗?​

不会撤回,但会在消息 content.extra 写入审核标记并触发审核结果回调;客户端需按协议自行渲染或隐藏。

任务列表 default 只看到 pending?​

是的,status 缺省为 pending,且 all 会被归一到 pending;请分别按三个状态查询。

相关链接​