

**지원 종료 공지:** 2026년 10월 30일에 Amazon Pinpoint에 대한 지원이 AWS 종료됩니다. 2026년 10월 30일 이후에는 Amazon Pinpoint 콘솔 또는 Amazon Pinpoint 리소스(엔드포인트, 세그먼트, 캠페인, 여정, 분석)에 더 이상 액세스할 수 없습니다. 자세한 내용은 [Amazon Pinpoint 지원 종료](https://docs.aws.amazon.com/console/pinpoint/migration-guide)를 참조하세요. **참고:** SMS, 음성, 모바일 푸시, OTP 및 전화번호 검증과 관련된 APIs는이 변경의 영향을 받지 않으며 AWS 최종 사용자 메시징에서 지원됩니다.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 메시지 템플릿 헬퍼 사용
<a name="message-template-helpers"></a>

고객은 Amazon Pinpoint 템플릿을 사용하여 Handlebars.js 언어를 기반으로 재사용 가능한 메시지 템플릿을 만들 수 있습니다. 헬퍼는 특정 리전의 통화로 가격 형식을 지정하거나 시간대 기반 위치를 추가하는 등 다양한 기능을 제공합니다. 헬퍼는 값에 특정 문자열 또는 정수를 사용하거나 특정 Amazon Pinpoint 메시지 변수를 사용할 수 있습니다.

헬퍼 범주는 다음과 같으며, 다음 섹션에서 설명합니다.

## 기본 헬퍼
<a name="defaulthelpers"></a>

이 섹션에서는 Handlebars가 제공하는 **내장** 헬퍼에 대해 설명합니다. 전체 목록은 [handlebarsjs.com](https://handlebarsjs.com)의 [Built-in Helpers](https://handlebarsjs.com/guide/builtin-helpers.html)를 참조하세요. 기본 제공 헬퍼는 다음과 같습니다.
+ `each` - 목록을 반복합니다.
**참고**  
최대 목록 크기는 15개 항목입니다.
+ `if` - 문을 평가합니다.

*each*  
목록을 반복합니다. 이 헬퍼는 블록 문만 사용합니다. 선택적으로 다음을 수행할 수 있습니다.  
+ 요청에서 `@index`를 전달하여 현재 루프 인덱스를 참조할 수 있습니다.
+ `this` 헬퍼를 사용하여 반복되는 현재 요소를 참조할 수 있습니다.
+ `<li>` 태그를 사용하여 헬퍼 응답을 목록으로 반환할 수 있습니다.
**사용량**  
`{{#each value}}`  
`{{@index}}` 위치의 값은 `{{this}}`입니다.  
`{{else}}`  
조건이 false입니다.  
`{{/each}}`  
블록 문에서 `each` 앞에 파운드 기호(`#`)를 붙이고 닫는 `{{/each}}`로 끝나야 합니다.  
**예제**  
이 예제에서 `each`는 사용자가 선호하는 색상 목록을 반환하는 데 사용됩니다. `false`의 경우 `else` 문이 반환됩니다. 요청이 다음과 같은 경우:  
`{{#each User.UserAttributes.FavoriteColors}}`  
`<li>{{this}}</li>`  
`{{else}}`  
*You have no favorite colors*인 경우  
`{{/each}}` 반환  
+ *r*ed
+ *blue*
+ *yellow*
를 반환합니다(true 문인 경우).

*다음과 같은 경우*  
어떤 것이 true인지 여부를 평가하고 평가에 따라 응답을 반환합니다.  
**사용량**  
`{{#if value}}`  
값이 정의되지 않음  
`{{else}}`  
값이 정의되지 않음  
`{{/if}}`  
블록 문에서 `if` 앞에 파운드 기호(`#`)를 붙이고 닫는 `{{/if}}`로 끝나야 합니다.  
**예제**  
이 예제에서 `if` 헬퍼는 사용자의 이름이 맞는지 여부를 평가하는 데 사용됩니다. 이름을 찾으면 응답에 사용자의 이름을 전달하는 인사말이 반환됩니다. 그렇지 않으면 `else` 문은 대체 인사말을 반환합니다.  
`{{#if User.UserAttributes.FirstName.[0]}}`  
`Hello {{User.UserAttributes.FirstName.[0]}},`  
`{{else}}`  
*Hello,*  
`{{/if}}`  
는 `if` 헬퍼가 true이면 *Hello, Jane*을 반환합니다.

## 조건부 헬퍼
<a name="conditionhelpers"></a>

이 섹션에서는 **조건부** 헬퍼를 설명합니다.

조건부 헬퍼는 한 줄 또는 블록 문에서 사용할 수 있습니다. 사용하는 헬퍼 메서드에 관계없이 응답을 사용자 지정할 수 있습니다. 한 줄 및 블록 문 안에서 추가 조건부 헬퍼를 전달할 수 있습니다. 다음 조건부 헬퍼는 먼저 한 줄의 사용법을 표시한 다음 선택적 `else` 절을 사용하여 블록 문을 표시합니다. 조건부 헬퍼는 다음과 같습니다.
+ `and` - 전달된 모든 요소가 같은지 비교합니다.
+ `eq` - 두 요소가 같은지 테스트합니다.
+ `gt` - 한 요소가 다른 요소보다 큰지 테스트합니다.
+ `gte` - 한 요소가 다른 요소보다 크거나 같은지 테스트합니다.
+ `if` - 어떤 것이 true인지 평가합니다.
+ `lt` - 한 요소가 다른 요소보다 작은지 테스트합니다.
+ `lte` - 한 요소가 다른 요소보다 작거나 같은지 테스트합니다.
+ `neq` - 두 요소가 같지 않은지 여부를 테스트합니다.
+ `not` - 부울 연산의 응답을 반전합니다.
+ `or` - 인수의 요소 중 같은 것이 있는지 비교합니다.

*및*  
인수에 전달된 *모든* 요소가 같은지 비교한 다음 결과에 따라 응답을 반환합니다. 이 헬퍼는 부울 값이 아닌 경우에도 사용할 수 있습니다. 조건에 최소 두 개의 요소를 전달해야 합니다.  
**사용량**  
+ `{{and valuea valueb valuec valued yes='y' no='n'}}`

  조건에 따라 *y* *n*을 *yes*, *no* 등의 다른 값이나 반환되기 바라는 다른 문자열로 바꿀 수 있습니다.
+ `{{#and valuea valueb}}`

  조건이 true입니다.

  `{{else}}`

  조건이 false입니다.

  `{{/and}}`

  블록 문에서 `and` 앞에 파운드 기호(`#`)를 붙이고 닫는 `{{/and}}`로 끝나야 합니다.
**예제**  
이 예제에서는 `Location.City ` 및 `Location.Country` 속성에 대해 전달된 두 문자열이 모두 true인지 여부를 확인하기 위해 `and` 블록 문 내에서 `eq`가 사용됩니다. 두 조건 모두 같으면 true 문이 반환됩니다. 두 속성 중 하나가 false인 경우 `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*을 *yes*, *no* 등의 다른 값이나 반환되기 바라는 다른 문자열로 바꿀 수 있습니다.
+ `{{#eq valuea valueb}}`

  조건이 true입니다.

  `{{else}}`

  조건이 false입니다.

  `{{/eq}}`

  블록 문에서 `eq` 앞에 파운드 기호(`#`)를 붙이고 닫는 `{{/eq}}`로 끝나야 합니다.
**예제**  
이 예제에서는 `User.UserAttributes.FavoriteColors.[0]`의 값이 *Red*인지 평가하는 데 `eq`가 사용됩니다. 응답이 `true`이면 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*을 *yes*, *no* 등의 다른 값이나 반환되기 바라는 다른 문자열로 바꿀 수 있습니다.
+ `{{#gt valuea valueb}}`

  조건이 true입니다.

  `{{else}}`

  조건이 false입니다.

  `{{/gt}}`

  블록 문에서 `gt` 앞에 파운드 기호(`#`)를 붙이고 닫는 `{{/gt}}`로 끝나야 합니다.
**예제**  
이 예제에서 헬퍼는 `User.UserAttributes.UserAge.[0]` 속성의 값을 문자열 *17*과 비교하여 사용자의 나이가 17세 이상인지 확인합니다. 응답이 `true`이면 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*을 *yes*, *no* 등의 다른 값이나 반환되기 바라는 다른 문자열로 바꿀 수 있습니다.
+ `{{#gte valuea valueb}}`

  조건이 true입니다.

  `{{else}}`

  조건이 false입니다.

  `{{/gte}}`

  블록 문에서 `get` 앞에 파운드 기호(`#`)를 붙이고 닫는 `{{/gte}}`로 끝나야 합니다.
**예제**  
이 예제에서 헬퍼는 `User.UserAttributes.UserAge.[0]` 속성을 문자열 *18*과 비교하여 사용자의 나이가 18세 이상인지 확인합니다. 응답이 `true`이면 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}}`

*다음과 같은 경우*  
어떤 것이 true인지 여부를 평가하고 평가에 따라 응답을 반환합니다.  
**사용량**  
+ `{{#if value}}`

  조건에 따라 *y* *n*을 *yes*, *no* 등의 다른 값이나 반환되기 바라는 다른 문자열로 바꿀 수 있습니다.
+ `{{#if value}}`

  조건이 true입니다.

  `{{else}}`

  조건이 false입니다.

  `{{/if}}`

  블록 문에서 `if` 앞에 파운드 기호(`#`)를 붙이고 닫는 `{{/if}}`로 끝나야 합니다.
**예제**  
이 예제에서 헬퍼는 사용자의 이름이 맞는지 여부를 평가하는 데 사용됩니다. 이름을 찾으면 응답에 사용자의 이름을 전달하는 인사말이 반환됩니다. 그렇지 않으면 else 문은 대체 인사말을 반환합니다.  
`{{#if User.UserAttributes.FirstName.[0]}}`  
*Hello* `{{User.UserAttributes.FirstName.[0]}}`*,*  
`{{else}}`  
*Hello,*  
`{{/if}}`  
헬퍼가 true이면 *Hello Jane,*을 반환합니다.

*lt*  
한 요소의 값이 다른 요소보다 작은지 테스트합니다.  
**사용량**  
+ `{{lt valuea valueb yes='y' no='n'}}`

  조건에 따라 *y* *n*을 *yes*, *no* 등의 다른 값이나 반환되기 바라는 다른 문자열로 바꿀 수 있습니다.
+ `{{#lt valuea valueb}}`

  조건이 true입니다.

  `{{else}}`

  조건이 false입니다.

  `{{/lt}}`

  블록 문에서 `lt` 앞에 파운드 기호(`#`)를 붙이고 닫는 `{{/lt}}`로 끝나야 합니다.
**예제**  
이 예제에서 헬퍼는 `User.UserAttributes.UserAge.[0]` 속성을 문자열 *18*과 비교하여 사용자의 나이가 18세 미만인지 확인합니다. 응답이 `true`이면 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*을 *yes*, *no* 등의 다른 값이나 반환되기 바라는 다른 문자열로 바꿀 수 있습니다.
+ `{{#lte valuea valueb}}`

  조건이 true입니다.

  `{{else}}`

  조건이 false입니다.

  `{{/lte}}`

  블록 문에서 `lte` 앞에 파운드 기호(`#`)를 붙이고 닫는 `{{/lte}}`로 끝나야 합니다.
**예제**  
이 블록 문에서 헬퍼는 `User.UserAttributes.UserAge.[0]` 속성을 문자열 *17*과 비교하여 사용자의 나이가 17세 이하인지 확인합니다. 응답이 `true`이면 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*을 *yes*, *no* 등의 다른 값이나 반환되기 바라는 다른 문자열로 바꿀 수 있습니다.
+ `{{#neq valuea valueb}}`

  조건이 true입니다.

  `{{else}}`

  조건이 false입니다.

  `{{/neq}}`

  블록 문에서 `neq` 앞에 파운드 기호(`#`)를 붙이고 닫는 `{{/neq}}`로 끝나야 합니다.
**예제**  
이 블록 문에서는 `User.UserAttributes.FavoriteColors.[0]` 속성이 문자열 `Red`와 비교하여 됩니다. 응답이 `true`이면 true 문이 반환됩니다. 응답이 `false`이면 `else` 문이 반환됩니다.  
`{{#neq User.UserAttributes.Favorite.Colors.[0] "red"}}`  
*You do not like red.*  
`{{else}}`  
*You like red.*  
`{{/neq}}`

*not*  
부울 연산의 응답을 반전시켜 `not`이 긍정적 비교인 경우 `true` 문이 반환됩니다. 응답이 false이면 else 문이 반환됩니다.  
**사용량**  
+ `{{not value yes='y' no='n'}}`

  조건에 따라 *y* *n*을 *yes*, *no* 등의 다른 값이나 반환되기 바라는 다른 문자열로 바꿀 수 있습니다.
+ `{{#not value}}`

  조건이 true입니다.

  `{{else}}`

  조건이 false입니다.

  `{{/not}}`

  블록 문에서 `not` 앞에 파운드 기호(`#`)를 붙이고 닫는 `{{/not}}`로 끝나야 합니다.
**예제**  
이 블록 문에서는 `eq` 헬퍼를 사용하여 `User.UerAttributes.FavoriteColors.[0]` 속성을 *red* 문자열과 비교하여 확인합니다. 그러면 `not` 헬퍼는 `eq` 헬퍼의 정반대를 반환합니다. 응답이 *red*가 아닌 다른 색상을 반환하면 `true` 문이 반환됩니다. 응답이 *red*를 반환하면 `else` 문이 반환되어 false 문을 나타냅니다.  
`{{#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*인 경우 false를 반환합니다.

*또는*  
인수의 요소 중 *어느 것이든* 같은 것이 있는지 여부를 비교한 다음 결과에 따라 응답을 반환합니다. 이 헬퍼는 부울 값이 아닌 경우에도 사용할 수 있습니다.  
**사용량**  
+ `{{or valuea valueb valuec valued yes='y' no='n'}}`

  조건에 따라 *y* *n*을 *yes*, *no* 등의 다른 값이나 반환되기 바라는 다른 문자열로 바꿀 수 있습니다. 조건에 최소 두 개의 요소를 전달해야 합니다.
+ `{{#or valuea valueb}}`

  조건이 true입니다.

  `{{else}}`

  조건이 false입니다.

  `{{/or}}`

  블록 문에서 `or` 앞에 파운드 기호(`#`)를 붙이고 닫는 `{{/or}}`로 끝나야 합니다.
**예제**  
이 `or` 블록 문에서는 `eq` 헬퍼를 사용하여 `Location.City` 속성에 대한 두 문자열을 추가로 비교합니다. 두 속성 중 하나가 `true`인 경우 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자로 자르는 데 사용됩니다. 응답에는 줄임표가 포함되며, 줄임표의 점은 총 6자에 포함됩니다.  
`{{abbreviate User.UserAttributes.LastName.[0] 6}}`는  
*Alejandro*가 `[0]`의 값인 경우 *Ale...*를 반환합니다.

*capitalize*  
공백 사이의 각 단어를 대문자로 표시합니다.  
**사용량**  
 `{{capitalize value}}`  
**예제**  
이 예제에서는 `Attributes.description.[0]` 항목의 각 단어에 첫 문자 대문자화가 적용됩니다.  
`{{capitalize Attributes.description.[0]}}`  
`Attributes.description.[0]`은   
 `Attributes.description.[0]`의 값이 *my first post*인 경우 *My First Post*를 반환합니다.

*capitalizeFirst*  
값의 첫 문자를 대문자로 표시합니다.  
**사용량**  
`{{capitalizeFirst value}}`  
**예제**  
이 예제에서는 `Attributes.description.[0]` 항목 첫 번째 단어의 첫 문자에 대문자화가 적용됩니다.  
`{{capitalizeFirst Attributes.description.[0]}}` 반환  
 `Attributes.description.[0]`의 값이 *my first post*인 경우 *My first post*를 반환합니다.  
**예제**

*center*  
지정된 너비의 필드에 있는 값을 지정된 숫자만큼 가운데에 맞춥니다. 선택적으로 패딩에 표시할 문자를 전달하거나 필드를 비워 둘 수 있습니다. 문자가 전달되지 않으면 공백이 사용됩니다.  
**사용량**  
 `{{center value size=X [pad=" "}}`, *X*를 숫자 값으로 바꿉니다.  
`pad`를 비워 두면 응답에서 공백이 패딩으로 사용됩니다. 문자를 전달하면 해당 문자가 패딩의 각 공백에 표시됩니다. 음수는 지원되지 않습니다.  
**예제**  
이 예제에서는 `Location.City `의 값이 크기 *19*로 가운데 맞춰집니다.  
`{{center Location.City size=19}}` 반환   
`Location.City`가 *Los Angeles*인 경우 *"    Los Angeles    "*를 반환합니다. 예제 출력에 표시된 따옴표는 강조를 위한 것입니다.

*cut*  
문자열에서 지정된 값을 제거합니다.  
**사용량**  
 `{{cut value [" "]}}`, 따옴표 파라미터 내의 공백을 잘라낼 값으로 바꿉니다. 파라미터 값이 전달되지 않으면 공백이 사용됩니다.  
**예제**  
이 예제는 `Location.City` 속성에서 문자 *e*를 제거합니다.  
`{{cut Location.City "e"}}` 반환  
`[Location.City`가 *Los Angeles*인 경우 *Los Angls*를 반환합니다.

*dateFormat*  
모든 응답에서 날짜의 기본 날짜 스타일을 설정합니다. 시간대 ID 목록은 [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`이 사용됩니다.  
**예제**  
이 예제에서는 `User.UserAttributes.StartDate.[0]`의 `[0]` 항목이 **09/19/2020**이고 *America/Los\$1Angeles* 시간대를 기반으로 한 `full` 날짜 형식을 사용하여 사용자에게 메시지를 보냅니다.  
`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 ", "}}` 반환   
`Attributes.favorite_colors`가 *blue,red,green* 목록인 경우 *blue, red, green*을 반환합니다.

*ljust*  
값을 왼쪽 여백에 정렬하고 오른쪽에 공백을 추가하여 값의 길이가 숫자와 일치하도록 합니다. 음수는 지원되지 않습니다.  
선택적으로 `pad`를 표시할 문자를 전달하거나 필드를 비워 둘 수 있습니다. `pad` 값을 비워 두면 기본값은 공백입니다.  
**사용량**  
`{{ljust value size=X [pad=" "]}}`, 여기서 *X*는 공백을 포함한 값의 전체 길이입니다.  
**예제**  
이 예제에서는 왼쪽 자리 맞추기 값 *15*가 Location.City에 적용됩니다.  
`{{ljust Location.City size=15}}` 반환  
`Location.City`의 값이 *Los Angeles*인 경우 *"Los Angeles    "*를 반환합니다. 예제 출력에 표시된 따옴표는 강조를 위한 것입니다.

*lower*  
값을 모두 소문자로 변환합니다.  
**사용량**  
`{{lower value}}`  
**예제**  
이 예제에서는 `User.UserAttributes.LastName.[0]`의 `[0]` 항목이 소문자로 변경됩니다.  
`{{lower User.UserAttributes.LastName.[0]}}` 반환  
*Santos*가 `[0]`의 값인 경우 *santos*를 반환합니다.

*지금*  
전달된 시간대 ID를 기반으로 현재 날짜를 출력합니다. 시간대 ID 목록은 [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`이 사용됩니다.  
**예제**  
이 예제에서는 로스앤젤레스의 현재 날짜가 `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 " " "_"}}` 반환  
`Location.City `가 *Los Angeles*인 경우 *Los\$1Angeles*를 반환합니다.

*rjust*  
값을 오른쪽 여백에 정렬하고 왼쪽에 공백을 추가하여 값의 길이가 숫자와 일치하도록 합니다. 음수는 지원되지 않습니다.  
선택적으로 `pad`를 표시할 문자를 전달하거나 필드를 비워 둘 수 있습니다. `pad` 값을 비워 두면 기본값은 공백입니다.  
**사용량**  
`{{rjust value size=X [pad=" "]}}`, 여기서 *X*는 공백을 포함한 값의 전체 길이입니다.  
**예제**  
이 예제에서는 오른쪽 자리 맞추기 값 *15*가 `Location.City` 속성에 적용됩니다.  
`{{rjust Location.City size=15}}` 반환  
`Location.City`가 *Los Angeles*인 경우 *"    Los Angeles"*를 반환합니다. 출력에 표시된 따옴표는 강조를 위한 것입니다.

*slugify*  
전달된 값을 소문자로 변환하고, 단어가 아닌 문자(영숫자 및 밑줄)를 제거하고, 공백을 하이픈으로 변환하고, 선행 또는 후행 공백을 제거합니다.  
**사용량**  
`{{slugify value}}`  
**예제**  
이 예제에서는 `Location.City` 속성에 대해 slugify가 수행됩니다.  
`{{slugify Location.City}}` 반환  
`Location.City`가 *Los Angeles*인 경우 *los-angeles*를 반환합니다.

*stripTags*  
값에서 [X]HTML 태그를 제거합니다.  
**사용량**  
 `{{stripTags value}}`  
**예제**  
이 예제에서는 User.UserAttributes.interest.[0]의 HTML 태그가 제거됩니다.  
`{{stripTags User.UserAttributes.interests.[0]}}` 반환  
`User.UserAttributes.interests.[0]`가 `<h1>Art</h1>`인 경우 *Art*를 반환합니다.

*substring*  
새 문자열을 전달된 값의 하위 문자열로 반환합니다. 길이와 위치는 `startOffset` 및 `endOffset` 파라미터에 의해 결정되며, 정수여야 합니다. 음수는 지원되지 않습니다. `endOffset`이 전달되지 않으면 하위 문자열은 문자열의 원래 끝 값을 사용합니다.  
**사용량**  
`{{substring value startOffset [endOffset]}}`  
**예제**  
이 예제에서는 offset 4와 endOffset 9가 Location.City 속성에 적용됩니다.  
`{{substring Location.City 4 9}} `는  
`Location.City`의 값이 *Los Angeles*인 경우 `Angel`을 반환합니다.

*upper*  
전달된 값을 대문자로 변환합니다.  
**사용량**  
`{{upper value}}`  
**예제**  
이 예제에서는 `User.UserAttributes.LastName` 속성의 `[0] ` 항목이 모두 대문자로 변환됩니다.  
`{{upper User.UserAttributes.LastName.[0]}}`는  
`User.UserAttributes.LastName.[0]` 값이 *Roe*인 경우 *ROE*를 반환합니다.

*yesno*  
`true`, `false`, `NULL`을 `Yes`, `No`, `Maybe`로 바꿉니다.  
**사용량**  
`{{yesno value [yes="yes"] [no="no"] maybe=["maybe"]}}`  
**예제**  
이 예제에서 `IsUserSubscribed` 속성은 사용자가 특정 목록을 구독하는지 여부를 반환합니다.  
`{{yesno Attributes.IsUserSubscribed}}` 반환   
`Attributes.IsUserSubscribed`가 *true*인 경우 *yes*를 반환합니다.

## 수학 및 인코딩 헬퍼
<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 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 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**를 반환합니다.

## 인라인 부분
<a name="inlinepartials"></a>

인라인 부분은 엄밀히 말해 헬퍼는 아니지만 반복되는 문자열을 포함하는 템플릿을 단순화하여 더 쉽게 재사용할 수 있도록 하는 Handlbars 방식입니다. 자세한 내용은 [handlebarsjs.com](https://handlebarsjs.com)에서 [Inline partials](https://handlebarsjs.com/guide/partials.html#inline-partials)를 참조하세요.

**사용량**

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

인라인 부분의 내용을 다른 곳에서 참조하려면 다음을 사용하세요.

` {{> inlineName}}`

**예제**

다음 예제는 템플릿의 첫 부분에 다음 코드를 추가하여 수신자의 이름 및 사용 가능한 경우 성이 포함된 인라인 부분을 생성합니다.

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

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

`{{/inline}}`

`fullName` 부분을 생성한 후 예(`{{> 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]`는 세 번째 항목과 같은 식입니다. 예를 들어 `upper` 헬퍼를 사용하여 `User.UserAttributes.LastName`의 첫 번째(`[0]`)항목을 모두 대문자로 변환한다고 가정해 보겠습니다. 헬퍼 사용법은 `{{upper value}}`이고 속성 형식은 `User.UserAttributes.LastName`입니다. 다음과 같이 *value*를 속성 이름 및 속성 인덱스 값 `.[0]`으로 바꿉니다. `{{upper User.UserAttributes.LastName.[0]}}` 그러면 응답은 목록에서 모두 대문자로 형식 지정된 `[0]` 항목을 반환합니다. 예를 들어 `[0]`의 값이 *Santos*인 경우 응답은 *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**으로 변환합니다.