概要
CognitoではLabmdaトリガーを使って様々な処理を行うことが出来ます。
そのうちの一つとして送信するメッセージのカスタマイズがあるのですが、AdminCreateUserがトリガーイベントの場合のドキュメントがなかったのでメモしておきます。
AWSのドキュメントが更新されたら不要になります。
参考
- http://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html
- http://blog.cacoveanu.com/2017/03/03/amazon-cognito-email-customization.html
詳細
AdminCreateUserは管理者がユーザを作成するAPIです。
管理者がユーザを作成すると、一時パスワードが作成されてユーザにメールが届きます。
ユーザがログイン後にパスワードを変更するとCONFIRMED状態になります。
先に結論として、うまく動作したLambdaのソースコードを載せておきます。
def lambda_handler(event, context):
if event["triggerSource"] == "CustomMessage_AdminCreateUser":
event["response"] = {
"emailSubject": "Custom Subject",
"emailMessage": "Your username is " + event["request"]["usernameParameter"] + "<br>Your temporary password is " + event["request"]["codeParameter"]
}
return event
カスタムメッセージのレスポンスは以下のようにドキュメントに記載されています。
"response": {
"smsMessage": "string",
"emailMessage": "string",
"emailSubject": "string";
}
SMSのメッセージとメールの件名・本文が変更可能なようです。
emailMessageの説明は以下のようになっています。
emailMessage
ユーザーに送信されるカスタム E メールメッセージ。リクエストで受信される codeParameter 値を含める必要があります。
なるほど codeParameter
を入れれば良いのか!ということでドキュメントのサンプルコードを参考に以下のようなコードを書きます。
event["response"]["emailSubject"] = "Welcome to the service"
event["response"]["emailMessage"] = "Your confirmation code is " + event["request"]["codeParameter"]
しかし、件名は変わるものの本文は変わりません。
ドキュメントどおりにやっているのに動かない...ということで他の人がどうやっているのか調べていったところ、レスポンスに usernameParameter
を含めていることが分かりました。
これはリクエストに含まれており、 codeParameter
のようなものです。
そこで usernameParameter
を入れたところあっさり成功しました。
まとめ
usernameParameter
についてAWSのドキュメントを探しても全く見つかりませんでしたが、AdminCreateUser時の招待メッセージをカスタマイズしたい場合は必要なようでした。