为 Amazon Chime SDK 消息传递设置频道处理器
要开始使用频道流,您需要先创建一个处理器 Lambda 函数来处理您的用例的预处理。例如,您可以更新消息内容或元数据、拒绝消息并阻止发送消息,或者允许原始消息通过。
先决条件
-
Lambda 函数必须与 AppInstance 一样位于同一 AWS 账户和同一 AWS 区域中。
授予调用权限
您必须向 Amazon Chime SDK 消息收发服务授予权限才能调用 Lambda 资源。有关权限的更多信息,请参阅将基于资源的策略用于 AWS Lambda。例如:
-
主体:“messaging.chime.amazonaws.com”
操作:lambda:InvokeFunction
效果:允许
AWS:SourceAccount:
您的 AWSAccountId
。AWS:SourceArn:
"arn:aws:chime:
region
:AWSAccountId
:appInstance
/"
注意
您可以提供特定的应用程序实例 ID 来调用您的处理器,也可以使用通配符允许账户中的所有 Amazon Chime SDK 应用程序实例调用您的处理器。
授予回调权限
您还需要允许您的处理器 Lambda 函数调用 ChannelFlowCallback
API。有关执行此操作的信息,请参阅 AWS Lambda 开发人员指南中的 AWS Lambda 执行角色。
您可以向 Lambda 函数的执行角色添加内联策略。此示例允许处理器调用 ChannelFlowCallback API
。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "chime:ChannelFlowCallback" ], "Resource": [ "arn:aws:chime:Region:AwsAccountId:appInstance/*" ] } ] }
注意
遵循 Lambda 函数的最佳实践。有关更多信息,请参阅以下主题:
调用处理器 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 对象。
Type:消息类型。ChannelFlow 仅支持
STANDARD
消息类型。有效值:STANDARD
处理器函数决定每条消息的以下内容。
-
是更新消息内容、元数据还是两者兼而有之
-
是否拒绝消息
-
是否保留消息不变
处理完成后,处理器 Lambda 函数会将结果发送回 Amazon Chime SDK 消息传递服务,这样就可以将消息发送给所有收件人。消息状态一直处于 PENDING
标记状态,直到处理器 Lambda 函数发回结果。处理器 Lambda 函数有 48 小时的时间来发送结果。在此之后,我们无法保证消息传递,ChannelFlowCallback API 会引发“Forbidden Exception”错误消息。要发回结果,请调用 ChannelFlowCallback
API。