

**지원 종료 공지:** 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="tutorials"></a>

이 단원의 자습서는 Amazon Pinpoint를 처음 사용하는 사용자에게 여러 가지 중요한 작업을 완료하는 방법을 보여 주기 위해 계획되었습니다. Amazon Pinpoint를 처음 사용하거나 특정 기능에만 익숙하지 않거나 어떤 경우든 상관없이 이러한 자습서는 좋은 출발점입니다.

이 가이드의 자습서에는 개발자 또는 시스템 관리자 대상 그룹을 위한 작업이 포함되어 있습니다. 이러한 자습서는 Amazon Pinpoint API, AWS SDK 및 AWS CLI를 사용하여 작업을 수행하는 방법을 보여 줍니다.

**Topics**
+ [Amazon Pinpoint와 함께 Postman 사용](tutorials-using-postman.md)
+ [SMS 등록 시스템 설정](tutorials-two-way-sms.md)

# 자습서: Postman을 Amazon Pinpoint API와 함께 사용
<a name="tutorials-using-postman"></a>

Postman은 사용하기 쉬운 그래픽 환경에서 API를 테스트하는 인기 있는 도구입니다. Postman을 사용하여 API 요청을 REST API로 전송하고 요청에 대한 응답을 수신할 수 있습니다. Postman 사용은 Amazon Pinpoint API에 대해 수행하는 호출을 테스트하고 문제를 해결하는 편리한 방법입니다. 이 자습서에는 Amazon Pinpoint에서 Postman을 설정하고 사용하기 위한 절차가 포함되어 있습니다.

**참고**  
Postman은 타사에서 개발되었습니다. Amazon Web Services(AWS)에서 개발 또는 지원하지 않습니다. Postman 사용에 대해 자세히 알아보거나 Postman 관련 문제에 대한 지원을 받으려면 Postman 웹 사이트의 [지원 센터](https://support.postman.com/hc/en-us)를 참조하세요.

## 이 자습서 소개
<a name="tutorials-using-postman-about"></a>

이 단원에서는 이 자습서의 개요를 다룹니다.

**수강 대상**  
이 자습서는 개발자와 시스템 구현자를 위해 계획되었습니다. Amazon Pinpoint 또는 Postman에 익숙하지 않아도 이 자습서의 단계를 완료할 수 있습니다. IAM 정책 관리 및 JSON 코드 예제 수정에 익숙해야 합니다.

이 자습서의 절차는 신규 사용자가 Amazon Pinpoint 리소스를 영구적으로 삭제할 수 있는 API 작업을 사용하지 않도록 하기 위해 설계되었습니다. 고급 사용자는 사용자와 연결된 정책을 수정하여 이 제한을 제거할 수 있습니다.

**사용된 기능**  
이 자습서에는 다음과 같은 Amazon Pinpoint 기능에 대한 사용 예제가 포함되어 있습니다.
+ Postman을 사용하여 Amazon Pinpoint API와 상호 작용

**필요 시간**  
이 자습서를 완료하려면 약 15분 정도 걸립니다.

**지역별 제한**  
이 솔루션의 사용과 관련된 지역별 제한은 없습니다.

**리소스 사용 비용**  
 AWS 계정 생성에는 요금이 부과되지 않습니다. 그러나이 솔루션을 구현하면 Postman을 사용하여 다음 중 하나를 수행하는 경우 AWS 사용 비용이 발생할 수 있습니다.
+ 이메일, SMS, 모바일 푸시 또는 음성 메시지 전송
+ 캠페인 생성 및 전송
+ 전화 번호 확인 기능 사용

Amazon Pinpoint 사용과 관련된 요금에 대한 자세한 내용은 [Amazon Pinpoint 요금](https://aws.amazon.com/pinpoint/pricing/)을 참조하세요.

# Amazon Pinpoint와 함께 Postman을 사용하기 위한 사전 조건
<a name="tutorials-using-postman-prerequisites"></a>

이 자습서를 시작하기 전에 다음 사전 조건을 완료합니다.
+ AWS 계정이 있어야 합니다. AWS 계정을 만들려면 [https://console.aws.amazon.com/](https://console.aws.amazon.com/)으로 이동하여 **새 AWS 계정 생성**을 선택합니다.
+ AWS Management Console에 로그인하는 데 사용하는 계정이 새로운 IAM 정책 및 역할을 생성할 수 있는지 확인합니다.
+ 이메일 기능이 켜져 있고 이메일 ID가 확인된 샘플 프로젝트가 하나 이상 생성되어 있는지 확인하세요. *Amazon Pinpoint 사용 설명서*의 [이메일 지원이 있는 Amazon Pinpoint 프로젝트 생성](https://docs.aws.amazon.com/pinpoint/latest/userguide/channels-email-setup-create.html)을 참조하세요.
+ AWS 계정 ID가 있는지 확인하세요. AWS 계정 ID는 콘솔의 오른쪽 상단에 있습니다. 또는 명령줄 인터페이스(CLI) 를 사용할 수 있습니다. [AWS 계정 ID 찾기](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-identifiers.html#FindAccountId)를 참조하세요.
+ 컴퓨터에 Postman을 다운로드하고 설치해야 합니다. [Postman 웹 사이트](https://www.getpostman.com)에서 Postman을 다운로드할 수 있습니다..
+ 컴퓨터에 Postman을 설치한 후 Postman 계정을 생성해야 합니다. Postman 애플리케이션을 처음 시작할 때는 새 계정에 로그인하거나 새 계정을 생성하라는 메시지가 나타납니다. Postman에서 제공하는 지침에 따라 계정에 로그인하거나 계정이 아직 없다면 계정을 만드세요.

**다음**: [IAM 정책 및 역할 생성](tutorials-using-postman-iam-user.md)

# Amazon Pinpoint와 함께 사용할 IAM 정책 및 역할 생성
<a name="tutorials-using-postman-iam-user"></a>

Postman을 사용하여 Amazon Pinpoint API를 테스트하는 경우 첫 번째 단계는 사용자를 생성하는 것입니다. 이 단원에서는 사용자에게 모든 Amazon Pinpoint 리소스와 상호 작용할 수 있는 기능을 제공하는 정책을 생성합니다. 그런 다음 사용자를 생성하고 정책을 사용자에 직접 연결합니다.

## IAM 정책 생성
<a name="tutorials-using-postman-iam-user-create-policy"></a>

IAM 정책을 생성하는 방법을 알아봅니다. 이 정책을 사용하는 사용자 및 역할은 Amazon Pinpoint API의 모든 리소스와 상호 작용할 수 있습니다. 또한 Amazon Pinpoint 이메일 API 및 Amazon Pinpoint SMS 및 보이스 API와 관련된 리소스에도 액세스할 수 있습니다.

**정책 생성**

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) IAM 콘솔을 엽니다.

1. 탐색 창에서 **정책**을 선택한 후 **정책 생성**을 선택합니다.

1. **정책 편집기**에서 **JSON**을 선택합니다. **정책 편집기**에서 현재 JSON을 삭제하여 비어 있도록 합니다. 다음 JSON을 복사하여 **정책 편집기**에 붙여 넣은 다음 **정책 편집기**에서 *123456789012*의 모든 인스턴스를 AWS 계정 ID로 바꿉니다.

    AWS 계정 ID는 콘솔의 오른쪽 상단 모서리에서 찾을 수 있습니다. 또는 CLI를 사용할 수 있습니다. [AWS 계정 ID 찾기를 참조하세요](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-identifiers.html#FindAccountId).
**참고**  
Amazon Pinpoint 계정의 데이터를 보호하기 위해 이 정책에는 리소스를 읽고 생성하고 수정하도록 허용하는 권한만 포함됩니다. 이 정책에는 리소스를 삭제하도록 허용하는 권한이 포함되지 않습니다. IAM 콘솔에서 시각적 편집기를 사용하여 이 정책을 수정할 수 있습니다. 자세한 내용은 IAM 사용 설명서의 [IAM 정책 관리](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage.html)를 참조하세요. 또한 IAM API의 [CreatePolicyVersion](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreatePolicyVersion.html) 작업을 사용하여 이 정책을 업데이트할 수 있습니다.  
이 정책에는 `mobiletargeting` 서비스뿐 아니라 `ses` 및 `sms-voice` 서비스와 상호 작용하도록 허용하는 권한도 포함됩니다. `ses` 및 `sms-voice` 권한을 통해 각각 Amazon Pinpoint 이메일 API 및 Amazon Pinpoint SMS 및 음성 API와 상호 작용할 수 있습니다. `mobiletargeting` 권한은 Amazon Pinpoint API와 상호 작용하도록 허용합니다.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "VisualEditor0",
               "Effect": "Allow",
               "Action": [
                   "mobiletargeting:Update*",
                   "mobiletargeting:Get*",
                   "mobiletargeting:Send*",
                   "mobiletargeting:Put*",
                   "mobiletargeting:Create*"
               ],
               "Resource": [
                   "arn:aws:mobiletargeting:*:123456789012:apps/*",
                   "arn:aws:mobiletargeting:*:123456789012:apps/*/campaigns/*",
                   "arn:aws:mobiletargeting:*:123456789012:apps/*/segments/*"
               ]
           },
           {
               "Sid": "VisualEditor1",
               "Effect": "Allow",
               "Action": [
                   "mobiletargeting:TagResource",
                   "mobiletargeting:PhoneNumberValidate",
                   "mobiletargeting:ListTagsForResource",
                   "mobiletargeting:CreateApp"
               ],
               "Resource": "arn:aws:mobiletargeting:*:123456789012:*"
           },
           {
               "Sid": "VisualEditor2",
               "Effect": "Allow",
               "Action": [
                   "ses:TagResource",
                   "ses:Send*",
                   "ses:Create*",
                   "ses:Get*",
                   "ses:List*",
                   "ses:Put*",
                   "ses:Update*",
                   "sms-voice:SendVoiceMessage",
                   "sms-voice:List*",
                   "sms-voice:Create*",
                   "sms-voice:Get*",
                   "sms-voice:Update*"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

   **다음**을 선택합니다.

1. **정책 이름**에 정책의 이름을 입력합니다(예: **PostmanAccessPolicy**). **정책 생성**을 선택합니다.

1. (선택 사항) **태그 추가**를 선택하여 정책에 태그를 추가할 수 있습니다.

1. **다음: 검토**를 선택합니다.

## IAM 사용자를 생성합니다.
<a name="tutorials-using-postman-iam-user-create-user"></a>

**주의**  
IAM 사용자는 장기 자격 증명을 가지므로 보안 위험이 있습니다. 이 위험을 줄이려면 이러한 사용자에게 작업을 수행하는 데 필요한 권한만 제공하고 더 이상 필요하지 않을 경우 이러한 사용자를 제거하는 것이 좋습니다.

정책을 생성한 후 사용자를 생성하고 정책을 이 사용자에게 연결할 수 있습니다. 사용자를 생성하면 IAM은 Postman이 Amazon Pinpoint API 작업을 실행하도록 허용하는 데 사용할 수 있는 보안 인증 정보 세트를 제공합니다.

**사용자를 생성하려면**

1. IAM 콘솔([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))을 엽니다.

1. IAM 콘솔의 탐색 창에서 **사용자**를 선택한 다음, **사용자 생성**을 선택합니다.

1. **사용자 세부 정보**의 **사용자 이름**에 사용자를 식별하는 이름을 입력합니다(예: **PostmanUser**). 그리고 **다음**을 선택합니다.

1. **권한 설정** 아래의 **권한 옵션**에서 **정책 직접 연결**을 선택합니다.

1. **권한 정책**에서 [IAM 정책 생성](#tutorials-using-postman-iam-user-create-policy)에서 생성한 정책(**PostmanAccessPolicy**)을 선택합니다. 그리고 **다음**을 선택합니다.

1. 선택적으로 **검토 및 생성** 페이지에서 사용자를 식별하는 데 도움이 되는 태그를 추가합니다. 태그 사용에 대한 자세한 내용을 알아보려면 *IAM 사용 설명서*의 [IAM 리소스에 태그 지정](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html)을 참조하세요.

1. 사용자를 생성할 준비가 되면 **사용자 생성**을 선택합니다.

## 액세스 키 생성
<a name="tutorials-using-postman-iam-user-create-key"></a>

**주의**  
이 시나리오에서는 프로그래밍 방식 액세스 권한과 장기 보안 인증이 있는 IAM 사용자가 필요하며 이는 보안 위험을 내포합니다. 이 위험을 줄이려면 이러한 사용자에게 작업을 수행하는 데 필요한 권한만 제공하고 더 이상 필요하지 않을 경우 이러한 사용자를 제거하는 것이 좋습니다. 필요한 경우 액세스 키를 업데이트할 수 있습니다. 자세한 내용은 *IAM 사용 설명서*의 [액세스 키 업데이트](https://docs.aws.amazon.com/IAM/latest/UserGuide/id-credentials-access-keys-update.html)를 참조하세요.

 IAM은 Postman이 Amazon Pinpoint API 작업을 실행하도록 허용하는 데 사용할 수 있는 보안 인증 정보 세트를 제공합니다.

**사용자를 생성하려면**

1. IAM 콘솔([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))을 엽니다.

1. IAM 콘솔의 탐색 창에서 **사용자**를 선택합니다. [IAM 사용자 생성](#tutorials-using-postman-iam-user-create-user)에서 생성한 사용자(**PostmanUser**)를 선택한 다음 **보안 자격 증명** 탭을 선택합니다.

1. **액세스 키** 섹션에서 **액세스 키 생성**을 선택합니다.

1. **액세스 키 모범 사례 및 대안** 페이지에서 ** AWS외부에서 실행 중인 애플리케이션**을 선택합니다.

   그리고 **다음**을 선택합니다.

1. (선택 사항) 정책에 설명 태그를 추가할 수 있습니다.

1. **액세스 키 생성**을 선택합니다.

1. **액세스 키 검색** 페이지에서 **액세스 키** 및 **비밀 액세스 키** 열에 표시되는 보안 인증 정보를 복사합니다.
**참고**  
이 자습서의 후반부에서 액세스 키 ID와 비밀 액세스 키를 모두 제공해야 합니다. 여기서만 비밀 액세스 키를 볼 수 있습니다. 키를 복사하여 안전한 위치에 저장하는 것이 좋습니다.

1. 두 키를 모두 저장한 후 **완료**를 선택합니다.

**다음**: [Postman 설정](tutorials-using-postman-configuration.md)

# Amazon Pinpoint와 함께 사용할 Postman 설정
<a name="tutorials-using-postman-configuration"></a>

Amazon Pinpoint API에 액세스할 수 있는 사용자를 생성했으므로 이제 Postman을 설정할 수 있습니다. 이 단원에서는 Postman에서 하나 이상의 환경을 생성합니다. 다음에는 Amazon Pinpoint API에서 각 작업에 대한 요청 템플릿이 포함된 컬렉션을 가져옵니다.

## Postman 작업 영역 생성
<a name="tutorials-using-postman-configuration-create-workspace"></a>

Postman에서 *워크스페이스*는 프로젝트 및 환경을 위한 조직 컨테이너입니다. 이 단원에서는 Amazon Pinpoint와 함께 사용할 워크스페이스를 하나 이상 생성합니다.

**워크스페이스 생성**

Postman에서 추가 작업을 선택하고 **파일**을 선택한 다음 **새로 만들기**를 선택합니다.

1. **새로 생성** 창에서 **워크스페이스**를 선택합니다.

1. 이름, 요약을 입력하고 표시 여부를 개인용으로 설정합니다. 그런 다음 **워크스페이스 생성**을 선택합니다.

## Postman 환경 생성
<a name="tutorials-using-postman-configuration-create-environments"></a>

Postman에서 *환경*은 키-값 페어로 저장되는 변수 세트입니다. API 요청 자체를 변경할 필요 없이, 환경을 사용하여 Postman을 통해 수행하는 요청의 구성을 변경할 수 있습니다.

이 단원에서는 Amazon Pinpoint에 사용할 환경을 최소 하나 이상 생성합니다. 생성하는 각 환경에는 단일 AWS 리전에서 계정에 특정한 변수 세트가 포함됩니다. 이 단원의 절차를 사용하여 하나 이상의 환경을 생성하면 Postman의 **환경** 메뉴에서 다른 환경을 선택하여 리전을 전환할 수 있습니다.

**환경을 생성하는 방법**

1. Postman에서 추가 작업 메뉴를 선택하고 **파일**을 선택한 다음 **새로 만들기**를 선택합니다.

1. **새로 생성** 창에서 **환경**을 선택합니다.

1. **MANAGE ENVIRONMENTS** 창의 **환경 이름**에 **Amazon Pinpoint - *Region Name***을 입력합니다. *리전 이름*을 다음 값 중 하나로 바꿉니다.
   + 미국 동부(버지니아 북부)
   + 미국 서부(오리건)
   + 아시아 태평양(뭄바이)
   + 아시아 태평양(시드니)
   + 유럽(프랑크푸르트)
   + 유럽(아일랜드)
**참고**  
최소한 단일에 대해 하나의 환경만 생성하면 되며 AWS 리전, 여기에는 하나의 프로젝트가 포함되어야 AWS 리전 합니다. 이전에 나열된 중 하나에서 프로젝트를 생성하지 않은 경우 [ Amazon Pinpoint 사용 설명서의 이메일 지원을 사용하여 Amazon Pinpoint 프로젝트 생성을](https://docs.aws.amazon.com/pinpoint/latest/userguide/channels-email-setup-create.html) AWS 리전참조하세요. *Amazon Pinpoint *

1. `endpoint`, `region`, `serviceName`, `accountId`, `accessKey` 및 `secretAccessKey`라는 6개의 새 변수를 생성합니다. 다음 표를 사용하여 각 변수의 **초기 값** 및 **현재 값** 열에 어떤 값을 입력해야 하는지 결정합니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/pinpoint/latest/userguide/tutorials-using-postman-configuration.html)

   이러한 변수를 생성한 후 **MANAGE ENVIRONMENTS** 창은 다음 이미지에 표시된 예제와 비슷합니다.  
![\[\]](http://docs.aws.amazon.com/ko_kr/pinpoint/latest/userguide/images/Postman_Tutorial_2.1_4.png)

   마쳤으면 **저장**을 선택합니다.
**중요**  
이전의 이미지에 표시된 액세스 키는 가상의 키입니다. IAM 액세스 키를 다른 사람과 공유하지 마세요.  
Postman에는 환경을 공유하고 내보낼 수 있는 기능이 포함되어 있습니다. 이러한 기능을 사용하는 경우 액세스 키 ID와 비밀 액세스 키를 이러한 보안 인증 정보에 액세스해서는 안 되는 사람과 공유하지 않도록 주의하세요.  
자세한 내용은 *IAM 사용 설명서*의 [IAM 모범 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)를 참조하세요.

1. (선택 사항) 생성하려는 각 추가 환경에 대해 1\$14단계를 반복합니다.
**작은 정보**  
Postman에서는 필요한 만큼 환경을 생성할 수 있습니다. 환경을 사용하는 방법은 다음과 같습니다.  
Amazon Pinpoint API를 테스트해야 하는 모든 리전에 대해 각각 별도의 환경을 생성합니다.
다른 AWS 계정과 연결되는 환경을 생성합니다.
다른 사용자와 연결된 보안 인증 정보를 사용하는 환경을 생성합니다.

1. 환경 생성을 완료하면 다음 단원으로 진행하세요.

## Postman에서 Amazon Pinpoint 컬렉션 생성
<a name="tutorials-using-postman-configuration-create-pinpoint-collection"></a>

Postman에서 *컬렉션*은 API 요청 그룹입니다. 컬렉션의 요청은 일반적으로 공통적인 목적에 따라 통합됩니다. 이 단원에서는 Amazon Pinpoint API의 각 작업에 대한 요청 템플릿이 포함된 새 컬렉션을 생성합니다.

**Amazon Pinpoint 컬렉션을 생성하려면**

1. Postman에서 추가 작업 메뉴를 선택하고 **파일**을 선택한 다음 **가져오기**를 선택합니다.

1. **가져오기** 창에서 **링크에서 가져오기**를 선택하고 [https://raw.githubusercontent.com/awsdocs/amazon-pinpoint-developer-guide/master/Amazon%20Pinpoint.postman\$1collection.json](https://raw.githubusercontent.com/awsdocs/amazon-pinpoint-developer-guide/master/Amazon%20Pinpoint.postman_collection.json)이라는 URL을 입력합니다.

   **가져오기**를 선택합니다. Postman은 120개 예제 요청이 포함된 Amazon Pinpoint 컬렉션을 가져옵니다.

## Postman 구성 테스트
<a name="tutorials-using-postman-configuration-test-operation"></a>

Amazon Pinpoint 컬렉션을 가져온 후 빠른 테스트를 수행하여 모든 구성 요소가 제대로 구성되어 있는지 확인하는 것이 좋습니다. `GetApps` 요청을 제출하여 구성을 테스트할 수 있습니다. 이 요청은 현재 AWS 리전의 Amazon Pinpoint 계정에 있는 모든 프로젝트의 목록을 반환합니다. 이 요청에는 추가 구성이 필요하므로 이 요청은 구성을 테스트하는 좋은 방법입니다.

**Amazon Pinpoint 컬렉션의 구성을 테스트하려면**

1. 탐색 창에서 **컬렉션**을 선택하고, **Amazon Pinpoint** 컬렉션을 확장한 다음 **Apps** 폴더를 확장합니다.

1. 요청 목록에서 **GetApps**를 선택합니다.

1. **환경** 선택기를 사용하여 [Postman 환경 생성](#tutorials-using-postman-configuration-create-environments)에서 생성한 환경을 선택합니다.

1. **전송**을 선택합니다. 요청이 성공적으로 전송되면 응답 창에 `200 OK` 상태가 표시됩니다. 다음 이미지의 예제와 비슷한 응답이 보입니다.  
![\[\]](http://docs.aws.amazon.com/ko_kr/pinpoint/latest/userguide/images/Postman_Tutorial_2.3_3.png)
**참고**  
에서 생성된 프로젝트가 없는 경우 AWS 리전 Amazon Pinpoint는를 반환합니다`{ "Item": [] }`.

   이 응답에는 3단계에서 선택한 리전의 계정에 있는 모든 Amazon Pinpoint 프로젝트의 목록이 표시됩니다.

### 문제 해결
<a name="tutorials-using-postman-configuration-test-operation-troubleshooting"></a>

요청을 제출하면 오류를 볼 수 있습니다. 다음 목록에서 발생할 수 있는 여러 가지 일반적인 오류와 이러한 오류를 해결하기 위해 수행할 수 있는 단계를 참조하세요.


| 오류 메시지 | 문제 | 해결 방법 | 
| --- | --- | --- | 
|  응답을 받을 수 없음 https://%7B%7Bendpoint%7D%7D/v1/apps에 연결하는 동안 오류가 발생했습니다.  |  `{{endpoint}}` 변수의 현재 값이 없습니다. 이 값은 환경을 선택할 때 설정됩니다.  | 환경 선택기를 사용하여 환경을 선택합니다. | 
|  요청에 포함된 보안 토큰이 잘못되었습니다.  |  Postman에서 액세스 키 ID 또는 보안 액세스 키의 현재 값을 찾을 수 없습니다.  |  환경 선택기 근처의 기어 아이콘을 선택한 다음 현재 환경을 선택합니다. `accessKey` 및 `secretAccessKey` 값이 **INITIAL VALUE** 및 **CURRENT VALUE** 열에 모두 나타나고, 보안 인증 정보를 올바르게 입력했는지 확인합니다.  | 
|  "Message": "User: arn:aws:iam::123456789012:user/PinpointPostmanUser is not authorized to perform: mobiletargeting:GetApps on resource: arn:aws:mobiletargeting:us-west-2:123456789012:\$1"  |  사용자와 연결된 IAM 정책에 적절한 권한이 포함되어 있지 않습니다.  |  사용자가 [IAM 정책 생성](tutorials-using-postman-iam-user.md#tutorials-using-postman-iam-user-create-policy)에서 설명한 권한을 보유하고 있고 [Postman 작업 영역 생성](#tutorials-using-postman-configuration-create-environments)에서 환경을 생성할 때 올바른 자격 증명을 제공했는지 확인합니다.  | 

**다음**: [추가 요청 전송](tutorials-using-postman-sample-requests.md)

# Amazon Pinpoint API로 요청 전송
<a name="tutorials-using-postman-sample-requests"></a>

Postman 구성 및 테스트가 완료되면 Amazon Pinpoint API로 추가 요청 전송을 시작할 수 있습니다. 이 단원에는 요청 전송을 시작하기 전에 알아야 할 정보가 들어 있습니다. 또한 Amazon Pinpoint 컬렉션을 사용하는 방법을 설명하는 두 개의 샘플 요청도 포함되어 있습니다.

**중요**  
이 단원의 절차를 완료하면 요청을 Amazon Pinpoint API에 제출합니다. 이러한 요청은 Amazon Pinpoint 계정에서 새 리소스 생성, 기존 리소스 수정, 메시지 전송, Amazon Pinpoint 프로젝트의 구성 변경, 기타 Amazon Pinpoint 기능 사용 등의 작업을 수행할 수 있습니다. 이러한 요청을 실행할 때는 주의하세요.

## Amazon Pinpoint Postman 컬렉션의 예제
<a name="tutorials-using-postman-sample-requests-about"></a>

Amazon Pinpoint Postman 컬렉션을 사용하기 전에 이러한 컬렉션에서 대부분의 작업을 구성해야 합니다. `GET` 및 `DELETE` 작업의 경우 일반적으로 **요청 전 스크립트** 탭에서 설정된 변수만 수정하면 됩니다.

**참고**  
[IAM 정책 생성](tutorials-using-postman-iam-user.md#tutorials-using-postman-iam-user-create-policy)에 표시된 IAM 정책을 사용하면 이 컬렉션에 포함된 `DELETE` 요청을 하나도 수행할 수 없습니다.

예를 들어 `GetCampaign` 작업을 수행하려면 `projectId`와 `campaignId`를 지정해야 합니다. **요청 전 스크립트** 탭에 이러한 변수가 모두 있으며 예제 값으로 채워져 있습니다. 예제 값을 삭제하고 Amazon Pinpoint 프로젝트 및 캠페인에 적절한 값으로 바꿉니다.

이러한 변수 중에서 가장 일반적으로 사용되는 변수가 `projectId` 변수입니다. 이 변수의 값은 요청이 적용되는 프로젝트의 고유 식별자여야 합니다. 프로젝트에 대한 이러한 식별자 목록을 보려면 이 자습서의 이전 단계에서 보낸 `GetApps` 요청에 대한 응답을 참조하세요. 이 응답에서 `Id` 필드는 프로젝트의 고유 식별자를 제공합니다. `GetApps` 작동 및 응답 내 각 필드의 의미에 대해 자세히 알아보려면 *Amazon Pinpoint API 참조*의 [앱](https://docs.aws.amazon.com/pinpoint/latest/apireference/apps.html)을 참조하세요.

**참고**  
Amazon Pinpoint에서 ‘프로젝트’는 ‘앱’ 또는 ‘애플리케이션’과 동일합니다.

또한 `POST` 및 `PUT` 작업의 경우 API에 전송하려는 값을 포함하도록 요청도 수정해야 합니다. 예를 들어 `CreateApp` 요청(`POST` 요청)을 제출할 때, 생성하는 프로젝트의 이름을 지정해야 합니다. **본문** 탭에서 요청을 수정할 수 있습니다. 이 예제에서는 `"Name"` 옆의 값을 프로젝트 이름으로 바꿉니다. 태그를 프로젝트에 추가하려는 경우 `tags` 객체에서 태그를 지정할 수 있습니다. 또는 태그를 추가하지 않으려는 경우 전체 `tags` 객체를 삭제할 수 있습니다.

**참고**  
`UntagResource` 작업을 수행하려면 URL 파라미터도 지정해야 합니다. **파라미터** 탭에서 이러한 파라미터를 지정할 수 있습니다. **VALUE** 열의 값을 지정된 리소스에 대해 삭제하려는 태그로 바꿉니다.

## 예제 요청: `CreateApp` 작업을 사용하여 프로젝트 생성
<a name="tutorials-using-postman-sample-requests-createapp"></a>

Amazon Pinpoint에서 세그먼트와 캠페인을 생성하기 전에 먼저 프로젝트를 생성해야 합니다. Amazon Pinpoint에서 *프로젝트*는 공통 목적으로 통합된 세그먼트, 캠페인, 구성 및 데이터로 구성되어 있습니다. 예를 들어 프로젝트를 사용하여 특정 앱이나 특정 브랜드 또는 마케팅 이니셔티브와 관련된 모든 콘텐츠를 포함시킬 수 있습니다. Amazon Pinpoint에 고객 정보를 추가하면 해당 정보가 프로젝트와 연결됩니다.

**CreateApp API 요청을 전송하여 프로젝트를 생성하려면**

1. **환경** 메뉴에서 프로젝트를 생성할 AWS 리전 를 선택합니다.  
![\[\]](http://docs.aws.amazon.com/ko_kr/pinpoint/latest/userguide/images/Postman_Tutorial_Environments.png)

    이 예제에서는 **환경** 메뉴에 다음 네 가지 옵션이 표시되도록 Postman이 구성되었습니다.
   + 미국 동부(버지니아 북부)
   + 미국 서부(오리건)
   + 유럽(프랑크푸르트)
   + 유럽(아일랜드)

1. **Apps** 폴더에서 **CreateApp** 작업을 선택합니다.  
![\[\]](http://docs.aws.amazon.com/ko_kr/pinpoint/latest/userguide/images/Postman_Tutorial_3.2_2.png)

   Amazon Pinpoint Postman 컬렉션의 **Apps** 폴더가 확장되어 다음과 같은 요청이 표시됩니다.
   + `GetApp`
   + `GetApps`
   + `CreateApp`
   + `DeleteApp`

1. **본문** 탭의 `"Name"` 옆에서 자리 표시자 값(`"string"`)을 캠페인 이름(예: **"MySampleProject"**)으로 바꿉니다.

1. 캠페인 이름 뒤의 쉼표를 삭제한 다음 3행부터 5행까지 전체 `tags` 객체를 삭제합니다 완료되면 요청은 다음 이미지에 표시된 코드 조각과 비슷하게 됩니다.

   ```
   {
       "Name": "MySampleProject"
   }
   ```

   Postman은 요청을 원시 JSON 페이로드로 전송하도록 구성됩니다.

1. **전송**를 선택합니다. 캠페인이 성공적으로 생성되면 응답 창에 `201 Created` 상태가 표시됩니다.

   ```
   {
       "Name": "MySampleProject"
       "Id": "12345678901234567890123456789012",
       "Arn": "arn:aws:mobiletargeting:us-east-1:123456789012:apps/12345678901234567890123456789012",
       "tags": {}
   }
   ```

## 예제: `SendMessages` 작업을 사용하여 이메일 전송
<a name="tutorials-using-postman-sample-requests-sendmessages"></a>

Amazon Pinpoint `SendMessages` API를 사용하여 트랜잭션 메시지를 전송하는 것은 매우 일반적입니다. `SendMessages` API를 사용하여 메시지를 전송하는 장점(캠페인 생성과 비교 시) 중 하나는 메시지를 어떤 주소로든(예: 이메일 주소, 전화 번호 또는 디바이스 토큰) 전송할 수 있다는 것입니다. 메시지를 보내는 주소가 Amazon Pinpoint 계정에 이미 존재할 필요는 없습니다 이 방법을 캠페인을 생성하여 메시지를 전송하는 방법과 비교해 보겠습니다 Amazon Pinpoint에서 캠페인을 보내려면 먼저 Amazon Pinpoint 계정에 엔드포인트를 추가하고, 세그먼트를 생성하고, 캠페인을 생성하고, 캠페인을 실행해야 합니다.

이 단원의 예제에서는 특정 이메일 주소로 트랜잭션 이메일 메시지를 직접 전송하는 방법을 보여 줍니다. SMS, 모바일 푸시 또는 음성과 같은 다른 채널을 통해 메시지를 전송하도록 이 요청을 수정할 수 있습니다.

**SendMessages 요청을 전송하여 이메일 메시지를 전송하려면**

1. 프로젝트에 이메일 채널이 활성화되어 있고 메시지를 보내고 받는 데 사용할 이메일 주소 또는 도메인이 구성되어 있는지 확인하세요. 자세한 내용은 *Amazon Pinpoint 사용 설명서*의 [이메일 채널 활성화 및 비활성화](pinpoint/latest/userguide/channels-email-setup.html) 및 [이메일 ID 확인](https://docs.aws.amazon.com/pinpoint/latest/userguide/channels-email-manage-verify.html)을 참조하세요.
**참고**  
이 단원의 절차를 완료하려면 이메일 주소를 확인해야 합니다.

1. **환경** 메뉴에서 메시지를 보낼 AWS 리전 를 선택합니다.

   이 예제에서는 **환경** 메뉴에 다음 네 가지 옵션이 표시되도록 Postman이 구성되었습니다.
   + 미국 동부(버지니아 북부)
   + 미국 서부(오리건)
   + 유럽(프랑크푸르트)
   + 유럽(아일랜드)

1. **메시지** 폴더에서 **SendMessages** 작업을 선택합니다.  
![\[\]](http://docs.aws.amazon.com/ko_kr/pinpoint/latest/userguide/images/Postman_Tutorial_3.3_3.png)

1. **요청 전 스크립트** 탭에서 `projectId` 변수의 값을 이 단원의 2단계에서 선택한 리전에 이미 있는 프로젝트의 ID로 바꿉니다.

1. **본문** 탭에서 요청 편집기에 표시된 예제 요청을 삭제합니다. 다음 코드를 붙여넣습니다.

   ```
   {
       "MessageConfiguration":{
           "EmailMessage":{
               "FromAddress":"sender@example.com",
               "SimpleEmail":{
                   "Subject":{
                       "Data":"Sample Amazon Pinpoint message"
                   },
                   "HtmlPart":{
                       "Data":"<h1>Test message</h1><p>This is a sample message sent from <a href=\"https://aws.amazon.com/pinpoint\">Amazon Pinpoint</a> using the SendMessages API.</p>"
                   },
                   "TextPart":{
                       "Data":"This is a sample message sent from Amazon Pinpoint using the SendMessages API."
                   }
               }
           }
       },
       "Addresses":{
           "recipient@example.com": {
               "ChannelType": "EMAIL"
           }
       }
   }
   ```

1. 이전의 코드에서 *sender@example.com*을 자신의 확인된 이메일 주소로 바꿉니다. *recipient@example.com*을 메시지를 전송하려는 확인된 이메일 주소로 바꿉니다.
**참고**  
계정이 여전히 Amazon Pinpoint 이메일 샌드박스에 있는 경우 Amazon Pinpoint 계정에서 확인된 이메일 주소 또는 도메인으로만 이메일을 전송할 수 있습니다. 샌드박스에서 계정을 제거하는 방법에 대한 자세한 내용은 *Amazon Pinpoint 사용 설명서*의 [이메일에 대한 프로덕션 액세스 요청](https://docs.aws.amazon.com/pinpoint/latest/userguide/channels-email-setup-production-access.html)을 참조하세요.

1. **전송**를 선택합니다. 메시지가 성공적으로 전송되면 응답 창에 `200 OK` 상태가 표시됩니다.

   ```
   {
       "ApplicationId": "12345678901234567890123456789012",
       "RequestId": "<sampleValue>",
       "Result": {
           "recipient@example.com": {
               "DeliveryStatus": "SUCCESSFUL",
               "StatusCode": 200,
               "StatusMessage": "<sampleValue>",
               "MessageId": "<sampleValue>"
           }
       }
   }
   ```

# Amazon Pinpoint에서 SMS 등록 시스템 설정
<a name="tutorials-two-way-sms"></a>

SMS 메시지(텍스트 메시지)는 Amazon Pinpoint를 사용하여 시간에 민감한 메시지를 고객에게 보내는 유용한 방법입니다. 많은 사람이 항상 휴대전화를 가까이 두고 있고 SMS 메시지는 푸시 알림, 이메일 또는 전화 통화보다 사람들의 주의를 더 많이 사로잡는 경향이 있습니다.

고객의 휴대폰 번호를 캡처하는 일반적인 방식은 웹 기반 양식을 사용하는 것입니다. 고객의 전화 번호를 확인하고 구독을 확인한 후 해당 고객에게 프로모션, 트랜잭션 및 정보 SMS 메시지 전송을 시작할 수 있습니다.

이 자습서에서는 고객의 연락처 정보를 캡처하도록 웹 양식을 설정하는 방법을 보여줍니다. 웹 양식은 이 정보를 Amazon Pinpoint에 전송합니다. 다음에 Amazon Pinpoint는 전화 번호가 유효한지 확인하고 전화 번호와 관련된 기타 메타데이터를 캡처합니다. 그런 다음, Amazon Pinpoint는 고객에게 구독을 확인하도록 요청하는 메시지를 전송합니다. 고객이 구독을 확인한 후 Amazon Pinpoint는 고객을 메시지 수신에 옵트인합니다.

다음 아키텍처 다이어그램은 이 솔루션의 데이터 흐름을 보여 줍니다.

![\[\]](http://docs.aws.amazon.com/ko_kr/pinpoint/latest/userguide/images/SMS_Reg_Tutorial_Architecture.png)


## 이중 옵트인 정보
<a name="tutorials-two-way-sms-double-opt-in"></a>

이 자습서에서는 Amazon Pinpoint에서 양방향 SMS 메시징을 사용하는 이중 옵트인 시스템을 설정하는 방법을 보여 줍니다.

SMS 이중 옵트인 시스템에서 고객은 양식에서 또는 앱 안에서 제출하여 전화 번호를 제공합니다. 고객의 요청을 수신하면 Amazon Pinpoint에서 새 엔드포인트를 생성합니다. 새 엔드포인트는 통신에서 옵트아웃된 상태여야 합니다. 다음에는 해당 전화 번호에 메시지를 전송합니다. 메시지에서 수신자에게 특정 단어나 어구(예: “예” 또는 “확인”)로 회신하여 구독을 확인하도록 요청합니다. 고객이 지정한 단어나 어구로 메시지에 응답하면 엔드포인트 상태를 옵트인으로 변경합니다. 그렇지 않은 경우 고객이 응답하지 않거나 다른 단어나 어구로 회신하면 엔드포인트를 옵트아웃 상태로 그대로 둡니다.

## 이 솔루션 소개
<a name="tutorials-two-way-sms-about"></a>

이 단원에는 이 자습서에서 구축하는 솔루션에 대한 정보가 나와 있습니다.

**수강 대상**  
이 자습서는 개발자와 시스템 구현자 대상 그룹을 위해 계획되었습니다. Amazon Pinpoint에 익숙하지 않아도 이 자습서의 단계를 완료할 수 있습니다. 하지만 IAM 정책 관리, Node.js에서 Lambda 함수 생성 및 웹 콘텐츠 배포에 익숙해야 합니다.

**사용된 기능**  
이 자습서에는 다음과 같은 Amazon Pinpoint 기능에 대한 사용 예제가 포함되어 있습니다.
+ 트랜잭션 SMS 메시지 전송
+ 전화 번호 확인을 사용하여 전화 번호에 대한 정보 획득
+ 양방향 SMS 메시징을 사용하여 수신 SMS 메시지 수신
+ 동적 세그먼트 생성
+ 캠페인 생성
+ 를 사용하여 Amazon Pinpoint API와 상호 작용 AWS Lambda

**필요 시간**  
이 자습서를 완료하려면 약 1시간 정도 걸립니다. 이 솔루션을 구현한 후 고유한 사용 사례에 맞게 솔루션을 다듬기 위해 수행할 수 있는 추가 단계가 있습니다.

**지역별 제한**  
이 자습서에서는 Amazon Pinpoint 콘솔을 사용하여 긴 코드를 임대해야 합니다. Amazon Pinpoint 콘솔을 사용하여 여러 국가에 기반을 둔 전용 긴 코드를 임대할 수 있습니다. 하지만 SMS 메시지를 전송하려면 캐나다에 기반을 둔 긴 코드만 사용할 수 있습니다. (다른 국가 및 리전에 기반을 둔 긴 코드를 사용하여 음성 메시지를 전송할 수 있습니다.)

이 자습서에서는 이 제한을 염두에 두고 코드 예제를 개발했습니다. 예를 들어, 코드 예제에서는 수신자의 전화 번호가 10자리이며 국가 코드가 1이라고 가정합니다. 미국 또는 캐나다 이외의 다른 국가나 리전에서 솔루션을 구현하는 경우 코드 예제를 적절하게 수정해야 합니다.

**리소스 사용 비용**  
 AWS 계정 생성에는 요금이 부과되지 않습니다. 하지만 이 솔루션을 구현하면 다음 비용이 발생할 수 있습니다.
+ **긴 코드 임대 비용** - 이 자습서를 완료하려면 긴 코드를 임대해야 합니다. 캐나다에 기반을 둔 긴 코드는 월 1.00 USD입니다.
+ **전화번호 확인 사용** - 이 자습서의 솔루션은 Amazon Pinpoint의 전화번호 확인 기능을 사용하여 수신하는 각 번호가 유효하며 적절한 형식이 지정되는지 확인하고 전화 번호에 대한 추가 정보를 획득합니다. 각 전화 번호 확인 요청에 대해 0.006 USD를 지불합니다.
+ **메시지 전송 비용** - 이 자습서의 솔루션은 아웃바운드 SMS 메시지를 전송합니다. Amazon Pinpoint를 통해 전송하는 각 메시지에 대해 요금을 지불합니다. 각 메시지에 대해 지불하는 가격은 수신자의 국가 또는 리전에 따라 다릅니다. 미국(미국령 지역 제외)의 수신자에게 메시지를 전송하는 경우 메시지당 0.00645 USD를 지불합니다. 캐나다의 수신자에게 메시지를 전송하는 경우 수신자의 통신사 및 위치에 따라 0.00109\$10.02 USD를 지불합니다.
+ **메시지 수신 비용** - 이 솔루션은 수신 SMS 메시지도 수신하고 처리합니다. Amazon Pinpoint 계정과 연결된 전화 번호로 전송되는 각 수신 메시지에 대해 요금을 지불합니다. 지불하는 가격은 수신 전화 번호가 기반을 두고 있는 위치에 따라 다릅니다. 수신 메시지가 미국(미국령 지역 제외)에 기반을 두고 있는 경우 수신 메시지당 0.0075 USD를 지불합니다. 캐나다에 기반을 두고 있는 경우 수신 메시지당 0.00155 USD를 지불합니다.
+ **Lambda 사용** - 이 솔루션에서는 Amazon Pinpoint API와 상호 작용하는 두 가지 Lambda 함수를 사용합니다. Lambda 함수를 호출하면 함수에 대한 요청 수, 함수가 코드를 실행하는 데 걸리는 시간, 함수에 사용되는 메모리 양에 따라 요금이 청구됩니다. 이 솔루션의 함수는 매우 적은 메모리를 사용하며 일반적으로 1\$13초 동안 실행됩니다. 이 솔루션의 일부 또는 전체 사용량은 Lambda 프리 티어 사용량에 속할 수 있습니다. 자세한 내용은 [Lambda 요금](https://aws.amazon.com/lambda/pricing/)을 참조하세요.
+ **API Gateway 사용** - 이 솔루션의 웹 양식은 API Gateway에서 관리되는 API를 호출합니다. API Gateway를 호출할 때마다 Amazon Pinpoint를 사용하는 AWS 리전에 따라 3.50\$13.70 USD를 지불합니다. 자세한 내용은 [API Gateway 요금](https://aws.amazon.com/api-gateway/pricing/)을 참조하세요.
+ **웹 호스팅 비용** - 이 솔루션에는 웹 사이트에 호스팅해야 하는 웹 기반 양식이 포함되어 있습니다. 이 콘텐츠를 호스팅하기 위해 지불하는 가격은 웹 호스팅 공급업체에 따라 다릅니다.

**참고**  
이 목록에 표시된 모든 가격은 미국 달러(USD)입니다.

**다음**: [사전 조건](tutorials-two-way-sms-prereqs.md)

# Amazon Pinpoint에서 SMS를 설정하기 위한 사전 조건
<a name="tutorials-two-way-sms-prereqs"></a>

이 자습서를 시작하기 전에 다음 사전 조건을 완료해야 합니다.
+ AWS 계정이 있어야 합니다. AWS 계정을 만들려면 [https://console.aws.amazon.com/](https://console.aws.amazon.com/)으로 이동하여 **새 AWS 계정 생성**을 선택합니다.
+ AWS Management Console에 로그인하는 데 사용하는 계정은 다음 작업을 수행할 수 있어야 합니다.
  + 새 IAM 정책 및 역할 생성
  + 새 Amazon Pinpoint 프로젝트 생성
  + 새 Lambda 함수 생성
  + API Gateway에서 새 API 생성
+ 웹 페이지를 호스팅하고 게시하는 메서드가 있어야 합니다. AWS 서비스를 사용하여 웹 페이지를 호스팅할 수 있지만 필수는 아닙니다.
**작은 정보**  
AWS 서비스를 사용하여 웹 페이지를 호스팅하는 방법에 대해 자세히 알아보려면 [정적 웹 사이트 호스팅](https://aws.amazon.com/getting-started/hands-on/host-static-website/)을 참조하세요.

**다음**: [Amazon Pinpoint 설정](tutorials-two-way-sms-part-1.md)

# Amazon Pinpoint에서 SMS 설정
<a name="tutorials-two-way-sms-part-1"></a>

SMS 메시지를 설정하려면 Amazon Pinpoint 프로젝트가 필요합니다. 이 섹션에서는 다음 작업을 수행합니다.
+ Amazon Pinpoint 프로젝트 생성
+ SMS 채널 활성화 및 전화번호 임대
+ 양방향 SMS 메시징 구성

시작하기 전에 [사전 조건](tutorials-two-way-sms-prereqs.md)을 검토합니다.

## Amazon Pinpoint 프로젝트 생성
<a name="tutorials-two-way-sms-part-1-create-project"></a>

시작하려면 Amazon Pinpoint 프로젝트를 생성해야 합니다. Amazon Pinpoint에서 *프로젝트*는 공통 목적으로 통합된 세그먼트, 캠페인, 구성 및 데이터로 구성되어 있습니다. 예를 들어 프로젝트를 사용하여 특정 앱이나 특정 브랜드 또는 마케팅 이니셔티브와 관련된 모든 콘텐츠를 포함시킬 수 있습니다. Amazon Pinpoint에 고객 정보를 추가하면 해당 정보가 프로젝트와 연결됩니다.

새 프로젝트를 생성하는 데 관련된 단계는 이전에 Amazon Pinpoint에서 프로젝트를 생성했는지 여부에 따라 다릅니다.

### 프로젝트 생성(신규 Amazon Pinpoint 사용자)
<a name="tutorials-two-way-sms-part-1-create-project-opt-1"></a>

이 단계에서는 현재 AWS 리전에서 프로젝트를 생성한 적이 없는 경우 새 Amazon Pinpoint 프로젝트를 생성하는 프로세스를 설명합니다.

**프로젝트를 생성하려면**

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/pinpoint/](https://console.aws.amazon.com/pinpoint/) Amazon Pinpoint 콘솔을 엽니다.

1. 다음 이미지와 같이 리전 선택기를 사용하여 사용할 AWS 리전을 선택합니다. 잘 모르는 경우 가장 가까운 리전을 선택합니다.  
![\[미국 동부(버지니아 북부)가 선택된 리전 드롭다운입니다.\]](http://docs.aws.amazon.com/ko_kr/pinpoint/latest/userguide/images/Region_Selector.png)

1. **시작하기** 아래의 **이름**에 캠페인의 이름(예: **SMSRegistration**)을 입력한 다음 **프로젝트 생성**을 선택합니다.

1. **기능 구성** 페이지에서 **이 단계 건너뛰기**를 선택합니다.

1. 탐색 창에서 **모든 프로젝트**를 선택합니다.

1. **모든 프로젝트** 페이지에서 방금 생성한 프로젝트 옆에 **프로젝트 ID** 열에 표시된 값을 복사합니다.
**작은 정보**  
이 자습서의 여러 위치에서 이 ID를 사용해야 합니다. 나중에 복사할 수 있도록 프로젝트 ID를 편리한 위치에 보관하세요.

### 프로젝트 생성(기존 Amazon Pinpoint 사용자)
<a name="tutorials-two-way-sms-part-1-create-project-opt-2"></a>

이 단계에서는 현재 AWS 리전에서 프로젝트를 이미 생성한 경우 새 Amazon Pinpoint 프로젝트를 생성하는 프로세스를 설명합니다.

**프로젝트를 생성하려면**

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/pinpoint/](https://console.aws.amazon.com/pinpoint/) Amazon Pinpoint 콘솔을 엽니다.

1. 다음 이미지와 같이 리전 선택기를 사용하여 사용할 AWS 리전을 선택합니다. 잘 모르는 경우 가장 가까운 리전을 선택합니다.  
![\[미국 동부(버지니아 북부)가 선택된 리전 드롭다운입니다.\]](http://docs.aws.amazon.com/ko_kr/pinpoint/latest/userguide/images/Region_Selector.png)

1. **모든 프로젝트** 페이지에서 **프로젝트 생성**를 선택합니다.

1. **프로젝트 생성** 창의 **프로젝트 이름**에 프로젝트의 이름(예: **SMSRegistration**)을 입력합니다. **생성(Create)**을 선택합니다.

1. **기능 구성** 페이지에서 **이 단계 건너뛰기**를 선택합니다.

1. 탐색 창에서 **모든 프로젝트**를 선택합니다.

1. **모든 프로젝트** 페이지에서 방금 생성한 프로젝트 옆에 **프로젝트 ID** 열에 표시된 값을 복사합니다.
**작은 정보**  
이 자습서의 여러 위치에서 이 ID를 사용해야 합니다. 나중에 복사할 수 있도록 프로젝트 ID를 편리한 위치에 보관하세요.

## 전용 전화번호 획득
<a name="tutorials-two-way-sms-part-1-set-up-channel"></a>

**참고**  
Amazon Pinpoint는 사용 설명서 문서를 업데이트했습니다. SMS 및 음성 리소스를 생성, 구성 및 관리하는 방법에 대한 최신 정보는 새로운 [AWS End User Messaging SMS 사용 안내서](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html)를 참조하세요.

프로젝트를 생성한 후 해당 프로젝트 내의 기능 구성을 시작할 수 있습니다. 이 단원에서는 SMS 채널을 활성화하고, SMS 메시지를 전송할 때 사용할 전용 전화번호를 획득합니다.

**참고**  
여기서는 브랜드 및 캠페인 등록 후 미국 10DLC 전화번호, 미국 수신자 부담 전화번호 또는 캐나다 긴 코드를 임대하는 것으로 가정합니다. 이 단원의 절차를 따르지만 미국 또는 캐나다 이외의 다른 국가를 선택하면 해당 번호를 사용하여 SMS 메시지를 전송할 수 없습니다. 미국 또는 캐나다 이외의 국가에서 SMS가 가능한 긴 코드를 임대하는 방법에 대한 자세한 내용은 *AWS End User Messaging SMS 사용 설명서*의 [지원되는 국가 및 리전(SMS 채널)](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html) 섹션을 참조하세요.

Amazon Pinpoint 콘솔을 사용하여 SMS 채널을 활성화하려면 다음 단계를 따르십시오.

**SMS 채널 활성화**

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/pinpoint/](https://console.aws.amazon.com/pinpoint/) Amazon Pinpoint 콘솔을 엽니다.

1. 탐색 창의 **설정**에서 **SMS 및 음성**을 선택합니다.

1. **SMS 설정** 옆의 **편집**을 선택합니다.

1. **일반 설정**아래에서 **이 프로젝트에 대한 SMS 채널 활성화**를 선택한 다음 **변경 내용 저장**을 선택합니다.

 AWS End User Messaging SMS 콘솔을 사용하여 전화번호를 요청하려면 다음 단계를 따르세요.

**전화번호 요청(콘솔)**

1. [https://console.aws.amazon.com/sms-voice/](https://console.aws.amazon.com/sms-voice/) AWS End User Messaging SMS 콘솔을 엽니다.
**참고**  
Amazon Pinpoint 프로젝트를 생성한 AWS 리전 것과 동일한에서 전화번호를 요청해야 합니다.

1. 탐색 창의 **구성**에서 **전화번호**를 선택한 다음 **발신자 요청**을 선택합니다.

1. **메시지 대상 국가**의 **국가 선택** 페이지에서 미국 또는 캐나다를 선택합니다. **다음**을 선택합니다.

1. **메시징 사용 사례** 섹션에서 다음을 수행합니다.
   + **번호 기능**에서 **SMS**를 선택합니다.
**중요**  
전화번호를 구매한 후에는 SMS 및 음성 기능을 변경할 수 없습니다.
   + **양방향 메시징**에서 **예**를 선택합니다.

1. **다음**을 선택합니다.

1. **발신자 유형 선택**에서 **긴 코드** 또는 **10DLC**를 선택합니다.

   10DLC를 선택하고 이미 등록된 캠페인이 있는 경우 **등록된 캠페인에 연결**에서 캠페인을 선택할 수 있습니다.

1. **다음**을 선택합니다.

1. **검토 및 요청**에서 제출 전에 요청을 확인하고 편집할 수 있습니다. **요청**을 선택합니다.

1. 요청한 전화번호 유형에 따라 **등록 필요** 창이 나타날 수 있습니다. 전화번호는 이 등록과 연결되어 있으며 등록이 승인되기 전까지는 메시지를 보낼 수 없습니다. 등록 요건에 대한 자세한 내용은 [등록](https://docs.aws.amazon.com/sms-voice/latest/userguide/registrations.html) 섹션을 참조하십시오.

   1. **등록 양식 이름**에는 친숙한 이름을 입력하십시오.

   1. **등록 시작**을 선택하여 전화번호 등록을 완료하거나 **나중에 등록**을 선택하십시오.
**중요**  
등록이 승인되기 전까지는 전화번호로 메시지를 보낼 수 없습니다.  
 등록 상태와 관계없이 전화번호에 대한 월 임대료는 계속 청구됩니다. 등록 요건에 대한 자세한 내용은 [등록](https://docs.aws.amazon.com/sms-voice/latest/userguide/registrations.html) 섹션을 참조하십시오.

## 양방향 SMS 활성화
<a name="tutorials-two-way-sms-part-1-enable-two-way"></a>

이제 전용 전화 번호가 있으므로 양방향 SMS를 설정할 수 있습니다. 양방향 SMS를 활성화하면 전송하는 SMS 메시지에 고객이 응답할 수 있습니다. 이 솔루션에서는 양방향 SMS를 사용하여 고객에게 SMS 프로그램을 구독할지 확인하는 방법을 제공합니다.

 AWS End User Messaging SMS 콘솔을 사용하여 양방향 SMS를 활성화하려면 다음 단계를 따르세요.

**양방향 SMS 활성화**

1. [https://console.aws.amazon.com/sms-voice/](https://console.aws.amazon.com/sms-voice/) AWS End User Messaging SMS 콘솔을 엽니다.

1. 탐색 창의 **구성**에서 **전화번호**를 선택합니다.

1. **전화번호** 페이지에서 전화번호를 선택합니다.

1. **양방향 SMS** 탭에서 **설정 편집** 버튼을 선택합니다.

1. **설정 편집** 페이지에서 **양방향 메시지 활성화**를 선택합니다.

1. **대상 유형**에서 **Amazon SNS**를 선택합니다.
   + **새 Amazon SNS 주제** - AWS End User Messaging SMS는 계정에 주제를 생성합니다. 주제는 필요한 모든 권한을 포함하여 자동으로 생성됩니다. Amazon SNS 주제에 대한 자세한 내용은 *Amazon SNS 개발자 안내서*의 [Amazon SNS 구성](https://docs.aws.amazon.com/sns/latest/dg/sns-configuring.html) 섹션을 참조하십시오.
   + **수신 메시지 대상**에 주제 이름(예: **SMSRegistrationFormTopic**)을 입력합니다.

1. **양방향 채널 역할**에서 **SNS 주제 정책 사용**을 선택합니다.

1. **변경 사항 저장**을 선택합니다.

 AWS End User Messaging SMS 콘솔을 사용하여 고객이 구독을 확인하기 위해 보내는 키워드를 전화번호에 추가합니다(예: **Yes** 또는 **Confirm**).

**키워드 추가**

1. [https://console.aws.amazon.com/sms-voice/](https://console.aws.amazon.com/sms-voice/) AWS End User Messaging SMS 콘솔을 엽니다.

1. 탐색 창의 **구성**에서 **전화번호**를 선택합니다.

1. **전화번호** 페이지에서 키워드를 추가할 전화번호를 선택합니다.

1. **키워드** 탭에서 **키워드 추가** 버튼을 선택합니다.

1. **사용자 지정 키워드** 창에 다음을 추가합니다.
   + **키워드** - 추가할 새 키워드(예: **Yes** 또는 **Confirm**).
   + **응답 메시지** - 수신자에게 다시 보낼 메시지.
   + **키워드 작업** - 키워드를 수신했을 때 수행할 작업. **자동 응답**을 선택합니다.

1. **키워드 추가**를 선택합니다.

**다음**: [IAM 정책 및 역할 생성](tutorials-two-way-sms-part-2.md)

# Amazon Pinpoint에서 SMS와 함께 사용할 IAM 정책 및 역할 생성
<a name="tutorials-two-way-sms-part-2"></a>

Amazon Pinpoint에서 SMS 등록 솔루션을 구현하는 다음 단계는 AWS Identity and Access Management (IAM)에서 정책과 역할을 구성하는 것입니다. 이 솔루션의 경우 Amazon Pinpoint와 관련된 특정 리소스에 대한 액세스를 제공하는 정책을 생성해야 합니다. 그런 다음 역할을 생성하고 정책을 이 역할에 연결합니다. 이 자습서의 뒷부분에서는이 역할을 사용하여 Amazon Pinpoint API에서 특정 작업을 호출하는 AWS Lambda 함수를 생성합니다.

## IAM 정책 생성
<a name="tutorials-two-way-sms-part-2-create-policy"></a>

이 단원에서는 IAM 정책을 생성하는 방법을 보여 줍니다. 이 정책을 사용하는 사용자와 역할은 다음을 수행할 수 있습니다.
+ 전화 번호 확인 기능 사용
+ Amazon Pinpoint 엔드포인트 보기, 생성 및 업데이트
+ Amazon Pinpoint 엔드포인트로 메시지 전송

이 자습서에서는 Lambda에 이러한 작업을 수행할 수 있는 권한을 부여합니다. 하지만 보안을 강화하기 위해 이 정책은 *최소 권한*을 부여하는 원칙을 사용합니다. 다시 말해서 이 정책은 이 솔루션을 완료하는 데 필요한 권한만 부여하고 더 이상의 권한은 부여하지 않습니다. 이 정책은 다음과 같은 방식으로 제한됩니다.
+ 이 정책을 사용하여 특정 리전에서 전화 번호 확인 API만 호출할 수 있습니다.
+ 이 정책을 사용하여 특정 Amazon Pinpoint 프로젝트와 연결된 엔드포인트만 보거나 생성하거나 업데이트할 수 있습니다.
+ 이 정책을 사용하여 특정 Amazon Pinpoint 프로젝트와 연결된 엔드포인트에만 메시지를 전송할 수 있습니다.

**정책 생성**

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) IAM 콘솔을 엽니다.

1. 탐색 창에서 **정책**을 선택한 후 **정책 생성**을 선택합니다.

1. **JSON** 탭에 다음 정책을 붙여 넣습니다.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "logs:CreateLogStream",
                   "logs:PutLogEvents",
                   "logs:CreateLogGroup"
               ],
               "Resource": "arn:aws:logs:*:*:*"
           },
           {
               "Effect": "Allow",
               "Action": "mobiletargeting:SendMessages",
               "Resource": "arn:aws:mobiletargeting:us-east-1:111122223333:apps/projectId/*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "mobiletargeting:GetEndpoint",
                   "mobiletargeting:UpdateEndpoint",
                   "mobiletargeting:PutEvents"
               ],
               "Resource": "arn:aws:mobiletargeting:us-east-1:111122223333:apps/projectId/endpoints/*"
           },
           {
               "Effect": "Allow",
               "Action": "mobiletargeting:PhoneNumberValidate",
               "Resource": "arn:aws:mobiletargeting:us-east-1:111122223333:phone/number/validate"
           }
       ]
   }
   ```

------

   이전 예제에서 다음을 수행합니다.
   + *region*을 `us-east-1` 또는와 같이 Amazon Pinpoint를 사용하는 AWS 리전으로 바꿉니다`eu-central-1`.
**작은 정보**  
Amazon Pinpoint를 사용할 수 있는 전체 AWS 리전 목록은의 [AWS 리전 및 엔드포인트](https://docs.aws.amazon.com/general/latest/gr/rande.html#pinpoint_region)를 참조하세요*AWS 일반 참조*.
   + *accountId*를 AWS 계정의 고유 ID로 바꿉니다.
   + *projectId*를 이 자습서의 [Amazon Pinpoint 프로젝트 생성](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-create-project)에서 생성한 프로젝트의 고유한 ID로 바꿉니다.
**참고**  
`logs` 작업은 Lambda가 출력을 CloudWatch Logs에 로그하도록 허용합니다.

1. **다음**을 선택합니다.

1. **정책 이름**에 정책의 이름을 입력합니다(예: **RegistrationFormPolicy**). **정책 생성**을 선택합니다.

## IAM 역할 생성
<a name="tutorials-two-way-sms-part-2-create-role"></a>

**역할 생성**

1. IAM 콘솔([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))을 엽니다.

1. IAM 콘솔의 탐색 창에서 **역할**을 선택한 후 **역할 생성**을 선택합니다.

1. **신뢰할 수 있는 엔터티 유형**에서 **AWS 서비스**를 선택한 다음 **서비스 또는 사용자 사례**에서는 드롭다운 목록에서 **Lambda**를 선택합니다.

1. **다음**을 선택합니다.

1. **권한 정책**에서 이전 섹션에서 생성한 정책을 선택한 후 **다음**을 선택합니다.

1. **역할 세부 정보**에서 **역할 이름**에 대해 역할의 이름(예: **SMSRegistrationForm**)을 입력합니다. **역할 생성**을 선택합니다.

**다음**: [Lambda 함수 생성](tutorials-two-way-sms-part-3.md)

# Amazon Pinpoint SMS 메시징에 사용할 Lambda 함수 생성
<a name="tutorials-two-way-sms-part-3"></a>

이 섹션에서는 Amazon Pinpoint SMS 메시징과 함께 사용할 두 Lambda 함수를 생성하고 구성하는 방법을 보여줍니다. 나중에 특정 이벤트가 발생할 때 이러한 함수를 간접적으로 호출하도록 API Gateway 및 Amazon Pinpoint를 설정합니다. 이 두 함수는 지정하는 Amazon Pinpoint 프로젝트에서 엔드포인트를 생성하고 업데이트합니다. 첫 번째 함수는 전화 번호 확인 기능도 사용합니다.

## 고객 정보를 확인하고 엔드포인트를 생성하는 함수 생성
<a name="tutorials-two-way-sms-part-3-create-register-function"></a>

첫 번째 함수는 Amazon API Gateway에서 수신하는 등록 양식에서 입력을 가져옵니다. 이 함수는 이 정보를 사용하여 Amazon Pinpoint의 [전화번호 검증](https://docs.aws.amazon.com/pinpoint/latest/developerguide/validate-phone-numbers.html) 기능을 사용하여 고객의 전화번호에 대한 정보를 가져옵니다. 그런 다음 이 함수는 지정하는 Amazon Pinpoint 프로젝트에서 확인된 데이터를 사용하여 새 엔드포인트를 생성합니다. 기본적으로 이 함수가 생성하는 엔드포인트는 향후 통신에서 옵트아웃되지만 두 번째 함수에서 이 상태를 변경할 수 있습니다. 마지막으로 이 함수는 고객에게 SMS 통신을 수신할지를 확인하도록 요청하는 메시지를 전송합니다.

**Lambda 함수를 만들려면**

1. [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/) AWS Lambda 콘솔을 엽니다.

1. **함수 생성**을 선택합니다.

1. **함수 생성** 아래에서 **블루프린트 사용**을 선택합니다.

1. 검색 필드에 **hello**를 입력하고 Enter를 누릅니다. 다음 이미지와 같이 결과 목록에서 `hello-world` Node.js 함수를 선택합니다.  
![\[블루프린트 사용이 선택된 함수 생성 페이지.\]](http://docs.aws.amazon.com/ko_kr/pinpoint/latest/userguide/images/SMS_Reg_Tutorial_LAM_Step1.5.png)

1. **기본 정보**에서 다음과 같이 합니다.
   + **이름**에 함수 이름을 입력합니다(예: **RegistrationForm**).
   + [**역할**]에서 [**기존 역할 선택**]을 선택합니다.
   + **기존 역할**에서 [IAM 역할 생성](tutorials-two-way-sms-part-2.md#tutorials-two-way-sms-part-2-create-role)에서 생성한 **SMSRegistrationForm** 역할을 선택합니다.

   완료했으면 **함수 생성**을 선택합니다.

1. **코드 소스**에서 코드 편집기의 샘플 함수를 삭제하고 다음 코드를 붙여 넣습니다.

   ```
   import { PinpointClient, PhoneNumberValidateCommand, UpdateEndpointCommand, SendMessagesCommand } from "@aws-sdk/client-pinpoint"; // ES Modules import
   const pinClient = new PinpointClient({region: process.env.region});  
   
   // Make sure the SMS channel is enabled for the projectId that you specify.
   // See: https://docs.aws.amazon.com/pinpoint/latest/userguide/channels-sms-setup.html
   var projectId = process.env.projectId;
   
   // You need a dedicated long code in order to use two-way SMS. 
   // See: https://docs.aws.amazon.com/pinpoint/latest/userguide/channels-voice-manage.html#channels-voice-manage-request-phone-numbers
   var originationNumber = process.env.originationNumber;
   
   // This message is spread across multiple lines for improved readability.
   var message = "ExampleCorp: Reply YES to confirm your subscription. 2 msgs per "
               + "month. No purchase req'd. Msg&data rates may apply. Terms: "
               + "example.com/terms-sms";
               
   var messageType = "TRANSACTIONAL";
   
   export const handler = async (event, context) => {
     console.log('Received event:', event);
     await validateNumber(event);
   };
   
   async function validateNumber (event) {
     var destinationNumber = event.destinationNumber;
     if (destinationNumber.length == 10) {
       destinationNumber = "+1" + destinationNumber;
     }
     var params = {
       NumberValidateRequest: {
         IsoCountryCode: 'US',
         PhoneNumber: destinationNumber
       }
     };
     try{
       const PhoneNumberValidateresponse = await pinClient.send( new  PhoneNumberValidateCommand(params));
       console.log(PhoneNumberValidateresponse);
        if (PhoneNumberValidateresponse['NumberValidateResponse']['PhoneTypeCode'] == 0) {
           await createEndpoint(PhoneNumberValidateresponse, event.firstName, event.lastName, event.source);
           
         } else {
           console.log("Received a phone number that isn't capable of receiving "
                      +"SMS messages. No endpoint created.");
         }
     }catch(err){
       console.log(err);
     }
   }
   
   async function createEndpoint(data, firstName, lastName, source) {
     var destinationNumber = data['NumberValidateResponse']['CleansedPhoneNumberE164'];
     var endpointId = data['NumberValidateResponse']['CleansedPhoneNumberE164'].substring(1);
     
     var params = {
       ApplicationId: projectId,
       // The Endpoint ID is equal to the cleansed phone number minus the leading
       // plus sign. This makes it easier to easily update the endpoint later.
       EndpointId: endpointId,
       EndpointRequest: {
         ChannelType: 'SMS',
         Address: destinationNumber,
         // OptOut is set to ALL (that is, endpoint is opted out of all messages)
         // because the recipient hasn't confirmed their subscription at this
         // point. When they confirm, a different Lambda function changes this 
         // value to NONE (not opted out).
         OptOut: 'ALL',
         Location: {
           PostalCode:data['NumberValidateResponse']['ZipCode'],
           City:data['NumberValidateResponse']['City'],
           Country:data['NumberValidateResponse']['CountryCodeIso2'],
         },
         Demographic: {
           Timezone:data['NumberValidateResponse']['Timezone']
         },
         Attributes: {
           Source: [
             source
           ]
         },
         User: {
           UserAttributes: {
             FirstName: [
               firstName
             ],
             LastName: [
               lastName
             ]
           }
         }
       }
     };
     try{
       const UpdateEndpointresponse = await pinClient.send(new UpdateEndpointCommand(params));
       console.log(UpdateEndpointresponse);
       await sendConfirmation(destinationNumber);
     }catch(err){
       console.log(err);
     }  
   }
   
   async function sendConfirmation(destinationNumber) {
     var params = {
       ApplicationId: projectId,
       MessageRequest: {
         Addresses: {
           [destinationNumber]: {
             ChannelType: 'SMS'
           }
         },
         MessageConfiguration: {
           SMSMessage: {
             Body: message,
             MessageType: messageType,
             OriginationNumber: originationNumber
           }
         }
       }
     };
     try{
       const SendMessagesCommandresponse = await pinClient.send(new SendMessagesCommand(params));
       console.log("Message sent! " 
             + SendMessagesCommandresponse['MessageResponse']['Result'][destinationNumber]['StatusMessage']);
     }catch(err){
       console.log(err);
     }
   }
   ```

1. **구성** 탭에서 **환경 변수**에 대해 **편집**을 선택한 다음, **환경 변수 추가**를 선택하고 다음을 수행합니다.
   + 첫 번째 행에서 **originationNumber** 키를 사용하여 변수를 생성합니다. 다음에는 값을 [1.2단계](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-set-up-channel)에서 수신한 전용 긴 코드의 전화 번호로 설정합니다.
**참고**  
더하기 기호(\$1)와 전화 번호의 국가 코드를 포함해야 합니다. 대시(-), 마침표(.) 또는 괄호와 같은 다른 특수 문자는 포함하지 마세요.
   + 두 번째 행에서 **projectId** 키를 사용하여 변수를 생성합니다. 다음에는 값을 [1.1단계](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-create-project)에서 생성한 프로젝트의 고유한 ID로 설정합니다.
   + 세 번째 행에서 **region** 키를 사용하여 변수를 생성합니다. 다음에는 값을 Amazon Pinpoint를 사용하는 리전으로 설정합니다(예: **us-east-1** 또는 **us-west-2**).

   완료되면 **환경 변수** 섹션은 다음 이미지에 표시된 예제와 비슷해야 합니다.  
![\[originationNumber, projectId 및 region의 환경 변수입니다.\]](http://docs.aws.amazon.com/ko_kr/pinpoint/latest/userguide/images/SMS_Reg_Tutorial_LAM_Step1.7.png)

1. 페이지 상단에서 [**Save**]를 선택합니다.

### 함수 테스트
<a name="tutorials-two-way-sms-part-3-create-register-function-test"></a>

함수를 생성한 후에는 함수를 테스트하여 함수가 올바르게 구성되었는지 확인해야 합니다. 또한 생성한 IAM 역할에 적절한 권한이 있는지 확인합니다.

**함수를 테스트하려면**

1. **테스트** 탭을 선택합니다.

1. **새 이벤트 생성**을 선택하고 다음을 수행합니다.
   + **이벤트 이름**에 테스트 이벤트의 이름을 입력합니다(예: **MyPhoneNumber**).
   + 코드 편집기에서 예제 코드를 지웁니다. 다음 코드를 붙여넣습니다.

     ```
     {
       "destinationNumber": "+12065550142",
       "firstName": "Carlos",
       "lastName": "Salazar",
       "source": "Registration form test"
     }
     ```
   + 이전 코드 예제에서 `destinationNumber`, `firstName` 및 `lastName` 속성의 값을 테스트에 사용할 값으로 바꿉니다(예: 개인 연락처 세부 정보). 이 함수를 테스트할 때 이 함수는 `destinationNumber` 속성에서 지정하는 전화 번호로 SMS 메시지를 전송합니다. 지정하는 전화 번호가 SMS 메시지를 수신할 수 있는지 확인합니다.
   + **생성(Create)**을 선택합니다.

1. **테스트**를 선택합니다.

1. **실행 결과: 성공** 아래에서 **세부 정보**를 선택합니다. **로그 출력** 섹션에서 함수의 출력을 검토합니다. 함수가 오류 없이 실행되었는지 확인합니다.

   지정한 `destinationNumber`와 연결된 디바이스를 점검하여 이 디바이스가 테스트 메시지를 수신했는지 확인합니다.

1. [https://console.aws.amazon.com/pinpoint/](https://console.aws.amazon.com/pinpoint/)에서 Amazon Pinpoint 콘솔을 엽니다.

1. **모든 프로젝트** 페이지에서 [ Amazon Pinpoint 프로젝트 생성](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-create-project)에서 생성한 프로젝트를 선택합니다.

1. 탐색 창에서 **세그먼트**를 선택합니다. **세그먼트 페이지**에서 **세그먼트 생성**을 선택합니다.

1. **세그먼트 그룹 1**의 **필터를 추가하여 세그먼트 세분화** 아래에서 **엔드포인트를 기준으로 필터링**을 선택합니다.

1. **사용자 속성 선택**에서 **FirstName**을 선택합니다. 그런 다음 **값 선택**에서 테스트 이벤트에서 지정한 이름을 선택합니다.

   다음 이미지와 같이 **세그먼트 추정치** 섹션에 사용 가능 엔드포인트 0개와 전체 엔드포인트 하나가 있다고 표시되어야 합니다. 이 결과가 예상됩니다. 함수가 엔드포인트를 생성하면 엔드포인트가 옵트아웃됩니다. Amazon Pinpoint의 세그먼트는 옵트아웃된 엔드포인트를 자동으로 제외합니다.  
![\[엔드포인트가 0인 세그먼트 그룹입니다.\]](http://docs.aws.amazon.com/ko_kr/pinpoint/latest/userguide/images/SMS_Reg_Tutorial_LAM_Step8.9.png)

## 고객을 통신에 옵트인하는 함수 생성
<a name="tutorials-two-way-sms-part-3-create-optin-function"></a>

두 번째 함수는 고객이 첫 번째 함수에서 전송된 메시지에 응답할 때만 실행됩니다. 고객 응답에 [양방향 SMS 활성화](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-set-up-channel)에서 지정한 키워드가 포함되면 이 함수는 향후 통신에 옵트인하도록 엔드포인트 레코드를 업데이트합니다. 또한 Amazon Pinpoint는 [양방향 SMS 활성화](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-set-up-channel)에서 지정한 메시지로 자동 응답합니다.

고객이 응답하지 않거나 지정된 키워드 이외의 다른 값으로 응답하면 아무것도 발생하지 않습니다. 고객의 엔드포인트는 Amazon Pinpoint에서 그대로 유지되지만 세그먼트의 대상이 될 수 없습니다.

**Lambda 함수를 만들려면**

1. [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/) AWS Lambda 콘솔을 엽니다.

1. **함수 생성**을 선택합니다.

1. **함수 생성** 아래에서 **블루프린트**를 선택합니다.

1. 검색 필드에 **hello**를 입력하고 Enter를 누릅니다. 다음 이미지와 같이 결과 목록에서 `hello-world` Node.js 함수를 선택합니다. **구성**을 선택합니다.

1. **기본 정보**에서 다음과 같이 합니다.
   + **이름**에 함수 이름을 입력합니다(예: **RegistrationForm\$1OptIn**).
   + [**역할**]에서 [**기존 역할 선택**]을 선택합니다.
   + **기존 역할**에서 [IAM 역할 생성](tutorials-two-way-sms-part-2.md#tutorials-two-way-sms-part-2-create-role)에서 생성한 SMSRegistrationForm 역할을 선택합니다.

   완료했으면 **함수 생성**을 선택합니다.

1. 코드 편집기에서 예제 함수를 삭제하고 다음 코드를 붙여 넣습니다.

   ```
   import { PinpointClient, UpdateEndpointCommand } from "@aws-sdk/client-pinpoint"; // ES Modules import
   
   // Create a new Pinpoint client instance with the region specified in the environment variables
   const pinClient = new PinpointClient({ region: process.env.region });
   
   // Get the Pinpoint project ID and the confirm keyword from environment variables
   const projectId = process.env.projectId;
   const confirmKeyword = process.env.confirmKeyword.toLowerCase();
   
   // This is the main handler function that is invoked when the Lambda function is triggered
   export const handler = async (event, context) => {
       console.log('Received event:', event);
   
       try {
           // Extract the timestamp, message, and origination number from the SNS event
           const timestamp = event.Records[0].Sns.Timestamp;
           const message = JSON.parse(event.Records[0].Sns.Message);
           const originationNumber = message.originationNumber;
           const response = message.messageBody.toLowerCase();
   
           // Check if the response message contains the confirm keyword
           if (response.includes(confirmKeyword)) {
               // If the confirm keyword is found, update the endpoint's opt-in status
               await updateEndpointOptIn(originationNumber, timestamp);
           }
       }catch (error) {
           console.error('An error occurred:', error);
           throw error; // Rethrow the error to handle it upstream
       }
   };
   
   // This function updates the opt-in status of a Pinpoint endpoint
   async function updateEndpointOptIn(originationNumber, timestamp) {
       // Extract the endpoint ID from the origination number
       const endpointId = originationNumber.substring(1);
   
        // Prepare the parameters for the UpdateEndpointCommand
       const params = {
           ApplicationId: projectId,
           EndpointId: endpointId,
           EndpointRequest: {
               Address: originationNumber,
               ChannelType: 'SMS',
               OptOut: 'NONE',
               Attributes: {
                   OptInTimestamp: [timestamp]
               },
           }
       };
   
       try {
           // Send the UpdateEndpointCommand to update the endpoint's opt-in status
           const updateEndpointResponse = await pinClient.send(new UpdateEndpointCommand(params));
           console.log(updateEndpointResponse);
           console.log(`Successfully changed the opt status of endpoint ID ${endpointId}`);
       } catch (error) {
           console.error('An error occurred while updating endpoint:', error);
           throw error; // Rethrow the error to handle it upstream
       }
   }
   ```

1. **환경 변수**에서 다음을 수행합니다.
   + 첫 번째 행에서 **projectId** 키를 사용하여 변수를 생성합니다. 그런 다음 [Amazon Pinpoint 프로젝트 생성](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-create-project)에서 생성한 프로젝트의 고유 ID로 값을 설정합니다.
   + 두 번째 행에서 **region** 키를 사용하여 변수를 생성합니다. 다음에는 값을 Amazon Pinpoint를 사용하는 리전으로 설정합니다(예: **us-east-1** 또는 **us-west-2**).
   + 세 번째 행에서 **confirmKeyword** 키를 사용하여 변수를 생성합니다. 다음에는 값을 [양방향 SMS 활성화](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-set-up-channel)에서 생성한 확인 키워드로 설정합니다.
**참고**  
키워드는 대소문자를 구분하지 않습니다. 이 함수는 수신 메시지를 소문자로 변환합니다.

   완료되면 **환경 변수** 섹션은 다음 이미지에 표시된 예제와 비슷해야 합니다.  
![\[projectId, region 및 confirmKeyword에 대한 환경 변수입니다.\]](http://docs.aws.amazon.com/ko_kr/pinpoint/latest/userguide/images/SMS_Reg_Tutorial_LAM_Step2.7.png)

1. 페이지 상단에서 [**Save**]를 선택합니다.

### 함수 테스트
<a name="tutorials-two-way-sms-part-3-create-optin-function-test"></a>

함수를 생성한 후에는 함수를 테스트하여 함수가 올바르게 구성되었는지 확인해야 합니다. 또한 생성한 IAM 역할에 적절한 권한이 있는지 확인합니다.

**함수를 테스트하려면**

1. **테스트**를 선택합니다.

1. **테스트 이벤트 구성** 페이지에서 다음을 수행하세요.

   1. [**새 테스트 이벤트 생성**]을 선택하세요.

   1. **이벤트 이름**에 테스트 이벤트의 이름을 입력합니다(예: **MyResponse**).

   1. 코드 편집기에서 예제 코드를 지웁니다. 다음 코드를 붙여넣습니다.

      ```
      {
        "Records":[
          {
            "Sns":{
              "Message":"{\"originationNumber\":\"+12065550142\",\"messageBody\":\"Yes\"}",
              "Timestamp":"2019-02-20T17:47:44.147Z"
            }
          }
        ]
      }
      ```

      이전 코드 예제에서 `originationNumber` 속성의 값을 이전 Lambda 함수를 테스트할 때 사용한 전화번호로 바꿉니다. `messageBody`의 값을 [양방향 SMS 활성화](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-enable-two-way)에서 지정한 양방향 SMS 키워드로 바꿉니다. 선택적으로 `Timestamp`의 값을 현재 날짜 및 시간으로 바꿀 수 있습니다.

   1. **생성(Create)**을 선택합니다.

1. **테스트**를 다시 선택합니다.

1. **실행 결과: 성공** 아래에서 **세부 정보**를 선택합니다. **로그 출력** 섹션에서 함수의 출력을 검토합니다. 함수가 오류 없이 실행되었는지 확인합니다.

1. [https://console.aws.amazon.com/pinpoint/](https://console.aws.amazon.com/pinpoint/)에서 Amazon Pinpoint 콘솔을 엽니다.

1. **모든 프로젝트** 페이지에서 [ Amazon Pinpoint 프로젝트 생성](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-create-project)에서 생성한 프로젝트를 선택합니다.

1. 탐색 창에서 **세그먼트**를 선택합니다. **세그먼트 페이지**에서 **세그먼트 생성**을 선택합니다.

1. **세그먼트 그룹 1**의 **필터를 추가하여 세그먼트 세분화** 아래에서 **엔드포인트를 기준으로 필터링**을 선택합니다.

1. **사용자 속성 선택**에서 **FirstName**을 선택합니다. 그런 다음 **값 선택**에서 테스트 이벤트에서 지정한 이름을 선택합니다.

   **세그먼트 추정치** 섹션에 사용 가능 엔드포인트 하나와, 전체 엔드포인트 하나가 있다고 표시되어야 합니다.

**다음**: [Amazon API Gateway 설정](tutorials-two-way-sms-part-4.md)

# Amazon Pinpoint에서 SMS 메시징용 Amazon API Gateway 설정
<a name="tutorials-two-way-sms-part-4"></a>

이 섹션에서는 Amazon Pinpoint에 대한 SMS 등록 중에 Amazon API Gateway를 사용하여 새 API를 생성합니다. 이 솔루션에서 배포하는 등록 양식은 이 API를 호출합니다. 그런 다음 API Gateway는 등록 양식에 캡처된 정보를 [Lambda 함수 생성](tutorials-two-way-sms-part-3.md)에서 생성한 Lambda 함수로 전달합니다.

## API 생성
<a name="tutorials-two-way-sms-part-4-create-api"></a>

먼저 API Gateway에서 새 API를 생성해야 합니다. 다음 절차에서는 새 REST API를 생성하는 방법을 보여 줍니다.

**새 API를 생성하려면**

1. [https://console.aws.amazon.com/apigateway/](https://console.aws.amazon.com/apigateway/)에서 Amazon API Gateway 콘솔을 엽니다.

1. **API 생성**을 선택합니다. 다음과 같이 선택합니다.
   + **Choose the protocol(프로토콜 선택)**에서 **REST**를 선택합니다.
   + **새 API 생성**에서 **새 API**를 선택합니다.
   + **설정** 아래의 **이름**에 이름을 입력합니다(예: **RegistrationForm**). **설명**에 API의 목적을 설명하는 텍스트를 입력합니다(선택 사항). **엔드포인트 유형**에서 **리전**을 선택합니다. 그런 다음 **API 생성**을 선택합니다.

   이러한 설정의 한 예가 다음 이미지에 나와 있습니다.  
![\[프로토콜이 REST로 설정됨, 새 API 생성이 새 API로 설정됨, API 이름이 RegistrationForm으로 설정됨, 엔드포인트 유형이 리전으로 설정됨.\]](http://docs.aws.amazon.com/ko_kr/pinpoint/latest/userguide/images/SMS_Reg_Tutorial_APIGW_Step2.png)

## 리소스 생성
<a name="tutorials-two-way-sms-part-4-create-resource"></a>

이제 API를 생성했으므로 리소스 추가를 시작할 수 있습니다. 그런 다음 리소스에 POST 메서드를 추가하고, API Gateway에 이 메서드에서 수신하는 데이터를 Lambda 함수로 전달하라고 지시합니다.

1. **작업** 메뉴에서 **리소스 생성**을 선택합니다. 다음 이미지와 같이 **새 하위 리소스** 창의 **리소스 이름**에 **register**를 입력합니다. **리소스 생성**을 선택합니다.  
![\[등록할 리소스 이름이 설정된 새 하위 리소스 창입니다.\]](http://docs.aws.amazon.com/ko_kr/pinpoint/latest/userguide/images/SMS_Reg_Tutorial_APIGW_Step3.png)

1. **작업** 메뉴에서 **메서드 생성**을 선택합니다. 다음 이미지와 같이 표시되는 메뉴에서 **POST**를 선택합니다. 그런 다음 **확인 표시** 버튼을 선택합니다.  
![\[확인 표시가 선택된 메서드 생성 창입니다.\]](http://docs.aws.amazon.com/ko_kr/pinpoint/latest/userguide/images/SMS_Reg_Tutorial_APIGW_Step4.png)

1. **/register - POST - Setup** 창에서 다음을 선택합니다.
   + **통합 유형**‬에서 **‬Lambda 함수**를 선택합니다.
   + **Lambda 프록시 통합 사용**을 선택합니다.
   + **Lambda 리전**에서 Lambda 함수를 생성한 리전을 선택합니다.
   + **Lambda 함수**에서 [Lambda 함수 생성](tutorials-two-way-sms-part-3.md)에서 생성한 RegisterEndpoint 함수를 선택합니다.

   이러한 설정의 한 예가 다음 이미지에 나와 있습니다.  
![\[Lambda 함수가 선택된 /register - POST - 설정 창입니다.\]](http://docs.aws.amazon.com/ko_kr/pinpoint/latest/userguide/images/SMS_Reg_Tutorial_APIGW_Step5.png)

   **저장**을 선택합니다. 표시되는 창에서 **확인**을 선택하여 API Gateway에 Lambda 함수를 실행할 권한을 제공합니다.

## API 배포
<a name="tutorials-two-way-sms-part-4-deploy-api"></a>

이제 API를 사용할 준비가 되었습니다. 이때 퍼블릭 액세스가 가능한 엔드포인트를 만들 수 있도록 API를 배포해야 합니다.

1. **작업** 메뉴에서 **API 배포**를 선택합니다. **API 배포** 창에서 다음을 선택합니다.
   + **배포 단계**에서 **[새 단계]**를 선택합니다.
   + **단계 이름**에 **v1**를 입력합니다.
   + [**배포**]를 선택합니다.

   이러한 선택의 한 예가 다음 이미지에 나와 있습니다.  
![\[단계 이름이 v1로 설정된 배포 API 창\]](http://docs.aws.amazon.com/ko_kr/pinpoint/latest/userguide/images/SMS_Reg_Tutorial_APIGW_Step6.png)

1. **v1 단계 편집기** 창에서 **/register** 리소스를 선택한 후 **POST** 메서드를 선택합니다. 다음 이미지와 같이 **호출 URL** 옆에 표시된 주소를 복사합니다.  
![\[복사할 URL 간접 호출을 표시하는 v1 단계 편집기 창\]](http://docs.aws.amazon.com/ko_kr/pinpoint/latest/userguide/images/SMS_Reg_Tutorial_APIGW_Step7.png)

1. 탐색 창에서 **리소스**를 선택합니다. 리소스 목록에서 **/register** 리소스를 선택합니다. 마지막으로 다음 이미지와 같이 **작업** 메뉴에서 **CORS 활성화**를 선택합니다.  
![\[작업의 드롭다운 메뉴에 CORS 활성화가 선택되었음을 표시합니다.\]](http://docs.aws.amazon.com/ko_kr/pinpoint/latest/userguide/images/SMS_Reg_Tutorial_APIGW_Step8.png)

1. **CORS 활성화** 창에서 **CORS 활성화 및 기존의 CORS 헤더 대체**를 선택합니다.

**다음**: [웹 양식 생성 및 배포](tutorials-two-way-sms-part-5.md)

# Amazon Pinpoint용 SMS 메시징을 사용하도록 웹 양식을 생성 및 배포
<a name="tutorials-two-way-sms-part-5"></a>

Amazon Pinpoint를 사용한 SMS 메시징에 AWS 서비스를 사용하는 모든 구성 요소가 이제 준비되었습니다. 마지막 단계는 고객의 데이터를 캡처하는 웹 양식을 생성하고 배포하는 것입니다.

## JavaScript 양식 핸들러 생성
<a name="tutorials-two-way-sms-part-5-create-form-handler"></a>

이 단원에서는 다음 단원에서 생성하는 웹 양식의 내용을 구문 분석하는 JavaScript 함수를 생성합니다. 내용을 구문 분석한 후 이 함수는 해당 데이터를 사용자가 [Amazon API Gateway 설정](tutorials-two-way-sms-part-4.md)에서 생성한 API로 전송합니다.

**양식 핸들러를 생성하려면**

1. 텍스트 편집기에서 새로운 파일을 생성합니다.

1. 편집기에서 다음 코드를 붙여 넣습니다.

   ```
   $(document).ready(function() {
   
     // Handle form submission.
     $("#submit").click(function(e) {
   
       var firstName = $("#firstName").val(),
           lastName = $("#lastName").val(),
           source = window.location.pathname,
           optTimestamp = undefined,
           utcSeconds = Date.now() / 1000,
           timestamp = new Date(0),
           phone = $("#areaCode").val()
                 + $("#phone1").val()
                 + $("#phone2").val();
   
       e.preventDefault();
   
       if (firstName == "") {
         $('#form-response').html('<div class="mt-3 alert alert-info" role="alert">Please enter your first name.</div>');
       } else if (lastName == "") {
         $('#form-response').html('<div class="mt-3 alert alert-info" role="alert">Please enter your last name.</div>');
       } else if (phone.match(/[^0-9]/gi)) {
         $('#form-response').html('<div class="mt-3 alert alert-info" role="alert">Your phone number contains invalid characters. Please check the phone number that you supplied.</div>');
       } else if (phone.length < 10) {
         $('#form-response').html('<div class="mt-3 alert alert-info" role="alert">Please enter your phone number.</div>');
       } else if (phone.length > 10) {
         $('#form-response').html('<div class="mt-3 alert alert-info" role="alert">Your phone number contains too many digits. Please check the phone number that you supplied.</div>');
       } else {
         $('#submit').prop('disabled', true);
         $('#submit').html('<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>  Saving your preferences</button>');
   
         timestamp.setUTCSeconds(utcSeconds);
   
         var data = JSON.stringify({
           'destinationNumber': phone,
           'firstName': firstName,
           'lastName': lastName,
           'source': source,
           'optTimestamp': timestamp.toString()
         });
   
         $.ajax({
           type: 'POST',
           url: 'https://example.execute-api.us-east-1.amazonaws.com/v1/register',
           contentType: 'application/json',
           data: data,
           success: function(res) {
             $('#form-response').html('<div class="mt-3 alert alert-success" role="alert"><p>Congratulations! You&apos;ve successfully registered for SMS Alerts from ExampleCorp.</p><p>We just sent you a message. Follow the instructions in the message to confirm your subscription. We won&apos;t send any additional messages until we receive your confirmation.</p><p>If you decide you don&apos;t want to receive any additional messages from us, just reply to one of our messages with the keyword STOP.</p></div>');
             $('#submit').prop('hidden', true);
             $('#unsubAll').prop('hidden', true);
             $('#submit').text('Preferences saved!');
           },
           error: function(jqxhr, status, exception) {
             $('#form-response').html('<div class="mt-3 alert alert-danger" role="alert">An error occurred. Please try again later.</div>');
             $('#submit').text('Save preferences');
             $('#submit').prop('disabled', false);
           }
         });
       }
     });
   });
   ```

1. 이전 예제에서 *https://example.execute-api.us-east-1.amazonaws.com/v1/register*를 [API 배포](tutorials-two-way-sms-part-4.md#tutorials-two-way-sms-part-4-deploy-api)에서 획득한 간접 호출 URL로 바꿉니다.

1. 파일을 저장합니다.

## 양식 파일 생성
<a name="tutorials-two-way-sms-part-5-create-form"></a>

이 단원에서는 고객이 SMS 프로그램에 등록하기 위해 사용하는 양식이 포함된 HTML 파일을 생성합니다. 이 파일은 이전 단원에서 생성한 JavaScript 양식 핸들러를 사용하여 양식 데이터를 Lambda 함수로 전송합니다.

**중요**  
사용자가 이 양식을 제출하면 여러 Amazon Pinpoint API 작업을 호출하는 Lambda 함수가 트리거됩니다. 악의적인 사용자가 다수의 요청이 발생하도록 할 수 있는 양식에 대한 공격을 시작할 수 있습니다. 프로덕션 사용 사례에 이 솔루션을 사용할 계획인 경우, [Google reCAPTCHA](https://www.google.com/recaptcha/about/) 등의 시스템을 사용하여 보안을 유지해야 합니다.

**양식을 생성하려면**

1. 텍스트 편집기에서 새로운 파일을 생성합니다.

1. 편집기에서 다음 코드를 붙여 넣습니다.

   ```
   <!doctype html>
   <html lang="en">
   
   <head>
     <!-- Meta tags required by Bootstrap -->
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
   
     <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
     <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
     <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
     <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
   
     <script type="text/javascript" src="SMSFormHandler.js"></script>
     <title>SMS Registration Form</title>
   </head>
   
   <body>
     <div class="container">
       <div class="row justify-content-center mt-3">
         <div class="col-md-6">
           <h1>Register for SMS Alerts</h1>
           <p>Enter your phone number below to sign up for PromotionName messages from ExampleCorp.</p>
           <p>We don't share your contact information with anyone else. For more information, see our <a href="http://example.com/privacy">Privacy Policy</a>.</p>
           <p>ExampleCorp alerts are only available to recipients in the United States.</p>
         </div>
       </div>
       <div class="row justify-content-center">
         <div class="col-md-6">
           <form>
             <div class="form-group">
               <label for="firstName" class="font-weight-bold">First name</label>
               <input type="text" class="form-control" id="firstName" placeholder="Your first name" required>
             </div>
             <div class="form-group">
               <label for="lastName" class="font-weight-bold">Last name</label>
               <input type="text" class="form-control" id="lastName" placeholder="Your last name" required>
             </div>
             <label for="areaCode" class="font-weight-bold">Phone number</label>
             <div class="input-group">
               <span class="h3">(&nbsp;</span>
               <input type="tel" class="form-control" id="areaCode" placeholder="Area code" required>
               <span class="h3">&nbsp;)&nbsp;</span>
               <input type="tel" class="form-control" id="phone1" placeholder="555" required>
               <span class="h3">&nbsp;-&nbsp;</span>
               <input type="tel" class="form-control" id="phone2" placeholder="0199" required>
             </div>
             <div id="form-response"></div>
             <button id="submit" type="submit" class="btn btn-primary btn-block mt-3">Submit</button>
           </form>
         </div>
       </div>
       <div class="row mt-3">
         <div class="col-md-12 text-center">
           <small class="text-muted">Copyright © 2019, ExampleCorp or its affiliates.</small>
         </div>
       </div>
     </div>
   </body>
   
   </html>
   ```

1. 위 예에서 *SMSFormHandler.js*를 이전 단원에서 생성한 양식 핸들러 JavaScript 파일의 전체 경로로 바꿉니다.

1. 파일을 저장합니다.

## 양식 파일 업로드
<a name="tutorials-two-way-sms-part-5-upload-form"></a>

이제 HTML 양식과 JavaScript 양식 핸들러를 생성했으므로 마지막 단계는 이러한 파일을 인터넷에 게시하는 것입니다. 이 단원에서는 기존 웹 호스팅 공급자가 있다고 가정합니다. 기존 호스팅 공급자가 없는 경우 Amazon Route 53, Amazon Simple Storage Service(S3) 및 Amazon CloudFront를 사용하여 웹 사이트를 시작할 수 있습니다. 자세한 내용은 [정적 웹 사이트 호스팅](https://aws.amazon.com/getting-started/hands-on/host-static-website/)을 참조하세요.

다른 웹 호스팅 공급자를 사용하는 경우, 웹 페이지 게시에 대한 자세한 내용은 해당 공급자의 설명서를 참조하세요.

## 양식 테스트
<a name="tutorials-two-way-sms-part-5-test-form"></a>

양식을 게시한 후 몇 가지 테스트 이벤트를 제출하여 양식이 예상대로 작동하는지 확인해야 합니다.

**등록 양식을 테스트하려면**

1. 웹 브라우저에서 등록 양식을 업로드한 위치로 이동합니다. [JavaScript 양식 핸들러 생성](#tutorials-two-way-sms-part-5-create-form)에서 코드 예제를 사용한 경우 다음 이미지의 예제와 비슷한 양식이 표시됩니다.  
![\[5.1단계에서 생성된 고객 요청 양식입니다.\]](http://docs.aws.amazon.com/ko_kr/pinpoint/latest/userguide/images/SMS_Reg_Tutorial_Form_Step5.3.1.png)

1. **이름**, **성** 및 **전화 번호** 필드에 연락처 정보를 입력합니다.
**참고**  
양식을 제출하면 Amazon Pinpoint는 지정한 전화 번호에 메시지를 전송합니다. 이 기능 때문에 처음부터 끝까지 실제 전화 번호를 사용하여 솔루션을 테스트해야 합니다.  
[Lambda 함수 생성](tutorials-two-way-sms-part-3.md)에서 Lambda 함수를 테스트한 경우 Amazon Pinpoint 프로젝트에 이미 하나 이상의 엔드포인트가 포함되어 있습니다. 이 양식을 테스트할 때 양식에서 다른 전화 번호를 제출하거나 [DeleteEndpoint](https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-endpoints-endpoint-id.html#DeleteEndpoint) API 작업을 사용하여 기존 엔드포인트를 삭제해야 합니다.

1. 지정한 전화 번호와 연결된 디바이스를 점검하여 이 디바이스가 테스트 메시지를 수신했는지 확인합니다.

1. [https://console.aws.amazon.com/pinpoint/](https://console.aws.amazon.com/pinpoint/)에서 Amazon Pinpoint 콘솔을 엽니다.

1. **모든 프로젝트** 페이지에서 [ Amazon Pinpoint 프로젝트 생성](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-create-project)에서 생성한 프로젝트를 선택합니다.

1. 탐색 창에서 **세그먼트**를 선택합니다. **세그먼트 페이지**에서 **세그먼트 생성**을 선택합니다.

1. **세그먼트 그룹 1**의 **필터를 추가하여 세그먼트 세분화** 아래에서 **엔드포인트를 기준으로 필터링**을 선택합니다.

1. **사용자 속성 선택**에서 **FirstName**을 선택합니다. 그런 다음 **값 선택**에서 양식을 제출할 때 지정한 이름을 선택합니다.

   다음 예제와 같이 **세그먼트 추정치** 섹션에 사용 가능 엔드포인트 0개와 엔드포인트 하나(전체 엔드포인트 아래)가 있다고 표시되어야 합니다. 이 결과가 예상됩니다. Lambda 함수가 새 엔드포인트를 생성하면 엔드포인트가 기본적으로 옵트아웃됩니다.  
![\[옵트인 엔드포인트가 없는 세그먼트입니다.\]](http://docs.aws.amazon.com/ko_kr/pinpoint/latest/userguide/images/SMS_Reg_Tutorial_LAM_Step8.9.png)

1. 메시지를 수신한 디바이스에서 [양방향 SMS 활성화](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-enable-two-way)에서 지정한 양방향 SMS 키워드로 메시지에 회신합니다. Amazon Pinpoint는 응답 메시지를 즉시 전송합니다.

1. Amazon Pinpoint 콘솔에서 4\$18단계를 반복합니다. 이번에는 세그먼트를 생성할 때 엔드포인트 8개와 전체 엔드포인트 하나가 보입니다. 엔드포인트가 이제 옵트인되어 있으므로 이 결과가 예상됩니다.

# 다음 단계
<a name="tutorials-two-way-sms-next-steps"></a>

이 자습서를 완료하면 다음을 수행한 것입니다.
+ Amazon Pinpoint 프로젝트를 생성하고, SMS 채널을 구성하고, 전용 긴 코드를 획득했습니다.
+ 최소 권한의 원칙을 사용하여 액세스 권한을 부여하는 IAM 정책을 생성하고, 이 정책을 역할과 연결했습니다.
+ Amazon Pinpoint API에서 PhoneNumberValidate, UpdateEndpoint 및 SendMessages 작업을 사용하는 Lambda 함수를 생성했습니다.
+ API Gateway를 사용하여 REST API를 생성했습니다.
+ 고객의 연락처 정보를 수집하는 웹 기반 형식을 생성하고 배포했습니다.
+ 솔루션에 대한 테스트를 수행하여 솔루션이 작동하는지 확인했습니다.

이 단원에서는 이 솔루션을 통해 수집하는 고객 정보를 사용할 수 있는 몇 가지 방법을 다룹니다. 고유한 사용 사례에 맞게 이 솔루션을 사용자 지정할 수 있는 방법에 대한 몇 가지 제안도 포함되어 있습니다.

## 고객 세그먼트 생성
<a name="tutorials-two-way-sms-next-steps-create-segments"></a>

이 형식을 통해 수집하는 모든 고객 세부 정보는 엔드포인트로 저장됩니다. 이 솔루션은 세분화를 위해 사용할 수 있는 여러 개의 속성이 포함된 엔드포인트를 생성합니다.

예를 들어, 이 솔루션은 `Source`라는 엔드포인트 속성을 캡처합니다. 이 속성에는 양식이 호스팅되는 위치에 대한 전체 경로가 포함됩니다. 세그먼트를 생성할 때 엔드포인트별로 세그먼트를 필터링한 다음 `Source` 속성을 선택하여 필터를 한층 더 세분화할 수 있습니다.

`Source` 속성을 기반으로 세그먼트를 생성하면 여러 가지 방식으로 유용할 수 있습니다. 첫 번째로 SMS 메시지 수신을 등록한 고객의 세그먼트를 빠르게 생성할 수 있습니다. 또한 Amazon Pinpoint의 세분화 도구는 메시지 수신에 옵트인하지 않은 엔드포인트를 자동으로 제외합니다.

`Source` 속성은 여러 개의 다른 위치에서 등록 양식을 호스팅하기로 결정하는 경우에도 유용합니다. 예를 들어, 마케팅 자료는 한 위치에 호스팅된 양식을 참조하지만, 웹 사이트를 검색하는 동안 양식과 마추친 고객은 다른 위치에 호스팅된 버전을 볼 수 있습니다. 이 경우 마케팅 자료를 본 후 양식을 작성하는 고객의 소스 속성은 웹 사이트에서 양식을 찾은 후 양식을 작성하는 고객과 다릅니다. 이 차이를 사용하여 별개의 세그먼트를 생성한 다음, 이러한 각 대상 그룹에게 맞춤형 통신을 전송할 수 있습니다.

## 맞춤형 캠페인 메시지 전송
<a name="tutorials-two-way-sms-next-steps-send-campaigns"></a>

세그먼트를 생성한 후 해당 세그먼트에 캠페인 전송을 시작할 수 있습니다. 캠페인 메시지를 생성할 때 메시지에 포함할 엔드포인트 속성을 지정하여 메시지를 개인 설정할 수 있습니다. 예를 들어, 이 솔루션에 사용된 웹 양식은 고객에게 이름과 성을 입력하도록 요청합니다. 이러한 값은 엔드포인트와 연결된 사용자 레코드에 저장됩니다.

예를 들어, `GetEndpoint` API 작업을 사용하여 이 솔루션에서 생성된 엔드포인트에 대한 정보를 검색하면 다음 예제와 비슷한 섹션을 볼 수 있습니다.

```
  ...
  "User": {
    "UserAttributes": {
      "FirstName": [
        "Carlos"
      ],
      "LastName": [
        "Salazar"
      ]
    }
  }
  ...
```

이러한 속성의 값을 캠페인 메시지에 포함하려는 경우 점 표기법을 사용하여 속성을 참조할 수 있습니다. 그런 다음 전체 참조를 이중 중괄호로 묶습니다. 예를 들어, 각 수신자의 이름을 캠페인 메시지에 포함하려면 `{{User.UserAttributes.FirstName}}` 문자열을 메시지에 포함합니다. Amazon Pinpoint는 메시지를 전송할 때 문자열을 `FirstName` 속성의 값과 바꿉니다.

## 양식을 사용하여 추가 정보 수집
<a name="tutorials-two-way-sms-next-steps-collect-additional"></a>

등록 양식에서 추가 정보를 수집하도록 이 솔루션을 수정할 수 있습니다. 예를 들어 고객에게 주소를 제공하도록 요청한 후, 해당 주소 데이터를 사용하여 `Endpoint` 리소스의 `Location.City`, `Location.Country`, `Location.Region`, `Location.PostalCode` 필드를 채울 수 있습니다. 등록 양식에서 주소 정보를 수집하면 더 정확한 정보가 포함된 엔드포인트를 생성할 수 있습니다. 이렇게 변경하려면 웹 양식에 적절한 필드를 추가해야 합니다. 또한 새 값을 전달하도록 양식에 대한 JavaScript 코드를 수정해야 합니다. 마지막으로, 새 수신 정보를 처리하기 위한 엔드포인트를 생성하는 Lambda 함수를 수정해야 합니다.

다른 채널에서 연락처 정보를 수집하도록 양식을 수정할 수도 있습니다. 예를 들어, 양식을 사용하여 전화 번호 외에도 고객의 이메일 주소를 수집할 수 있습니다. 이렇게 변경하려면 웹 양식에 대한 HTML과 JavaScript를 수정해야 합니다. 또한 두 개의 개별 엔드포인트(이메일 엔드포인트 하나 및 SMS 엔드포인트 하나)를 생성하도록 엔드포인트를 생성하는 Lambda 함수를 수정해야 합니다. 또한 `User.UserId` 속성의 고유한 값을 생성한 다음 이 값을 두 엔드포인트와 모두 연결하도록 Lambda 함수를 수정해야 합니다.

## 감사를 위한 추가 속성 기록
<a name="tutorials-two-way-sms-next-steps-auditing"></a>

이 솔루션은 엔드포인트를 생성하고 업데이트할 때 두 개의 중요한 속성을 기록합니다. 먼저, 첫 번째 Lambda 함수는 엔드포인트를 처음 생성할 때 `Attributes.Source` 속성에 양식 자체의 URL을 기록합니다. 고객이 메시지에 응답하면 두 번째 Lambda 함수가 `Attributes.OptInTimestamp` 속성을 생성합니다. 이 속성에는 고객이 메시지 수신에 동의한 정확한 날짜와 시간이 포함됩니다.

이 두 필드는 이동 통신사 또는 규제 기관이 고객의 동의 증거를 제공하라고 요청한 경우에 유용할 수 있습니다. [GetEndpoint](https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-endpoints-endpoint-id.html#GetEndpoint) API 작업을 사용하여 언제든 이 정보를 검색할 수 있습니다.

등록 요청을 제출한 IP 주소 등 감사 용도에 유용할 수 있는 추가 데이터를 기록하도록 Lambda 함수를 수정할 수도 있습니다.