

**终止支持通知：** 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 最终用户消息的支持。

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

# 使用消息模板助手
<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**。