사용자 정의 메시지 Lambda 트리거 - Amazon Cognito

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

사용자 정의 메시지 Lambda 트리거

사용자에게 전송하려는 이메일 및 SMS 메시지에 대한 외부 표준이 있거나 런타임에 사용자 메시지의 형식에 자체 로직을 적용하려는 경우 사용자 풀에 사용자 지정 메시지 트리거를 추가합니다. 사용자 지정 메시지 Lambda는 사용자 풀에서 전송하기 전에 모든 이메일 및 SMS 메시지의 내용을 수신합니다. 그러면 Lambda 함수에서 메시지 내용 및 주제를 수정할 수 있습니다.

Amazon Cognito는 이메일 또는 전화 확인 메시지 또는 다중 인증(MFA) 코드를 보내기 전에 이 트리거를 호출합니다. 사용자 지정 메시지 트리거를 사용하여 메시지를 동적으로 사용자 지정할 수 있습니다. 원래 Amazon Cognito 콘솔의 메시지 사용자 지정(Message customizations) 탭에서 정적 사용자 지정 메시지를 편집할 수 있습니다.

요청에는 codeParameter가 포함됩니다. 이는 Amazon Cognito가 사용자에게 전달하는 코드의 자리 표시자 역할을 하는 문자열입니다. codeParameter 문자열을 확인 코드가 나타날 메시지 본문에 삽입합니다. Amazon Cognito에서 응답을 수신하면 Amazon Cognito에서 codeParameter 문자열을 실제 확인 코드로 바꿉니다.

참고

CustomMessage_AdminCreateUser 트리거 소스가 있는 사용자 지정 메시지 Lambda 함수는 사용자 이름 및 확인 코드를 반환합니다. 관리자가 생성한 사용자는 사용자 이름과 코드를 모두 수신해야 하므로 함수로부터의 응답에는 request.usernameParameterrequest.codeParameter가 둘 다 포함되어야 합니다.

사용자 정의 메시지 Lambda 트리거 소스

triggerSource 값 Event
CustomMessage_SignUp 사용자 지정 메시지 – 가입 후 확인 코드 전송.
CustomMessage_AdminCreateUser 사용자 지정 메시지 – 새 사용자에게 임시 암호 전송.
CustomMessage_ResendCode 사용자 지정 메시지 – 기존 사용자에게 확인 코드 재전송.
CustomMessage_ForgotPassword 사용자 지정 메시지 – 암호 분실 요청을 위한 확인 코드 전송.
CustomMessage_UpdateUserAttribute 사용자 지정 메시지 – 사용자의 이메일 또는 전화 번호가 변경되면 이 트리거가 사용자에게 자동으로 확인 코드를 전송합니다. 다른 속성에는 사용할 수 없습니다.
CustomMessage_VerifyUserAttribute 사용자 지정 메시지 – 사용자가 새 이메일 또는 전화 번호에 대해 수동으로 요청하면 이 트리거가 사용자에게 확인 코드를 전송합니다.
CustomMessage_Authentication 사용자 지정 메시지 - 인증 중에 MFA 코드를 보냅니다.

사용자 정의 메시지 Lambda 트리거 파라미터

Amazon Cognito가 이 Lambda 함수에 전달하는 요청은 아래 파라미터와 Amazon Cognito가 모든 요청에 추가하는 공통 파라미터의 조합입니다.

JSON
{ "request": { "userAttributes": { "string": "string", . . . } "codeParameter": "####", "usernameParameter": "string", "clientMetadata": { "string": "string", . . . } }, "response": { "smsMessage": "string", "emailMessage": "string", "emailSubject": "string" } }

사용자 정의 메시지 요청 파라미터

userAttributes

사용자 속성을 나타내는 하나 이상의 이름-값 페어입니다.

codeParameter

사용자 지정 메시지에서 확인 코드의 자리 표시자로 사용할 문자열입니다.

usernameParameter

사용자 이름. Amazon Cognito는 관리자가 생성한 사용자의 요청에 이 파라미터를 포함합니다.

clientMetadata

사용자 지정 메시지 트리거에 지정하는 Lambda 함수에 사용자 지정 입력으로 제공할 수 있는 하나 이상의 키-값 쌍입니다. 사용자 지정 메시지 함수를 호출하는 요청에는 AdminInitiateAuthInitiateAuth API 작업의 ClientMetadata 파라미터에 전달된 데이터가 포함되지 않습니다. 이 데이터를 Lambda 함수에 전달하려면 다음 API 작업에서 ClientMetadata 파라미터를 사용할 수 있습니다.

사용자 정의 메시지 응답 파라미터

응답에서는 사용자에게 보낼 메시지에 사용할 사용자 지정 텍스트를 지정합니다. Amazon Cognito가 이러한 파라미터에 적용하는 문자열 제약 조건은 섹션을 참조하세요MessageTemplateType.

smsMessage

사용자에게 보낼 사용자 지정 SMS 메시지입니다. 요청에서 수신한 codeParameter 값을 포함해야 합니다.

emailMessage

사용자에게 보낼 사용자 지정 이메일 메시지입니다. emailMessage 파라미터에서 HTML 서식을 사용할 수 있습니다. 요청에서 수신한 codeParameter 값을 변수 {####}으로 포함해야 합니다. Amazon Cognito는 사용자 풀의 EmailSendingAccount 속성이 DEVELOPER인 경우에만 emailMessage 파라미터를 사용할 수 있습니다. 사용자 풀의 EmailSendingAccount 속성이 DEVELOPER가 아니고 emailMessage 파라미터가 반환된 경우 Amazon Cognito에서 400오류 코드 com.amazonaws.cognito.identity.idp.model.InvalidLambdaResponseException을 생성합니다. Amazon Simple Email Service(Amazon SES)를 선택하여 이메일 메시지를 보내면 사용자 풀의 EmailSendingAccount 속성은 입니다DEVELOPER. 그렇지 않으면 이 값은 COGNITO_DEFAULT입니다.

emailSubject

사용자 지정 메시지의 제목 줄입니다. 사용자 풀의 속성이 인 경우에만 emailSubject 파라미터를 EmailSendingAccount 사용할 수 있습니다DEVELOPER. 사용자 풀의 EmailSendingAccount 속성이 DEVELOPER가 아니고 Amazon Cognito에서 emailSubject 파라미터를 반환하는 경우 Amazon Cognito에서 400 오류 코드 com.amazonaws.cognito.identity.idp.model.InvalidLambdaResponseException을 생성합니다. 사용자 풀의 EmailSendingAccount 속성은 Amazon Simple Email Service(AmazonSES)를 사용하여 이메일 메시지를 전송하도록 선택할 DEVELOPER 때입니다. 그렇지 않으면 이 값은 COGNITO_DEFAULT입니다.

가입용 사용자 지정 메시지의 예

이 Lambda 함수 예제는 서비스가 앱이 사용자에게 확인 코드를 전송하도록 요구할 때 이메일 또는 SMS 메시지를 사용자 지정합니다.

Amazon Cognito는 사후 등록, 확인 코드 재전송, 잊어버린 암호 복구 또는 사용자 속성 확인과 같은 여러 이벤트에서 Lambda 트리거를 호출할 수 있습니다. 응답에는 SMS 및 이메일 모두에 대한 메시지가 포함됩니다. 메시지에는 코드 파라미터 "####"이 포함되어야 합니다. 이 파라미터는 사용자가 수신하는 확인 코드의 자리 표시자입니다.

이메일 메시지의 최대 길이는 20,000UTF~8자입니다. 이 길이에는 확인 코드가 포함됩니다. 이러한 이메일 메시지에 HTML 태그를 사용할 수 있습니다.

SMS 메시지의 최대 길이는 140UTF~8자입니다. 이 길이에는 확인 코드가 포함됩니다.

Node.js
const handler = async (event) => { if (event.triggerSource === "CustomMessage_SignUp") { const message = `Thank you for signing up. Your confirmation code is ${event.request.codeParameter}.`; event.response.smsMessage = message; event.response.emailMessage = message; event.response.emailSubject = "Welcome to the service."; } return event; }; export { handler };

Amazon Cognito는 이벤트 정보를 Lambda 함수에 전달합니다. 그런 다음 함수는 응답이 변경되면 동일한 이벤트 객체를 Amazon Cognito에 반환합니다. Lambda 콘솔에서 해당 Lambda 트리거와 관련 있는 데이터로 테스트 이벤트를 설정할 수 있습니다. 다음은 이 코드 샘플의 테스트 이벤트입니다.

JSON
{ "version": "1", "region": "us-west-2", "userPoolId": "us-west-2_EXAMPLE", "userName": "test-user", "callerContext": { "awsSdkVersion": "aws-sdk-unknown-unknown", "clientId": "1example23456789" }, "triggerSource": "CustomMessage_SignUp", "request": { "userAttributes": { "sub": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "cognito:user_status": "CONFIRMED", "email_verified": "true", "phone_number_verified": "true", "phone_number": "+12065551212", "email": "test-user@example.com" }, "codeParameter": "{####}", "linkParameter": "{##Click Here##}", "usernameParameter": "None" }, "response": { "smsMessage": "None", "emailMessage": "None", "emailSubject": "None" } }

관리자로 사용자 생성용 사용자 정의 메시지 예제

Amazon Cognito가 이 예제 사용자 지정 메시지 Lambda 함수에 보낸 요청의 triggerSource 값은 CustomMessage_AdminCreateUser 및 사용자 이름과 임시 암호입니다. 함수는 요청${event.request.codeParameter}의 임시 암호와 요청의 사용자 이름${event.request.usernameParameter}에서 채워집니다.

사용자 지정 메시지는 codeParameter 및 의 값을 smsMessage emailMessage 응답 객체usernameParameter에 삽입해야 합니다. 이 예제에서는 함수가 응답 필드 event.response.smsMessage 및 에 동일한 메시지를 기록합니다event.response.emailMessage.

이메일 메시지의 최대 길이는 20,000UTF~8자입니다. 이 길이에는 확인 코드가 포함됩니다. 이러한 이메일에서 HTML 태그를 사용할 수 있습니다. SMS 메시지의 최대 길이는 140UTF~8자입니다. 이 길이에는 확인 코드가 포함됩니다.

응답에는 SMS 및 이메일 모두에 대한 메시지가 포함됩니다.

Node.js
const handler = async (event) => { if (event.triggerSource === "CustomMessage_AdminCreateUser") { const message = `Welcome to the service. Your user name is ${event.request.usernameParameter}. Your temporary password is ${event.request.codeParameter}`; event.response.smsMessage = message; event.response.emailMessage = message; event.response.emailSubject = "Welcome to the service"; } return event; }; export { handler };

Amazon Cognito는 이벤트 정보를 Lambda 함수에 전달합니다. 그런 다음 함수는 응답이 변경되면 동일한 이벤트 객체를 Amazon Cognito에 반환합니다. Lambda 콘솔에서 해당 Lambda 트리거와 관련 있는 데이터로 테스트 이벤트를 설정할 수 있습니다. 다음은 이 코드 샘플의 테스트 이벤트입니다.

JSON
{ "version": 1, "triggerSource": "CustomMessage_AdminCreateUser", "region": "<region>", "userPoolId": "<userPoolId>", "userName": "<userName>", "callerContext": { "awsSdk": "<calling aws sdk with version>", "clientId": "<apps client id>", ... }, "request": { "userAttributes": { "phone_number_verified": false, "email_verified": true, ... }, "codeParameter": "####", "usernameParameter": "username" }, "response": { "smsMessage": "<custom message to be sent in the message with code parameter and username parameter>" "emailMessage": "<custom message to be sent in the message with code parameter and username parameter>" "emailSubject": "<custom email subject>" } }