在生成引出槽响应时遇到问题

我想为某个插槽创建一个 dialogHook,而不是说验证类型的事情。如果插槽返回 true,那么只有我会触发我的诱导插槽,否则它会照常进行。请帮助我的方法是什么。我是对 lex 来说相对较新。


我试图在 childExists 上创建一个对话钩子,但它不起作用。


def lambda_handler(event,context):

    os.environ['TZ']='America/New_York'

    time.tzset();

    logger.debug('event.bot.name={}'.format(event['bot']['name']))

    return dispatch(event);


def dispatch(intent_request):

    intent_name=intent_request['currentIntent']['name']

    if intent_name=='HotelReservation':

        return book_hotel(intent_request)


def book_hotel(intent_request):

    slots=intent_request['currentIntent']['slots']

    welcome=intent_request['currentIntent']['slots']['welcome']

    location=intent_request['currentIntent']['slots']['Location']

    fromDate=intent_request['currentIntent']['slots']['FromDate']

    adultCount=intent_request['currentIntent']['slots']['adultCount']

    nights=intent_request['currentIntent']['slots']['nights']

    childExists=intent_request['currentIntent']['slots']['childExists']

    source=intent_request['invocationSource']

    session_attributes={}

    if source=='DialogCodeHook'and childExists.lower()=='yes':

        session_attributes={}

        return elicit_slot (

        session_attributes,

            'HotelReservation',

            'childCount',

             'AMAZON.NUMBER',            

            {

            'contentType':'PlainText',

            'content':'Please enter number of Children'

            }

        )

    elif source=='DialogCodeHook':

        output_session_attributes = intent_request['sessionAttributes'] if intent_request['sessionAttributes'] is not None else {}

        return delegate(output_session_attributes, intent_request['currentIntent']['slots'])

    else:


        return close (

            session_attributes,

                'Fulfilled',{

                'contentType':'PlainText',

                'content':'Here is the temparature in'

                }

            )


实际上我的插槽应该像往常一样运行,但是在 childExists 插槽之后我想发送一个 elicit 响应 这是可用插槽的图像

http://img4.mukewang.com/61d5107b0001800919191075.jpg

慕码人8056858
浏览 121回答 1
1回答

慕哥9229398

根据我的理解,您正在询问用户Do you have any children并将响应存储在childExists插槽中,如果答案是肯定的,那么您想询问孩子的数量。所以根据我的说法,你需要有一个额外的插槽childCount来存储孩子的数量。由于此插槽并非总是必需的,因此请勿在 amazon lex 控制台中将其标记为必需。现在,您将在您的 中检查这一点DialogCodeHook,并仅childExists == 'yes'在childCount. 我们使用这些条件的组合是为了确保它不会无限期地运行。def book_hotel(intent_request):    slots = intent_request['currentIntent']['slots']    welcome = slots['welcome']    location = slots['Location']    fromDate = slots['FromDate']    adultCount = slots['adultCount']    nights = slots['nights']    childExists = slots['childExists']    childCount = slots['childCount']    source = intent_request['invocationSource']    if source == 'DialogCodeHook':        output_session_attributes = intent_request['sessionAttributes'] if intent_request['sessionAttributes'] is not None else {}        if childExists.lower() == 'yes':            if not childCount:                return elicit_slot (                    output_session_attributes,                    'HotelReservation',                    slots,                    'childCount',                                    {                            'contentType':'PlainText',                            'content':'Please enter number of Children'                        }                    )        return delegate(output_session_attributes, intent_request['currentIntent']['slots'])    if source == 'FulfillmentCodeHook':        return close (            output_session_attributes,                'Fulfilled',{                'contentType':'PlainText',                'content':'Here is the temparature in'                }            )希望能帮助到你。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python