Dans un article récent, nous avons examiné comment ajouter un chat à un flux en direct d'Amazon Interactive Video Service (Amazon IVS). Les salons de discussion jouent un rôle important dans la création d'expériences interactives de diffusion en direct, mais malheureusement, ils s'accompagnent inévitablement de la possibilité que certains utilisateurs publient des messages insensibles ou autrement offensants. Dans cet article, je vais vous montrer un moyen très simple mais efficace de modérer vos salons de discussion Amazon IVS pour que les choses restent amusantes et conviviales.
Il existe deux façons d'aborder la modération du chat : manuelle et automatisée. La méthode manuelle, que nous aborderons dans un prochain article, nécessite qu'un modérateur (le diffuseur ou un autre utilisateur désigné) « marque » un message de chat pour suppression via l'une des documentations des SDK Amazon IVS Chat. Le marquage d'un message envoie un événement à tous les clients WebSocket connectés qui peuvent être utilisés pour mettre à jour ou supprimer le message incriminé. La méthode automatisée, que nous aborderons dans cet article, nous permet d'utiliser une fonction AWS Lambda pour effectuer des substitutions sur le message de chat ou rejeter la livraison en fonction des besoins commerciaux de l'application.
La modération manuelle et automatisée présente des avantages et des inconvénients. L'un des "avantages" de la modération manuelle est que, puisqu'elle nécessite une intervention humaine, vous êtes moins susceptible d'avoir des "faux positifs" possibles avec la modération automatisée. Un autre avantage de l'intervention manuelle est que les humains sont généralement meilleurs que les machines pour identifier les messages qui doivent être modérés. Cependant, un "inconvénient" de la modération manuelle est que les messages ne peuvent être supprimés qu'après avoir été publiés dans une salle de chat. Et comme le dit le proverbe, "on ne peut pas remettre le dentifrice dans le tube". En d'autres termes, les messages potentiellement offensants ont déjà été vus par vos utilisateurs - vous ne pouvez pas leur faire "ne pas voir" un message qu'ils ont peut-être déjà vu.
D'autre part, la modération automatisée nous donne la possibilité de rejeter (ou de censurer) les messages nuisibles avant qu'ils ne soient publiés sur un salon de discussion. Mais, comme mentionné ci-dessus, il est vraiment difficile que les messages de chat soient correctement modérés par une machine avec une grande précision. Avez-vous déjà été dans une salle de discussion ou posté un commentaire sur un article de blog qui est purement innocent et l'a-t-il rejeté ou censuré de manière incorrecte ? Il peut être très frustrant pour un utilisateur de chat qui soumet un message disant "Cette personne serait un réel atout pour notre équipe" pour voir "Cette personne serait un vrai ***et pour notre équipe" posté dans la salle de chat ( ou tout simplement rejeté) !
Cela dit, la meilleure approche pour la modération du chat est une décision individuelle pour votre application en fonction de votre public cible et des besoins de votre entreprise. Je soupçonne que de nombreuses applications nécessitant une modération utiliseraient finalement une combinaison de modération manuelle et automatisée.
Maintenant que nous avons parlé des deux approches possibles, examinons comment vous pouvez utiliser une fonction AWS Lambda pour effectuer une modération automatisée pour votre salle de discussion Amazon IVS.
Lors de la création (ou de la mise à jour) d'une salle de discussion Amazon IVS via la console Amazon IVS, l'AWS CLI ou l'un des kits SDK Amazon IVS, nous pouvons spécifier une fonction AWS Lambda qui servira de gestionnaire de révision des messages. Dans cet article, nous nous concentrerons sur l'utilisation de la console Amazon IVS, mais vous pouvez vous référer à la documentation appropriée si vous souhaitez utiliser une autre méthode. Pour ajouter un gestionnaire, faites défiler jusqu'à la section * Gestionnaire de révision des messages * lors de la création ou de la modification d'une salle de discussion Amazon IVS. Par défaut, l'option 'Désactivé' sera sélectionnée.
Changeons cela en sélectionnant Handle with AWS Lambda .
Cela nous présente quelques options supplémentaires. La première option, Résultat de secours, nous permet de choisir comment nous voulons gérer les réponses non valides, les erreurs et les délais d'attente de notre fonction de gestionnaire. Encore une fois, cela dépend des besoins de votre entreprise. Si vous préférez rejeter les messages dans ce cas, sélectionnez Refuser . Si vous choisissez Autoriser , des messages potentiellement dangereux peuvent être publiés dans votre salon de discussion. C'est là qu'une approche combinée pourrait vous fournir un «plan de sauvegarde» afin qu'un modérateur puisse toujours supprimer les messages manqués par le gestionnaire pour une raison quelconque. Pour cette démo, je choisirai Autoriser . Ensuite, nous devrons spécifier la fonction AWS Lambda qui agira comme notre gestionnaire. Nous allons créer une nouvelle fonction via la console pour cette démo, alors cliquons sur Create Lambda function .
Cliquer sur ce bouton nous amènera à la liste de nos fonctions actuelles. Sur cette page, cliquez sur Créer une fonction .
Sur la page suivante, entrez le nom ivs-chat-moderation-function, laissez les valeurs par défaut sélectionnées pour le reste des options, puis cliquez sur Créer une fonction .
Maintenant, mettons à jour le code de notre fonction. La documentation nous indique que la fonction recevra un objet événement au format suivant :
{ "Content": "string", "MessageId": "string", "RoomArn": "string", "Attributes": {"string": "string"}, "Sender": { "Attributes": { "string": "string" }, "UserId": "string", "Ip": "string" } }
Afin de renvoyer une valeur de notre fonction à l'aide de Node, nous devons utiliser une fonction asynchrone (voir la documentation AWS Lambda pour plus d'informations). L'objet que nous renvoyons doit utiliser le format suivant :
{ "Content": "string", "ReviewResult": "string", "Attributes": {"string": "string"}, }
La valeur que nous avons définie pour ReviewResult doit être ALLOW
ou DENY
et déterminera si le message est livré ou non à la salle de discussion. Nous pouvons modifier le contenu du message si nécessaire, ce qui signifie que nous pouvons supprimer ou remplacer le contenu potentiellement offensant ou insensible et ALLOW
la publication du message. Tous les attributs supplémentaires peuvent être passés avec Attributes
. Si vous choisissez d'envoyer un ReviewResult
de DENY
, vous pouvez transmettre un attribut Reason
qui sera utilisé pour renvoyer une réponse 406 Not Acceptable
au client, y compris la valeur spécifiée comme Reason
.
Se référer au
Documentation du gestionnaire de révision des messages de chat pour plus d'informations, y compris les contraintes de longueur et les valeurs valides.
Nous pouvons maintenant modifier le code de la fonction pour remplacer un "mot grossier" dans le contenu entrant par des astérisques.
exports.handler = async (event) => { return { ReviewResult: 'ALLOW', Content: event.Content.replace(/bad word/ig, '*** ****'), Attributes: { username: event.Attributes.username } }; };
Revenons à notre salon de discussion, actualisons la liste des fonctions, sélectionnons notre nouvelle fonction et cliquez sur Enregistrer les modifications .
Maintenant, nous pouvons poster un message sur notre salon de discussion et voir ce qui se passe.
Excellent! Notre gestionnaire de messages de discussion a été correctement appelé et notre «gros mot» a été supprimé avant d'être publié dans la salle de discussion.
En réalité, vous voudriez utiliser une solution beaucoup plus sophistiquée pour remplacer le texte nuisible que la simple regex que j'utilise ci-dessus. J'ai testé la bibliothèque @2toad/profanity et j'ai trouvé qu'elle faisait un excellent travail de censure et d'identification des mots profanes dans un message entrant. N'hésitez pas à utiliser la solution qui vous convient, mais gardez à l'esprit que votre fonction doit renvoyer une réponse dans les 200 ms ou elle expirera, de sorte que les appels d'API tiers peuvent être hors de question.
Voici un exemple de gestionnaire qui utilise la @2toad/profanity
pour censurer les mots nuisibles :
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 } }; };
Et un exemple de rejet d'un message au lieu de censurer.
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 } }; };
Dans cet article, nous avons découvert deux approches différentes pour modérer les messages de chat : manuelle et automatisée. Nous avons ensuite créé une fonction AWS Lambda et l'avons associée à une salle de chat Amazon IVS pour effectuer une modération de chat automatisée. Dans un prochain article, nous verrons comment vous pouvez utiliser le kit SDK Amazon IVS Chat pour modérer manuellement les messages de chat. Si vous avez des questions, laissez un commentaire ou contactez-moi sur Twitter .