

**终止支持通知：** AWS 将于 2026 年 10 月 30 日终止对亚马逊 Pinpoint 的支持。2026 年 10 月 30 日之后，您将不再能够访问 Amazon Pinpoint 控制台或 Amazon Pinpoint 资源（端点、分段、活动、旅程和分析）。有关更多信息，请参阅 [Amazon Pinpoint 终止支持](https://docs.aws.amazon.com/console/pinpoint/migration-guide)。**注意：** APIs 与短信相关、语音、移动推送、OTP 和电话号码验证不受此更改的影响，并受 AWS 最终用户消息的支持。

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

# Amazon Pinpoint 消息模板
<a name="messages-templates"></a>

如果您经常设计和发送特定类型的邮件（例如，每周通讯或约会提醒），则可创建该邮件并将它另存为消息模板。然后，您可以在每次需要发送该类型的消息时使用模板作为起点，而不是重新设计和编写消息。

*消息模板* 是您可以在为任何 Amazon Pinpoint 项目发送的消息中创建、保存和重用的内容和设置集。创建模板时，您可以在基于模板的邮件的各个组成部分中指定要重用的内容。

这些组件称为*模板部分*。它们可以包含静态文本、个性化内容、图像和其他设计元素，具体取决于模板的类型。模板部分还可以包含特定于渠道的设置。例如，推送通知中的模板部分可以指定当收件人收到基于模板的推送通知时要播放的自定义声音或要显示的图像。

创建消息时，您可以选择用于消息的模板。如果选择模板，则 Amazon Pinpoint 将使用模板中的内容和设置填充消息。

您可以在 Amazon Pinpoint 中设计以下类型的消息模板：
+ **电子邮件模板**，用于您在活动或旅程中发送的电子邮件或者作为直接消息或测试消息发送给有限受众的电子邮件。
+ **推送通知模板**，用于您在活动中发送的推送通知或者作为直接消息或测试消息发送给有限受众的推送通知。
+ **短信模板**，用于您在活动中发送的短信文本消息或者作为直接消息或测试消息发送给有限受众的短信文本消息。
+ **语音模板**，用于作为直接消息或测试消息发送的语音消息。

除了支持多种类型的消息模板外，Amazon Pinpoint 还支持消息模板的版本控制。版本控制为您提供了一种设计模板并随着时间的推移更改模板的方法，同时还创建并维护模板的历史记录。版本控制还为您提供了一种方法来指定可在消息中使用的模板版本。要了解有关模板版本的更多信息，请参阅[管理消息模板的版本](message-templates-versioning.md)。

本章中的主题介绍了如何为您的 Amazon Pinpoint 账户创建和管理消息模板。

**Topics**
+ [创建电子邮件模板](message-templates-creating-email.md)
+ [创建应用程序内模板](message-templates-creating-inapp.md)
+ [创建推送通知模板](message-templates-creating-push.md)
+ [创建 SMS 模板](message-templates-creating-sms.md)
+ [创建语音模板](message-templates-creating-voice.md)
+ [向消息模板添加个性化内容](message-templates-personalizing.md)
+ [使用消息模板助手](message-template-helpers.md)
+ [管理消息模板](message-templates-managing.md)
+ [管理消息模板的版本](message-templates-versioning.md)

# 创建电子邮件模板
<a name="message-templates-creating-email"></a>

*电子邮件模板* 是一种消息模板，其中包含要在您为任何 Amazon Pinpoint 项目发送的电子邮件中创建、保存和重用的内容和设置。您可以在通过 Amazon Pinpoint 创建和发送的任意类型的电子邮件中使用电子邮件模板。

在创建电子邮件模板时，您可以在基于模板的电子邮件的各个组成部分中指定要重用的内容和设置。这些组成部分称为*模板部分*，可以是邮件主题和/或邮件正文。内容可以是静态文本、个性化内容、图像或其他设计元素。模板部分也可以是一个设置，例如在收件人的电子邮件应用程序不显示 HTML 内容时所使用的邮件正文。

在您创建基于模板的电子邮件时，Amazon Pinpoint 将使用您在模板中定义的内容和设置填充邮件。

**创建电子邮件模板**

1. 打开亚马逊 Pinpoint 控制台，网址为。[https://console.aws.amazon.com/pinpoint/](https://console.aws.amazon.com/pinpoint/)

1. 在导航窗格中，选择**消息模板**。

1. 选择**创建模板**。

1. 在**渠道**下面，选择**电子邮件**。

1. 在**模板详细信息**下，对于**模板名称**，输入模板的名称。名称必须以字母或数字开头。它最多可以包含 128 个字符。字符可以是字母、数字、下划线 (\$1) 或连字符 (‐)。

1. （可选）对于**版本描述**，输入模板的简要描述。描述最多可包含 500 个字符。

1. 在**电子邮件详细信息**下，通过以下选项为使用模板的邮件指定内容：
   + 对于**主题**，输入要在邮件主题行中显示的文本。
   + 对于**消息**，输入要在邮件正文中显示的内容。
**提示**  
对于消息正文，您可以使用 HTML 或“设计”视图输入内容。在 HTML 视图中，您可以手动输入 HTML 内容，包括格式、链接以及要包含在邮件中的其他功能。在“设计”视图中，您可以使用富文本编辑器输入内容。使用格式工具栏应用格式设置，以及向内容添加链接和其他功能。要切换视图，请从消息编辑器上方的视图选择器中选择 **HTML** 或**设计**。  
您还可以在模板的主题和正文中包含个性化内容。为此，添加引用您或 Amazon Pinpoint 创建的特定属性（例如存储用户名字的属性）的消息变量。通过使用消息变量，可以为使用模板的消息的每个接收人显示不同的内容。要使用消息变量，请从**属性查找器**中选择现有属性的名称。Amazon Pinpoint 为该属性创建一个消息变量并将其复制到您的剪贴板上。将变量粘贴到所需的位置。有关更多信息，请参阅 [向消息模板添加个性化内容](message-templates-personalizing.md)。

1. 
**注意**  
必须先设置电子邮件编排发送角色，然后才能使用电子邮件标头。有关更多信息，请参阅 [在 Amazon Pinpoint 中创建电子邮件编排发送角色](channels-email-orchestration-sending-role.md)。

   在**标头**下，选择**添加新标头**，最多可为电子邮件消息添加 15 个标头。有关支持的标头列表，请参阅[《Amazon Simple Email Service 开发人员指南》](https://docs.aws.amazon.com//ses/latest/dg/Welcome.html)中的 [Amazon SES 标头字段](https://docs.aws.amazon.com/ses/latest/dg/header-fields.html)。
   + 对于**名称**，输入标头的名称。
   + 对于**值**，输入标头的值。

   （可选）要向促销电子邮件添加一键取消订阅链接，请添加以下两个标头：

   1. 创建一个**名称**为 `List-Unsubscribe` 的标头，并将**值**设置为您的取消订阅链接。该链接必须支持 HTTP POST 请求，才能处理收件人的取消订阅请求。

   1. 创建一个**名称**为 `List-Unsubscribe-Post` 的标头，并将**值**设置为 `List-Unsubscribe=One-Click`。

1. （可选）在**纯文本版本**下，输入要在消息的正文中显示的内容，这些消息使用了模板并且将发送到其电子邮件应用程序不显示 HTML 内容的收件人。

1. 如果使用消息变量将个性化内容添加到模板，请为每个变量指定默认值。如果执行此操作，则当收件人没有对应的值时，Amazon Pinpoint 将变量替换为您指定的值。我们建议您为模板中的每个变量执行该操作。

   要指定变量的默认值，请展开**默认属性值**部分。然后，输入要用于每个变量的默认值。如果您没有指定默认值，且收件人没有对应值，则 Amazon Pinpoint 不会发送邮件。

1. 在输入完模板的内容和设置后，选择**创建**。

要在使用模板向用户发送电子邮件之前测试该模板，可以发送使用该模板的[测试消息](messages-email.md)。如果执行此操作，请确保首先完成步骤 9，为模板中的所有变量指定默认值。否则，消息可能无法发送，或者它可能无法正确呈现。

## 在邮件模板中包含取消订阅链接
<a name="message-templates-creating-email-optout"></a>

在电子邮件中包含取消订阅链接是一项最佳实践，并且在一些国家/地区是法律所要求的。在取消订阅链接中，您可以包含一个特殊属性`ses:tags="unsubscribeLinkTag:value"`，其中*value*是您定义的任何值。如果收件人点击包含此特殊属性的链接，Amazon Pinpoint 会将其计为选择退出事件以供分析（例如，在[分析概述页面](analytics-overview.md)的选择退出率指标中）。以下示例显示这种链接的语法：

```
<a ses:tags="unsubscribeLinkTag:optout" href="https://www.example.com/preferences">Unsubscribe</a>
```

如果您的模板包含具有此属性的链接，则您仍然必须开发一个系统来处理选择退出请求。有关处理选择退出请求的系统的示例，请参阅解决方案库中的 [AWS Amazon Pinpoint 偏好中心](https://aws.amazon.com/solutions/implementations/amazon-pinpoint-preference-center/)解决方案。

**注意**  
Amazon Pinpoint Preference Center 解决方案现已成为指南。该解决方案无法再部署，但架构图和代码留作参考。

# 创建应用程序内模板
<a name="message-templates-creating-inapp"></a>

使用*应用程序内模板*，您可以从 Amazon Pinpoint 向应用程序用户发送消息。使用应用程序内模板可为您的应用程序内消息创建、保存和重用设置及内容。

在创建应用程序内模板时，您可以指定要在使用该模板的应用程序内消息正文中重用的设置和内容。当您使用模板创建消息时，Amazon Pinpoint 将使用您在该模板中定义的设置和内容来填充消息。

应用程序内消息是高度可定制的。它们可以包括用于打开网站或使用户转向应用程序特定部分的按钮。您可以配置背景和文本颜色、定位文本以及向通知中添加图像。您可以发送一条消息，也可以创建包含最多五条独特消息的*转盘*，您的用户可以滚动浏览这些消息。

**创建应用程序内模板**

1. 打开 Amazon Pinpoint 控制台，网址为：[https://console.aws.amazon.com/pinpoint/](https://console.aws.amazon.com/pinpoint/)。

1. 在导航窗格中，选择**消息模板**。

1. 选择**创建模板**。

1. 在**渠道**下，选择**应用程序内消息收发**。

1. 在**模板详细信息**下，对于**模板名称**，输入模板的名称。名称必须以字母或数字开头。它最多可以包含 128 个字符。字符可以是字母、数字、下划线 (\$1) 或连字符 (‐)。

1. （可选）对于**版本描述**，输入模板的简要描述。描述最多可包含 500 个字符。

1. 在**应用程序内消息详细信息**部分的**布局**下，选择消息模板的布局类型。可从以下选项中进行选择：
   + **顶部横幅** – 显示为页面顶部横幅的消息。
   + **底部横幅** – 显示为页面底部横幅的消息。
   + **中间横幅** – 显示为页面中间横幅的消息。
   + **全屏** – 覆盖整个屏幕的消息。
   + **模态** – 在页面置顶窗口中显示的消息。
   + **转盘** – 最多包含五条独特消息的可滚动布局。

1. 在**标题**下，配置显示在消息开头的标题。如果您创建了转盘消息，则必须为转盘创建第一条消息，其中包括标题。

   1. 对于在横幅中显示的**标题文本**，您最多可以输入 64 个字符。

   1. 对于**标题文本颜色**，选择标题的文本颜色。您也可以输入 RGB 值或十六进制颜色代码。

   1. 对于**标题对齐**，请选择您是想让文本**左对齐**、**居中对齐**还是**右对齐**。

1. 在**消息**下，配置消息的正文。

   1. 对于**消息**，输入消息正文。消息最多可以包含 150 个字符。

   1. 对于**文本颜色**，选择消息正文的文本颜色。您也可以输入 RGB 值或十六进制颜色代码。

   1. 对于**文本对齐**，请选择您是想让文本**左对齐**、**居中对齐**还是**右对齐**。

1. （可选）更改消息的背景色。在**背景**下，为消息选择背景颜色。您也可以输入 RGB 值或十六进制颜色代码。

1. （可选）在消息中添加图片。在**图片 URL** 下，输入要在消息中显示的图片的 URL。仅接受 .jpg 和 .png 文件。图片的尺寸取决于消息类型：
   + 对于**横幅**，图片应为 100 像素 x 100 像素，或 1:1 的宽高比。
   + 对于**转盘**，图片应为 300 像素 x 200 像素，或者 3:2 的宽高比。
   + 对于**全屏**消息，图片应为 300 像素 x 200 像素，或者 3:2 的宽高比。

1. （可选）在消息中添加一个按钮。在**主按钮**下，执行以下操作：

   1. 选择**添加主按钮**。

   1. 对于**按钮文本**，输入要在按钮上显示的文本。您最多可以输入 64 个字符。

   1. （可选）对于**按钮文本颜色**，为按钮文本选择一种颜色。您也可以输入 RGB 值或十六进制颜色代码。

   1. （可选）对于**背景颜色**，为按钮选择一种背景颜色。您也可以输入 RGB 值或十六进制颜色代码。

   1. （可选）对于**边框半径**，输入半径值。值越小，角越尖，值越大，角越圆。

   1. 在**操作**下，选择用户点击按钮时发生的事件：
      + **关闭** – 关闭消息。
      + **转到 URL** – 打开网站。
      + **转到深层链接** – 打开一个应用程序或打开应用程序中的特定位置。

      如果您希望按钮对于不同设备类型有不同的行为，则可以覆盖默认操作。在**操作**下，使用选项卡选择要修改其按钮行为的设备类型。例如，选择 **iOS** 来修改 iOS 设备的按钮行为。接下来，选择**覆盖默认操作**。最后，指定一个操作。

1. （可选）在消息中添加一个辅助按钮。在**辅助按钮**下，选择**添加辅助按钮**。按照上一步中的过程配置辅助按钮。

1. （可选）向消息中添加自定义数据。自定义数据是随消息一起发送的键值对。例如，您可能希望将促销代码随消息一起传递。如果您要发送转盘消息，则可以向每条转盘消息添加自定义数据。要添加自定义数据，请执行以下操作：

   1. 在**自定义数据**下，选择**添加新项目**。

   1. 输入**键**，例如 *PromoCode*。

   1. 输入该键的**值**，例如您的 *PromoCode* 可能是 *12345*。

   1. 发送消息时，您的消息中会包含代码 *12345*。

   1. 要添加更多键值对，请选择**添加新项目**。最多可以在消息中添加 10 个键值对。完成添加自定义数据后，继续执行下一步。

1. 如果您的消息是转盘，则最多可以再添加四条独特消息。要向转盘中添加消息，展开**转盘概述**部分。接下来，选择**添加新消息**。重复上一步骤以配置消息。

   当您将消息添加到转盘中时，**预览**页面会通过在页面底部显示图标（显示转盘中包含的消息数）进行更新。

   下图显示包含两条消息的转盘：  
![\[\]](http://docs.aws.amazon.com/zh_cn/pinpoint/latest/userguide/images/channels-inapp-carousel.png)

1. 完成后，选择**创建**。

# 创建推送通知模板
<a name="message-templates-creating-push"></a>

*推送通知模板* 是一种消息模板，其中包含可用于您的 Amazon Pinpoint 项目的内容和设置。当您使用模板发送推送通知时，Amazon Pinpoint 将使用您在模板中定义的内容和设置填充通知。

在创建推送通知模板时，您可以在基于模板的推送通知的各个组成部分中指定要重用的内容和设置。这些组成部分称为*模板部分*，它们可以包含文本（例如，通知的标题或正文）或设置（例如，在收件人收到通知时将播放的自定义声音）。

要为特定的推送通知渠道自定义模板，您可以在每个模板中创建多套模板部分，包括一个默认集以及可选的一个或多个特定服务集。默认集包含默认情况下要用于任何推送通知渠道的内容和设置。特定服务集包含您要用于特定通知服务（例如 Apple Push Notification service 或 Firebase Cloud Messaging）的任何内容和设置。通过向模板中添加特定于服务的设置，您可以定制通知，从而在每个收件人的设备类型上显示独特的内容。

您也可以[创建包含原始消息数据的模板](#message-templates-creating-push-raw)。此选项更高级，但很有用，它使您可以为特定渠道指定标准 Amazon Pinpoint 推送通知模板中不存在的设置。

## 创建标准推送通知模板
<a name="message-templates-creating-push-standard"></a>

完成此过程以指定基本消息内容，例如标题、消息正文、图像和操作。要指定原始消息内容，请改为完成[创建包含原始消息数据的推送通知模板](#message-templates-creating-push-raw)中的过程。

**创建推送通知模板**

1. 打开亚马逊 Pinpoint 控制台，网址为。[https://console.aws.amazon.com/pinpoint/](https://console.aws.amazon.com/pinpoint/)

1. 在导航窗格中，选择**消息模板**。

1. 选择**创建模板**。

1. 在**渠道**下，选择**推送通知**。

1. 在**模板详细信息**下，对于**模板名称**，输入模板的名称。名称必须以字母或数字开头。它最多可以包含 128 个字符。字符可以是字母、数字、下划线 (\$1) 或连字符 (‐)。

1. （可选）对于**版本描述**，输入模板的简要描述。描述最多可包含 500 个字符。

1. 在**推送通知详细信息**下，执行以下操作：
   + 对于**通知类型**，请选择**标准消息**。
   + 对于**标题**，请输入要显示在消息正文上方的标题。
   + 对于**正文**，请输入要在通知消息正文中显示的文本。
**提示**  
您可以在模板标题和正文中包含个性化内容。为此，添加引用特定属性（例如，存储用户名字的属性）的消息变量。通过使用消息变量，您可以为使用模板的推送通知的每个收件人显示不同的内容。  
要使用消息变量，请从**属性查找器**中选择现有属性的名称。Amazon Pinpoint 为该属性创建一个消息变量并将其复制到您的剪贴板上。将变量粘贴到所需的位置。有关更多信息，请参阅 [向消息模板添加个性化内容](message-templates-personalizing.md)。
   + 对于**自定义提醒声音**，输入音频文件的名称，该文件包含收件人收到推送通知时要播放的自定义声音。此名称必须与收件人设备上音频文件的名称相同。
   + 对于**操作**，选择您希望收件人设备在收件人点击推送通知时执行的操作：
     + **打开您的应用程序** – 打开您的应用程序或将它移至前台（如果已将它发送到后台）。
     + **转到 URL** – 在收件人设备上打开默认浏览器并加载特定网页。如果选择此选项，请在**目标 URL** 框中输入该网页的 URL。
     + **打开深层链接** – 打开您的应用程序并显示应用程序中的特定用户界面。如果选择此选项，请在**目标 URL** 框中输入该界面的 URL。

1. （可选）要为特定推送通知服务自定义模板，请在**为单独的推送服务自定义内容**下选择相应的服务选项卡。然后选择要用于该服务的选项。

   如果在服务的选项卡上选中**覆盖默认推送内容**复选框，则 Amazon Pinpoint 会自动将您在前面步骤中选择的默认内容和设置替换为您在选项卡上选择的选项。如果要保留默认内容和设置，并且仅自定义模板以使用其他特定于渠道的设置，请不要选中此复选框。  
**Apple**  
使用这些选项为你通过 Apple 推送通知服务 (APNs) 渠道发送到在 iOS 设备上运行的应用程序的推送通知指定自定义内容和设置。  
除了标准内容和设置之外，您也可以在使用模板的推送通知中包含自定义图像或视频。为此，请在 **iOS 媒体**框中输入图像或视频文件的 URL。URL 必须是可公开访问的。否则，收件人设备将无法显示图像或视频。  
**Google**  
使用这些选项可为您通过 Google Firebase Cloud Messaging (FCM) 渠道向 Android 设备上运行的应用程序发送的推送通知指定自定义内容和设置。  
除了标准内容和设置之外，您也可以选择以下选项来在使用模板的推送通知中显示自定义图像：  
   + **Android 图像** – 输入要在推送通知正文中显示的图像的 URL。
   + **Android 图标** – 输入要在推送通知的内容视图中显示的大图标图像的 URL。
   + **Android 小图标** – 输入要在状态栏和推送通知的内容视图中显示的小图标图像的 URL。  
**Amazon**  
使用这些选项可为您通过 Amazon Device Messaging (ADM) 渠道向 Amazon 设备上运行的应用程序发送的推送通知指定自定义内容和设置。  
除了标准内容和设置之外，您也可以选择以下选项来在使用模板的推送通知中显示自定义图像：  
   + **Android 图像** – 输入要在推送通知正文中显示的图像的 URL。
   + **Android 图标** – 输入要在推送通知的内容视图中显示的大图标图像的 URL。
   + **Android 小图标** – 输入要在状态栏和推送通知的内容视图中显示的小图标图像的 URL。  
**百度**  
使用这些选项可为您通过百度渠道向使用百度云推送平台的应用程序发送的推送通知指定自定义内容和设置。  
除了标准内容和设置之外，您也可以选择以下选项来在使用模板的推送通知中显示自定义图像：  
   + **Android 图像** – 输入要在推送通知正文中显示的图像的 URL。
   + **Android 图标** – 输入要在推送通知的内容视图中显示的大图标图像的 URL。
   + **Android 小图标** – 输入要在状态栏和推送通知的内容视图中显示的小图标图像的 URL。

1. 如果使用消息变量将个性化内容添加到模板，请为每个变量指定默认值。如果执行此操作，则当收件人没有对应的值时，Amazon Pinpoint 将变量替换为您指定的值。我们建议您为模板中的每个变量执行该操作。

   要指定变量的默认值，请展开**默认属性值**部分。然后，输入要用于每个变量的默认值。如果您没有指定默认值，且收件人没有对应值，则 Amazon Pinpoint 不会发送邮件。

1. 在输入完模板的内容和设置后，选择**创建**。

## 创建包含原始消息数据的推送通知模板
<a name="message-templates-creating-push-raw"></a>

完成此过程以手动指定原始消息有效载荷。仅当您想要使用 Amazon Pinpoint 不允许您配置的特定推送通知服务的功能时，才需要指定原始消息有效负载。如果您需要指定原始消息内容，请改为完成[创建标准推送通知模板](#message-templates-creating-push-standard)中的过程。

需要您使用原始消息模板的一个例子是，当您想把消息发送给桌面 Safari Web 浏览器的用户时。在这种情况下，您必须在原始消息有效载荷中包含特定属性。有关更多信息，请参阅《AWS 最终用户消息推送用户指南》**中的[发送消息](https://docs.aws.amazon.com/push-notifications/latest/userguide/reference-send-message.html)。

**创建推送通知模板**

1. 打开亚马逊 Pinpoint 控制台，网址为。[https://console.aws.amazon.com/pinpoint/](https://console.aws.amazon.com/pinpoint/)

1. 在导航窗格中，选择**消息模板**。

1. 选择**创建模板**。

1. 在**渠道**下，选择**推送通知**。

1. 在**模板详细信息**下，对于**模板名称**，输入模板的名称。名称必须以字母或数字开头。它最多可以包含 128 个字符。字符可以是字母、数字、下划线 (\$1) 或连字符 (‐)。

1. （可选）对于**版本描述**，输入模板的简要描述。描述最多可包含 500 个字符。

1. 在**推送通知详细信息**下，对于**通知类型**，选择**原始消息**。消息编辑器会显示用于模板的代码大纲。在消息编辑器中，输入要用于每个推送通知服务的设置，包括要为模板指定的任何可选设置，例如图片、声音和操作。有关详细信息，请参阅您使用的推送通知服务的文档。

1. 在完成输入原始消息内容后，选择**创建**。

要在发送给用户的推送通知中使用模板之前测试模板，您可以发送使用该模板的[测试通知](messages-mobile.md)。如果执行此操作，请确保首先完成步骤 10，为模板中的所有变量指定默认值。否则，推送通知可能无法发送，或者它可能无法正确呈现。

# 创建 SMS 模板
<a name="message-templates-creating-sms"></a>

*短信模板* 是一种消息模板，其中包含要在您为任何 Amazon Pinpoint 项目发送的短信文本消息中创建、保存和重用的内容和设置。您可以在通过活动发送的短信中使用短信模板，或者作为直接消息或测试消息将其发送给有限的受众。

创建短信模板时，您可以指定要在基于该模板的文本消息正文中重用的设置和内容。在创建基于模板的消息时，Amazon Pinpoint 将使用您在模板中定义的设置和内容填充消息。

**创建短信模板**

1. 打开 Amazon Pinpoint 控制台，网址为：[https://console.aws.amazon.com/pinpoint/](https://console.aws.amazon.com/pinpoint/)。

1. 在导航窗格中，选择**消息模板**。

1. 选择**创建模板**。

1. 在**渠道**下，选择 **SMS**。

1. 在**模板详细信息**下，对于**模板名称**，输入模板的名称。名称必须以字母或数字开头。它最多可以包含 128 个字符。字符可以是字母、数字、下划线 (\$1) 或连字符 (‐)。

1. （可选）对于**版本描述**，输入模板的简要描述。描述最多可包含 500 个字符。

1. 在**短信详细信息**，对于**消息**，输入要在使用模板的消息正文中显示的内容。消息正文最多可包含 1,600 个字符。
**提示**  
您可以在模板正文中包含个性化内容。为此，添加引用您或 Amazon Pinpoint 创建的特定属性（例如存储用户名字的属性）的消息变量。通过使用消息变量，可以为使用模板的消息的每个接收人显示不同的内容。  
要使用消息变量，请从**属性查找器**中选择现有属性的名称。Amazon Pinpoint 为该属性创建一个消息变量并将其复制到您的剪贴板上。将变量粘贴到所需的位置。有关更多信息，请参阅 [向消息模板添加个性化内容](message-templates-personalizing.md)。

1. 如果使用消息变量将个性化内容添加到模板，请为每个变量指定默认值。如果执行此操作，则当收件人没有对应的值时，Amazon Pinpoint 将变量替换为您指定的值。我们建议您为模板中的每个变量执行该操作。

   要指定变量的默认值，请展开**默认属性值**部分。然后，输入要用于每个变量的默认值。如果您没有指定默认值，且收件人没有对应值，则 Amazon Pinpoint 不会发送邮件。

1. 在输入完模板的内容和设置后，选择**创建**。

要在发送给用户的消息中使用模板之前测试模板，您可以发送使用该模板的[测试消息](messages-sms.md)。如果执行此操作，请确保首先完成步骤 8，为模板中的所有变量指定默认值。否则，消息可能无法发送，或者它可能无法正确呈现。

# 创建语音模板
<a name="message-templates-creating-voice"></a>

*语音模板* 是一种消息模板，其中包含要在您为任何 Amazon Pinpoint 项目发送的语音消息中创建、保存和重用的内容和设置。您可以在作为直接消息或测试消息发送的语音消息中使用语音模板。

创建语音模板时，您可以在基于模板的语音消息的各个组成部分中指定要重用的内容和设置。这些组件称为*模板部分*。它们可以包含消息脚本的文本或设置，例如传递消息时要使用的语音。消息脚本可以包括静态文本以及（可选）您定义的个性化内容。

在创建基于模板的语音消息时，Amazon Pinpoint 将使用您在模板中定义的内容和设置填充消息。

**创建语音模板**

1. 打开 Amazon Pinpoint 控制台，网址为：[https://console.aws.amazon.com/pinpoint/](https://console.aws.amazon.com/pinpoint/)。

1. 在导航窗格中，选择**消息模板**。

1. 选择**创建模板**。

1. 在**渠道**下，选择**语音**。

1. 在**模板详细信息**下，对于**模板名称**，输入模板的名称。名称必须以字母或数字开头。它最多可以包含 128 个字符。字符可以是字母、数字、下划线 (\$1) 或连字符 (‐)。

1. （可选）对于**版本描述**，输入模板的简要描述。描述最多可包含 500 个字符。

1. 在**语音消息详细信息**下，对于**消息**，为使用模板的消息输入您要用作消息脚本的文本。该脚本最多可包含 10000 个字符，并且必须采用纯文本格式。
**提示**  
您可以在消息脚本中包含个性化内容。为此，添加引用您或 Amazon Pinpoint 创建的特定属性（例如存储用户名字的属性）的消息变量。通过使用消息变量，您可以为使用模板的消息的每个收件人播放不同的内容。  
要使用消息变量，请从**属性查找器**中选择现有属性的名称。Amazon Pinpoint 为该属性创建一个消息变量并将其复制到您的剪贴板上。将变量粘贴到所需的位置。有关更多信息，请参阅 [向消息模板添加个性化内容](message-templates-personalizing.md)。

1. 对于**语言和区域**，选择编写消息脚本文本所用的语言。Amazon Pinpoint 使用此设置来确定在将脚本文本转换为语音时要使用哪些音素和其他特定语言的设置。

1. 对于**语音**，选择要向收件人播放的语音。每个语音都是用母语人士创造的，因此，语音与语音之间存在变化，甚至在同一种语言中也是如此。因此，使用脚本测试各个语音是一个好主意。

   语音列表根据您在步骤 8 中选择的语言而更改。在大多数情况下，列表中至少包括一名男性和一名女性的声音。在某些情况下，只有一个声音可用。我们将继续增加对其他语言的支持，并为支持的语言创建声音。

1. 选择**播放消息**以测试消息在传递给收件人时的声音。调整内容和设置，直到模板的设计符合您的要求。

1. 如果使用消息变量将个性化内容添加到模板，请为每个变量指定默认值。如果执行此操作，则当收件人没有对应的值时，Amazon Pinpoint 将变量替换为您指定的值。我们建议您为模板中的每个变量执行该操作。

   要指定变量的默认值，请展开**默认属性值**部分。然后，输入要用于每个变量的默认值。如果您没有指定默认值，且收件人没有对应值，则 Amazon Pinpoint 不会发送邮件。

1. 在输入完模板的内容和设置后，选择**创建**。

# 向消息模板添加个性化内容
<a name="message-templates-personalizing"></a>

要使用模板在消息中提供动态的个性化内容，请将*消息变量* 添加到消息模板。*消息变量* 是一个占位符，引用您或 Amazon Pinpoint 创建的用于存储用户相关信息的特定属性。每个属性通常对应于某位用户的一个特征，例如用户的名字或居住的城市。通过将消息变量添加到模板中，您可以使用这些属性将自定义内容提供给使用模板的消息的每位收件人。

如果模板中包含消息变量，则 Amazon Pinpoint 将每个变量替换为每个收件人当前对应的属性值。在每次发送使用模板的消息时，都会执行此操作。这意味着您可以向每位收件人发送个性化内容，而无需创建多个自定义版本的消息或消息模板。您还可确保消息中使用了您拥有的收件人的最新信息。

例如，如果您的项目是适用于跑步者的健身应用程序，其中包含每个用户的名字、偏好的活动和个人成绩记录属性，则可以在模板中使用以下文本和消息变量：

`Hi {{User.UserAttributes.FirstName}}, congratulations on your new {{User.UserAttributes.Activity}} record of {{User.UserAttributes.PersonalRecord}}!`

当您发送使用模板的消息时，Amazon Pinpoint 将变量替换为每位收件人的每个属性的当前值。以下示例演示此操作。

**示例 1**  
`Hi Sofia, congratulations on your new half marathon record of 1:42:17!`

**示例 2**  
`Hi Alejandro, congratulations on your new 5K record of 20:52!`

如果收件人没有某个属性值，Amazon Pinpoint 可以使用您为变量指定的默认值替换变量。例如，如果健身应用程序的用户尚未选择其偏好的活动，则您可以使用 `running` 作为 `{{User.UserAttributes.Activity}}` 变量的默认值。在这种情况下，Amazon Pinpoint 将替换该变量，如以下示例所示：

**示例 1**  
`Hi Jane, congratulations on your new running record of 1:42:17!`

**示例 2**  
`Hi John, congratulations on your new running record of 20:52!`

如果您未指定默认值，且收件人没有对应的值，则 Amazon Pinpoint 在向该收件人发送消息时将忽略该变量的所有文本。例如：

`Hi Mary, congratulations on your new record of 20:52!`

作为最佳实践，建议您为模板中包含的每个变量指定默认值。

## 添加消息变量
<a name="message-templates-add-variables"></a>

您可以在创建的新模板或现有模板中添加消息属性。如果您将变量添加到现有模板中，Amazon Pinpoint 不一定会将更改应用于使用该模板并且尚未发送的消息，例如，计划稍后发送的活动消息。这取决于您将变量添加到的模板版本以及之前如何配置使用该模板的消息。有关更多信息，请参阅 [管理消息模板的版本](message-templates-versioning.md)。

**注意**  
应用程序内消息模板不支持使用消息变量。

**将消息变量添加到消息模板**

1. 打开亚马逊 Pinpoint 控制台，网址为。[https://console.aws.amazon.com/pinpoint/](https://console.aws.amazon.com/pinpoint/)

1. 在导航窗格中，选择**消息模板**。

1. 在**消息模板**页面上，执行以下操作之一：
   + 要创建新模板并向其中添加消息变量，请选择**创建模板**。然后，在模板页面上，输入模板的名称和（可选）模板的描述。
   + 要将消息变量添加到现有模板，请选择要将变量添加到的模板。然后，在模板页面上，选择**编辑**。在**模板详细信息**下面，使用版本选择器选择要作为起点的模板版本。如果您选择最新的版本，您可以将更改直接保存到该模板版本中。否则，您可以将更改另存为模板的新版本。

1. 在消息详细信息部分，确定添加消息变量的位置。您可以将变量添加到任何类型的模板的正文中。对于电子邮件和推送通知模板，您还可以在消息主题或标题中添加变量。

1. 在**属性查找器**中，展开要添加消息变量的属性类型部分。您可以从以下类型的属性中进行选择：  
**标准属性**  
这些是 Amazon Pinpoint 为任何项目自动创建的属性。这意味着，您可以在为任何项目发送的消息中使用它们。有关其中的每个属性的详细信息，请参阅[支持的 属性](#message-templates-variables)。  
要为标准属性添加变量，请从列表中选择该属性。  
**自定义属性**  
这些是您可以选择为各个项目创建的属性。由于这些属性可能不适用于某些项目，所以，对于使用该模板的消息的每个收件人，Amazon Pinpoint 可能无法将变量替换为某个值。为了帮助您避免这一问题，Amazon Pinpoint 提供了一些选项来帮助您选择在特定项目或所有项目中存在的属性。  
添加自定义属性：  

   1. 选择**自定义属性**，然后选择**加载自定义属性**。在出现的窗口中，Amazon Pinpoint 列出您创建的所有项目。当您选择每个项目时，选定项目的通用属性将显示在右侧的导航窗格中。如果未显示任何属性，则这些项目之间没有通过用属性。

   1. 请执行以下操作之一：
      + 要使用选定项目的所有通用属性，请选择**加载自定义属性**。
      + 要使用列表中的某个特定属性，请在搜索字段中输入该属性名称的任意部分。与输入文本相匹配的属性将显示。当显示了您要使用的属性时，选择**加载自定义属性**。**属性查找器**显示新添加的自定义属性。
**注意**  
您既不能添加来自不同项目集的通用属性，也不能修改**属性查找器**的**自定义属性**部分。要更改自定义属性，请选择 **X** 以清除**属性查找器**，然后重新开始。

   1. 在**属性查找器**中，选择要添加变量的属性。  
**建议的属性**  
这些是您在配置 Amazon Pinpoint 以从推荐器模型中检索个性化建议时可以选择为您的账户创建的属性。有关使用推荐系统模型的信息，请参阅[机器学习模型](ml-models.md)。您可以将这种类型的属性的变量添加到电子邮件模板、推送通知模板和短信模板中。您无法将其添加到语音模板中。  
要为建议的属性添加变量，请从列表中选择该属性。如果**属性查找器**未列出任何建议的属性，您必须先将模板连接到推荐器模型。  
添加建议的属性：  

   1. 选择**连接模型**。

   1. 选择在发送使用该模板的消息时要从中检索建议的模型。

   1. 选择**连接模型**。


1. 当您从**属性查找器**选择一个属性时，Amazon Pinpoint 为该属性创建一个消息变量并将其复制到剪贴板中。将变量粘贴到所需的位置。如果属性列表很长，请输入搜索文本以缩小列表范围。选择 **X** 以清除搜索字段。

   粘贴变量后，Amazon Pinpoint 会将其显示为关联属性的名称，并用两组大括号括起来，例如 `{{User.UserAttributes.FirstName}}`。

1. 对于要添加的每个消息变量，请重复步骤 4 到 6。

1. 要为消息变量指定默认值，请展开**默认属性值**部分。然后，在变量列表中，输入用于变量的默认值。
**注意**  
我们建议您为模板中的每个变量执行该操作。否则，Amazon Pinpoint 可能无法发送使用该模板的消息，或者消息可能以意外或不希望的方式显示。

1. 完成后，请执行以下操作之一：
   + 如果您将消息变量添加到新模板，请选择**创建**。
   + 如果您将消息变量添加到现有模板并希望将更改另存为模板的新版本，请选择**另存为新版本**。
   + 如果您将消息变量添加到现有模板并希望将更改另存为模板最新版本的更新，请选择**更新版本**。仅当您在步骤 3 中打开了模板的最新版本时，此选项才可用。

## 支持的 属性
<a name="message-templates-variables"></a>

每个项目都可以具有标准属性和自定义属性。标准属性是 Amazon Pinpoint 为任何项目自动创建的属性。自定义属性是您可以选择为项目创建的属性。自定义属性有三种类型：
+ **用户属性** – 这些属性描述用户，例如用户的名字、姓氏和出生日期。*用户* 是具有项目的唯一用户 ID 的人员。
+ **端点属性** – 这些属性描述用户的特定端点。*端点* 是您可以将消息发送到的目标，例如电子邮件地址、电话号码或移动设备。每位用户可以与一个或多个端点关联。例如，如果您通过电子邮件、短信和电话与一个用户通信，则该用户与三个端点相关联：一个是其电子邮件地址，另一个是其移动电话号码，再一个是其家庭（固定电话）电话号码。
+ **指标属性** – 这些属性是应用程序向 Amazon Pinpoint 报告的有关单独端点的数值指标，例如某个移动应用程序的会话数或购物车中留下的商品数。
+ **Pinpoint 属性** – 这些属性是您的应用程序、活动或旅程的唯一标识符。

除了您或 Amazon Pinpoint 为项目创建的自定义属性和标准属性以外，Amazon Pinpoint 还支持*建议的属性*。*建议的属性* 是临时存储的针对用户或端点的个性化建议的属性。Amazon Pinpoint 会从您为它配置的推荐器模型中检索这些建议。建议的属性与特定项目无关联，相反，它们与您的 Amazon Pinpoint 账户关联。有关使用推荐系统模型的信息，请参阅[机器学习模型](ml-models.md)。

您可以在消息变量中使用任何标准、自定义或建议的属性。下表指示在每个支持的属性的消息变量中显示的文本，并描述了每个属性。在表中，*custom\$1attribute*表示出现在自定义属性的变量中的文本。在这种情况下，请*custom\$1attribute*替换为自定义属性的名称。例如，如果您的项目在名为 `FirstName` 的自定义用户属性中存储用户的名字，并且您为该属性添加一个变量，则该变量的文本为 `{{User.UserAttributes.FirstName}}`。


| 属性 | 说明 | 
| --- | --- | 
| Address | 您发送到端点的消息或推送通知的目标地址，例如电子邮件地址、电话号码或设备令牌。 | 
| Pinpoint.ApplicationId | 应用程序的唯一标识符。 | 
| Attributes.custom\$1attribute | 描述端点的自定义端点属性。 | 
| Pinpoint.CampaignId | 活动的唯一标识符。 | 
| ChannelType | 向端点发送消息或推送通知时使用的渠道。例如：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/pinpoint/latest/userguide/message-templates-personalizing.html) | 
| CreationDate | 将端点添加到项目的日期和时间，采用 [ISO 8601 格式](https://en.wikipedia.org/wiki/ISO_8601)。例如，2019-06-30T11:45:25.220Z 表示 UTC 2019 年 6 月 30 日 11:45 AM。 | 
| Demographic.AppVersion | 与端点关联的应用程序的版本号。 | 
| Demographic.Locale | 端点的区域设置，格式如下：[ISO 639-1 alpha-2](https://en.wikipedia.org/wiki/ISO_639-1) 代码，后跟下划线 (\$1)，然后是 [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) 值。例如，en\$1US 是美国英语区域设置。 | 
| Demographic.Make | 端点设备的制造商，例如 apple 或 samsung。 | 
| Demographic.Model | 端点设备的产品名称或型号，例如 iPhone 或 SM-G900F。 | 
| Demographic.ModelVersion | 端点设备的型号版本。 | 
| Demographic.Platform | 端点设备上的操作系统，例如 ios 或 android。 | 
| Demographic.PlatformVersion | 端点设备上的操作系统版本。 | 
| Demographic.Timezone | 端点的时区，采用 [tz 数据库](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)值。例如，America/Los\$1Angeles 表示太平洋时间（北美）。 | 
| EffectiveDate | 上次更新端点的日期和时间，采用 [ISO 8601 格式](https://en.wikipedia.org/wiki/ISO_8601)。例如，2019-08-23T10:54:35.220Z 表示 UTC 2019 年 8 月 23 日 10:54 AM。 | 
| EndpointId | 端点的唯一标识符。 | 
| EndpointStatus | 是否向端点发送消息或推送通知：ACTIVE 表示向端点发送消息；INACTIVE 表示不向端点发送消息。 | 
| Id | 端点的唯一标识符。 | 
| Pinpoint.JourneyId | 旅程的唯一标识符。 | 
| Location.City | 端点所在的城市。 | 
| Location.Country | 两个字符的代码，采用 [ISO 3166-1 alpha-2 格式](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)，表示端点所在的国家/地区或区域。例如，US 表示美国。 | 
| Location.Latitude | 端点位置的纬度坐标，舍入到一位小数。 | 
| Location.Longitude | 端点位置的经度坐标，舍入到一位小数。 | 
| Location.PostalCode | 端点所在区域的邮政编码。 | 
| Location.Region | 端点所在区域的名称，例如，省/市/自治区。 | 
| Metrics.custom\$1attribute | 您的应用程序向 Amazon Pinpoint 报告的有关端点的自定义数值指标。 | 
| OptOut | 用户是否选择不接收来自您的消息和推送通知：ALL 表示用户退订并且不希望接收任何消息或推送通知；NONE 表示用户未退订并希望接收所有消息和推送通知。 | 
| RecommendationItems | 存储端点或用户的一个建议的标准建议属性。该属性包含推荐系统模型直接提供的文本。 | 
| RecommendationItems.[\$1] |  存储端点或用户的有序建议列表（包含 2–5 个建议）的标准建议属性。该属性包含推荐系统模型直接提供的文本。 数字占位符 (.[\$1]) 表示属性包含多个值。该属性的消息变量可以引用列表中的特定值。  | 
| Recommendations.custom\$1attribute | 存储端点或用户的一个建议的自定义建议属性。此属性包含由推荐模型提供并通过 AWS Lambda 函数增强的内容。 | 
| Recommendations.custom\$1attribute.[\$1] |  存储端点或用户的多个建议的自定义建议属性。该属性包含由推荐系统模型提供并由 AWS Lambda 函数改进的内容。 数字占位符 (.[\$1]) 表示属性包含多个值。该属性的消息变量可以专门引用其中的一个值。  | 
| RequestId | 最近更新端点请求的唯一标识符。 | 
| User.UserAttributes.custom\$1attribute | 描述用户的自定义用户属性。 | 
| User.UserId | 用户的唯一标识符。 | 

# 使用消息模板助手
<a name="message-template-helpers"></a>

通过 Amazon Pinpoint 模板，客户可以基于 Handlebars.js 语言创建可重复使用的消息模板。助手提供各种功能，例如，将价格格式化为特定地区的货币，或者添加基于时区的地点，等等。助手可以使用特定的字符串或整数作为值，也可以使用特定的 Amazon Pinpoint 消息变量。

以下部分介绍助手的类别：

## 默认帮助程序
<a name="defaulthelpers"></a>

本部分介绍 Handlebars 提供的**内置**助手。有关完整列表，请参阅 [handlebarsjs.com](https://handlebarsjs.com) 上的[内置助手](https://handlebarsjs.com/guide/builtin-helpers.html)。有以下内置助手：
+ `each` – 迭代列表。
**注意**  
最大列表大小为 15 个项目。
+ `if` – 评估语句。

*each*  
迭代列表。此助手仅使用一个块语句。您可以选择：  
+ 在请求中传递 `@index` 以引用当前循环索引。
+ 使用 `this` 助手引用被迭代的当前元素。
+ 使用 `<li>` 标签以列表形式返回助手响应。
**用法**  
`{{#each value}}`  
位置 `{{@index}}` 的值为 `{{this}}`。  
`{{else}}`  
条件为假。  
`{{/each}}`  
`each` 的前面必须加上英镑符号 (`#`)，并且块语句以结束语句 `{{/each}}` 结束。  
**示例**  
在此示例中，`each` 用于返回用户喜爱的颜色列表。对于 `false`，返回 `else` 语句。如果请求是这样：  
`{{#each User.UserAttributes.FavoriteColors}}`  
`<li>{{this}}</li>`  
`{{else}}`  
*You have no favorite colors.*  
`{{/each}}` 返回  
+ *red*
+ *blue*
+ *yellow*
对于真语句。

*if*  
评估某件事是否为真，并基于评估结果返回响应。  
**用法**  
`{{#if value}}`  
值未定义  
`{{else}}`  
值未定义  
`{{/if}}`  
`if` 的前面必须加上英镑符号 (`#`)，并且块语句以结束语句 `{{/if}}` 结束。  
**示例**  
在此示例中，`if` 助手用于评估是否有用户的名字。如果找到名字，则返回在响应中传递用户名字的问候语。否则，`else` 语句返回备选问候语。  
`{{#if User.UserAttributes.FirstName.[0]}}`  
`Hello {{User.UserAttributes.FirstName.[0]}},`  
`{{else}}`  
*Hello,*  
`{{/if}}`  
*Hello, Jane*如果`if`助手为真，则返回。

## 条件帮助程序
<a name="conditionhelpers"></a>

本部分介绍**条件**助手。

条件助手既可以在单行上使用，也可以在块语句中使用。无论您使用哪种助手方法，都可以自定义响应。您可以在单行语句和块语句中传递额外的条件助手。以下条件助手首先显示单行的用法，然后显示使用可选 `else` 子句的块语句的用法。有以下条件助手：
+ `and` – 比较所有传递的元素是否相等。
+ `eq` – 测试两个元素是否相等。
+ `gt` – 测试一个元素是否大于另一个元素。
+ `gte` – 测试一个元素是否大于或等于另一个元素。
+ `if` – 评估某件事是否为真。
+ `lt` – 测试一个元素是否小于另一个元素。
+ `lte` – 测试一个元素是否小于或等于另一个元素。
+ `neq` – 评估两个元素是否不相等。
+ `not` – 反转布尔运算的响应。
+ `or` – 比较自变量中的任何元素是否相等。

*and*  
比较参数中传递的*所有* 元素是否相等，然后根据结果返回响应。此助手可用于非布尔值。您必须为条件传递至少两个元素。  
**用法**  
+ `{{and valuea valueb valuec valued yes='y' no='n'}}`

  根据条件，可以将*y*和*n*替换为其他值*no*，例如*yes*和，或任何其他要返回的字符串。
+ `{{#and valuea valueb}}`

  条件为真。

  `{{else}}`

  条件为假。

  `{{/and}}`

  `and` 的前面必须加上英镑符号 (`#`)，并且块语句以结束语句 `{{/and}}` 结束。
**示例**  
在此示例中，`eq` 用在 `and` 块语句中，以确定为 `Location.City ` 和 `Location.Country` 属性传递的两个字符串是否为真。如果两个条件相等，则返回一个真语句。如果其中任何一个属性为假，则返回 `else` 语句。  
`{{#and (eq Location.City "Los Angeles") (eq Location.Country "US")}}`  
*You live in Los Angeles and the US.*  
`{{else}}`  
*You don’t live in Los Angeles and the US.*  
`{{/and}}`

*eq*  
测试两个元素是否相等，或者一个元素的值是否等于传递的字符串。  
**用法**  
+ `{{eq valuea valueb yes='y' no='n'}}`

  根据条件，可以将*y*和*n*替换为其他值*no*，例如*yes*和，或任何其他要返回的字符串。
+ `{{#eq valuea valueb}}`

  条件为真。

  `{{else}}`

  条件为假。

  `{{/eq}}`

  `eq` 的前面必须加上英镑符号 (`#`)，并且块语句以结束语句 `{{/eq}}` 结束。
**示例**  
在此示例中`eq`，用于评估的值是否`User.UserAttributes.FavoriteColors.[0]`为*Red*。如果响应为 `true`，则返回一个真语句。如果响应为 `false`，则返回一个 `else` 语句。  
`{{#eq User.UserAttributes.FavoriteColors.[0] "red"}}`  
*Your favorite color is red.*  
`{{else}}`  
*You don't like red.*  
`{{/eq}}`

*gt*  
测试一个元素的值是否大于另一个元素的值。  
**用法**  
+ `{{gt valuea valueb yes='y' no='n'}}`

  根据条件，可以将*y*和*n*替换为其他值*no*，例如*yes*和，或任何其他要返回的字符串。
+ `{{#gt valuea valueb}}`

  条件为真。

  `{{else}}`

  条件为假。

  `{{/gt}}`

  `gt` 的前面必须加上英镑符号 (`#`)，并且块语句以结束语句 `{{/gt}}` 结束。
**示例**  
在此示例中，帮助程序将`User.UserAttributes.UserAge.[0]`属性的值与字符串进行比较*17*，以验证用户的年龄是否大于 17 岁。如果响应为 `true`，则返回一个真语句。如果响应为 `false`，则返回一个 `else` 语句。  
`{{#gt User.UserAttributes.UserAge.[0] "17"}}`  
*You are old enough to rent a car.*  
`{{else}}`  
*You are not old enough to rent a car.*  
`{{/gt}}`

*gte*  
测试一个元素的值是否大于或等于另一个元素。  
`Usage`  
+ `{{gte valuea valueb yes='y' no='n'}}`

  根据条件，可以将*y*和*n*替换为其他值*no*，例如*yes*和，或任何其他要返回的字符串。
+ `{{#gte valuea valueb}}`

  条件为真。

  `{{else}}`

  条件为假。

  `{{/gte}}`

  `get` 的前面必须加上英镑符号 (`#`)，并且块语句以结束语句 `{{/gte}}` 结束。
**示例**  
在此示例中，帮助程序将`User.UserAttributes.UserAge.[0]`属性与字符串进行比较*18*，以验证用户的年龄是否大于或等于 18 岁。如果响应为 `true`，则返回一个真语句。如果响应为 `false`，则返回一个 `else` 语句。  
`{{#gte User.UserAttributes.UserAge.[0] "18"}}`  
*You are old enough to rent a car.*  
`{{else}}`  
*You are not old enough to rent a car.*  
`{{/gte}}`

*if*  
评估某件事是否为真，并基于评估结果返回响应。  
**用法**  
+ `{{#if value}}`

  根据条件，可以将*y*和*n*替换为其他值*no*，例如*yes*和，或任何其他要返回的字符串。
+ `{{#if value}}`

  条件为真。

  `{{else}}`

  条件为假。

  `{{/if}}`

  `if` 的前面必须加上英镑符号 (`#`)，并且块语句以结束语句 `{{/if}}` 结束。
**示例**  
在此示例中， 助手用于评估是否有用户的名字。如果找到名字，则返回在响应中传递用户名字的问候语。否则，else 语句返回备选问候语。  
`{{#if User.UserAttributes.FirstName.[0]}}`  
*Hello* `{{User.UserAttributes.FirstName.[0]}}`*,*  
`{{else}}`  
*Hello,*  
`{{/if}}`  
*Hello Jane,*如果助手为真，则返回。

*lt*  
测试一个元素的值是否小于另一个元素的值。  
**用法**  
+ `{{lt valuea valueb yes='y' no='n'}}`

  根据条件，可以将*y*和*n*替换为其他值*no*，例如*yes*和，或任何其他要返回的字符串。
+ `{{#lt valuea valueb}}`

  条件为真。

  `{{else}}`

  条件为假。

  `{{/lt}}`

  `lt` 的前面必须加上英镑符号 (`#`)，并且块语句以结束语句 `{{/lt}}` 结束。
**示例**  
在此示例中，帮助程序将`User.UserAttributes.UserAge.[0]`属性与字符串进行比较*18*，以验证用户的年龄是否小于 18 岁。如果响应为 `true`，则返回一个真语句。如果响应为 `false`，则返回一个 `else` 语句。  
`{{#lt User.UserAttributes.UserAge.[0] "18"}}`  
*You are not old enough to rent a car.*  
`{{else}}`  
*You are old enough to rent a car.*  
`{{/lt}}`

*lte*  
测试一个元素的值是否小于或等于另一个元素的值。  
**用法**  
+ `{{lte valuea valueb yes='y' no='n'}}`

  根据条件，可以将*y*和*n*替换为其他值*no*，例如*yes*和，或任何其他要返回的字符串。
+ `{{#lte valuea valueb}}`

  条件为真。

  `{{else}}`

  条件为假。

  `{{/lte}}`

  `lte` 的前面必须加上英镑符号 (`#`)，并且块语句以结束语句 `{{/lte}}` 结束。
**示例**  
在此区块语句中，助手将`User.UserAttributes.UserAge.[0]`属性与字符串进行比较*17*，以验证用户的年龄是否等于 17 岁或更小。如果响应为 `true`，则返回一个真语句。如果响应为 `false`，则返回一个 `else` 语句。  
`{{#lte User.UserAttributes.Age.[0] "17"}}`  
*You are not old enough to rent a car.*  
`{{else}}`  
*You are old enough to rent a car.*  
`{{/lte}}`

*neq*  
测试两个元素是否*不* 相等。  
**用法**  
+ `{{neq valuea valueb yes='y' no='n'}}`

  根据条件，可以将*y*和*n*替换为其他值*no*，例如*yes*和，或任何其他要返回的字符串。
+ `{{#neq valuea valueb}}`

  条件为真。

  `{{else}}`

  条件为假。

  `{{/neq}}`

  `neq` 的前面必须加上英镑符号 (`#`)，并且块语句以结束语句 `{{/neq}}` 结束。
**示例**  
在此块语句中，对照字符串 `Red` 检查 `User.UserAttributes.FavoriteColors.[0]` 属性。如果响应为 `true`，则返回一个真语句。如果响应为 `false`，则返回一个 `else` 语句。  
`{{#neq User.UserAttributes.Favorite.Colors.[0] "red"}}`  
*You do not like red.*  
`{{else}}`  
*You like red.*  
`{{/neq}}`

*not*  
反转布尔运算的响应，这样，如果 `not` 是正向比较，则返回一个 `true` 语句。如果响应为假，则返回一个 else 语句。  
**用法**  
+ `{{not value yes='y' no='n'}}`

  根据条件，可以将*y*和*n*替换为其他值*no*，例如*yes*和，或任何其他要返回的字符串。
+ `{{#not value}}`

  条件为真。

  `{{else}}`

  条件为假。

  `{{/not}}`

  `not` 的前面必须加上英镑符号 (`#`)，并且块语句以结束语句 `{{/not}}` 结束。
**示例**  
在此块语句中*red*，使用`eq`帮助程序对照字符串检查`User.UerAttributes.FavoriteColors.[0]`属性。然后，`not` 助手返回 `eq` 助手的相反值。如果响应返回除之外的任何颜色*red*，则返回`true`一条语句。如果响应返回*red*，则返回一条表示错误`else`语句的语句。  
`{{#not (eq User.UserAttributes.Favorite.Colors.[0] "red")}}`  
*You do not like red.*  
`{{else}}`  
*You like red.*  
`{{/not}}`  
**示例**  
在本示例中，  
`{{not (eq User.UserAttributes.FavoriteColors.[0] "red")}}`  
如果`User.UserAttributes.FavoriteColors.[0]`是，则返回假*red*。

*或者*  
比较参数中是否有*任何* 元素相等，然后根据结果返回响应。此助手可用于非布尔值。  
**用法**  
+ `{{or valuea valueb valuec valued yes='y' no='n'}}`

  根据条件，可以将*y*和*n*替换为其他值*no*，例如*yes*和，或任何其他要返回的字符串。您必须为条件传递至少两个元素。
+ `{{#or valuea valueb}}`

  条件为真。

  `{{else}}`

  条件为假。

  `{{/or}}`

  `or` 的前面必须加上英镑符号 (`#`)，并且块语句以结束语句 `{{/or}}` 结束。
**示例**  
在此 `or` 块语句中，还使用 `eq` 助手比较了 `Location.City` 属性的两个字符串。如果其中任何一个属性为 `true`，则返回真语句。如果有一个或多个响应为 `false`，则返回一个 `else` 语句。  
`{{#or (eq Location.City "Los Angeles") (eq Location.City "Seattle")}}`  
*You live on the West Coast of the United States.*  
`{{else}}`  
*You do not live on the West Coast of the United States.*  
`{{/or}}`

## 字符串助手
<a name="stringhelpers"></a>

本部分介绍以下**字符串**助手：
+ `abbreviate` – 截断一个值。
+ `capitalize` – 将空格之间的每个单词都大写。
+ `capitalizeFirst` – 将值的第一个字符大写。
+ `center` – 将值居中。
+ `cut` – 剪切一个值。
+ `dateFormat` – 设置日期样式。
+ `inflect` – 根据计数返回单数或复数字符串。
+ `join` – 连接数组、迭代器或可迭代对象。
+ `ljust` – 将值对齐到左边距。
+ `lower` – 将值转换为小写。
+ `now` – 显示当前日期。
+ `ordinalize` – 对数字值进行排序。
+ `replace` – 将一个字符串替换为另一个字符串。
+ `rjust` – 将值对齐到右边距。
+ `slugify` – 将值转换为小写并删除非单词字符，将空格转换为连字符，并删除尾随的空格。
+ `stripTags` – 从值中删除 [X] 个 HTML 标签。
+ `substring` – 返回一个新字符串作为传递值的子字符串。
+ `upper` – 将传递的值转换为大写。
+ `yesno` – 将 true、false 和 no 替换为 Yes、No 和 Maybe。

*abbreviate*  
如果值超过指定长度，则截断该值。长度计数中包含空格。响应中显示省略号以表示被截断的值。省略号计入响应中被截断的值。如果您的表格很大但空间很小，那么这种类型的助手非常有用。截断单元格中的值可以使表格的外观更加统一。  
**用法**  
 `{{abbreviate value X}}`，*X*替换为表示要保留的字符数的数值。不支持负数。  
**示例**  
在此示例中，`abbreviate` 用于将 `User.UserAttributes.LastName.[0]` 截断为六 (6) 个字符。响应包括省略号，这些点计入六个字符的总数中。  
`{{abbreviate User.UserAttributes.LastName.[0] 6}}` 返回  
*Ale...**Alejandro*if 是的值`[0]`。

*capitalize*  
将空格之间的每个单词都大写。  
**用法**  
 `{{capitalize value}}`  
**示例**  
在此示例中，将首字母大小应用于 `Attributes.description.[0]` 条目的每个单词。  
`{{capitalize Attributes.description.[0]}}`  
如果 `Attributes.description.[0]` 返回   
 *My First Post*，如果的值`Attributes.description.[0]`为*my first post*。

*capitalizeFirst*  
将值中的第一个字符大写。  
**用法**  
`{{capitalizeFirst value}}`  
**示例**  
在此示例中，将大写应用于 `Attributes.description.[0]` 条目的第一个单词的第一个字符。  
`{{capitalizeFirst Attributes.description.[0]}}` 返回  
 *My first post*，如果的值`Attributes.description.[0]`为*my first post*。  
**示例**

*center*  
在给定宽度（通过指定数值）的字段中将值居中。您可以选择传递字符来填充，也可以留空。如果未传递任何字符，则使用空格。  
**用法**  
 `{{center value size=X [pad=" "}}`，*X*替换为数值。  
如果保留 `pad` 为空白，则在响应中使用空格作为填充。如果您传递一个字符，则该字符将显示在填充的每个空格中。不支持负数。  
**示例**  
在此示例中，的`Location.City `值居中，大小为*19*。  
`{{center Location.City size=19}}` 返回   
*"    Los Angeles    "*如果`Location.City`是*Los Angeles*。请注意，示例输出中显示的引号仅为了强调。

*cut*  
从字符串中删除指定值。  
**用法**  
 `{{cut value [" "]}}`，将引号参数中的空格替换为要剪切的值。如果未传递任何参数值，则使用空格。  
**示例**  
此示例*e*从`Location.City`属性中删除字母。  
`{{cut Location.City "e"}}` 返回  
*Los Angls*如果`[Location.City`是*Los Angeles*。

*dateFormat*  
为任何响应中的日期设置默认日期样式。有关时区的列表 IDs，请参阅[https://en.wikipedia.org/wiki/List_of_tz_database_time_zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)。  
**用法**  
`{{dateFormat date [inputFormat="format1"] [outputFormat="format2"] [tz=timeZoneId] [locale=localeID]}}`  
`format` 参数必须为以下之一：  
+ “`full`”：完整日期格式。例如：*Tuesday, September 19, 2020*
+ “`long`”：长日期格式。例如：*September 19, 2020*
+ “`medium`”：中等日期格式。例如：*Sept 19, 2020*
+ “`short`”：短日期格式。例如：*9/19/20*
+ “`pattern`”：使用自定义日期模式格式。有关日期模式的更多信息，请访问 [https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html](https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html)。
“`locale`”：使用基于给定区域的日期格式。有关区域的更多信息，请访问 [https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/LocaleUtils.html#toLocale-java.lang.String-](https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/LocaleUtils.html#toLocale-java.lang.String-)。  
如果未传递某种格式，则默认使用 `medium`。  
**示例**  
在此示例中`[0]`，将使用基于*America/Los\$1Angeles*时区的`full`日期格式向用户发送一条消息。`User.UserAttributes.StartDate.[0]` **09/19/2020**  
`We can meet with you any time on ``{{dateFormat User.UserAttributes.StartDate.[0] inputFormat="MM/dd/yyyy" outputFormat="full" tz=America/Los_Angeles}}.` 返回  
*We can meet with you any time on Tuesday, September 19, 2020.*

*inflect*  
根据计数值返回单数或复数字符串。  
**用法**  
 `{{inflect count singular plural [includeCount=false]}}`  
+ 输入要在参数中传递的字符串的单数和复数形式。
+ 如果 `includeCount` 设置为 `false`，则响应中不返回计数。如果设置为 `true`，则响应中包括 `count`。
**示例**  
以下示例显示了在有和没有 `includeCount` 的情况下，针对购买苹果的表述变化。  
`Thank you for your purchase of {{inflect 3 apple apples includeCount=false}}.` 返回：  
*Thank you for your purchase of apples.*  
如果 `includeCount` 设置为 `true`，则响应为  
*Thank you for your purchase of 3 apples.*

*join*  
连接数组、迭代器或可迭代对象。响应会返回一个列表，列表中的每个值都由您在 `join` 中传递的字符连接在一起。例如，您可能使用逗号 (`,`) 分隔值。此助手中的值必须是没有属性位置索引的列表。例如，这可能是 `Attributes.custom_attribute`。  
**用法**  
`{{join value " // " [prefix=""] [suffix=""]}}`  
**示例**  
在此示例中，返回一个颜色列表，列表由逗号和空格 (`", "`) 分隔：  
`{{join Attributes.favorite_colors ", "}}` 返回   
*blue, red, green*`Attributes.favorite_colors`if 是清单*blue,red,green*。

*ljust*  
将值对齐到左边距，并在右侧添加空格，使值的长度匹配数值。不支持负数。  
您可以选择传递要为 `pad` 显示的字符，也可以留空。如果将 `pad` 值留空，则默认值为空格。  
**用法**  
`{{ljust value size=X [pad=" "]}}`，其中*X*是该值的总长度，包括空格。  
**示例**  
在此示例中，将左对齐值应用*15 *于 Location.City。  
`{{ljust Location.City size=15}}` 返回  
*"Los Angeles    "*如果的值`Location.City`为*Los Angeles*。请注意，示例输出中显示的引号仅为了强调。

*lower*  
将一个值全部转换为小写。  
**用法**  
`{{lower value}}`  
**示例**  
在此示例中，`User.UserAttributes.LastName.[0]` 的 `[0]` 条目更改为小写。  
`{{lower User.UserAttributes.LastName.[0]}}` 返回  
*santos**Santos*if 是的值`[0]`。

*now*  
根据传递的时区 ID 显示当前日期。有关时区的列表 IDs，请参阅[https://en.wikipedia.org/wiki/List_of_tz_database_time_zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)。  
**用法**  
`{{now [format="format"] [tz=timeZoneId] [locale=localeID]}}`  
`format` 参数必须为以下之一：  
+ “`full`”：完整日期格式。例如：*Tuesday, September 19, 2020*
+ “`long`”：长日期格式。例如：*September 19, 2020*
+ “`medium`”：中等日期格式。例如：Sept 19, 2020
+ “`short`”：短日期格式。例如：9/19/20。
+ “`pattern`”：日期模式。有关日期模式的更多信息，请访问 [https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html](https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html)。
“`locale`”：使用基于给定区域的日期格式。有关区域的更多信息，请访问 [https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/LocaleUtils.html#toLocale-java.lang.String-](https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/LocaleUtils.html#toLocale-java.lang.String-)。  
如果未传递某种格式，则默认使用 `medium`。  
**示例**  
在此示例中，Los Angeles 的当前日期以 `medium` 格式返回。  
`{{now "medium" tz=America/Los_Angeles}}` 返回   
*Sept 19, 2020*.

*ordinalize*  
将参数中传递的数值序数词化。例如，按*1*顺序排序为*1st**2*。*2nd*仅支持数值。  
**用法**  
`{{ordinalize [number]}} `  
**示例**  
在此示例中，对 `User.UserAttributes.UserAge` 的 `[0]` 条目序数词化并返回，同时伴随一条消息。  
`Congratulations on your {{ordinalize User.UserAttributes.UserAge.[0]}} birthday!`返回*22*按顺序排序为。*22nd*  
*Congratulations on your 22nd birthday\$1*

*替换*  
将一个字符串替换为另一个字符串。字符串或数值必须是文字。不支持通配符。  
**用法**  
`{{replace stringToReplace replacementValue}}`  
**示例**  
在此示例中，下划线 (\$1) 取代了空格。  
`{{replace Location.City " " "_"}}` 返回  
*Los\$1Angeles*如果`Location.City `是*Los Angeles*。

*rjust*  
将值对齐到右边距，并在左侧添加空格，使值的长度匹配数值。不支持负数。  
您可以选择传递要为 `pad` 显示的字符，也可以留空。如果将 `pad` 值留空，则默认值为空格。  
**用法**  
`{{rjust value size=X [pad=" "]}}`，其中*X*是该值的总长度，包括空格。  
**示例**  
在此示例中，将右对齐*15*值应用于该`Location.City`属性。  
`{{rjust Location.City size=15}}` 返回  
*"    Los Angeles" *. 如果`Location.City`是*Los Angeles*。请注意，输出中显示的引号仅为了强调。

*slugify*  
将传递的值转换为小写，删除非单词字符（字母数字和下划线），将空格转换为连字符，并删除所有前导或尾随空格。  
**用法**  
`{{slugify value}}`  
**示例**  
在此示例中，对 `Location.City` 属性执行 slugify。  
`{{slugify Location.City}}` 返回  
*los-angeles*如果`Location.City`是*Los Angeles*。

*stripTags*  
从一个值中除去 [X]HTML 标签。  
**用法**  
 `{{stripTags value}}`  
**示例**  
在此示例中，用户的 HTML 标记。 UserAttributes.interest. [0] 已删除。  
`{{stripTags User.UserAttributes.interests.[0]}}` 返回  
*Art*，如果`User.UserAttributes.interests.[0]`是`<h1>Art</h1>`。

*substring*  
返回一个新字符串作为传递值的子字符串。长度和位置由 `startOffset` 和 `endOffset` 参数决定，这两个参数必须为整数。不支持负数。如果未传递 `endOffset`，则子字符串使用字符串的原始结尾值。  
**用法**  
`{{substring value startOffset [endOffset]}}`  
**示例**  
在此示例中，offset 为 4，endOffset 为 9，应用于 Location.City 属性。  
`{{substring Location.City 4 9}} ` 返回  
`Angel`如果洛杉矶是的价值`Location.City`是*Los Angeles*。

*upper*  
将传递的值转换为大写。  
**用法**  
`{{upper value}}`  
**示例**  
在此示例中，`User.UserAttributes.LastName` 属性的 `[0] ` 条目全部转换为大写字母。  
`{{upper User.UserAttributes.LastName.[0]}}` 返回  
*ROE*如果`User.UserAttributes.LastName.[0]`值是*Roe*。

*yesno*  
将 `true`、`false` 和 `NULL` 替换为 `Yes`、`No` 和 `Maybe`。  
**用法**  
`{{yesno value [yes="yes"] [no="no"] maybe=["maybe"]}}`  
**示例**  
在此示例中，`IsUserSubscribed` 属性返回用户是否订阅了特定列表。  
`{{yesno Attributes.IsUserSubscribed}}` 返回   
*yes*如果`Attributes.IsUserSubscribed`是*true*。

## 数学和编码助手
<a name="mathhelpers"></a>

本部分介绍**数学和编码**助手。
+ `add` – 返回两个数的和。
+ `ceiling` – 将小数向上取到最近的整数。
+ `decode64` – 将 Base64 编码的值解码为字符串。
+ `divide` – 返回两个数的商。
+ `encode64` – 使用 Base64 对字符串进行编码。
+ `floor` – 将小数向下取到最近的整数。
+ `md5`— 使用 MD5算法对传递的字符串进行哈希处理。
+ `modulo` – 返回两个浮点数取模的余数。
+ `multiply` – 返回两个数的乘积。
+ `round` – 将小数舍入为最接近的整数。
+ `sha256` – 使用 SHA-256 对传递的字符串进行哈希处理。
+ `sha512` – 使用 SHA-512 对传递的字符串进行哈希处理。
+ `subtract` – 返回两个数的差。
+ `uuid` – 随机生成一个 128 位格式的 UUID。

*add*  
返回两个浮点数的和。  
**用法**  
`{{add arg1 arg2}}`  
**示例**  
`{{add 5 2.3}} ` 返回  
*7.3*

*ceiling*  
将小数向上取到最接近传递值的最大整数。  
**用法**  
`{{ceiling value}}`  
**示例**  
`{{ceiling 5.23}}` 返回  
*6*

*decode64*  
将 Base64 编码的值解码为字符串。  
**用法**  
`{{decode64 "string"}}`  
**示例**  
`{{decode64 "SGVsbG8gd29ybGQ="}}` 返回  
*Hello World*

*divide*  
返回两个数的商，包括浮点。  
**用法**  
 `{{divide arg1 arg2}}`  
**示例**  
`{{divide 5 2.3}}` 返回  
*2.17391304*

*encode64*  
使用 Base64 对参数中传递的字符串进行编码。  
**用法**  
`{{encode64 "string"}}`  
**示例**  
`{{encode64 "Hello World"}}`  
*SGVsbG8gd29ybGQ=*

*floor*  
将小数向下取到最接近传递值的最小整数。  
**用法**  
`{{floor value}}`  
**示例**  
`{{floor 5.23}}` 返回  
*5*

*md5*  
使用 MD5 算法对传递的字符串进行哈希处理。  
**用法**  
`{{md5 "string"}}`  
**示例**  
`{{md5 "Hello World"}}`  
*3e25960a79dbc69b674cd4ec67a72c62*

*modulo*  
返回两个浮点数取模的余数。  
**用法**  
`{{modulo arg1 arg2}}`  
**示例**  
`{{modulo 7 2}}` 返回  
*1*

*multiply*  
返回两个可带浮点的数的乘积。  
**用法**  
`{{multiply arg1 arg2}}`  
**示例**  
`{{multiply 5 2.3}}` 返回  
*11.5*

*round*  
将小数位向上或向下舍入为最接近的整数。  
**用法**  
`{{round value}}`  
**示例**  
`You spent an average of {{round 19.21}} minutes on our website each day.` 返回：  
*You spent an average of 19 minutes on our website each day.*

*sha256*  
使用 SHA-256 加密安全性对传递的字符串进行哈希处理。  
**用法**  
`{{sha256 "string"}}`  
**示例**  
`{{sha256 "Hello World"}}` 返回  
*a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e*

*sha512*  
使用 SHA-512 加密安全性对传递的字符串进行哈希处理。  
**用法**  
`{{sha512 "string"}}`  
**示例**  
`{{sha512 "Hello World"}}` 返回  
*2c74fd17edafd80e8447b0d46741ee243b7eb74dd2149a0ab1b9246fb30382f27e853d8585719e0e67cbda0daa8f51671064615d645ae27acb15bfb1447f459b*

*subtract*  
返回两个可带浮点的数的差。  
**用法**  
`{{subtract arg1 arg2}}`  
**示例**  
`{{subtract 5 2.3}} ` 返回  
*2.7*

*uuid*  
随机生成一个标准 128 位格式的 UUID。无需在参数中传递任何值。  
**用法**  
`{{uuid}}`  
**示例**  
`{{uuid}} ` 返回  
**95f36680-152c-4052-99ec-cc3cdf7ca594**

## Inline partial
<a name="inlinepartials"></a>

虽然从技术上说 inline partial 不是助手，但它们是 Handlebars 简化包含重复字符串的模板的方法，这更便于重复使用。有关更多信息，请参阅 [handlebarsjs.com](https://handlebarsjs.com) 上的 [Inline partial](https://handlebarsjs.com/guide/partials.html#inline-partials)。

**用法**

`{{#* inline "inlineName"}}Content to reuse{{/inline}}`

要在其他地方引用 inline partial 的内容，请使用：

` {{> inlineName}}`

**示例**

下面的示例通过将以下代码添加到模板的开头，来创建一个 inline partial，其中包括收件人的名字和姓氏（如果可用）：

`{{#* inline "fullName"}}`

`{{User.UserAttributes.FirstName.[0]}} {{#if User.UserAttributes.LastName.[0]}} {{User.UserAttributes.LastName.[0]}} {{/if}}`

`{{/inline}}`

创建 `fullName` partial 后，您可以通过在 partial 的名称前加上一个 `>`（大于号），后面跟一个空格，将其包含在模板中的任何位置，如下例所示：`{{> fullName}}`。

*` Hello {{> fullName}}`*

如果为 true，则返回用户的名字和姓氏，例如*Hello Jane Doe*。否则，如果找不到姓氏，*Hello Jane*则返回。

除了这里介绍的特征以外，Handlebars 还包含许多其他特征。有关更多信息，请访问 [handlebarsjs.com](https://handlebarsjs.com/)。

## 将变量与消息模板助手结合使用
<a name="template-helpers-variables"></a>

Amazon Pinpoint 自定义属性（例如 `User.UserAttributes.LastName`）以列表形式存储，无论列表有一个项目还是多个项目。在期望字符串的助手中传递列表时，必须指定属性索引值和属性名称。此属性索引值指示值在属性列表中的位置：`.[0]` 是列表中的第一项，`.[1]` 是第二项，`.[2]` 是第 3 项，以此类推。例如，假设您正在使用 `upper` 助手将 `User.UserAttributes.LastName` 的第一项 (`[0]`) 转换为全部大写。助手用法为 `{{upper value}}`，属性的格式为 `User.UserAttributes.LastName`。按如下方式*value*替换`.[0]`为属性名称和属性索引值：`{{upper User.UserAttributes.LastName.[0]}}`。然后，响应会返回列表中的 `[0]` 项，格式全部为大写。例如，如果的值为*Santos*，`[0]`则返回响应*SANTOS*。

Amazon Pinpoint 自定义属性名称支持空格。要具有名为 `"Last Name"` 的自定义属性，您必须将该属性的格式设置为 `User.UserAttributes.[Last Name]`。要访问属性索引列表中的第一项，格式为 `User.UserAttributes.[Last Name].[0]`。

自定义属性名称最多可包含 50 个字符。属性值最多可包含 100 个字符。在定义自定义属性的名称时，请避免使用以下字符：数字符号 (\$1)、冒号 (:)、问号 (?)、反斜杠（\$1）和斜杠（/）。Amazon Pinpoint 控制台无法显示包含这些字符的属性名称。此限制不适用于属性值。

## 使用嵌套助手
<a name="template-helpers-nesting"></a>

 您可以将多个消息模板助手嵌套在一起。以下示例说明如何格式化两个助手：`{{ first helper (second helper)}}`。首先处理第二个助手，然后处理第一个助手。请记住，第一个助手始终决定输出。后续的助手必须嵌套在前一个助手中，如下所示：`{{ first helper (second helper (third helper) )}}`。

以下示例显示了如何嵌套两个助手以将 **JANE** 改为 **Jane**：`{{capitalizeFirst (lower "JANE")}}`。`lower` 首先将 **JANE** 转换为 **jane**，然后 `capitalizeFirst` 将 **jane** 转换为 **Jane**。

# 管理消息模板
<a name="message-templates-managing"></a>

Amazon Pinpoint 控制台上的**消息模板**页面为您在当前地区创建、查看和管理亚马逊 Pinpoint 账户的所有消息模板提供了单一位置。 AWS 通过使用该页面，您可以将消息模板作为单个集合进行管理。这可以帮助您设计一致的消息，并更轻松有效地重复使用内容。您可以使用此页面执行管理任务，例如，查看和编辑模板以及复制、删除和创建模板。

**Topics**
+ [查看消息模板集合](message-templates-managing-view-all.md)
+ [打开消息模板](message-templates-managing-open.md)
+ [编辑消息模板](message-templates-managing-edit.md)
+ [复制消息模板](message-templates-managing-copy.md)
+ [删除消息模板](message-templates-managing-delete.md)
+ [将标签添加到模板中](message-templates-managing-add-tag.md)
+ [从模板中删除标签](message-templates-managing-remove-tag.md)

有关创建消息模板的信息，请参阅[创建电子邮件模板](message-templates-creating-email.md)、[创建推送通知模板](message-templates-creating-push.md)、[创建 SMS 模板](message-templates-creating-sms.md)或[创建语音模板](message-templates-creating-voice.md)，具体取决于要创建的模板的类型。

有关查看和管理模板版本的信息，请参阅[管理消息模板的版本](message-templates-versioning.md)。

# 查看消息模板集合
<a name="message-templates-managing-view-all"></a>

**消息模板**页面显示当前 AWS 区域中您的 Amazon Pinpoint 账户的所有消息模板的列表。要快速浏览列表或查找特定模板，您可以对列表进行排序和筛选，选择要显示的列，并更改列表的其他显示设置。

**查看消息模板集合**

1. 打开亚马逊 Pinpoint 控制台，网址为。[https://console.aws.amazon.com/pinpoint/](https://console.aws.amazon.com/pinpoint/)

1. 在导航窗格中，选择**消息模板**。这将打开**消息模板**页面，其中显示了集合中的模板数量以及这些模板的列表。

1. 要自定义列表或快速查找特定模板，请选择以下任一选项：
   + 要按某个特定类型的值对列表进行排序，请选择该值的列标题。要将排序顺序在升序和降序之间切换，请再次选择列标题。
   + 要应用仅显示特定类型的模板的筛选器，请使用页面顶部的渠道选择器来选择渠道。要删除筛选器，请从渠道选择器中选择**所有消息渠道**。
   + 要应用仅显示其名称包含特定文本的模板的筛选器，请在列表上方的**搜索**框中输入文本。要移除筛选器，请在**搜索**框中选择 **X**。
   + 要更改列表中显示的模板的数量，请选择页面顶部的设置图标。接下来，为**页面大小** 选择要显示的模板数，然后选择**保存更改**。
   + 要在列表中添加或删除列，请选择页面顶部的设置图标。接下来，对于**选择可见列**，打开或关闭每个列，然后选择**保存更改**。

# 打开消息模板
<a name="message-templates-managing-open"></a>

通过使用**消息模板**页面，您可以快速找到并打开特定的消息模板以查看模板内容和有关模板的信息。例如，您可以查看模板的当前版本和以前版本，并确定模板上次更新的时间。在打开模板后，您还可以[编辑模板](message-templates-managing-edit.md)。

**打开消息模板**

1. 打开亚马逊 Pinpoint 控制台，网址为。[https://console.aws.amazon.com/pinpoint/](https://console.aws.amazon.com/pinpoint/)

1. 在导航窗格中，选择**消息模板**。

1. 在**消息模板**页面上，选择要打开的模板。此时将打开模板页面，并显示有关模板的信息。它还显示模板的活动版本的内容。

1. 要查看模板的其他版本，请使用**模板详细信息**下的版本选择器来选择要查看的版本。

# 编辑消息模板
<a name="message-templates-managing-edit"></a>

您可以通过两种方式打开消息模板来进行编辑：在创作使用该模板的消息时；通过使用**消息模板**页面。本主题说明如何使用**消息模板**页面打开和编辑模板。

如果您编辑模板，Amazon Pinpoint 可能会将您的更改应用于使用该模板且尚未发送的现有消息，例如计划在稍后发送的活动消息。这取决于您是否编辑了模板的活动版本以及之前如何配置使用该模板的消息。有关更多信息，请参阅 [管理消息模板的版本](message-templates-versioning.md)。

**编辑消息模板**

1. 打开亚马逊 Pinpoint 控制台，网址为。[https://console.aws.amazon.com/pinpoint/](https://console.aws.amazon.com/pinpoint/)

1. 在导航窗格中，选择**消息模板**。

1. 在**消息模板**页面上，选择要编辑的模板。此时将打开模板页面，并显示有关模板的信息。它还显示模板的活动版本的内容和设置。

1. 选择**编辑**。

1. 在**模板详细信息**下，使用版本选择器来选择要用作更改起点的模板版本。如果您选择模板的最新版本，则可以将更改直接保存到该版本的模板。否则，您可以将更改另存为模板的新版本。

1. 执行所需的更改。您可以更改除模板名称以外的任何模板内容或设置。要更改模板名称，您可以[创建模板的副本](message-templates-managing-copy.md)，使用所需名称保存副本，然后可以选择删除原始模板。

1. 完成更改后，请执行以下操作之一：
   + 要将更改另存为模板的新版本，请选择**另存为新版本**。为了帮助确保您的更改不会影响任何现有消息，建议您选择此选项。
   + 要将更改另存为模板的最新版本的更新，请选择**更新版本**。仅当您在步骤 5 中选择了模板的最新版本时，此选项才可用。如果选择此选项，您的更改可能会影响使用该模板的现有消息。

# 复制消息模板
<a name="message-templates-managing-copy"></a>

要快速创建与现有模板类似的新消息模板，您可以创建该模板的副本。然后，您可以编辑模板副本，而无需更改原始模板。

**复制消息模板**

1. 打开亚马逊 Pinpoint 控制台，网址为。[https://console.aws.amazon.com/pinpoint/](https://console.aws.amazon.com/pinpoint/)

1. 在导航窗格中，选择**消息模板**。

1. 在**消息模板**页面上，选中要复制的模板旁边的复选框。

1. 在**操作**菜单上，选择**复制**。

1. 对于**模板名称**，输入模板副本的名称。名称必须以字母或数字开头。它最多可以包含 128 个字符。字符可以是字母、数字、下划线 (\$1) 或连字符 (‐)。

1. 在输入完名称后，选择**复制模板**。将打开模板页面，并显示您复制的模板的活动版本的所有内容和设置。

1. （可选）要更改模板副本，请选择**编辑**，进行所需的更改，然后选择**另存为新版本**。

# 删除消息模板
<a name="message-templates-managing-delete"></a>

如果要从 Amazon Pinpoint 中完全移除一个消息模板，您可以删除该模板。如果您删除某个模板，这不会影响使用该模板的任何现有消息，例如计划在以后发送的活动消息。

**警告**  
如果删除一个模板，则 Amazon Pinpoint 会删除该模板的所有版本、内容和设置。此外，模板对未来的所有消息都变得不可用。您无法在删除模板后恢复它。

**删除消息模板**

1. 打开亚马逊 Pinpoint 控制台，网址为。[https://console.aws.amazon.com/pinpoint/](https://console.aws.amazon.com/pinpoint/)

1. 在导航窗格中，选择**消息模板**。

1. 在**消息模板**页面上，选中要删除的每个模板旁边的复选框。

1.  在**操作**菜单上，选择**删除**。

# 将标签添加到模板中
<a name="message-templates-managing-add-tag"></a>

标签是您可以定义并与 AWS 资源（包括某些类型的 Amazon Pinpoint 资源）关联的标签。

将标签添加到模板中可以帮助您以不同的方式（例如按用途、拥有者、环境或其他标准）分类和管理模板。您可以使用标签快速查找现有模板，或者控制哪些用户可以访问特定模板。您最多可以添加 50 个键值对，且每个键都是唯一的。

**添加标签**

1. 打开亚马逊 Pinpoint 控制台，网址为。[https://console.aws.amazon.com/pinpoint/](https://console.aws.amazon.com/pinpoint/)

1. 在导航窗格中，选择**消息模板**。

1. 在**消息模板**页面上，选择要向其中添加标签的模板。

1. 在**标签**下，选择**管理标签**。

1. 选择**添加新标签**。

1. 输入要添加的标签键和值对。

1. （可选）要添加其他标签，请选择**添加新标签**。

1. 完成后，选择**保存标签**。

# 从模板中删除标签
<a name="message-templates-managing-remove-tag"></a>

如果您不再需要某个标签来应用到模板，则可以通过控制台删除它。

**删除标签**

1. 打开亚马逊 Pinpoint 控制台，网址为。[https://console.aws.amazon.com/pinpoint/](https://console.aws.amazon.com/pinpoint/)

1. 在导航窗格中，选择**消息模板**。

1. 在**消息模板**页面上，选择要删除标签的模板。

1. 在**标签**下，选择**管理标签**。

1. 在要删除的标签旁，选择**删除**。

1. 选择**保存标签**。

有关如何在 IAM 策略中使用标签的更多信息，请参阅[管理标签](https://docs.aws.amazon.com/pinpoint/latest/developerguide/tagging-resources.html)。

# 管理消息模板的版本
<a name="message-templates-versioning"></a>

为了帮助您管理各个消息模板的开发和使用，Amazon Pinpoint 支持所有类型的消息模板的版本控制。版本控制为您提供了一种创建模板更改历史记录的方法—每个版本都是模板在特定时间点的快照。版本控制还提供了一种控制使用模板的消息的内容和设置的方法。

每次更改模板时，您都可以指定是要将更改另存为模板的新版本，还是模板的最新现有版本的更新。在设计、开发和优化模板时，这些版本中的每个版本都将用作快照，这可帮助您跟踪模板的进度和状态。也就是说，在模板随着时间的推移而更改时，您可以使用版本控制来存储、跟踪和管理模板。你可以：
+ **跟踪模板的历史记录** – 对于每个模板，Amazon Pinpoint 提供了该模板的版本列表。此列表显示每个版本的名称，并指示每个版本上次更改的时间。此列表按时间顺序降序排列，首先列出最新版本。
+ **查看和比较模板的版本** – 通过使用版本列表，您可以浏览一个模板的以前版本。如果从列表中选择一个版本，则 Amazon Pinpoint 将显示存储在该版本中的内容和设置。
+ **还原模板的以前版本** – 如果您在一个模板的最新版本中发现了问题，则可以打开并编辑不包含问题的以前的版本。然后，您可以将该以前版本另存为模板的新版本。然后，新版本将成为模板的最新版本。

您还可以使用版本控制来控制可在消息中使用的模板版本。您可以通过将特定版本指定为模板的*活动版本* 来实现此目的。*活动版本*通常是最近审核并批准在消息中使用的版本，具体取决于您的组织开发和管理模板的工作流程。

将某个版本指定为活动版本时，允许在消息中使用该版本。在模板随着时间的推移而更改时，您可以将其他版本指定为活动版本，并且您可以多次更改该指定。

**注意**  
如果您需要编辑正在使用的模板，我们建议您创建该模板的新版本。

**Topics**
+ [版本控制的工作原理](#message-templates-versioning-overview)
+ [查看消息模板的版本](#message-templates-versioning-view-versions)
+ [查看消息模板的活动版本](#message-templates-versioning-view-active)
+ [指定消息模板的活动版本](#message-templates-versioning-set-active)
+ [编辑消息模板的活动版本](#message-templates-versioning-edit-active)

## 版本控制的工作原理
<a name="message-templates-versioning-overview"></a>

在典型的开发工作流中，消息模板具有多个版本。这些版本从设计和开发开始，经过测试、审核，最终批准在消息中使用。在某些情况下，在初始批准后优化并更新模板时，您可能会创建并批准其他版本。例如，您可能会添加链接或更改模板布局，以响应使用该模板的活动的分析数据。

### 版本编号
<a name="message-templates-versioning-overview-numbering"></a>

当您创建一个模板时，该模板只有一个版本，即*版本 1*。每次后来更改模板时，您都指定是要将更改另存为模板的新版本，还是模板的最新版本的更新。

如果您将更改保存为新版本，Amazon Pinpoint 会自动将版本号递增 1，并将该版本号分配给相应版本 – *版本 1 * 代表第 1 版，*版本 2* 代表第 2 版，*版本 3* 代表第 3 版，依此类推。版本号绝不会重复使用。您可以保存一个模板的多达 5,000 个版本。

如果您将更改另存为最新版本的更新，则 Amazon Pinpoint 会覆盖最新版本以包含您的更改。为确保准确查看模板的历史记录，您只能使用 Amazon Pinpoint 控制台覆盖模板的最新版本，而不能使用控制台覆盖模板的任何早期版本。

### 最新版本和活动版本
<a name="message-templates-versioning-overview-version-types"></a>

为了支持模板的长期持续开发，模板的两个版本可以同时为当前版本。这两个版本是：*最新*版本，即最近更改的版本；以及*活动*版本，即可在消息中使用的版本。

根据您的组织的工作流程，活动版本通常是最近审核并批准在消息中使用的版本。它不一定是模板的最新版本。此外，活动版本以外的任何版本都被视为模板的草稿或存档版本。这意味着您只能在使用 Amazon Pinpoint 控制台创建的消息中使用模板的活动版本。

例如，您可能在设计并开发模板时创建了模板的多个版本。当模板的最新版本完成并批准在消息中使用时，您可以将该版本指定为模板的活动版本。然后，您可以在消息中使用模板的该活动版本。如果您稍后决定更改模板，则可以为这些更改创建其他版本，但不影响模板的活动版本或使用模板的任何现有消息。

在模板的所有版本中，必须将一个版本指定为模板的活动版本。在模板随着时间的推移而更改时，您可以将其他版本指定为活动版本，并且您可以多次更改该指定。

### 消息的版本设置
<a name="message-templates-versioning-overview-versions-messages"></a>

要在消息中使用模板的某个特定版本，当您创建消息或当 Amazon Pinpoint 发送消息时，该版本必须是模板的活动版本。这取决于您如何将消息配置为使用模板。创建消息并为其选择模板时，您有两个选项：
+ **使用当前处于活动状态的版本** – 如果选择此选项，则 Amazon Pinpoint 始终发送与您创建消息时处于活动状态的模板版本中指定的相同的消息内容和设置。这意味着不管您稍后对模板进行了什么更改，消息都保持不变。
+ **使用发送消息时处于活动状态的版本** – 如果选择此选项，则 Amazon Pinpoint 会自动更新消息内容和设置，以与发送消息时处于活动状态的模板版本匹配。这意味着，如果您在创建消息后将其他版本指定为活动版本，则消息会发生变化。

例如，如果您执行以下操作：

1. 创建模板的*版本 1*。

1. 将*版本 1* 指定为模板的活动版本。

1. 创建使用模板的消息，并计划稍后发送该消息。

1. 多次更改模板。

1. 将新版本（*版本 5*）指定为模板的活动版本。

Amazon Pinpoint 在发送消息时会对每个选项执行以下操作：
+ **使用当前处于活动状态的版本** – 如果您为消息选择了此选项，Amazon Pinpoint 将使用模板的*版本 1* 指定的内容和设置。这样做是因为*版本 1 * 是创建消息时模板的活动版本。
+ **使用发送消息时处于活动状态的版本** – 如果您为消息选择了此选项，则 Amazon Pinpoint 会自动更新消息以使用模板的*版本 5* 指定的内容和设置。这样做是因为*版本 5* 是发送消息时模板的活动版本。

如果您希望确保对模板的更改不会影响尚未发送的任何现有消息，建议您将消息配置为使用创建消息而非发送消息时处于活动状态的模板版本。或者，如果您希望在开始在消息中使用模板后继续开发模板，则可以[创建模板副本](message-templates-managing-copy.md)，然后在新消息中编辑并使用模板副本。

## 查看消息模板的版本
<a name="message-templates-versioning-view-versions"></a>

通过使用**消息模板**页面，您可以快速找到并打开特定消息模板。然后，您可以查看模板存在的版本列表。从该列表中，您可以选择特定版本以查看模板的该版本的内容和设置。

**查看消息模板的版本**

1. 打开亚马逊 Pinpoint 控制台，网址为。[https://console.aws.amazon.com/pinpoint/](https://console.aws.amazon.com/pinpoint/)

1. 在导航窗格中，选择**消息模板**。

1. 在**消息模板**页面上，选择要查看其版本的模板。此时将打开模板页面，并显示有关模板的信息。它还显示模板的活动版本的内容和设置。

1. 在**模板详细信息**下，打开版本选择器以显示模板的版本列表。

1. 要查看特定版本的内容和设置，请使用版本选择器来选择该版本。选择版本后，Amazon Pinpoint 将显示模板的该版本的内容和设置。

## 查看消息模板的活动版本
<a name="message-templates-versioning-view-active"></a>

您可以通过以下两种方式查看消息模板的活动版本：在创建使用该模板的消息时，以及使用**消息模板**页面。要在创建消息时查看一个模板的活动版本，请为消息选择该模板。Amazon Pinpoint 会自动显示该模板的活动版本的预览。

要使用**消息模板**页面查看模板的活动版本，请按照本主题中的步骤操作。

**查看消息模板的活动版本**

1. 打开亚马逊 Pinpoint 控制台，网址为。[https://console.aws.amazon.com/pinpoint/](https://console.aws.amazon.com/pinpoint/)

1. 在导航窗格中，选择**消息模板**。

1. 在**消息模板**页面上，选择要查看其活动版本的模板。此时将打开模板页面，并显示有关模板的信息。它还显示模板的活动版本的内容和设置。在**模板详细信息**下，请注意版本选择器中的版本名称旁边显示**活动版本**（绿色）。

1. 要查看模板的其他版本，请使用**模板详细信息**下的版本选择器来选择所需的版本。要再次查看活动版本，请使用版本选择器来选择版本名称旁边显示**活动版本**（绿色）的版本。

## 指定消息模板的活动版本
<a name="message-templates-versioning-set-active"></a>

当您创建消息模板时，Amazon Pinpoint 会自动将模板的第一个版本指定为模板的活动版本。在创建并开发模板的后续版本时，您可以将其他版本指定为模板的活动版本，并且可以多次更改该指定。

在将某个版本指定为模板的活动版本之前，最好验证建议的活动版本中的所有内容和设置都完整并可供使用。

验证当前和建议的活动版本之间的差异是否不会以意外或不需要的方式影响现有消息，也是一个好主意。如果您将其他版本指定为活动版本，则 Amazon Pinpoint 可能会将您的更改应用于使用模板但尚未发送的现有消息。这取决于您如何配置使用模板的消息。有关更多信息，请参阅 [消息的版本设置](#message-templates-versioning-overview-versions-messages)。

如果在尚未发送的消息中使用模板，请将当前处于活动状态的版本与您要使其处于活动状态的版本进行比较。此外，请检查使用模板的任何历程活动。然后，在将其他版本指定为活动版本之前，根据需要编辑模板以解决您发现的任何问题。

如果您担心将其他版本指定为活动版本的影响，则可以改为[创建模板副本](message-templates-managing-copy.md)。然后，您可以在新消息中编辑并使用模板副本。

**指定消息模板的活动版本**

1. 打开亚马逊 Pinpoint 控制台，网址为。[https://console.aws.amazon.com/pinpoint/](https://console.aws.amazon.com/pinpoint/)

1. 在导航窗格中，选择**消息模板**。

1. 在**消息模板**页面上，选择要为其指定活动版本的模板。此时将打开模板页面，并显示有关模板的信息。它还显示当前是模板的活动版本的版本的内容和设置。

1. 在**模板详细信息**下，使用版本选择器来选择要指定为活动版本的版本。选择版本后，Amazon Pinpoint 将显示模板的该版本的内容和设置。

1. 选择**设为活动版本**。

模板的新活动版本现在可在新消息中使用。此外，还在尚未发送且配置为使用在发送消息时处于活动状态的模板版本的任何现有消息中使用它。

## 编辑消息模板的活动版本
<a name="message-templates-versioning-edit-active"></a>

在编辑模板的活动版本之前，请务必记住，只能在使用 Amazon Pinpoint 控制台创建的消息中使用模板的活动版本。出于这个原因，最好先验证您的更改是否完整且可供使用。

最好验证您的更改不会以意外或不需要的方式影响现有消息。Amazon Pinpoint 可能会将您的更改应用于使用模板但尚未发送的现有消息。这取决于您如何配置使用模板的消息。有关更多信息，请参阅 [消息的版本设置](#message-templates-versioning-overview-versions-messages)。

要确定您的更改可能如何影响现有消息，请查看当前处于活动状态的模板版本的内容和设置。此外，请检查使用模板的任何历程活动。然后，考虑您计划进行的更改，并确保您的更改符合使用模板的现有消息的目标。

最后，如果您担心编辑模板的活动版本的影响，则可以改为[创建模板副本](message-templates-managing-copy.md)。然后，您可以在随后创建的消息中编辑并使用模板副本。

**编辑消息模板的活动版本**

1. 打开亚马逊 Pinpoint 控制台，网址为。[https://console.aws.amazon.com/pinpoint/](https://console.aws.amazon.com/pinpoint/)

1. 在导航窗格中，选择**消息模板**。

1. 在**消息模板**页面上，选择要编辑其活动版本的模板。此时将打开模板页面，并显示有关模板的信息。它还显示当前指定为模板的活动版本的版本的内容和设置。

1. 选择**编辑**。

1. 在**模板详细信息**下，使用版本选择器确保您正在编辑模板的活动版本。在活动版本名称旁边显示**活动版本**（绿色）。

1. 进行所需的更改，然后选择**另存为新版本**。

1. 在**模板详细信息**下，使用版本选择器选择您在上一步中创建的模板版本。

1. 选择**设为活动版本**。

模板的新活动版本现在可在新消息中使用。此外，还在尚未发送且配置为使用在发送消息时处于活动状态的模板版本的任何现有消息中使用它。