Python 将参数传递给AWS Boto3 Cognito idp是';API无法识别

Python 将参数传递给AWS Boto3 Cognito idp是';API无法识别,python,amazon-web-services,api,boto3,amazon-cognito,Python,Amazon Web Services,Api,Boto3,Amazon Cognito,我正在尝试在我的Cognito用户池中创建一个新用户。我在用电话 这是我的剧本: #/usr/bin/env蟒蛇3 进口boto3 导入argparse client=bot3.client('cognito-idp')) parser=argparse.ArgumentParser() parser.add_参数('-username',dest='username')) parser.add_参数('-email',dest='email')) parser.add_参数('-phone_n

我正在尝试在我的Cognito用户池中创建一个新用户。我在用电话

这是我的剧本:

#/usr/bin/env蟒蛇3
进口boto3
导入argparse
client=bot3.client('cognito-idp'))
parser=argparse.ArgumentParser()
parser.add_参数('-username',dest='username'))
parser.add_参数('-email',dest='email'))
parser.add_参数('-phone_number',dest='phone_number'))
args=parser.parse_args()
响应=client.admin\u创建\u用户(
UserPoolId='eu-central-aaaaaaa',
Username=args.Username,
用户属性=[
{
“名称”:“电子邮件”,
“值”:args.email,
“姓名”:“电话号码”,
“值”:args.phone_number,
},
],
#临时密码=“”,
ForceAliasCreation=False,
MessageAction='ressend',
期望交货期=[
“电子邮件”
],
)
如您所见,
MessageAction=
被设置为
RESEND

我正在运行以下命令:
cognito.py-username-test-emailtest@test.com-电话号码+12345678

这就是我得到的错误:

botocore.errorfactory.InvalidParameterException: An error occurred (InvalidParameterException) when calling the AdminCreateUser operation: No email provided but desired delivery medium was Email
如果我尝试使用用户的
email\u-verified
phone\u-number\u-verified
属性,也会出现类似错误。如果我将它们设置为true,我会收到错误,告诉我无法验证电子邮件/电话,因为它没有提供。但正如你可以清楚地看到的,它是

我试图理解为什么我的论点没有得到认可

奇怪的是,如果我将属性更改为
MessageAction='SUPPRESS'
,并且如果我没有添加验证电子邮件/电话属性,那么用户将使用我传递的用户名、电子邮件和电话创建

因此,仅作为示例,以下是工作代码:

#/usr/bin/env蟒蛇3
进口boto3
导入argparse
client=bot3.client('cognito-idp'))
parser=argparse.ArgumentParser()
parser.add_参数('-username',dest='username'))
parser.add_参数('-email',dest='email'))
parser.add_参数('-phone_number',dest='phone_number'))
args=parser.parse_args()
响应=client.admin\u创建\u用户(
UserPoolId='eu-central-aaaaaa',
Username=args.Username,
用户属性=[
{
“名称”:“电子邮件”,
“值”:args.email,
“姓名”:“电话号码”,
“值”:args.phone_number,
},
],
#临时密码=“”,
ForceAliasCreation=False,
MessageAction='SUPPRESS',
期望交货期=[
“电子邮件”
],
)
我可以再次运行该命令,并将创建用户:

cognito.py-用户名测试-电子邮件test@test.com-电话号码+12345678
[服务器]$

问题是,在UserAttributes数组中,每个用户需要一个dict属性。您只是在代码中用电话号码属性覆盖电子邮件属性


响应=client.admin\u创建\u用户(
UserPoolId='eu-central-1_pDui4EwA8',
Username=args.Username,
用户属性=[
{
“名称”:“电子邮件”,
“值”:args.email,
},
{
“姓名”:“电话号码”,
“值”:args.phone_number,
},
],
#临时密码=“”,
ForceAliasCreation=False,
MessageAction='ressend',
期望交货期=[
“电子邮件”
],
)

谢谢。这似乎几乎奏效了。当我使用
重新发送
时,会出现一个错误,但当值为
抑制
时,它会起作用。这是我使用“重新发送”时出现的错误:
botocore.errorfactory.UserNotFoundException:调用AdminCreateUser操作时发生错误(UserNotFoundException):用户不存在。
哦,没错。如果用户不存在yetI-see,您需要省略它或将其设置为抑制,那么注册某人的替代方法是什么?我希望系统向新用户发送一封电子邮件以完成注册。如果我没记错的话,省略它应该会发送电子邮件。你是个天才安德鲁。谢谢,非常感谢:)