首页 > 解决方案 > 响应卡未显示 -Amazon lex

问题描述

我创建了一个 lex 聊天机器人并将其集成到网站中。它工作正常。我知道我必须从 lambda 调用响应卡。我也这样做了。另外,我在 lex 控制台中启用了响应卡复选框。毕竟,我也看不到网站上的按钮。除了响应卡之外,还有其他方法可以显示按钮吗?

下面是代码:在这里,完成后,我已经给出了响应卡,这意味着在消息“嘿,您的票已被提出”之后,将显示按钮。这显示在 lex test 聊天机器人中。

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

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


def close():
    val=  {
             "dialogAction":
            {
                "fulfillmentState":"Fulfilled",
                "type":"Close",
                "message":
                 {
                     "contentType":"PlainText",
                     "content":"Hey your ticket has been raised"
                 },
                '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"
                     }
                        ]
                    }
                    ]
                                 }
                    }
                }
    print(val)
    return val
    

def lambda_handler(event, context):
   
    slots = event['currentIntent']['slots']
    empidemployee= event['currentIntent']["slots"]["empidemployee"]
    latestdesc= event['currentIntent']["slots"]["latestdesc"]
    latestservice= event['currentIntent']["slots"]["latestservice"]
    latestimpactvalue= event['currentIntent']["slots"]["latestimpactvalue"]
    latesturgency= event['currentIntent']["slots"]["latesturgency"]
    basicinfo=event['currentIntent']["slots"]["basicinfo"]
    val=close()
    return val
    

在此处输入图像描述

标签: aws-lambdaamazon-lex

解决方案


我相信你的问题是版本号。尝试将其设置为1'1'

我找不到一个明确的解释,但至少这里有一些证据:

来自 AWS 示例文档:动态生成响应卡

responseCard: {
    "version": 1,
        ...
}

我还深入研究了您正在使用的 lex-web-ui 文件,并且在lex-web-ui.js文件中它具有以下内容:

shouldDisplayResponseCard: function shouldDisplayResponseCard() {
  return this.message.responseCard && (this.message.responseCard.version === '1' || this.message.responseCard.version === 1) && this.message.responseCard.contentType === 'application/vnd.amazonaws.card.generic' && 'genericAttachments' in this.message.responseCard && this.message.responseCard.genericAttachments instanceof Array;
},

并专门检查(this.message.responseCard.version === '1' || this.message.responseCard.version === 1)以显示。


推荐阅读