本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
接收入站 RCS 媒体
用户可以在与您的代理的 RCS 对话中发送媒体(图像、视频、音频文件和文档)。配置入站媒体存储时,“ AWS 最终用户消息” 会从 RCS 提供商处下载媒体,将其上传到您的 Amazon S3 存储桶,然后向您的双向 Amazon SNS 主题发布一条包含 S3 位置和文件元数据的通知。
有关接收入站 RCS 消息(文本、位置和建议回复)的一般信息,请参阅接收入站 RCS 消息。有关向用户发送富媒体的信息,请参阅发送丰富的 RCS 消息。
入站媒体的工作原理
当用户在 RCS 对话中发送媒体文件时,“ AWS 最终用户消息” 将通过以下步骤处理该消息:
-
用户从其 RCS 消息应用程序发送图像、视频、音频文件或文档。
-
AWS 最终用户消息从 RCS 提供商处下载媒体。
-
AWS 最终用户消息使用您指定的 IAM 角色将媒体上传到您配置的 S3 存储桶。
-
AWS “最终用户消息” 会向您的双向 SNS 主题发布通知。通知包括 S3 存储桶、密钥、MIME 类型和消息元数据。
对于LOCATION和SUGGESTION消息类型,不会进行 S3 上传。内容直接在 SNS 通知正文中传送。有关这些消息类型的详细信息,请参阅接收入站 RCS 消息。
配置入站媒体存储
要接收入站媒体,请使用 UpdateRcsAgent API 在 RCS 代理上配置以下字段。 Two-way 在配置媒体存储之前,必须在代理上启用消息传递。
| 字段 | 必填 | 描述 |
|---|---|---|
TwoWayMediaS3BucketName |
是 | AWS 最终用户消息存储入站媒体文件的 S3 存储桶的名称。 |
TwoWayMediaS3KeyPrefix |
否 | S3 对象密钥的可选前缀。如果指定,则媒体对象将以此前缀存储在存储桶中。 |
TwoWayMediaS3Role |
是 | AWS 最终用户消息传递将媒体文件上传到您的 S3 存储桶的 IAM 角色的 ARN。 |
S3 存储桶和 IAM 角色是必需的。如果指定一个,则必须同时指定两个。
S3 密钥格式
媒体对象采用以下密钥格式存储,其中原始文件名附加在#分隔符之后:
{prefix}/rcs/{messageId}#{fileName}
例如,如果您将 key prefix 设置为inbound-media,则媒体文件可能会存储为:
inbound-media/rcs/msg-abc123def456#photo_2026.jpg
为入站媒体创建 IAM 角色
创建一个 IAM 角色以允许 AWS 最终用户消息服务将媒体文件上传到您的 S3 存储桶。该角色需要一个允许服务担任该角色的信任策略和一个允许s3:PutObject访问您的存储桶的权限策略。
信任策略
以下信任策略允许 AWS 最终用户消息服务主体担任该角色。123456789012替换为您的 AWS 账户 ID。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "sms-voice.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012" } } } ] }
权限策略
以下权限策略授予角色向您的 S3 存储桶写入对象的访问权限。将 my-rcs-media-bucket替换为存储桶名称。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::my-rcs-media-bucket/*" } ] }
注意
将 IAM 角色范围缩小到仅限。s3:PutObject该服务不需要s3:GetObjects3:DeleteObject、或其他权限即可进行入站媒体投放。
配置媒体存储 (CLI)
以下 AWS CLI 命令在现有 RCS 代理上配置入站媒体存储:
aws pinpoint-sms-voice-v2 update-rcs-agent \ --rcs-agent-id rcs-agent-1234567890abcdef0 \ --two-way-media-s3-bucket-name my-rcs-media-bucket \ --two-way-media-s3-key-prefix "inbound-media" \ --two-way-media-s3-role arn:aws:iam::123456789012:role/RcsInboundMediaRole \ --region us-east-1
入站媒体通知有效负载
当 AWS 最终用户消息收到媒体文件时,它会向您的双向 SNS 主题发布通知。通知是一个 JSON 对象,其messageBody字段包含字符串化的 JSON 文档,其中包含媒体状态以及成功后的 S3 位置和文件元数据。
以下示例显示了成功的入站媒体通知:
{ "originationNumber": "+14255551234", "destinationNumber": "rcs-cb1e6e519e9049fabf8c0ae38e4d876b", "messageBody": "{\"mediaStatus\":\"SUCCESS\",\"s3Bucket\":\"my-rcs-media-bucket\",\"s3Key\":\"inbound-media/rcs/msg-abc123def456#photo_2026.jpg\",\"mimeType\":\"image/jpeg\",\"fileName\":\"photo_2026.jpg\",\"fileSizeBytes\":1211843}", "inboundMessageId": "8821d750-4bc5-4cb1-a8c3-c3d64a38d019" }
顶级通知包含以下字段:
originationNumber-
发送媒体的用户的电话号码。
destinationNumber-
收到消息的 RCS 代理标识符。
messageBody-
描述媒体的字符串化 JSON 文档。它包含下表中的字段。
inboundMessageId-
入站消息的唯一标识符。
messageBodyJSON 包含以下字段:
mediaStatus-
媒体处理的结果。有效值包括
SUCCESS、UPLOAD_FAILED和ROLE_ASSUME_FAILED。 mediaStatusMessage-
人类可读的状态描述。何时出现
mediaStatus是失效值。 s3Bucket-
存储媒体文件的 S3 存储桶的名称。成功时呈现。
s3Key-
存储的媒体文件的 S3 对象密钥。成功时呈现。
mimeType-
媒体文件的 MIME 类型(例如、
image/jpegvideo/mp4、application/pdf)。 fileName-
用户设备提供的原始文件名。
fileSizeBytes-
媒体文件的大小(以字节为单位)。
注意
入站媒体通知目前不包含消息类型字段。mediaStatus用于确定结果。
媒体下载失败处理
如果 AWS 最终用户消息无法从 RCS 提供商处下载或存储媒体,则该服务仍会向您的双向 SNS 主题发布通知。messageBody带有失败mediaStatus(UPLOAD_FAILED或ROLE_ASSUME_FAILED)和mediaStatusMessage描述原因的,没有 S3 位置字段。
例如,IAM 角色假设失败会生成以下messageBody内容:
{ "mediaStatus": "ROLE_ASSUME_FAILED", "mediaStatusMessage": "Media received but could not assume the configured IAM role", "mimeType": "image/heic", "fileName": "IMG_7115.heic", "fileSizeBytes": 1211843 }
媒体下载失败的常见原因包括:
-
RCS 提供商不再提供该媒体(例如,媒体已过期或已删除)。
-
IAM 角色无权写入指定的 S3 存储桶。
-
S3 存储桶不存在或位于与预期不同的区域。
要对交付失败进行故障排除,请验证您的 IAM 角色信任和权限策略是否配置正确,以及 S3 存储桶是否存在且可通过服务进行访问。监控代理的媒体上传失败 CloudWatch 指标。
可接受的媒体类型
AWS 最终用户消息接受以下入站媒体 MIME 类型:
-
图片:
image/jpeg,image/jpg,image/gif,image/png -
音频:
audio/aacaudio/mp3、audio/mpeg、audio/mpg、audio/mp4、audio/mp4-latm、audio/3gpp、audio/ogg、application/ogg -
视频:
video/h263video/m4v、video/mp4、video/mpeg、video/mpeg4、video/webm -
文档:
application/pdf
注意
AWS 最终用户消息不对入站媒体施加大小限制。
最佳实践
-
如果您希望用户在 RCS 对话中发送图像、视频或文件,请务必配置媒体存储。
-
使用 RCS 入站媒体的专用 S3 存储桶来隔离访问控制和生命周期策略。
-
将 S3 生命周期策略设置为使旧媒体对象过期(例如,90 天后),以管理存储成本。
-
使用由您的 SNS 主题触发的 Lamb AWS da 函数异步处理入站媒体。
-
将 IAM 角色的范围
s3:PutObject限定为仅限。该服务不需要更广泛的权限。 -
监控媒体上传失败的 CloudWatch 指标,并设置警报以检测配置问题。