

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

# 使用电话池的 RCS 到 SMS 回退
<a name="rcs-sms-fallback"></a>

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

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

**Topics**
+ [RCS 交付如何失败](#rcs-sms-fallback-how-rcs-fails)
+ [是什么使短信回退成为可能](#rcs-sms-fallback-what-makes-possible)
+ [为什么要使用池](#rcs-sms-fallback-why-pools)
+ [Pool-per-use-case 模型](#rcs-sms-fallback-pool-per-use-case)
+ [账户级发送存在合规风险](#rcs-sms-fallback-compliance-risk)
+ [回退逻辑和优先顺序](#rcs-sms-fallback-logic)
+ [短信回退对计费的影响](#rcs-sms-fallback-billing)
+ [测试短信回退](#rcs-sms-fallback-testing)
+ [在池中管理 AWS RCS 代理](#rcs-sms-fallback-pool-management)

## RCS 交付如何失败
<a name="rcs-sms-fallback-how-rcs-fails"></a>

RCS 交付失败可能有多种原因。了解这些故障模式有助于你规划后备策略：
+ **运营商不支持 RCS**-收件人的移动运营商尚未在其网络上启用 RCS 消息传递。
+ **设备不支持 RCS** — 收件人的设备没有 RCS 功能（例如，较旧的安卓设备或运行早于 18 的 iOS 的 iPhone）。
+ **承运人上的代理不活跃** — 您的 AWS RCS 代理尚未获得接收方承运人的批准，或者该代理在该国家/地区处于部分状态。
+ **设备暂时无法访问**-收件人的设备支持 RCS，但暂时处于离线状态或没有数据连接。RCS 消息需要数据连接才能传送。

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

## 是什么使短信回退成为可能
<a name="rcs-sms-fallback-what-makes-possible"></a>

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

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

## 为什么要使用池
<a name="rcs-sms-fallback-why-pools"></a>

我们建议将电话池用于所有消息传递用例，而不仅仅是 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 模型
<a name="rcs-sms-fallback-pool-per-use-case"></a>

我们建议每个用例创建一个池。每个池都应包含用于单一消息传递目的的所有电话号码和 AWS RCS 代理。例如：
+ 用于存放 OTP 代码和账户通知的**交易池**，包含您的 AWS RCS 代理和注册用于交易消息的 10DLC 号码。
+ 促销消息的**营销池**，包含相同的 AWS RCS 代理（或不同的）和注册用于营销的免费电话号码。
+ 用于安排通知的**预约提醒池**，包含您的 AWS RCS 代理和用于发送预约相关消息的专用电话号码。

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

## 账户级发送存在合规风险
<a name="rcs-sms-fallback-compliance-risk"></a>

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

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

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


**发送方法合规性比较**  

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

## 回退逻辑和优先顺序
<a name="rcs-sms-fallback-logic"></a>

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

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

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

1. **短信短码** — 如果 RCS 不可用，则该服务会选择短信短码。

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

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

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

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

### 自动短信回退
<a name="rcs-sms-fallback-automatic"></a>

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

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

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

### 粘性发送
<a name="rcs-sms-fallback-sticky"></a>

粘性发送是一种路由优化，可提高交付一致性。当 “ 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 后自动过期。

### 回退期间的配送收据
<a name="rcs-sms-fallback-delivery-receipts"></a>

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

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

有关双重配送如何影响账单的信息，请参阅[RCS 计费和定价模型](rcs-billing.md)。

## 短信回退对计费的影响
<a name="rcs-sms-fallback-billing"></a>

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

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

## 测试短信回退
<a name="rcs-sms-fallback-testing"></a>

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

### 在没有经过批准的短信号码的情况下进行测试
<a name="rcs-sms-fallback-testing-without-sms"></a>

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

**在没有经过批准的 SMS 号码的情况下测试 SMS 回退**

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

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

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

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

### 使用经批准的短信号码进行测试
<a name="rcs-sms-fallback-testing-with-sms"></a>

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

**使用经批准的 SMS 号码测试 SMS 回退**

1. 创建包含您的 AWS RCS 代理和经批准的 SMS 电话号码（例如 10DLC、免费电话号码或短代码号码）的电话池。

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

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

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

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

## 在池中管理 AWS RCS 代理
<a name="rcs-sms-fallback-pool-management"></a>

有关使用 AWS RCS 代理创建池、向现有池中添加代理、了解池配置要求以及从池中移除代理的 step-by-step说明，请参阅[在池中管理 AWS RCS 代理](phone-pool-rcs-agents.md)。