响应卡未显示在 website-lex 中

Response cards not displaying in website-lex

我创建了 Lex Chatbot 并开发了一个网站并集成了这个 Chatbot。它的工作 fine.But 按钮形式的响应卡没有显示 up.I 知道我必须从 lambda 调用它 function.So 我包含了响应卡代码。它有效,但是之后显示它返回的按钮并询问第一个插槽值 again.I 不知道我哪里错了

这是预期的对话。

用户:你好
Lex:Please 告诉我你的开斋节
User:e123456
Lex:Choose 以下影响之一:
1.low 2.high 3.medium(按钮形式)
用户点击量低
Lex:Thanks,你的票已被提高(预计)

会发生什么:

用户:你好
Lex:Please 告诉我你的开斋节
User:e123456
Lex:Choose 以下影响之一:
1.low 2.high 3.medium
用户点击量低
Lex:Please 给我你的开斋节(回去问第一个插槽值)

这是我的代码:

import json
import logging
import re
import http.client
import mimetypes

logger = logging.getLogger()
logger.setLevel(logging.DEBUG)

  
def elicit_slot_response(output_session_attributes,intent_name,slot_to_elicit,message):
    responses= {
     'dialogAction': {
     'type': 'ElicitSlot',
     'slottoElicit':'slot_to_elicit',
     'message': {
      'contentType': 'PlainText',
      'content': message
                },
      'responseCard': {
                'version': '0',
                'contentType': 'application/vnd.amazonaws.card.generic',
                'genericAttachments': [
                    {
                    'title': 'title1',
                    'subTitle': 'subtitle',
                    "buttons":[ 
                     {
                        "text":"button 1",
                        "value":"value 1"
                     },
                     {
                        "text":"button 2",
                        "value":"value 2"
                     },
                     {
                        "text":"button 3",
                        "value":"value 3"
                     }
                        ]
                    }
                    ]
                                 }
     }
   }

    return responses    


def close():
    val=  {
             "dialogAction":
            {
                "fulfillmentState":"Fulfilled",
                "type":"Close",
                "message":
                 {
                     "contentType":"PlainText",
                     "content":"Hey your ticket has been raised"
                 }
                    }
                    
                }
    print(val)
    return val
    

def lambda_handler(event, context):
    val = ""
    slots = event['currentIntent']['slots']
    empidemployee= event['currentIntent']["slots"]["empidemployee"]
    latestdesc= event['currentIntent']["slots"]["latestdesc"]
    latestimpact= event['currentIntent']["slots"]["latestimpact"]
    output_session_attributes = event['sessionAttributes'] if event['sessionAttributes'] is not None else {}
    elicit_slot_response(output_session_attributes,'latestdetails','latestimpact',"impact")
    val=close()
    return val
   
    

对话流重新启动,因为在来自包含响应卡的 Lambda 函数的 ElicitSlot 响应中,您没有返回 slots 参数,该参数将包含已作为输入的槽值用户。

因此,在 response 中包含 slots 参数,其值可能是 event['currentIntent']['slots']