Amazon Cognito のUserPoolsにおいてSMS/Eメール認証で日本語メッセージを送信する方法を記す。
背景
アカウント作成や電話番号変更などの場合にSMSやEメールで認証コードを送信することができる。
デフォルトのメッセージは下記のような英語の文面。
Your verification code is {####}.
送信されるメッセージは設定画面のフォームで変更することができるが、Eメールの文面に日本語を入力すると正規表現エラーになってしまう。(2017/05/12時点)
対処方法
同じく設定画面で設定できるCustom messageトリガーには日本語に対する制限がないためこれで回避する。
Custom messageが扱うのはtriggerSourceが以下の場合。1
triggerSource 値 | 内容 |
---|---|
CustomMessage_SignUp | カスタムメッセージ - サインアップ後に確認コードを送信するため |
CustomMessage_ResendCode | カスタムメッセージ - 既存のユーザーに確認コードを再送するため |
CustomMessage_ForgotPassword | カスタムメッセージ - 忘れたパスワードのリクエスト用の確認コードを送信するため |
CustomMessage_UpdateUserAttribute | カスタムメッセージ - ユーザーの E メールまたは電話番号が変更されると、このトリガーは確認コードをそのユーザーに自動的に送信します。他の属性には使用できません。 |
CustomMessage_VerifyUserAttribute | カスタムメッセージ – このトリガーは、ユーザーが手動で新しい E メールまたは電話番号をリクエストすると、ユーザーに認証コードを送信します。 |
CustomMessage_Authentication | カスタムメッセージ - 認証時に MFA コードを送信するため |
とりあえず日本語化したいだけなら以下のコードでlambdaを作って、
Triggersタブの[Custom message]にそのlambdaを指定すればいい。
(★2017/5/17追記。マネジメントコンソールのバグらしいです。sdkから実行しても解決できそうです。Cognito User Poolsでemail verification messageのメール送信を日本語で行う方法)
python2.7のコード例
#!/usr/bin/env python
# -*- coding: utf-8 -*-
def lambda_handler(event, context):
codeType = 'コード種別'
if event['triggerSource'] == 'CustomMessage_SignUp':
codeType = 'アカウント認証用コード'
if event['triggerSource'] == "CustomMessage_ResendCode":
codeType = 'アカウント認証用コード(再送)'
if event['triggerSource'] == "CustomMessage_ForgotPassword":
codeType = 'パスワード再設定用コード'
if event['triggerSource'] == "CustomMessage_UpdateUserAttribute":
codeType = '電話番号もしくはメールアドレスの変更確認用コード'
if event['triggerSource'] == 'CustomMessage_VerifyUserAttribute':
codeType = '電話番号もしくはメールアドレスの登録確認用コード'
if event['triggerSource'] == "CustomMessage_Authentication":
codeType = 'MFA用コード'
event['response']['smsMessage'] = '{n}さんの{t}は [ {c} ] です。'.format(
n=event['userName'], t=codeType, c=event['request']['codeParameter'])
event['response']['emailSubject'] = codeType
event['response']['emailMessage'] = '{n}さんの{t}は [ {c} ] です。'.format(
n=event['userName'], t=codeType, c=event['request']['codeParameter'])
return event
タイトル:アカウント認証用コード
本文:taroさんのアカウント認証用コードは[ 123456 ]です。
lambdaのeventは以下の形式が渡されるので、必要に応じてカスタムできる
{
"userName": "taro",
"userPoolId": "ap-northeast-1_XXXXXXXXX",
"callerContext": {
"awsSdkVersion": "aws-sdk-js-2.6.4",
"clientId": "2mvlqpa6c4vi8ciu3uo7XXXXXX"
},
"region": "ap-northeast-1",
"request": {
"usernameParameter": null,
"userAttributes": {
"sub": "fb560XXX-XXXX-XXXX-XXXX-ae58e038XXXX",
"email_verified": "false",
"cognito:user_status": "UNCONFIRMED",
"custom:comment": "コメント",
"email": "hogehoge@example.com",
"name": "taro"
},
"codeParameter": "{####}"
},
"triggerSource": "CustomMessage_SignUp",
"version": "1",
"response": {
"emailMessage": null,
"emailSubject": null,
"smsMessage": null
}
}