

# IVS Chat メッセージレビューハンドラ
<a name="chat-message-review-handler"></a>

メッセージレビューハンドラを使用すると、ルームに配信される前にメッセージをレビューおよび/または修正することができます。メッセージレビューハンドラがルームに関連付けられている場合、そのルームへの SendMessage リクエストごとに呼び出されます。ハンドラは、アプリケーションのビジネスロジックを実行し、メッセージを許可、拒否、または修正するかどうかを決定します。Amazon IVS Chat は AWS Lambda 関数をハンドラとしてサポートしています。

## Lambda 関数の作成
<a name="create-lambda-function"></a>

ルームのメッセージレビューハンドラを設定する前に、リソースベースの IAM ポリシーを使用して Lambda 関数を作成する必要があります。Lambda 関数は、関数を使用するルームと同じ AWS アカウントおよび AWS リージョン内に存在する必要があります。リソースベースのポリシーは、Lambda 関数を呼び出すアクセス許可を Amazon IVS Chat に付与します。手順については、「[Resource-Based Policy for Amazon IVS Chat](security-iam.md#security-chat-policy-examples)」を参照してください。

### ワークフロー
<a name="create-lambda-function-workflow"></a>

![\[リソースベースの IAM ポリシーを使用して Lambda 関数を作成するワークフロー。\]](http://docs.aws.amazon.com/ja_jp/ivs/latest/ChatUserGuide/images/Chat_Message_Review_Handler_Workflow.png)


### リクエストの構文
<a name="create-lambda-function-request-syntax"></a>

クライアントがメッセージを送信すると、Amazon IVS Chat は JSON ペイロードを使用して Lambda 関数を呼び出します。

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

### リクエスト本文
<a name="create-lambda-function-request-body"></a>


| フィールド | 説明 | 
| --- | --- | 
| `Attributes` | メッセージに関連付けられた属性。 | 
| `Content` |  メッセージの元のコンテンツ。 | 
| `MessageId` | メッセージ ID｡ IVS チャットによって生成されます。 | 
| `RoomArn` | メッセージが送信されるルームの ARN。 | 
| `Sender` | 送信者に関する情報。このオブジェクトにはいくつかのフィールドがあります。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/ivs/latest/ChatUserGuide/chat-message-review-handler.html)  | 

### レスポンスの構文
<a name="create-lambda-function-response-syntax"></a>

ハンドラ Lambda 関数は、次の構文で JSON レスポンスを返す必要があります。以下の構文に対応しない、またはフィールド制約を満たすレスポンスは無効です。この場合、メッセージレビューハンドラで指定した `FallbackResult` の値に応じて、メッセージが許可または拒否されます。「Amazon IVS Chat API リファレンス」の「[MessageReviewHandler](https://docs.aws.amazon.com/ivs/latest/ChatAPIReference/API_MessageReviewHandler.html)」を参照してください。

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

### レスポンスフィールド
<a name="create-lambda-function-response-fields"></a>


| フィールド | 説明 | 
| --- | --- | 
| `Attributes` |  Lambda 関数から返されたメッセージに関連付けられた属性。 `ReviewResult` が `DENY` の場合、`Attributes` には `Reason` を指定できます。例: `"Attributes": {"Reason": "denied for moderation` この場合、送信側クライアントはエラーメッセージに理由を記載した WebSocket 406 エラーを受信します。(「Amazon IVS Chat メッセージング API リファレンス」の「[WebSocket エラー](https://docs.aws.amazon.com/ivs/latest/chatmsgapireference/error-messages.html#websocket-errors)」を参照してください。) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/ivs/latest/ChatUserGuide/chat-message-review-handler.html)  | 
| `Content` |  Lambda 関数から返されたメッセージの内容。ビジネスロジックに応じて、編集したり、元のメッセージにしたりできます。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/ivs/latest/ChatUserGuide/chat-message-review-handler.html)  | 
| `ReviewResult` | メッセージの処理方法に関するレビュー処理の結果。許可されている場合、メッセージはルームに接続されているすべてのユーザーに配信されます。拒否された場合、メッセージはどのユーザーにも配信されません。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/ivs/latest/ChatUserGuide/chat-message-review-handler.html)  | 

### サンプルコード
<a name="create-lambda-function-example"></a>

以下は、Go の Lambda ハンドラのサンプルです。メッセージの内容を修正し、メッセージ属性を変更せずにメッセージを許可します。

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

## ハンドラとルームとの関連付けと関連付け解除
<a name="associate-disassociate-room"></a>

Lambda ハンドラのセットアップと実装が完了したら、[Amazon IVS Chat API](https://docs.aws.amazon.com/ivs/latest/ChatAPIReference/Welcome.html) を使用します。
+ ハンドラをルームに関連付けるには、CreateRoom または UpdateRoom を呼び出して、ハンドラを指定します。
+ ハンドラをルームとの関連付けを解除するには、`MessageReviewHandler.Uri` に空の値を使用して UpdateRoom を呼び出します。

## Amazon CloudWatch によるエラーのモニタリング
<a name="monitor-errors-with-cloudwatch"></a>

Amazon CloudWatch を使用して、メッセージレビューで発生するエラーをモニタリングできます。また、アラームやダッシュボードを作成し、特定のエラーの変化を表示したり、対応したりすることができます。エラーが発生した場合、ハンドラをルームに関連付ける際に指定した `FallbackResult` の値に応じて、メッセージが許可または拒否されます。「Amazon IVS Chat API リファレンス」の「[MessageReviewHandler](https://docs.aws.amazon.com/ivs/latest/ChatAPIReference/API_MessageReviewHandler.html)」を参照してください。

エラーにはいくつかの種類があります。
+ `InvocationErrors` は、Amazon IVS Chat がハンドラを呼び出すことができない場合に発生します。
+ `ResponseValidationErrors` は、ハンドラが無効なレスポンスを返したときに発生します。
+ AWS Lambda `Errors` は、Lambda ハンドラが呼び出されたときに関数エラーを返した場合に発生します。

Amazon IVS Chat によって発行される呼び出しエラーとレスポンス検証エラーの詳細については、「[Monitoring Amazon IVS Chat](chat-health.md)」を参照してください。AWS Lambda のエラーの詳細については、「[Lambda 関数のメトリクスの使用](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-metrics.html)」を参照してください。