

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 为 Amazon Chime SDK 消息传递设置频道处理器
<a name="processor-setup"></a>

要开始使用频道流，您需要先创建一个处理器 Lambda 函数来处理您的用例的预处理。例如，您可以更新消息内容或元数据、拒绝消息并阻止发送消息，或者允许原始消息通过。

**先决条件**
+ Lambda 函数必须与位于同一个 AWS 账户和相同 AWS 区域中。 AppInstance

**授予调用权限**  
您必须向 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  
**效果**：允许  
**AWSSourceAccount:**: *Your 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 函数的最佳实践。有关更多信息，请参阅以下主题：  
[性能效率最佳实践](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*：消息发件人。Type：一个 [identity 对象](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_Identity.html)。  
*Type*：消息类型。ChannelFlow 仅支持 `STANDARD` 消息类型。有效值：`STANDARD`

处理器函数决定每条消息的以下内容。
+ 是更新消息内容、元数据还是两者兼而有之
+ 是否拒绝消息 
+ 是否保留消息不变

处理完成后，处理器 Lambda 函数会将结果发送回 Amazon Chime SDK 消息传递服务，这样就可以将消息发送给所有收件人。消息状态一直处于 `PENDING` 标记状态，直到处理器 Lambda 函数发回结果。处理器 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。