

# Controlador de revisión de mensajes del chat de IVS
<a name="chat-message-review-handler"></a>

Un controlador de revisión de mensajes le permite revisar o modificar los mensajes antes de entregarlos a una sala. Cuando un controlador de revisión de mensajes está asociado a una sala, se invoca para cada solicitud de SendMessage de esa sala. El controlador de revisión de mensajes hace cumplir la lógica empresarial de la aplicación y determina si permitir, denegar o modificar un mensaje. El chat de Amazon IVS admite las funciones de AWS Lambda como controladores.

## Creación de una función de Lambda
<a name="create-lambda-function"></a>

Antes de configurar un controlador de revisión de mensajes para una sala, debe crear una función lambda con una política de IAM basada en recursos. La función lambda debe estar en la misma cuenta y región de AWS que la sala con la que utilizará la función. La política basada en recursos otorga permiso al chat de Amazon IVS para invocar la función lambda. Para obtener instrucciones, consulte [Resource-Based Policy for Amazon IVS Chat](security-iam.md#security-chat-policy-examples).

### Flujo de trabajo
<a name="create-lambda-function-workflow"></a>

![\[Flujo de trabajo para crear una función lambda con una política de IAM basada en recursos.\]](http://docs.aws.amazon.com/es_es/ivs/latest/ChatUserGuide/images/Chat_Message_Review_Handler_Workflow.png)


### Sintaxis de la solicitud
<a name="create-lambda-function-request-syntax"></a>

Cuando un cliente envía un mensaje, el chat de Amazon IVS invoca la función lambda con una carga útil JSON:

```
{
   "Content": "string",
   "MessageId": "string",
   "RoomArn": "string",
   "Attributes": {"string": "string"},
   "Sender": {
      "Attributes": { "string": "string" },
      "UserId": "string",
      "Ip": "string"
   }
}
```

### Cuerpo de la solicitud
<a name="create-lambda-function-request-body"></a>


| Campo | Descripción | 
| --- | --- | 
| `Attributes` | Atributos asociados al mensaje. | 
| `Content` |  Contenido original del mensaje. | 
| `MessageId` | El ID del mensaje. Generado por el chat de IVS. | 
| `RoomArn` | El ARN de la sala a la que se envían los mensajes. | 
| `Sender` | Información sobre el remitente. Este objeto tiene varios campos: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/ivs/latest/ChatUserGuide/chat-message-review-handler.html)  | 

### Sintaxis de la respuesta
<a name="create-lambda-function-response-syntax"></a>

La función lambda del controlador debe devolver una respuesta JSON con la siguiente sintaxis. Las respuestas que no corresponden con la siguiente sintaxis o que no satisfagan las restricciones de campo no son válidas. En este caso, el mensaje es permitido o denegado según el valor `FallbackResult` que especifique en el controlador de revisión de mensajes; consulte [MessageReviewHandler](https://docs.aws.amazon.com/ivs/latest/ChatAPIReference/API_MessageReviewHandler.html) en la *Amazon IVS Chat API Reference* (Referencia de la API de chat de Amazon IVS).

```
{
   "Content": "string",
   "ReviewResult": "string",
   "Attributes": {"string": "string"},
}
```

### Campos de respuesta
<a name="create-lambda-function-response-fields"></a>


| Campo | Descripción | 
| --- | --- | 
| `Attributes` |  Atributos asociados al mensaje devuelto desde la función lambda. Si `ReviewResult` es `DENY`, un `Reason` puede proporcionarse en `Attributes`; por ejemplo: `"Attributes": {"Reason": "denied for moderation` En este caso, el cliente remitente recibe un error de WebSocket 406 con el motivo del mensaje de error. (Consulte [WebSocket Errors](https://docs.aws.amazon.com/ivs/latest/chatmsgapireference/error-messages.html#websocket-errors) [Errores WebSocket] en la *Amazon IVS Chat Messaging API Reference* [Referencia de la API de mensajería de chat de Amazon IVS]). [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/ivs/latest/ChatUserGuide/chat-message-review-handler.html)  | 
| `Content` |  Contenido del mensaje devuelto desde la función Lambda. Podría editarse o ser original según la lógica empresarial. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/ivs/latest/ChatUserGuide/chat-message-review-handler.html)  | 
| `ReviewResult` | El resultado del procesamiento de revisiones sobre cómo manejar el mensaje. Si es permitido, el mensaje se entrega a todos los usuarios conectados a la sala. Si se deniega, el mensaje no se entrega a ningún usuario.  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/ivs/latest/ChatUserGuide/chat-message-review-handler.html)  | 

### Código de muestra
<a name="create-lambda-function-example"></a>

A continuación se muestra un controlador lambda de muestra en Go. Este modifica el contenido del mensaje, mantiene los atributos del mensaje sin cambios y permite el mensaje.

```
package main

import (
   "context"
   "github.com/aws/aws-lambda-go/lambda"
)

type Request struct {
   MessageId string
   Content string
   Attributes map[string]string
   RoomArn string
   Sender Sender
}

type Response struct {
   ReviewResult string
   Content string
   Attributes map[string]string
}

type Sender struct {
   UserId string
   Ip string
   Attributes map[string]string
}

func main() {
   lambda.Start(HandleRequest)
}

func HandleRequest(ctx context.Context, request Request) (Response, error) {
   content := request.Content + "modified by the lambda handler"
   return Response{
       ReviewResult: "ALLOW",
       Content: content,
   }, nil
}
```

## Asociación y disociación de un controlador con una sala
<a name="associate-disassociate-room"></a>

Una vez que haya configurado e implementado el controlador lambda, utilice la [API de chat de Amazon IVS](https://docs.aws.amazon.com/ivs/latest/ChatAPIReference/Welcome.html):
+ Para asociar el controlador a una sala, llame a CreateRoom o UpdateRoom y especifique el controlador.
+ Para desasociar el controlador de una sala, llame a UpdateRoom con un valor vacío para `MessageReviewHandler.Uri`.

## Monitorieo de errores con Amazon CloudWatch
<a name="monitor-errors-with-cloudwatch"></a>

Puede monitorear los errores que se producen en la revisión de mensajes con Amazon CloudWatch y crear alarmas o paneles de mando para indicar o responder a los cambios de errores específicos. Si se produce un error, el mensaje se permite o deniega según el `FallbackResult` valor que especifique al asociar el controlador a una sala; consulte [Handler de revisión de mensajes](https://docs.aws.amazon.com/ivs/latest/ChatAPIReference/API_MessageReviewHandler.html) en la *Referencia de la API de chat de Amazon IVS*.

Existen varios tipos de errores:
+ `InvocationErrors` ocurre cuando Amazon IVS Chat no puede invocar un controlador.
+ `ResponseValidationErrors` ocurre cuando un controlador devuelve una respuesta que no es válida.
+ AWS Lambda `Errors` ocurre cuando un controlador lambda devuelve un error de función cuando se ha invocado.

Para obtener más información sobre los errores de invocación y de validación de respuestas (que emite Chat de Amazon IVS), consulte [Supervisión de Chat de Amazon IVS](chat-health.md). Para obtener más información sobre los errores de AWS Lambda, consulte [Trabajar con métricas de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-metrics.html).