

# Manipulador de revisão de mensagem do Chat do IVS
<a name="chat-message-review-handler"></a>

Um manipulador de revisão de mensagens permite revisar ou modificar mensagens antes que elas sejam entregues em uma sala. Quando um manipulador de revisão de mensagens é associado a uma sala, ele é chamado para cada solicitação SendMessage para a sala. O manipulador aplica a lógica de negócios da aplicação e determina se deseja permitir, negar ou modificar uma mensagem. O Amazon IVS Chat oferece suporte a funções do AWS Lambda, como manipuladores.

## Criação de uma função do Lambda
<a name="create-lambda-function"></a>

Antes de configurar um manipulador de revisão de mensagens para uma sala, é necessário criar uma função Lambda com uma política do IAM baseada em recursos. A função Lambda deve estar na mesma conta da AWS e na mesma região da AWS que a sala com a qual você usará a função. A política baseada em recurso dá ao Amazon IVS Chat permissão para invocar sua função Lambda. Para obter instruções, consulte [Política baseada em recurso para o Chat do Amazon IVS](security-iam.md#security-chat-policy-examples).

### Fluxo de trabalho
<a name="create-lambda-function-workflow"></a>

![\[Fluxo de trabalho para criar uma função Lambda com uma política do IAM baseada em recurso.\]](http://docs.aws.amazon.com/pt_br/ivs/latest/ChatUserGuide/images/Chat_Message_Review_Handler_Workflow.png)


### Sintaxe da solicitação
<a name="create-lambda-function-request-syntax"></a>

Quando um cliente envia uma mensagem, o Amazon IVS Chat invoca a função Lambda com uma carga útil JSON:

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

### Corpo da Solicitação
<a name="create-lambda-function-request-body"></a>


| Campo | Descrição | 
| --- | --- | 
| `Attributes` | Atributos associados à mensagem. | 
| `Content` |  Conteúdo original da mensagem. | 
| `MessageId` | O ID da mensagem. Gerada pelo IVS Chat. | 
| `RoomArn` | O ARN da sala onde as mensagens são enviadas. | 
| `Sender` | Informações sobre o remetente. Esse objeto tem vários campos: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/ivs/latest/ChatUserGuide/chat-message-review-handler.html)  | 

### Sintaxe da resposta
<a name="create-lambda-function-response-syntax"></a>

O manipulador da função Lambda deve retornar uma resposta JSON com a sintaxe a seguir. As respostas que não correspondem à sintaxe abaixo ou não satisfazem as restrições de campo são inválidas. Nesse caso, a mensagem é permitida ou negada conforme o valor de `FallbackResult` especificado no manipulador de revisão de mensagens; consulte [MessageReviewHandler](https://docs.aws.amazon.com/ivs/latest/ChatAPIReference/API_MessageReviewHandler.html) na *Referência da API do Amazon IVS Chat*.

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

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


| Campo | Descrição | 
| --- | --- | 
| `Attributes` |  Atributos associados à mensagem retornada da função Lambda. Se `ReviewResult` for `DENY`, poderá ser fornecido um `Reason` em `Attributes`; por exemplo: `"Attributes": {"Reason": "denied for moderation` Nesse caso, o cliente remetente receberá um erro WebSocket 406 com o motivo na mensagem de erro. (Consulte [Erros WebSocket](https://docs.aws.amazon.com/ivs/latest/chatmsgapireference/error-messages.html#websocket-errors) na *Referência da API de mensagens do Amazon IVS Chat*.) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/ivs/latest/ChatUserGuide/chat-message-review-handler.html)  | 
| `Content` |  O conteúdo da mensagem retornada da função Lambda. Pode ser editado ou original, conforme a lógica de negócios. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/ivs/latest/ChatUserGuide/chat-message-review-handler.html)  | 
| `ReviewResult` | O resultado do processamento de revisão sobre como manipular a mensagem. Se permitido, a mensagem será entregue a todos os usuários conectados à sala. Se negado, a mensagem não será entregue a nenhum usuário.  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/ivs/latest/ChatUserGuide/chat-message-review-handler.html)  | 

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

Veja abaixo um exemplo de manipulador do Lambda em Go. Modifica o conteúdo da mensagem, mantém os atributos da mensagem inalterados e permite a mensagem.

```
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
}
```

## Associar e desassociar um manipulador de uma sala
<a name="associate-disassociate-room"></a>

Depois de configurar e implementar o manipulador do Lambda, use a [API do Amazon IVS Chat](https://docs.aws.amazon.com/ivs/latest/ChatAPIReference/Welcome.html):
+ Para associar o manipulador a uma sala, chame CreateRoom ou UpdateRoom e especifique o manipulador.
+ Para desassociar o manipulador de uma sala, chame UpdateRoom com um valor vazio para `MessageReviewHandler.Uri`.

## Monitoramento de erros com o Amazon CloudWatch
<a name="monitor-errors-with-cloudwatch"></a>

É possível monitorar erros que ocorrem na revisão de mensagens com o Amazon CloudWatch e criar alarmes ou painéis para indicar ou responder às alterações de erros específicos. Se ocorrer um erro, a mensagem será permitida ou negada conforme o valor de `FallbackResult` especificado quando você associa o manipulador a uma sala; consulte [MessageReviewHandler](https://docs.aws.amazon.com/ivs/latest/ChatAPIReference/API_MessageReviewHandler.html) na *Referência da API do Amazon IVS Chat*.

Há vários tipos de erros:
+ `InvocationErrors` ocorrem quando o Amazon IVS Chat não pode chamar um manipulador.
+ `ResponseValidationErrors` ocorrem quando um manipulador retorna uma resposta inválida.
+ Os `Errors` do AWS Lambda ocorrem quando um manipulador do Lambda retorna um erro de função quando foi invocado.

Para obter mais informações sobre erros de invocação e erros de validação de resposta (emitidos pelo Chat do Amazon IVS), [Monitoramento do Chat do Amazon IVS](chat-health.md). Para obter mais informações sobre erros do AWS Lambda, consulte [Trabalhar com métricas de funções do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-metrics.html).