View a markdown version of this page

使用 “通知” 发送消息 - AWS 最终用户消息 SMS

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

使用 “通知” 发送消息

Notify 提供了两个 APIs 用于发送消息的功能:

  • SendNotifyTextMessage— 使用预先批准的模板发送 SMS 消息。

  • SendNotifyVoiceMessage— 使用语音呼叫读取模板内容 text-to-speech。

发送短信

Console
  1. 打开 AWS 最终用户消息 SMS 控制台,网址为https://console.aws.amazon.com/sms-voice/

  2. 导航到 “通知” 配置,然后选择 “测试” 选项卡。

  3. 对于频道,请选择文本

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

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

  6. 填写模板变量。

  7. 选择发送

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')}")

发送语音消息

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

提示

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

Console
  1. 打开 AWS 最终用户消息 SMS 控制台,网址为https://console.aws.amazon.com/sms-voice/

  2. 导航到 “通知” 配置,然后选择 “测试” 选项卡。

  3. 对于频道,选择 “语音”。

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

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

  6. 选择发送

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 模式

设置DryRuntrue为可在不实际传送消息的情况下验证发送请求。 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

发送请求参数

两者SendNotifyTextMessage兼而有之,并SendNotifyVoiceMessage接受以下参数:

NotifyConfigurationId (必填)

通知配置的 ID 或 ARN。

DestinationPhoneNumber (必填)

收件人的电话号码采用 E.164 格式。

TemplateVariables (必填)

变量名到值的映射。所有值都是字符串,即使是整数或布尔变量也是如此。

TemplateId

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

ConfigurationSetName

事件路由的配置集。

上下文

事件记录中包含键值对。

DryRun

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

TimeToLive

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

MessageFeedbackEnabled

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

VoiceId (仅限语音)

要使用的 Amazon Polly 语音(例如JOANNAMATTHEW)。

邮件路由的工作原理

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

消息反馈

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

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

配送活动

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

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

错误处理

ValidationException

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

ResourceNotFoundException

未找到通知配置或模板。

ServiceQuotaExceededException

已达到每日消息上限(基本级别)或每月支出上限。

ConflictException

通知配置未处于ACTIVE状态。

重要提示

  • 双向消息-使用 AWS托管的发起身份时不支持双向消息。如果您需要双向消息,请关联自己的电话池。请参阅在 “通知” 中使用专用号码

  • 选择退出行为 — 对于具有 AWS托管身份的 OTP 用例,STOP 关键字响应仅供参考。由于每个 OTP 请求都是隐式的选择加入,因此不保留永久性选择退出列表。如果您关联自己的电话池,则会遵守电话池的选择退出列表。

问题排查

留言未送达

如果您的消息未送达,请验证以下内容:

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

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

  3. 验证您的配置状态为ACTIVE

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

已屏蔽状态

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

验证错误

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