我正在使用boto3 python模块在运行时动态创建插槽类型。
但是我已经正确地编写了代码,但是在LEX控制台的SLOTTYPE列表中没有看到任何插槽类型。
创建了一个BOT,与AWS Lex,AWS Lamda和AWS RDS MySQL一起运行。
我正在使用AWS Lex Models API创建具有值的Slotype。
我尝试过,但是我听不懂逻辑。
Python代码:
import pymysql
import sys
import logging
import boto3
logger = logging.getLogger()
logger.setLevel(logging.INFO)
client = boto3.client('lex-models')
def createSlot_Type_6():
response_ = client.put_slot_type(
name='enable',
description='',
enumerationValues=[
{
"value": "enable",
"synonyms": [
"enable"
]
},
{
"value": "turn on",
"synonyms": [
"turn on"
]
},
{
"value": "switch on",
"synonyms": [
"switch on"
]
},
{
"value": "activate",
"synonyms": [
"activate"
]
}
],
# checksum='1',
# valueSelectionStrategy='ORIGINAL_VALUE'|'TOP_RESOLUTION'
)
return response_
def delegate(session_attributes, slots):
return {
'sessionAttributes': session_attributes,
'dialogAction': {
'type': 'Delegate',
'slots': slots
}
}
def build_response(message):
return {
"dialogAction":{
"type":"Close",
"fulfillmentState":"Fulfilled",
"message":{
"contentType":"PlainText",
"content":message
}
}
}
def perform_action_DTC_Claim(intent_request):
source = intent_request['invocationSource']
output_session_attributes = intent_request['sessionAttributes'] if
intent_request['sessionAttributes'] is not None else {}
slots = intent_request['currentIntent']['slots']
# whatever you want to do
if source == 'DialogCodeHook':
# Perform basic validation on the supplied input slots.
return delegate(output_session_attributes, slots)
if source == 'FulfillmentCodeHook':
# action fulfillment code
msg = "Hi, I am a xxx-BOT. i can help you with following: A B C"
return createSlot_Type_6()
def main(event,context):
logger.debug(event)
#return dispatch(event)
return perform_action_DTC_Claim(event)
我希望使用AWS Lex Modeling Service API动态创建插槽类型。
注意:
我的DialogCodeHook正常工作,因为我对lex进行了DELEGATE响应以采取进一步的措施,但是当我调用FulfillmentCodeHook并在其中创建运行时插槽类型名称enable时,我的代码失败了。