View a markdown version of this page

接收入站 RCS 媒体 - AWS最终用户消息 SMS

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

接收入站 RCS 媒体

用户可以在与您的代理的 RCS 对话中发送媒体(图像、视频、音频文件和文档)。配置入站媒体存储时,“AWS最终用户消息” 会从 RCS 提供商处下载媒体,将其上传到您的 Amazon S3 存储桶,然后向您的双向 Amazon SNS 主题发布一条包含 S3 位置和文件元数据的通知。

有关接收入站 RCS 消息(文本、位置和建议回复)的一般信息,请参阅接收入站 RCS 消息。有关向用户发送富媒体的信息,请参阅发送丰富的 RCS 消息

入站媒体的工作原理

当用户在 RCS 对话中发送媒体文件时,“AWS最终用户消息” 将通过以下步骤处理该消息:

  1. 用户从其 RCS 消息应用程序发送图像、视频、音频文件或文档。

  2. AWS最终用户消息从 RCS 提供商处下载媒体。

  3. AWS最终用户消息使用您指定的 IAM 角色将媒体上传到您配置的 S3 存储桶。

  4. AWS“最终用户消息” 会向您的双向 SNS 主题发布通知。通知包括 S3 存储桶、密钥、MIME 类型和消息元数据。

对于LOCATIONSUGGESTION消息类型,不会进行 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

媒体处理的结果。有效值包括 SUCCESSUPLOAD_FAILEDROLE_ASSUME_FAILED

mediaStatusMessage

人类可读的状态描述。何时出现mediaStatus是失效值。

s3Bucket

存储媒体文件的 S3 存储桶的名称。成功时呈现。

s3Key

存储的媒体文件的 S3 对象密钥。成功时呈现。

mimeType

媒体文件的 MIME 类型(例如、image/jpegvideo/mp4application/pdf)。

fileName

用户设备提供的原始文件名。

fileSizeBytes

媒体文件的大小(以字节为单位)。

注意

入站媒体通知目前不包含消息类型字段。mediaStatus用于确定结果。

媒体下载失败处理

如果AWS最终用户消息无法从 RCS 提供商处下载或存储媒体,则该服务仍会向您的双向 SNS 主题发布通知。messageBody带有失败mediaStatusUPLOAD_FAILEDROLE_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/mp3audio/mpegaudio/mpgaudio/mp4audio/mp4-latmaudio/3gppaudio/oggapplication/ogg

  • 视频:video/h263video/m4vvideo/mp4video/mpegvideo/mpeg4video/webm

  • 文档:application/pdf

注意

AWS最终用户消息不对入站媒体施加大小限制。

最佳实践

  • 如果您希望用户在 RCS 对话中发送图像、视频或文件,请务必配置媒体存储。

  • 使用 RCS 入站媒体的专用 S3 存储桶来隔离访问控制和生命周期策略。

  • 将 S3 生命周期策略设置为使旧媒体对象过期(例如,90 天后),以管理存储成本。

  • 使用由您的 SNS 主题触发的 Lamb AWS da 函数异步处理入站媒体。

  • 将 IAM 角色的范围s3:PutObject限定为仅限。该服务不需要更广泛的权限。

  • 监控媒体上传失败的 CloudWatch 指标,并设置警报以检测配置问题。