

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

# 创建消息模板
<a name="create-message-templates1"></a>

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

本主题适用于想要使用管理网站创建消息模板的 Amazon Connect 管理员和联络中心经理。

**提示**  
尽管消息模板使用 Connect AI 代理 APIs，但消息模板不会产生额外的账单。您只需支付聊天消息价格或电子邮件价格。有关更多信息，请参阅 [Amazon Connect 定价](https://aws.amazon.com/connect/pricing/)。

## 什么是消息模板？
<a name="what-message-templates"></a>

*消息模板*是您可以在发送的消息中创建、保存然后重复使用的内容和设置集。在某些企业中，它们被称为*电子邮件模板*和*短信模板*。创建消息模板时，您可以在基于该模板的消息的各个组成部分中指定要重复使用的内容。

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

您可以在 Amazon Connect 中设计以下类型的消息模板：
+ **电子邮件模板**，用于回复客户发送给您的电子邮件消息，或可供座席用来应对常见问题的电子邮件消息。电子邮件模板可以为座席定义电子邮件的结构，例如签名，或者完整的回复。
+ **短信模板**，用于您在活动中发送的短信文本消息或者作为直接消息或测试消息发送给有限受众的短信文本消息。
+ **WhatsApp 模板**，用于您从活动中发送的 WhatsApp 消息，或者作为直接消息或测试消息发送给有限受众的消息。

您可以创建具有以下功能的模板：
+ 富文本格式（粗体、斜体、下划线、删除线、上标、下标）、富文本字体样式（颜色、突出显示、大小、标题、系列、块报价、代码块）、特殊字符、表情符号、列表（项目符号、编号）、对齐和缩进、表格、超链接和嵌入图像
+ 电子邮件模板中的属性，用于定义个性化详细信息，例如客户名称、客户电子邮件、客户账号、客户电话号码、客户地址和座席姓名。
+ 附件最大可达 1 MB。有关受支持的附件类型的列表，请参阅[Amazon Connect 功能规格](feature-limits.md)。

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

## 如何创建消息模板
<a name="howto-message-templates"></a>

1. 使用 Amazon Connect 管理员帐户或在其安全配置文件中具有 “**内容管理**-**消息模板**-**创建**” 的用户帐户登录管理网站。

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

1. 如果这是您第一次创建模板，则系统会提示您创建知识库，这是存储模板的位置。

   您的企业可以有多个知识库，但其中只有一个可以与模板相关联。

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

1. 在 “**频道**” 下，选择一个频道。

1. 对于**名称**，输入模板的名称。名称必须以字母或数字开头。它最多可以包含 128 个字符。

1. 对于**描述 – *可选***，输入模板的简要描述。描述最多可包含 255 个字符。

1. 对于**路由配置文 – *可选***，输入座席的路由配置文件，以便能够从座席工作区使用此模板。

1. 根据您创建的是**电子邮件**、**短信**还是**WhatsApp**模板，请执行以下任一操作：

   对于电子邮件模板：

   1. 在**电子邮件详细信息**下，通过以下选项为使用模板的邮件指定内容：
      + 对于**主题**，输入要在邮件主题行中显示的文本。
      + 对于**正文**，输入要在消息正文中显示的内容。
        + **编辑器**：使用富文本编辑器输入内容。使用格式工具栏应用格式设置，将链接和其他内容添加到消息。要添加附件，您的 IT 管理员需要为此选项启用附件功能。
        + **代码**：手动输入 HTML 内容，包括格式、链接以及要包含在消息中的其他功能。

        您还可以通过使用属性在模板的主题和正文中包含个性化内容。为此，添加引用您或 Amazon Connect 创建的特定属性的消息变量，例如，存储用户的名字的属性。通过使用消息变量，可以为使用模板的消息的每个接收人显示不同的内容。

        要使用消息变量，请从**属性查找器**中选择现有属性的名称。Amazon Connect 会将其放入您的消息中。您可以将其复制并粘贴到所需位置。有关更多信息，请参阅 [向消息模板添加个性化内容](personalize-templates.md)。  
![\[“消息模板”页面上的属性查找器。\]](http://docs.aws.amazon.com/zh_cn/connect/latest/adminguide/images/message-template-attribute-finder.png)

   1. 在**标头 – *可选***下，您可以在电子邮件中添加两个静态标头。例如，要向促销电子邮件添加一键取消订阅链接，请添加以下两个标头：
      + **列表-取消订阅**：设置为贵组织的取消订阅链接。该链接必须支持 HTTP POST 请求，才能处理收件人的取消订阅请求。
      + **列表-取消订阅-发布**：设置为 `List-Unsubscribe=One-Click`。

      在电子邮件中包含取消订阅链接是一项最佳实践，并且在一些国家/地区是法律所要求的。如果您的模板包含具有此属性的链接，则您必须有一个系统来处理选择退出请求。

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

   1. 在向用户提供模板之前，建议您发送一封测试电子邮件消息，以确保模板可按预期正常工作。

   1. 当您准备好在流、活动中以及通过座席工作区向座席提供该模板时，请完成相应步骤将其[激活](#create-message-templates1)。

**对于短信模板：**

1. 在**正文**的**短信详细信息**下编写消息。按照上述说明，通过根据需要添加属性，来对消息进行个性化设置。

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

1. 在向用户提供模板之前，建议您发送一封测试消息，以确保模板可按预期正常工作。

1. 当您准备好让短信模板在**发送消息**数据块中可用，或者让电子邮件模板可用于电子邮件活动时，请完成相应步骤将其[激活](#create-message-templates1)。

**对于 WhatsApp 模板：**

1. 在**WhatsApp 详细信息**下，从下拉列表中选择模板。请注意，只有经过 Meta 批准的模板才能用于创建消息模板。继续操作之前，请确保您导入的模板已在 Meta 业务 WhatsApp 管理器中获得批准。

1. 为模板定义名称并根据需要添加描述。

1. 选择 Meta 批准的模板后，您将看到以**正**文和**模板元数据 (JSON)** 格式显示的详细信息。

1. **属性映射：**要在 Amazon Connect 中启用个性化消息传送，您需要将导入的元属性映射到自定义文本。通过将现有的 Connect 属性与纯文本相结合，您可以为客户创建自定义消息。例如，你可能会在**正**文中看到 Hello \$1\$11\$1\$1，你可以`Attributes.Customer.FirstName`从 Connect 属性列表中选择进行匹配。

1. 可以将多种按钮类型添加到内容模板中。如果您选择的模板包含按钮，例如包含属性的网站 URL，则可以选择 Connect 属性进行映射，也可以输入静态文本。

1. 完成属性映射后，选择**保存**。

1. 在向用户提供模板之前，建议您发送一封测试消息，以确保模板可按预期正常工作。

# 激活消息模板
<a name="activate-message-templates"></a>

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

您只能激活已**另存为新版本**的消息模板。这是为了防止意外激活草稿模板。

当模板版本**已激活**时，可以将其添加到 [Amazon Connect 流数据块：发送消息](send-message.md)，并可能通过座席工作区提供给座席使用。

**激活消息收发模板**

使用 Amazon Connect 管理员帐户或在其安全配置文件中具有 “**内容管理**-**消息模板**-**创建**” 的用户帐户登录管理网站。

1. 在左侧导航菜单中，选择**消息模板**。

1. 在**消息模板**页面上，使用**另存为新版本**选项保存模板。

1. 在**消息收发模板**页面上，重新打开刚刚保存的模板。

1. 使用下拉菜单选择要激活的模板版本。  
![\[模板的版本号。\]](http://docs.aws.amazon.com/zh_cn/connect/latest/adminguide/images/message-template-version.png)

1. 选择**激活**。  
![\[消息模板页面上的“激活”按钮。\]](http://docs.aws.amazon.com/zh_cn/connect/latest/adminguide/images/message-template-version-activate.png)

# 关于版本控制消息模板
<a name="about-version-message-templates"></a>

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

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

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

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

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

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

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

`Hi {{Attributes.Customer.FirstName}}, attached is information about the insurance plans we discussed.`

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

**示例 1**  
`Hi Sofia, attached is information about the insurance plans we discussed.`

**示例 2**  
`Hi Alejandro, attached is information about the insurance plans we discussed.`

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

您可以在创建的新模板或现有模板中添加消息属性。如果您将变量添加到现有模板，则 Amazon Connect 不一定会将更改应用于使用该模板并且尚未发送的消息。这取决于您将变量添加到的模板版本以及之前如何配置使用该模板的消息。

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

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

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

1. 在消息详细信息部分，确定添加消息变量的位置。对于电子邮件模板，您可以向邮件主题或正文添加变量。对于短信模板，您可以向正文中添加变量。

1. 将光标放在您希望在消息中插入属性的位置。单击或点击**属性查找器**，然后滚动到您想要为其添加消息变量的属性类型。  
![\[“消息模板”页面上的属性查找器。\]](http://docs.aws.amazon.com/zh_cn/connect/latest/adminguide/images/message-template-attribute-finder.png)

   您可以从以下类型的属性中进行选择：
   + **系统属性**：
     + **CustomerEndpointAddress**：发起联系的客户电子邮件地址。
     + **SystemEmailAddress**：客户向其发送电子邮件的电子邮件地址。
     + **名称**：客户发送给您的联络中心的电子邮件中的显示名称。
   + **座席属性**：
     + **FirstName**
     + **LastName**
   + **客户配置文件属性**。有关完整列表和描述，请参阅[“客户配置文件”属性](connect-attrib-list.md#customer-profiles-attributes)。
     + **推荐属性**：在出站营销活动中使用 Predictive Insights 时，您可以在消息模板中加入个性化的产品推荐。当您在事件触发的活动中配置推荐时，这些属性可用。

       使用索引访问每个建议，`{{Attributes.Customer.Recommendations.[0].CatalogItem.Name}}`例如第一个建议、`{{Attributes.Customer.Recommendations.[1].CatalogItem.Name}}`第二个建议，依此类推。  
![\[电子邮件模板编辑器在属性查找器中显示推荐属性，在邮件正文中显示个性化产品推荐。\]](http://docs.aws.amazon.com/zh_cn/connect/latest/adminguide/images/RecommendationAttributesInTemplate.png)

       有关在活动中配置推荐的更多信息，请参阅[使用事件触发器创建出站活动](how-to-create-campaigns-using-event-triggers.md)。

1. 当您在属性查找器中单击某个属性时，该属性会自动放置在您的消息中。您可以将属性复制和粘贴到其他位置。

   粘贴属性后，Amazon Connect 会将其显示在两组大括号中，例如 `{{Attributes.Agent.FirstName}}`。下图显示了一封包含三个属性的电子邮件：客户的名字和姓氏以及座席的名字。  
![\[带有消息属性的电子邮件消息。\]](http://docs.aws.amazon.com/zh_cn/connect/latest/adminguide/images/message-template-email-attributes.png)

1. 完成后，请执行以下操作之一：
   + 如果您已将消息变量添加到新模板，请选择**保存**。
   + 如果您将消息变量添加到现有模板并希望将更改另存为模板的新版本，请选择**另存为新版本**。
   + 如果您已将消息变量添加到现有模板并希望将更改另存为模板最新草稿的更新，请选择**保存**。如果要更新草稿并根据草稿创建新版本，请选择**另存为新版本**。

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

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

这些是助手的类别，将在以下部分中进行介绍。

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

本部分介绍 Handlebars 提供的**内置**助手。

**重要**  
不支持由 Handlebars 提供的内置 `with` 助手。但是，完全支持所有其他 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]`是，则返回 false *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"] [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 Connect 自定义属性名称支持空格。要具有名为 `"Last Name"` 的自定义属性，您必须将该属性的格式设置为 `Attributes.[Last Name]`。

## 使用嵌套助手
<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**。