

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

# 使用 “通知” 发送消息
<a name="notify-send-messages"></a>

Notify 提供了两个 APIs 用于发送消息的功能：
+ `SendNotifyTextMessage`— 使用预先批准的模板发送 SMS 消息。
+ `SendNotifyVoiceMessage`— 使用语音呼叫读取模板内容 text-to-speech。

## 发送短信
<a name="notify-send-text"></a>

------
#### [ Console ]

1. 打开 AWS 最终用户消息 SMS 控制台，网址为[https://console.aws.amazon.com/sms-voice/](https://console.aws.amazon.com/sms-voice/)。

1. 导航到 “通知” 配置，然后选择 “**测试**” 选项卡。

1. 对于频道，请选择**文本**。

1. 从 “模板” 表格中选择一个模板。

1. 以 E.164 格式输入目标电话号码。

1. 填写模板变量。

1. 选择**发送**。

------
#### [ AWS CLI ]

```
aws pinpoint-sms-voice-v2 send-notify-text-message \
  --notify-configuration-id nc-1234567890abcdef0 \
  --destination-phone-number +12065550100 \
  --template-id notify-code-verification-english-001 \
  --template-variables '{"code":"123456"}'
```

------
#### [ Python (boto3) ]

```
import boto3

client = boto3.client('pinpoint-sms-voice-v2')

response = client.send_notify_text_message(
    NotifyConfigurationId='nc-1234567890abcdef0',
    DestinationPhoneNumber='+12065550100',
    TemplateId='notify-code-verification-english-001',
    TemplateVariables={
        'code': '123456'
    }
)

print(f"Message sent. MessageId: {response['MessageId']}")
print(f"Resolved body: {response.get('ResolvedMessageBody')}")
```

------

## 发送语音消息
<a name="notify-send-voice"></a>

语音留言需要在 “通知” 配置中启用`VOICE`频道。

**提示**  
对于语音消息，使用句点或空格分隔数字（例如`"1. 2. 3. 4. 5. 6."`），以便 text-to-speech引擎单独读取每个数字，而不是作为单个数字。

------
#### [ Console ]

1. 打开 AWS 最终用户消息 SMS 控制台，网址为[https://console.aws.amazon.com/sms-voice/](https://console.aws.amazon.com/sms-voice/)。

1. 导航到 “通知” 配置，然后选择 “**测试**” 选项卡。

1. 对于频道，选择 “**语音**”。

1. 从 “模板” 表格中选择一个语音模板。

1. 输入目标电话号码并填写模板变量。

1. 选择**发送**。

------
#### [ AWS CLI ]

```
aws pinpoint-sms-voice-v2 send-notify-voice-message \
  --notify-configuration-id nc-1234567890abcdef0 \
  --destination-phone-number +12065550100 \
  --template-id notify-code-verification-english-001 \
  --template-variables '{"code":"123456"}' \
  --voice-id JOANNA
```

------

## 使用 DryRun 模式
<a name="notify-send-dryrun"></a>

设置`DryRun``true`为可在不实际传送消息的情况下验证发送请求。 DryRun 模式会检查模板变量验证、国家/地区限制和支出限制，但不会发送消息或从您的支出限额中扣除。

```
aws pinpoint-sms-voice-v2 send-notify-text-message \
  --notify-configuration-id nc-1234567890abcdef0 \
  --destination-phone-number +12065550100 \
  --template-id notify-code-verification-english-001 \
  --template-variables '{"code":"123456"}' \
  --dry-run
```

## 发送请求参数
<a name="notify-send-parameters"></a>

两者`SendNotifyTextMessage`兼而有之，并`SendNotifyVoiceMessage`接受以下参数：

NotifyConfigurationId （必填）  
通知配置的 ID 或 ARN。

DestinationPhoneNumber （必填）  
收件人的电话号码采用 E.164 格式。

TemplateVariables （必填）  
变量名到值的映射。所有值都是字符串，即使是整数或布尔变量也是如此。

TemplateId  
要使用的模板。如果省略，则使用配置的默认模板。

ConfigurationSetName  
事件路由的配置集。

上下文  
事件记录中包含键值对。

DryRun  
在不发送请求的情况下验证请求。

TimeToLive  
消息的有效时长，以秒为单位。默认值为 72 小时。

MessageFeedbackEnabled  
通过 `PutMessageFeedback` API 启用消息反馈跟踪。

VoiceId （仅限语音）  
要使用的 Amazon Polly 语音（例如`JOANNA`，`MATTHEW`）。

## 邮件路由的工作原理
<a name="notify-send-routing"></a>

AWS 根据目的地国家/地区自动为每封邮件选择最佳的发件人身份。如果您已将电话池与 Notify 配置相关联，则会先尝试该池中客户拥有的身份。如果没有合适的客户拥有的身份可用，则使用 AWS由托管的身份作为备用身份。

## 消息反馈
<a name="notify-send-feedback"></a>

如果您`MessageFeedbackEnabled`在发送消息时启用，则可以报告最终用户是否成功接收并使用了代码：

```
client.put_message_feedback(
    MessageId='msg-1234567890abcdef',
    MessageFeedbackStatus='RECEIVED'  # or 'FAILED'
)
```

## 配送活动
<a name="notify-send-delivery-events"></a>

通知会向您配置的事件目的地（CloudWatchAmazon Data Firehose 或亚马逊 SNS）发出传送事件。有关设置事件目的地的信息，请参阅[AWS 终端用户消息发送 SMS 服务中的配置集](configuration-sets.md)。


**配送事件类型**  

| 事件 | 说明 | 
| --- | --- | 
| PENDING | 留言已排队等候传送。 | 
| DELIVERED | 消息已传送到收件人的设备。 | 
| FAILED | 留言传送失败。有关详细信息，请查看失败原因。 | 
| BLOCKED | 邮件已被 “保护” 配置规则阻止。 | 

## 错误处理
<a name="notify-send-errors"></a>

ValidationException  
模板变量缺失或无效、电话号码格式无效或目的地国家/地区未在配置中启用。

ResourceNotFoundException  
未找到通知配置或模板。

ServiceQuotaExceededException  
已达到每日消息上限（基本级别）或每月支出上限。

ConflictException  
通知配置未处于`ACTIVE`状态。

## 重要提示
<a name="notify-send-important-notes"></a>
+ **双向消息**-使用 AWS托管的发起身份时不支持双向消息。如果您需要双向消息，请关联自己的电话池。请参阅[在 “通知” 中使用专用号码](notify-dedicated-numbers.md)。
+ **选择退出行为** — 对于具有 AWS托管身份的 OTP 用例，STOP 关键字响应仅供参考。由于每个 OTP 请求都是隐式的选择加入，因此不保留永久性选择退出列表。如果您关联自己的电话池，则会遵守电话池的选择退出列表。

## 问题排查
<a name="notify-send-troubleshooting"></a>

**留言未送达**  
如果您的消息未送达，请验证以下内容：

1. 验证目标电话号码是否为 E.164 格式（以`+`和国家/地区代码开头）。

1. 检查目的地国家/地区是否在您的`EnabledCountries`列表中。

1. 验证您的配置状态为`ACTIVE`。

1. 检查您的支出限额是否未被超过。

**已屏蔽状态**  
该邮件已被 “保护” 配置阻止。常见原因包括目的地国家/地区不在您的启用国家/地区列表中，或者消息被标记为潜在的 AIT（人为夸大流量）。

**验证错误**  
确保提供所有必`TemplateVariables`需品。检查变量值是否与其声明的类型相匹配（例如，整数是有效数字）。验证模板 ID 是否存在且处于活动状态。