View a markdown version of this page

使用电话池的 RCS 到 SMS 回退 - AWS 最终用户消息 SMS

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

使用电话池的 RCS 到 SMS 回退

电话池是消息传递身份(例如 AWS RCS 代理和 SMS 电话号码)的容器,它在您的 API 请求和底层发起身份之间提供了一个抽象层。池简化了配置更改、号码类型迁移和 RCS-to-SMS后备操作。您向池发送一个 API 调用, AWS 最终用户消息将为您处理频道选择。

本章介绍了 RCS 交付失败的原因、使短信回退成为可能的原因、回退逻辑和优先顺序以及计费影响。它还介绍了 pool-per-use-case最佳实践以及如何在池中添加和删除 AWS RCS 代理。有关电话池的一般信息,请参阅AWS 最终用户消息 SMS 中的电话池。有关管理 AWS RCS 代理的信息,请参阅管理 RCS 代理

RCS 交付如何失败

RCS 交付失败可能有多种原因。了解这些故障模式有助于你规划后备策略:

  • 运营商不支持 RCS-收件人的移动运营商尚未在其网络上启用 RCS 消息传递。

  • 设备不支持 RCS — 收件人的设备没有 RCS 功能(例如,较旧的安卓设备或运行早于 18 的 iOS 的 iPhone)。

  • 承运人上的代理不活跃 — 您的 AWS RCS 代理尚未获得接收方承运人的批准,或者该代理在该国家/地区处于部分状态。

  • 设备暂时无法访问-收件人的设备支持 RCS,但暂时处于离线状态或没有数据连接。RCS 消息需要数据连接才能传送。

当出现上述任何一种情况,并且您使用的是基于池或账户级别的发送时,“ AWS 最终用户消息” 会自动回退为使用同一池或账户中的电话号码发送短信。

是什么使短信回退成为可能

SMS 回退要求在同一个池中同时使用 AWS RCS 代理和至少一个 SMS 电话号码。当您向池发送消息时,“ AWS 最终用户消息” 会先尝试传送 RCS。如果 RCS 传送失败,该服务将使用同一地址池中的电话号码通过 SMS 重试发送消息。只有 AWS RCS 代理(且没有电话号码)的池不支持 SMS 回退。如果 RCS 失败,则不会传送消息。

重要

要使 SMS 回退起作用,您的池中必须同时包含一个 AWS RCS 代理和一个或多个 SMS 电话号码。只有单一身份类型的池不提供跨渠道后备功能。

为什么要使用池

我们建议将电话池用于所有消息传递用例,而不仅仅是 RCS。矿池具有以下优点:

  • 自动短信回退 — 当池同时包含 AWS RCS 代理和 SMS 电话号码时, AWS 最终用户消息将首先尝试 RCS 交付。如果 RCS 传送失败(例如,收件人的设备或运营商不支持 RCS),则该服务会自动使用同一地址池中的电话号码通过 SMS 重试消息。您无需在应用程序中实现后备逻辑。

  • 智能路由 — 该服务根据目的地、频道可用性和粘性发送历史记录从池中选择最佳的发起身份。每次SendTextMessage呼叫都以透明方式进行此路由。

  • 单个 API 调用 — 您在SendTextMessage请求中将池 ID 指定为发起身份。该服务决定是通过 RCS 还是通过 SMS 进行交付,而无需您提供任何其他逻辑。

  • 灵活应对未来的更改 — 您可以随时在池中添加或删除电话号码和 AWS RCS 代理,而无需更改应用程序代码。例如,您可以添加用于短信回退的免费电话号码,或者在不修改发送集成的情况下换出 10DLC 号码。

  • 没有成本或缺点 — 创建池并向其添加原始身份不会产生额外费用。即使只有一个电话号码或一个 AWS RCS 代理,使用池也可以灵活地添加更多身份,而无需更改应用程序。

注意

我们建议始终使用消息池进行消息传递。即使使用单一来源身份,使用池也不会产生任何成本或缺点。要进行 RCS-to-SMS备用,池中必须同时包含一个 AWS RCS 代理和至少一个 SMS 电话号码。从一开始就使用池意味着您可以稍后添加 SMS 备用号码或其他 AWS RCS 代理,而无需修改发送代码。

Pool-per-use-case 模型

我们建议每个用例创建一个池。每个池都应包含用于单一消息传递目的的所有电话号码和 AWS RCS 代理。例如:

  • 用于存放 OTP 代码和账户通知的交易池,包含您的 AWS RCS 代理和注册用于交易消息的 10DLC 号码。

  • 促销消息的营销池,包含相同的 AWS RCS 代理(或不同的)和注册用于营销的免费电话号码。

  • 用于安排通知的预约提醒池,包含您的 AWS RCS 代理和用于发送预约相关消息的专用电话号码。

此模型可确保当 RCS 交付失败且服务回退到 SMS 时,后备消息将从为相同用例注册并获得批准的电话号码发送。这样可以使您的消息符合运营商要求和注册条款。

账户级发送存在合规风险

当您在账户级别发送消息(未指定池或发起身份)时,“ AWS 最终用户消息” 会从您账户中的所有可用身份中选择一个发起身份。如果您的账户为不同的用例注册了多个电话号码,则该服务可能会选择与您的消息内容不匹配的电话号码。

重要

混合使用案例的账户级发送会带来合规风险。例如,如果您的账户有一个注册用于接收OTP消息的10DLC号码和一个注册用于预约提醒的免费电话号码,则可以从预约提醒的免费电话号码发送回SMS的OTP消息。这违反了该号码的注册条款,并可能导致运营商筛选或号码暂停。

为避免这种风险,请使用基于池的发送,每个用例只有一个池。当您在SendTextMessage请求中指定池 ID 时,该服务仅从该池中选择发起身份。由于池中的所有身份都是针对同一个用例注册的,因此备用消息始终由相应的号码发送。

发送方法合规性比较
发送方法 短信回退行为 合规风险
基于池(推荐) 回退到同一个池中为相同用例注册的电话号码 低-备用数字与消息用例相匹配
账户级别 回退到账户中任何可用的电话号码 高 — 如果多个用例共享账户,则备用编号可能与消息用例不匹配
直接(AWS RCS 代理 ARN) 没有短信回退 无 — 消息仅通过 RCS 传送或根本不通过 RCS 传送

回退逻辑和优先顺序

当 AWS 最终用户消息选择邮件的发起身份(来自池或所有账户身份)时,它会按以下优先顺序评估身份:

  1. 粘性身份-如果目标电话号码存在粘性发送配对,并且该身份仍然可用,则该服务将使用该身份。

  2. AWS RCS 代理 — 如果不存在粘性配对,则该服务会尝试通过可用的 AWS RCS 代理交付 RCS。

  3. 短信短码 — 如果 RCS 不可用,则该服务会选择短信短码。

  4. SMS 10DLC — 如果没有可用的短代码,则该服务会选择一个 10DLC 号码。

  5. SMS 免费电话号码 — 如果没有 10DLC 号码可用,则该服务会选择一个免费电话号码。

  6. 短信发件人 ID-如果没有其他身份可用,服务会选择发件人 ID。

此优先顺序适用于您使用的发送模式的范围。对于基于池的发送,该服务仅考虑指定池中的身份。对于账户级别的发送,该服务会考虑您账户中的所有身份。

自动短信回退

当您通过池或账户级别发送消息时,如果无法传送 RCS,则 AWS 最终用户消息会自动回退为短信。回退是异步的:

如果 AWS 最终用户消息成功提交 RCS 消息,但在 25 秒内没有收到传送确认或失败信号,则该服务将回退到短信。这可以处理 RCS 基础设施接受消息但传送停滞的情况(例如,收件人的设备暂时无法访问、运营商不支持 RCS 或设备不支持 RCS)。

注意

直接发送(指定 AWS RCS 代理 ARN 作为发起身份)不支持自动短信回退。如果您需要短信回退,请使用基于池的发送。

粘性发送

粘性发送是一种路由优化,可提高交付一致性。当 “ AWS 最终用户消息” 使用特定的发起人身份成功将消息传送到目标电话号码时,该服务会记住配对 25 小时。在 25 小时内发往同一目的地的后续邮件将通过相同的来源身份进行路由,前提是该消息池或账户中仍然可用。

粘性发送适用于 RCS 和 SMS 传送。例如,如果一条消息是通过 RCS 通过您的 AWS RCS 代理传送的,则还会尝试通过同一个代理通过 RCS 在 25 小时内将下一条消息发送到同一目的地。如果上一条消息是通过 SMS 发送的(在 RCS 回退之后),则下一条消息将尝试通过相同的电话号码通过 SMS 发送。

即使粘性身份是 SMS 电话号码,该服务也会定期重试 RCS 传送。这可确保其设备获得 RCS 支持(例如,在运营商推出或设备升级之后)的收件人无需人工干预即可开始接收 RCS 消息。

粘性发送的主要特征:

  • 25 小时 TTL — 粘性配对将在上次成功交付 25 小时后过期。到期后,该服务会重新评估下一封邮件的来源身份优先顺序。

  • 自动重试 RCS-即使粘性身份是 SMS 电话号码,该服务也会定期尝试 RCS 传送以检查收件人现在是否支持 RCS。

  • 无需手动刷新 — 您无法手动刷新或重置粘滞发送配对。配对在 25 小时的 TTL 后自动过期。

回退期间的配送收据

当 SMS 回退出现时,“ AWS 最终用户消息” 会为传送消息的最终渠道生成一份送达收据。如果消息在 RCS 回退后通过 SMS 传送,则传送收据会显示 SMS 是传送渠道。

在正常情况下,“ AWS 最终用户消息” 会在传送 SMS 备用消息之前撤销 RCS 消息。这样可以防止收件人两次收到相同的消息。但是,在极少数情况下,可能会同时传送 RCS 消息和 SMS 备用消息。如果 RCS 消息在超时 25 秒之后但在撤销完成之前传送,则可能会发生这种情况。在这些罕见的双重配送场景中,您可能会收到两个渠道的配送收据。

有关双重配送如何影响账单的信息,请参阅RCS 计费和定价模型

短信回退对计费的影响

当消息从 RCS 回退到 SMS 时,您需要支付短信发送费用,而不是失败的 RCS 尝试费用。RCS 消息仅在成功传送到收件人的设备后才计费。如果 RCS 传送失败且消息恢复为 SMS,则您需要为该消息支付短信费率。

在罕见的双重传送场景中(同时传送 RCS 消息和 SMS 备用消息),您可能需要为这两次传送付费。有关完整的账单详情,请参阅RCS 计费和定价模型

测试短信回退

您可以测试 SMS 回退行为,以验证在无法传送 RCS 时,您的消息是否通过 SMS 传送。有两种测试短信回退的方法,具体取决于您是否拥有经批准的 SMS 电话号码。

在没有经过批准的短信号码的情况下进行测试

在没有经过批准的 SMS 电话号码的情况下,您可以验证 AWS 最终用户消息是否正确触发了回退机制。即使没有批准的号码,您也可以通过短信查看重试和失败事件,这可以确认回退正在起作用。

在没有经过批准的 SMS 号码的情况下测试 SMS 回退
  1. 通过禁用移动数据和 Wi-Fi 或启用飞行模式使测试设备离线。

  2. 使用 SendTextMessage API 向测试设备发送 RCS 消息,并将您的 AWS RCS 代理 ARN 作为原始身份。

  3. 查看中的消息事件 CloudWatch 或您的活动目的地。您应该会看到一个传送失败事件,表明无法进行 RCS 传送,并且该服务尝试了短信回退。

由于没有可供回退的 SMS 电话号码,因此 SMS 发送也会失败。但是,该事件确认 AWS 最终用户消息正确触发了回退机制。

使用经批准的短信号码进行测试

要进行完整的 end-to-end SMS 回退测试,请将经批准的 SMS 电话号码和您的 AWS RCS 代理添加到同一个电话池中。这允许您验证消息是否在 RCS 不可用时通过 SMS 传送。

使用经批准的 SMS 号码测试 SMS 回退
  1. 创建包含您的 AWS RCS 代理和经批准的 SMS 电话号码(例如 10DLC、免费电话号码或短代码号码)的电话池。

  2. 通过禁用移动数据和 Wi-Fi 或启用飞行模式使测试设备离线。

  3. 使用 SendTextMessage API 发送以池 ID 作为发起身份的消息。

  4. 验证消息是否通过 SMS 发送到您的测试设备。

  5. 检查传送事件,确认消息是在 RCS 回退之后通过 SMS 渠道传送的。

在池中管理 AWS RCS 代理

有关使用 AWS RCS 代理创建池、向现有池中添加代理、了解池配置要求以及从池中移除代理的 step-by-step说明,请参阅在池中管理 AWS RCS 代理