Em uma postagem recente, vimos como adicionar bate-papo a uma transmissão ao vivo do Amazon Interactive Video Service (Amazon IVS). As salas de bate-papo são uma grande parte da criação de experiências interativas de transmissão ao vivo, mas, infelizmente, elas vêm com a possibilidade inevitável de que alguns usuários possam postar mensagens insensíveis ou ofensivas. Nesta postagem, mostrarei uma maneira muito simples, mas eficaz, de moderar suas salas de bate-papo do Amazon IVS para manter as coisas divertidas e amigáveis.
Existem duas maneiras de abordar a moderação do chat: manual e automatizada. O método manual, que abordaremos em uma postagem futura, exige que um moderador (o transmissor ou outro usuário designado) 'sinalize' uma mensagem de bate-papo para remoção por meio de um dos documentos do Amazon IVS Chat SDKs . Sinalizar uma mensagem envia um evento para todos os clientes WebSocket conectados que podem ser usados para atualizar ou remover a mensagem incorreta. O método automatizado, que abordaremos neste post, nos permite utilizar uma função AWS Lambda para realizar substituições na mensagem de chat ou rejeitar a entrega com base nas necessidades de negócios do aplicativo.
Existem prós e contras na moderação manual e automatizada. Um "pró" da moderação manual é que, como requer intervenção humana, é menos provável que você tenha "falsos positivos" possíveis com a moderação automatizada. Outro ponto positivo da intervenção manual é que os humanos geralmente são melhores do que as máquinas na identificação de mensagens que devem ser moderadas. No entanto, um "contra" da moderação manual é que as mensagens só podem ser removidas depois de serem postadas em uma sala de bate-papo. E como diz o ditado, "você não pode colocar a pasta de dente de volta no tubo". Em outras palavras, mensagens potencialmente ofensivas já foram visualizadas por seus usuários - você não pode fazê-los "desvisualizar" uma mensagem que eles já podem ter visto.
Por outro lado, a moderação automatizada nos dá a capacidade de rejeitar (ou censurar) mensagens prejudiciais antes de serem postadas em uma sala de bate-papo. Mas, como mencionado acima, é muito difícil que as mensagens de chat sejam devidamente moderadas por uma máquina com grande precisão. Você já esteve em uma sala de bate-papo ou postou um comentário em uma postagem de blog que é puramente inocente e o rejeitou ou censurou incorretamente? Pode ser muito frustrante para um usuário de bate-papo que enviar uma mensagem dizendo "Esta pessoa seria um verdadeiro trunfo para nossa equipe" apenas para ver "Esta pessoa seria um verdadeiro idiota para nossa equipe" postado na sala de bate-papo ( ou simplesmente rejeitado)!
Com isso dito, a melhor abordagem para moderação de bate-papo é uma decisão individual para seu aplicativo com base no público-alvo e nas necessidades de negócios. Suspeito que muitos aplicativos que exigem moderação acabariam por utilizar uma combinação de moderação manual e automatizada.
Agora que falamos sobre as duas abordagens possíveis, vamos nos aprofundar em como você pode usar uma função do AWS Lambda para executar a moderação automatizada para sua sala de bate-papo do Amazon IVS.
Ao criar (ou atualizar) uma sala de bate-papo do Amazon IVS por meio do console do Amazon IVS, AWS CLI ou um dos SDKs do Amazon IVS, podemos especificar uma função do AWS Lambda que servirá como nosso manipulador de revisão de mensagens. Nesta postagem, vamos nos concentrar no uso do console do Amazon IVS, mas você pode consultar a documentação apropriada se quiser usar outro método. Para adicionar um manipulador, role para baixo até a seção* Manipulador de revisão de mensagem* ao criar ou editar uma sala de bate-papo do Amazon IVS. Por padrão, a opção 'Desativado' será selecionada.
Vamos mudar isso selecionando Handle with AWS Lambda .
Isso nos apresenta mais algumas opções. A primeira opção, Fallback result , nos permite escolher como queremos lidar com respostas inválidas, erros e tempos limite de nossa função de manipulador. Novamente, isso depende das necessidades do seu negócio. Se preferir rejeitar mensagens neste caso, selecione Negar . Se você escolher Permitir , mensagens potencialmente prejudiciais podem ser postadas em sua sala de bate-papo. É aqui que uma abordagem de combinação pode fornecer a você um 'plano de backup' para que um moderador ainda possa remover mensagens perdidas pelo manipulador por qualquer motivo. Para esta demonstração, escolherei Permitir . Em seguida, precisaremos especificar a função AWS Lambda que atuará como nosso manipulador. Vamos criar uma nova função por meio do console para esta demonstração, então vamos clicar em Create Lambda function .
Clicar neste botão nos levará à lista de nossas funções atuais. Nesta página, clique em Criar função .
Na próxima página, insira o nome ivs-chat-moderação-função, deixe os padrões selecionados para o restante das opções e clique em Criar função .
Agora vamos atualizar o código da nossa função. A documentação nos informa que a função receberá um objeto de evento no seguinte formato:
{ "Content": "string", "MessageId": "string", "RoomArn": "string", "Attributes": {"string": "string"}, "Sender": { "Attributes": { "string": "string" }, "UserId": "string", "Ip": "string" } }
Para retornar um valor de nossa função usando Node, devemos usar uma função assíncrona (consulte a documentação do AWS Lambda para obter mais informações). O objeto que retornamos deve usar o seguinte formato:
{ "Content": "string", "ReviewResult": "string", "Attributes": {"string": "string"}, }
O valor que definimos para ReviewResult deve ser ALLOW
ou DENY
e determinará se a mensagem será ou não entregue na sala de chat. Podemos modificar o Conteúdo da mensagem conforme necessário, o que significa que podemos remover ou substituir conteúdo potencialmente ofensivo ou insensível e ALLOW
que a mensagem seja postada. Quaisquer atributos adicionais podem ser passados com Attributes
. Se você optar por enviar um ReviewResult
de DENY
, poderá passar um atributo Reason
que será usado para retornar uma resposta 406 Not Acceptable
ao cliente incluindo o valor especificado como Reason
.
Consulte o
Documentação do manipulador de revisão de mensagem de bate-papo para obter mais informações, incluindo restrições de comprimento e valores válidos.
Agora podemos modificar o código da função para substituir uma 'palavra imprópria' no conteúdo recebido por asteriscos.
exports.handler = async (event) => { return { ReviewResult: 'ALLOW', Content: event.Content.replace(/bad word/ig, '*** ****'), Attributes: { username: event.Attributes.username } }; };
Vamos voltar para nossa sala de bate-papo, atualize a lista de funções, selecione nossa nova função e clique em Salvar alterações .
Agora podemos postar uma mensagem em nossa sala de bate-papo e ver o que acontece.
Excelente! Nosso manipulador de mensagens de bate-papo foi invocado corretamente e nosso 'palavrão' foi removido antes de ser postado na sala de bate-papo.
Na realidade, você gostaria de usar uma solução muito mais sofisticada para substituir texto prejudicial do que o regex simples que estou usando acima. Eu testei a biblioteca @2toad/profanity e descobri que ela faz um ótimo trabalho de censura e identificação de palavras obscenas em uma mensagem recebida. Sinta-se à vontade para usar qualquer solução que funcione para você, mas lembre-se de que sua função deve retornar uma resposta em 200 ms ou o tempo limite será esgotado, portanto, chamadas de API de terceiros podem estar fora de questão.
Aqui está um exemplo de um manipulador que usa a biblioteca @2toad/profanity
para censurar palavras nocivas:
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 } }; };
E um exemplo de rejeição de uma mensagem em vez de censura.
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 } }; };
Nesta postagem, aprendemos sobre duas abordagens diferentes para moderar mensagens de bate-papo: manual e automatizada. Em seguida, criamos uma função do AWS Lambda e a associamos a uma sala de bate-papo do Amazon IVS para executar a moderação de bate-papo automatizada. Em uma postagem futura, veremos como você pode usar o Amazon IVS Chat SDK para moderar manualmente as mensagens de chat. Se você tiver alguma dúvida, deixe um comentário ou entre em contato comigo no Twitter .