响应卡未显示在 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']
。
我创建了 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']
。