为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕码人8056858 2022-01-05 11:28:27
我想为某个插槽创建一个 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 响应 这是可用插槽的图像
查看完整描述

1 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

根据我的理解,您正在询问用户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'

                }

            )

希望能帮助到你。


查看完整回答
反对 回复 2022-01-05
  • 1 回答
  • 0 关注
  • 120 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信