

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# チャネルフローを使用した Amazon Chime SDK メッセージングのメッセージの処理
<a name="using-channel-flows"></a>

チャネルフローを使用すると、送信中のメッセージがメッセージングチャネルの受信者に配信される前に、そのメッセージに対してビジネスロジックを実行できます。チャネルフローでは、行政 ID 番号、電話番号、または冒涜的な表現をメッセージから削除するなどのアクションを実行できます。投票アンケートへの回答を集約した後で結果を参加者に返送するなどの機能を実行するためにチャネルフローを使用することもできます。

**前提条件**
+ Amazon Chime SDK の基本機能 (チャネルの管理、メッセージの送受信など) に関する知識。
+ Amazon Chime SDK メッセージング API を呼び出す機能。

**チャネルフローの概念**

チャネルフローを効果的に使用するには、以下の概念を理解する必要があります。

**チャネルプロセッサ**  
チャネルメッセージで前処理ロジックを実行する AWS Lambda 関数。チャネルをチャネルフローに関連付けると、フロー内のプロセッサがチャネル内のメッセージごとに呼び出されます。レイテンシーを低減するため、ほとんどのユースケースではシングルプロセッサが最適です。最後に、処理が完了すると、各プロセッサは Amazon Chime SDK サービスにコールバックする必要があります。  
現在、チャネルフローごとにサポートされるプロセッサは 1 つだけです。複数のプロセッサが必要な場合は、サポートチケットを送信してプロセッサを増やしてください。

**チャネルフロー**  
チャネルフローは、最大 3 つのチャネルプロセッサと実行シーケンスを格納するコンテナです。フローをチャネルに関連付けると、プロセッサはそのチャネルに送信されるすべてのメッセージを処理します。

**チャネルフローの呼び出し**  
以下のアイテムによってチャネルフローが呼び出されます。
+ 新しい永続的な標準メッセージ
+ 新しい非永続的な標準メッセージ
+ 更新された永続的な標準メッセージ

**注記**  
チャネルフローはコントロールメッセージやシステムメッセージを処理しません。Amazon Chime SDK メッセージングによって提供されるメッセージタイプの詳細については、「[Amazon Chime SDK メッセージタイプについて](msg-types.md)」を参照してください。

**Topics**
+ [

# Amazon Chime SDK メッセージング用のチャネルプロセッサの設定
](processor-setup.md)
+ [

# Amazon Chime SDK メッセージングのチャネルフローの作成
](create-channel-flow.md)
+ [

# Amazon Chime SDK メッセージングのチャネルフローの関連付けと関連付け解除
](associate-channel-flow.md)
+ [

# Amazon Chime SDK メッセージングでのメッセージの送信
](sending-msgs.md)
+ [

# Amazon Chime SDK メッセージング用の EventBridge を使用した自動化による障害アラートの作成
](event-bridge-events.md)

# Amazon Chime SDK メッセージング用のチャネルプロセッサの設定
<a name="processor-setup"></a>

チャネルフローの使用を開始するには、まず、ユースケースの前処理を行うプロセッサ Lambda 関数を作成します。例えば、メッセージの内容やメタデータを更新したり、メッセージを拒否して送信されないようにしたり、元のメッセージを通過させたりすることができます。

**前提条件**
+ Lambda 関数は、AppInstance と同じ AWS アカウントと AWS リージョンに存在する必要があります。

**呼び出しアクセス許可の付与**  
Amazon Chime SDK メッセージングサービスに、Lambda リソースを呼び出すためのアクセス許可を与える必要があります。アクセス許可の詳細については、「[AWS Lambdaでのリソースベースのポリシーの使用](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html)」を参照してください。例えば、次のようになります。

  
**プリンシパル**:「messaging.chime.amazonaws.com」  
**アクション**: lambda:InvokeFunction  
[**効果**]: [許可]  
**AWS:SourceAccount**: *お使いの AWS AccountId*。  
**AWS:SourceArn**: `"arn:aws:chime:region:AWS AccountId: appInstance/"`

**注記**  
特定のアプリケーションインスタンス ID を指定してプロセッサを呼び出すことも、ワイルドカードを使用してアカウント内のすべての Amazon Chime SDK アプリケーションインスタンスにプロセッサの呼び出しを許可することもできます。

**コールバックのアクセス許可の付与**  
プロセッサ Lambda 関数が `ChannelFlowCallback` API を呼び出せるようにする必要もあります。その方法については、「AWS Lambda 開発者ガイド」の「[AWS Lambda 実行ロール](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html)」を参照してください。

Lambda 関数の実行ロールにインラインポリシーを追加できます。この例では、`ChannelFlowCallback API` の呼び出しをプロセッサに許可します。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "chime:ChannelFlowCallback"
            ],
            "Resource": [
            "arn:aws:chime:us-east-1:111122223333:appInstance/*"
            ]
        }
    ]
}
```

------

**注記**  
Lambda 関数のベストプラクティスに従ってください。詳細については、次のトピックを参照してください。  
「[Performance Efficiency Best Practices](https://docs.aws.amazon.com/whitepapers/latest/serverless-architectures-lambda/performance-efficiency-best-practices.html)」 
[を使用するためのベストプラクティス AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html)
[予約済同時実行数の設定](https://docs.aws.amazon.com/lambda/latest/dg/configuration-concurrency.html#configuration-concurrency-reserved)
[非同期呼び出し](https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html)

**プロセッサ Lambda 関数の呼び出し**  
ユーザーがメッセージを送信すると、次の入力リクエストによってプロセッサ Lambda 関数が呼び出されます。

```
{
    "EventType": "string"
    "CallbackId": "string"
    "ChannelMessage": {
        "MessageId": "string",
        "ChannelArn": "string",
        "Content": "string",
        "Metadata": "string",
        "Sender":{
            "Arn": "string", 
            "Name": "string"
        },
        "Persistence": "string",
        "LastEditedTimestamp": "string", 
        "Type": "string",
        "CreatedTimestamp": "string", 
    }
}
```

EventType  
プロセッサに送信されるイベント。値は `CHANNEL_MESSAGE_EVENT` 定数です。

CallbackId  
プロセッサから `ChannelFlowCallback` API を呼び出す際に使用されるトークン。

ChannelMessage  
*ChannelArn* - チャネルの ARN  
*Content* - 処理対象のメッセージコンテンツ  
*CreatedTimestamp* - メッセージが作成された時刻  
*LastEditedTimestamp* - メッセージが編集された日時  
*MessageId* - メッセージ識別子  
*Metadata* - 処理対象のメッセージメタデータ  
*Persistence* - メッセージをバックエンドで永続化するかどうかを制御するブール値。有効な値：`PERSISTENT | NON_PERSISTENT`  
*Sender* - メッセージの送信者。タイプ: [identity オブジェクト](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_Identity.html)。  
*Type* - メッセージタイプ。ChannelFlow は `STANDARD` メッセージタイプのみをサポートします。有効な値: `STANDARD`

プロセッサ関数は各メッセージについて以下を決定します。
+ メッセージコンテンツ、メタデータ、またはその両方を更新するかどうか
+ メッセージを拒否するかどうか 
+ メッセージを変更しないで残すかどうか

処理が終了すると、プロセッサ Lambda 関数は結果を Amazon Chime SDK メッセージングサービスに送り返し、メッセージをすべての受信者に送信できるようにします。メッセージステータスは、プロセッサ Lambda 関数が結果を返送するまで `PENDING` とマークされます。プロセッサ Lambda 関数は 48 時間以内に結果を送り返します。それ以降のメッセージ配信は保証されず、[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_ChannelFlowCallback.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_ChannelFlowCallback.html) API は Forbidden Exception のエラーメッセージをスローします。結果を送り返すには、`ChannelFlowCallback` API を呼び出します。

# Amazon Chime SDK メッセージングのチャネルフローの作成
<a name="create-channel-flow"></a>

プロセッサをセットアップしたら、Amazon Chime SDK メッセージング API を使用してチャネルフローを作成します。`Fallback` アクションを使用して、チャネルフローがプロセッサ Lambda 関数に接続できない場合に処理を停止するか続行するかを定義できます。プロセッサのフォールバックアクションが `ABORT` の場合、プロセッサはメッセージステータスを `FAILED` に設定し、メッセージは送信しません。チャネルフローシーケンスの最後のプロセッサのフォールバックアクションが `CONTINUE` の場合、メッセージは処理されたと見なされ、チャネル内の受信者に送信されることに注意してください。チャネルフローを作成したら、それを個々のチャネルに関連付けることができます。詳細については、[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelFlow.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelFlow.html) API ドキュメントを参照してください。

# Amazon Chime SDK メッセージングのチャネルフローの関連付けと関連付け解除
<a name="associate-channel-flow"></a>

チャネルをチャネルフローに関連付けると、チャネルフロー内のプロセッサは、チャネルに送信されたすべてのメッセージを前処理します。チャネルフローの関連付けおよび関連付け解除 API を呼び出すには、チャネルモデレーターまたは管理者である必要があります。作業中は以下の事柄に注意してください。
+ 1 つのチャネルには最大 1 つのチャネルフローを関連付けることができます。チャネルフローを関連付けるには、[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_AssociateChannelFlow.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_AssociateChannelFlow.html) API を呼び出します。
+ チャネルフローの関連付けを解除し、チャネルメッセージの前処理を停止するには、[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_DisassociateChannelFlow.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_DisassociateChannelFlow.html) API を呼び出します。

# Amazon Chime SDK メッセージングでのメッセージの送信
<a name="sending-msgs"></a>

`SendChannelMessage` API を使用してチャネルにメッセージを送信します。チャネルフローに関連付けられたチャネルには、プロセッサが以下のステータス値のいずれかを割り当てます。




| メッセージのステータス | 説明 | 
| --- | --- | 
| `SENT` | メッセージは正常に処理されました。 | 
| `PENDING` | 処理中です。 | 
| `FAILED` | プロセッサ Lambda 関数にアクセスできないため、処理に失敗しました。 | 
| `DENIED` | メッセージは送信されません。 | 

**中間ステータスイベントの受信**  
**Websocket イベント**

Websocket イベントは、接続が正常に確立された後にチャネルに送信されます。詳細については、[WebSockets を使用して Amazon Chime SDK メッセージングでメッセージを受信する](websockets.md) を参照してください。


| イベントタイプ | ステータス | 受取人 | 注意事項 | 
| --- | --- | --- | --- | 
| `CREATE_CHANNEL_MESSAGE` | `SENT` | チャネルメンバー全員 | 前処理が正常に終了した `SendChannelMessage` API | 
| `UPDATE_CHANNEL_MESSAGE` | `SENT` | チャネルメンバー全員 | 前処理が正常に終了した `UpdateChannelMessage` API | 
| `PENDING_CREATE_CHANNEL_MESSAGE` | `PENDING` | メッセージ送信者のみ | 前処理が進行中の `SendChannelMessage` API | 
| `PENDING_UPDATE_CHANNEL_MESSAGE` | `PENDING` | メッセージ送信者のみ | 前処理が進行中の `UpdateChannelMessage` API | 
| `FAILED_CREATE_CHANNEL_MESSAGE` | `FAILED` | メッセージ送信者のみ | 前処理に失敗した `SendChannelMessage` API | 
| `FAILED_UPDATE_CHANNEL_MESSAGE` | `FAILED` | メッセージ送信者のみ | 前処理に失敗した `UpdateChannelMessage` API | 
| `DENIED_CREATE_CHANNEL_MESSAGE` | `DENIED` | メッセージ送信者のみ | プロセッサがメッセージを拒否した `SendChannelMessage` API | 
| `DENIED_UPDATE_CHANNEL_MESSAGE` | `DENIED` | メッセージ送信者のみ | プロセッサがメッセージを拒否した `UpdateChannelMessage` API | 

**GetChannelMessageStatus API**  
この API は、Websocket 接続に問題があるためにイベントが受信されなかった場合に、メッセージステータスを取得する代替方法を提供します。詳細については、[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_GetChannelMessageStatus.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_GetChannelMessageStatus.html) API ドキュメントを参照してください。

**注記**  
この API では、拒否されたメッセージのステータスは保存されないため、返されません。

# Amazon Chime SDK メッセージング用の EventBridge を使用した自動化による障害アラートの作成
<a name="event-bridge-events"></a>

Amazon Chime SDK は、プロセッサ Lambda 関数の呼び出しでエラーが発生した場合にイベントを配信します。イベントは、チャネルフローの作成時にプロセッサに指定された `Fallback` アクションに関係なく送信されます。単純なルールを記述して、これらのイベントと、イベントのいずれかがルールに一致した場合に実行する自動アクションを指定できます。詳細については、[Amazon EventBridge ユーザーガイド](https://docs.aws.amazon.com/eventbridge/latest/userguide/)を参照してください。このようなエラーが発生すると、設定した `Fallback` アクションによっては、チャネルのメンバーがメッセージを送信できなくなったり、メッセージが処理されずにチャネルを通過したりします。`Fallback` アクションの詳細については、「Amazon Chime SDK API リファレンス」の「[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_Processor.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_Processor.html)」を参照してください。

この例は、一般的な障害イベントを示しています。

```
{
    "version": "0",
    "id": "12345678-1234-1234-1234-111122223333",
    "detail-type": "Chime ChannelFlow Processing Status",
    "source": "aws.chime",
    "account": "111122223333",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "region": "region",
    "resources": [],
    "detail": {
        "eventType": "ProcessorInvocationFailure",
        "appInstanceArn": "arn:aws:chime:region:AWSAccountId:app-instance/AppInstanceId",
        "channelArn": "arn:aws:chime:region:AWSAccountId:app-instance/AppInstanceId/channel/ChannelId",
        "messageId": "298efac7298efac7298efac7298efac7298efac7298efac7298efac7298efac7",
        "processorResourceArn": "arn:aws:lambda:region:AWSAccountId:function:ChannelFlowLambda",
        "failureReason": "User is not authorized to perform: lambda:InvokeFunction on resource: arn:aws:lambda:region:AppInstanceId:function:ChannelFlowLambda because no resource-based policy allows the lambda:InvokeFunction action"
      }
}
```