跳到主要内容

即时通讯文本检测

本文介绍了如何通过即时通讯 hook 接入第三方的文本检测服务。

预备知识

本文涉及到即时通讯服务 hook 以及云引擎在线编辑云函数功能,首先请阅读相关文档了解这些功能:

  1. 详解消息 hook 与系统对话
  2. 云函数和 Hook 开发指南 § 在线编写云函数

操作步骤

  1. 开启云引擎服务,选择「云引擎 -> 部署管理 -> web -> 部署 -> 在线编辑 -> 创建函数」,于弹出编辑窗口中选择类型 Hook,名称 _messageReceived,在下方编辑区域填入自行编写的函数。创建成功后点击「部署」,等待部署成功。

  2. 现在使用即时通讯服务发送消息,可以看到内容会根据敏感词情况做出相应的变化了。

代码示范

下面是一段 Node.js 版的云引擎 Hook 代码,供参考:

const https = require("https");

// 假设第三方文本检测服务通过 HTTP Header 鉴权
const authToken = "第三方文本检测服务的鉴权 token";

const params = request.params;

// 向第三方文本检测服务提交聊天内容和聊天用户的 ID
// 不同服务接受的参数不同,请根据实际情况修改
const postData = JSON.stringify({
data: {
text: params.content,
user_id: params.fromPeer,
},
});

const options = {
hostname: "third-party-text-moderation.example.com",
port: 443,
path: "/path/to/text/moderation/interface",
method: "POST",
headers: {
"Content-Type": "application/json",
"X-Third-Party-Auth": authToken,
},
};

return new Promise((resolve, reject) => {
const req = https.request(options, (res) => {
if (res.statusCode != 200) {
// or resolve(null)
reject(new Error(`BAD STATUS: ${res.statusCode}`));
return;
}
let body = "";
res.setEncoding("utf8");
res.on("data", (chunk) => {
body += chunk;
});
res.on("end", () => {
json = JSON.parse(body);

if (json.result == 0) {
resolve(null);
} else {
// 假设第三方文本检测服务会在 filtered_text 字段中返回过滤后的文本
if (json.filtered_text) {
resolve({ content: json.filtered_text });
} else {
resolve({ drop: true });
}
}
});
});

req.on("error", (e) => {
// or resolve(null)
reject(e);
});

req.write(postData);
req.end();
});

以上代码简单展示了如何在即时通讯服务中使用第三方文本检测服务,代码仅供参考,你需要根据实际业务场景来处理请求和响应结果。 涉及到的即时通讯 hook 参数和文本检测服务请求与响应参数,请参考即时通讯 _messageReceived Hook和第三方文本检测服务的 API 文档。