En una publicación reciente, analizamos cómo agregar chat a una transmisión en vivo de Amazon Interactive Video Service (Amazon IVS). Las salas de chat son una gran parte de la creación de experiencias interactivas de transmisión en vivo, pero desafortunadamente vienen con la posibilidad inevitable de que algunos usuarios publiquen mensajes insensibles u ofensivos. En esta publicación, le mostraré una manera muy simple pero efectiva de moderar sus salas de chat de Amazon IVS para mantener las cosas divertidas y amigables.
Hay dos formas de abordar la moderación del chat: manual y automatizada. El método manual, que trataremos en una publicación futura, requiere que un moderador (el emisor u otro usuario designado) "marque" un mensaje de chat para eliminarlo a través de uno de los documentos de SDK de chat de Amazon IVS. Marcar un mensaje envía un evento a todos los clientes WebSocket conectados que se pueden usar para actualizar o eliminar el mensaje ofensivo. El método automatizado, que cubriremos en esta publicación, nos permite utilizar una función AWS Lambda para realizar sustituciones en el mensaje de chat o rechazar la entrega según las necesidades comerciales de la aplicación.
Hay ventajas y desventajas tanto para la moderación manual como para la automática. Un "pro" de la moderación manual es que, dado que requiere la intervención humana, es menos probable que tenga "falsos positivos" que son posibles con la moderación automática. Otro aspecto positivo de la intervención manual es que, en general, los humanos son mejores que las máquinas para identificar mensajes que deben moderarse. Sin embargo, una "contra" de la moderación manual es que los mensajes solo se pueden eliminar después de que se hayan publicado en una sala de chat. Y como dice el refrán, "no se puede volver a poner la pasta de dientes en el tubo". En otras palabras, sus usuarios ya han visto mensajes potencialmente ofensivos; no puede hacer que "dejen de ver" un mensaje que ya hayan visto.
Por otro lado, la moderación automática nos brinda la capacidad de rechazar (o censurar) mensajes dañinos antes de que se publiquen en una sala de chat. Pero, como se mencionó anteriormente, es muy difícil que una máquina modere correctamente los mensajes de chat con mucha precisión. ¿Alguna vez ha estado en una sala de chat o ha publicado un comentario en una publicación de blog que es puramente inocente y fue rechazado o censurado incorrectamente? Puede ser muy frustrante para un usuario de chat que envía un mensaje que dice "Esta persona sería un verdadero activo para nuestro equipo" solo para ver "Esta persona sería un verdadero ***et para nuestro equipo" publicado en la sala de chat ( o simplemente rechazado)!
Dicho esto, el mejor enfoque para la moderación del chat es una decisión individual para su aplicación en función de su público objetivo y las necesidades comerciales. Sospecho que muchas aplicaciones que requieren moderación utilizarían en última instancia una combinación de moderación manual y automática.
Ahora que hemos hablado sobre ambos enfoques posibles, profundicemos en cómo puede usar una función de AWS Lambda para realizar una moderación automática para su sala de chat de Amazon IVS.
Al crear (o actualizar) una sala de chat de Amazon IVS a través de la consola de Amazon IVS, la CLI de AWS o uno de los SDK de Amazon IVS, podemos especificar una función de AWS Lambda que servirá como nuestro controlador de revisión de mensajes. En esta publicación, nos centraremos en el uso de la consola de Amazon IVS, pero puede consultar la documentación correspondiente si desea utilizar otro método. Para agregar un controlador, desplácese hacia abajo hasta la sección* Controlador de revisión de mensajes* mientras crea o edita una sala de chat de Amazon IVS. De forma predeterminada, se seleccionará la opción 'Deshabilitado'.
Cambiemos esto seleccionando Manejar con AWS Lambda .
Esto nos presenta algunas opciones más. La primera opción, Fallback result , nos permite elegir cómo queremos manejar las respuestas no válidas, los errores y los tiempos de espera de nuestra función de controlador. Nuevamente, esto depende de las necesidades de su negocio. Si prefiere rechazar los mensajes en este caso, seleccione Denegar . Si elige Permitir , es posible que se publiquen mensajes potencialmente dañinos en su sala de chat. Aquí es donde un enfoque combinado podría proporcionarle un "plan de respaldo" para que un moderador aún pueda eliminar los mensajes que el controlador no haya detectado por cualquier motivo. Para esta demostración, elegiré Permitir . A continuación, necesitaremos especificar la función AWS Lambda que actuará como nuestro controlador. Crearemos una nueva función a través de la consola para esta demostración, así que hagamos clic en Crear función Lambda .
Al hacer clic en este botón nos llevará a la lista de nuestras funciones actuales. En esta página, haga clic en Crear función .
En la página siguiente, ingrese el nombre ivs-chat-moderation-function, deje los valores predeterminados seleccionados para el resto de las opciones y luego haga clic en Crear función .
Ahora actualicemos el código de nuestra función. La documentación nos dice que la función recibirá un objeto de evento en el siguiente formato:
{ "Content": "string", "MessageId": "string", "RoomArn": "string", "Attributes": {"string": "string"}, "Sender": { "Attributes": { "string": "string" }, "UserId": "string", "Ip": "string" } }
Para devolver un valor de nuestra función usando Node, debemos usar una función asíncrona (consulte la documentación de AWS Lambda para obtener más información). El objeto que devolvamos debe usar el siguiente formato:
{ "Content": "string", "ReviewResult": "string", "Attributes": {"string": "string"}, }
El valor que establecemos para ReviewResult debe ser ALLOW
o DENY
y determinará si el mensaje se envía o no a la sala de chat. Podemos modificar el Contenido del mensaje según sea necesario, lo que significa que podemos eliminar o reemplazar contenido potencialmente ofensivo o insensible y ALLOW
que se publique el mensaje. Cualquier atributo adicional se puede pasar con Attributes
. Si elige enviar un ReviewResult
de DENY
, puede pasar un atributo de Reason
que se usará para devolver una respuesta 406 Not Acceptable
al cliente, incluido el valor especificado como Reason
.
Referirse a
Documentación del controlador de revisión de mensajes de chat para obtener más información, incluidas las restricciones de longitud y los valores válidos.
Ahora podemos modificar el código de la función para reemplazar una 'mala palabra' en el contenido entrante con asteriscos.
exports.handler = async (event) => { return { ReviewResult: 'ALLOW', Content: event.Content.replace(/bad word/ig, '*** ****'), Attributes: { username: event.Attributes.username } }; };
Volvamos a nuestra sala de chat, actualice la lista de funciones, seleccione nuestra nueva función y haga clic en Guardar cambios .
Ahora podemos publicar un mensaje en nuestra sala de chat y ver qué sucede.
¡Excelente! Nuestro controlador de mensajes de chat se invocó correctamente y nuestra 'mala palabra' se eliminó antes de que se publicara en la sala de chat.
En realidad, le gustaría usar una solución mucho más sofisticada para reemplazar el texto dañino que la simple expresión regular que estoy usando arriba. Probé la biblioteca @2toad/blasfemia y descubrí que hace un gran trabajo censurando e identificando palabras profanas en un mensaje entrante. Siéntase libre de usar cualquier solución que funcione para usted, pero tenga en cuenta que su función debe devolver una respuesta dentro de los 200 ms o se agotará el tiempo de espera, por lo que las llamadas API de terceros pueden estar fuera de discusión.
Aquí hay un ejemplo de un controlador que usa la @2toad/profanity
para censurar palabras dañinas:
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 } }; };
Y un ejemplo de rechazar un mensaje en lugar de censurar.
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 } }; };
En esta publicación, aprendimos sobre dos enfoques diferentes para moderar los mensajes de chat: manual y automatizado. Luego creamos una función de AWS Lambda y la asociamos con una sala de chat de Amazon IVS para realizar la moderación de chat automatizada. En una publicación futura, veremos cómo puede usar el SDK de chat de Amazon IVS para moderar manualmente los mensajes de chat. Si tiene alguna pregunta, deje un comentario o comuníquese conmigo en Twitter .