在最近的一篇文章中,我们了解了如何将聊天添加到 Amazon Interactive Video Service (Amazon IVS) 直播中。聊天室是创建交互式实时流媒体体验的重要组成部分,但不幸的是,它们不可避免地存在一些用户可能会发布不敏感或令人反感的消息的可能性。在这篇文章中,我将向您展示一种非常简单但有效的方式来管理您的 Amazon IVS 聊天室,让聊天室保持有趣和友好。
有两种方法可以解决聊天审核问题:手动和自动。我们将在以后的帖子中介绍的手动方法需要主持人(广播公司或其他指定用户)通过 Amazon IVS Chat SDKs 文档之一“标记”聊天消息以将其删除。标记一条消息会向所有连接的 WebSocket 客户端发送一个事件,该事件可用于更新或删除有问题的消息。我们将在本文中介绍的自动化方法让我们可以利用 AWS Lambda 函数根据应用程序的业务需求对聊天消息执行替换或拒绝传送。
手动和自动审核各有利弊。手动审核的一个“优点”是,由于它需要人工干预,因此您不太可能出现自动审核可能出现的“误报”。人工干预的另一个好处是,人类通常比机器更擅长识别应该审核的消息。然而,手动审核的一个“缺点”是消息只有在发布到聊天室后才能被删除。俗话说,“你不能把牙膏放回管子里”。换句话说,您的用户已经查看了具有潜在冒犯性的消息 - 您不能让他们“取消查看”他们可能已经看到的消息。
另一方面,自动审核使我们能够在有害消息发布到聊天室之前拒绝(或审查)它们。但是,正如上面提到的,聊天消息很难由一台机器非常准确地进行适当的审核。您是否曾在聊天室或对博客帖子发表过纯无辜的评论,但遭到拒绝或审查不当?对于提交消息说“此人将是我们团队的真正资产”的聊天用户来说,可能会非常沮丧,但看到“此人将是我们团队的真正 ***et”发布到聊天室(或者干脆拒绝)!
话虽如此,聊天审核的最佳方法是根据您的目标受众和业务需求为您的应用程序做出单独的决定。我怀疑许多需要审核的应用程序最终会结合使用手动和自动审核。
现在我们已经讨论了这两种可能的方法,让我们深入了解如何使用 AWS Lambda 函数为您的 Amazon IVS 聊天室执行自动管理。
当通过 Amazon IVS 控制台、AWS CLI 或 Amazon IVS SDK 之一创建(或更新)Amazon IVS 聊天室时,我们可以指定一个 AWS Lambda 函数作为我们的消息审查处理程序。在本文中,我们将重点介绍如何使用 Amazon IVS 控制台,但如果您想使用其他方法,可以参考相应的文档。要添加处理程序,请在创建或编辑 Amazon IVS 聊天室时向下滚动到*消息审查处理程序*部分。默认情况下,将选择“禁用”选项。
让我们通过选择Handle with AWS Lambda来改变这一点。
这为我们提供了更多选择。第一个选项Fallback result允许我们选择我们希望如何处理处理函数中的无效响应、错误和超时。同样,这取决于您的业务需求。在这种情况下,如果您宁愿拒绝邮件,请选择拒绝。如果您选择允许,可能会向您的聊天室张贴可能有害的消息。这是组合方法可以为您提供“备份计划”的地方,以便主持人仍然可以删除处理程序出于任何原因错过的消息。对于此演示,我将选择Allow 。接下来,我们需要指定将充当处理程序的 AWS Lambda 函数。我们将通过控制台为此演示创建一个新函数,因此让我们单击Create Lambda function 。
单击此按钮将带我们进入当前功能列表。在此页面上,单击创建函数。
在下一页上,输入名称 ivs-chat-moderation-function,其余选项保持默认选择,然后单击Create function 。
现在让我们更新函数的代码。文档告诉我们该函数将接收以下格式的事件对象:
{ "Content": "string", "MessageId": "string", "RoomArn": "string", "Attributes": {"string": "string"}, "Sender": { "Attributes": { "string": "string" }, "UserId": "string", "Ip": "string" } }
为了使用 Node 从我们的函数返回一个值,我们必须使用异步函数(有关更多信息,请参阅AWS Lambda 文档)。我们返回的对象必须使用以下格式:
{ "Content": "string", "ReviewResult": "string", "Attributes": {"string": "string"}, }
我们为 ReviewResult 设置的值必须是ALLOW
或DENY
,并将决定是否将消息传递到聊天室。我们可以根据需要修改消息内容,这意味着我们可以删除或替换可能令人反感或不敏感的内容,并ALLOW
发布消息。任何附加属性都可以通过Attributes
传递。如果您选择发送DENY
的ReviewResult
,您可以传递Reason
属性,该属性将用于向客户端返回406 Not Acceptable
响应,包括指定为Reason
的值。
请参阅
聊天消息审核处理程序文档 有关更多信息,包括长度限制和有效值。
现在我们可以修改函数的代码,用星号替换传入内容中的“坏词”。
exports.handler = async (event) => { return { ReviewResult: 'ALLOW', Content: event.Content.replace(/bad word/ig, '*** ****'), Attributes: { username: event.Attributes.username } }; };
让我们回到我们的聊天室,刷新函数列表,选择我们的新函数并单击保存更改。
现在我们可以向我们的聊天室发布一条消息,看看会发生什么。
出色的!我们的聊天消息处理程序被正确调用,我们的“坏词”在发布到聊天室之前被删除。
实际上,您可能希望使用比我上面使用的简单正则表达式更复杂的解决方案来替换有害文本。我测试了@2toad/profanity库,发现它在审查和识别传入消息中的亵渎词语方面做得很好。随意使用适合您的任何解决方案,但请记住,您的函数必须在 200 毫秒内返回响应,否则它将超时,因此第三方 API 调用可能是不可能的。
下面是一个使用@2toad/profanity
库来审查有害词的处理程序示例:
exports.censorChat = async (event) => { console.log('censorChat:', JSON.stringify(event, null, 2)); return { ReviewResult: 'ALLOW', Content: profanity.censor(event.Content), Attributes: { username: event.Attributes.username } }; };
以及拒绝消息而不是审查的示例。
exports.rejectInappropriateChat = async (event) => { console.log('rejectInappropriateChat:', JSON.stringify(event, null, 2)); const profane = profanity.exists(event.Content); return { ReviewResult: profane ? 'DENY' : 'ALLOW', Content: profane ? '' : event.Content, Attributes: { username: event.Attributes.username } }; };
在这篇文章中,我们了解了两种不同的管理聊天消息的方法:手动和自动。然后我们创建了一个 AWS Lambda 函数并将其与 Amazon IVS 聊天室相关联以执行自动聊天管理。在以后的博文中,我们将介绍如何使用 Amazon IVS Chat SDK 手动审核聊天消息。如果您有任何疑问,请发表评论或在Twitter 上与我联系。