LexResponse 输出不理解 HTML 数据

LexResponse output does not understand HTML data

我在尝试让我的 AWS Lambda 函数在 运行 一个 SQL 查询时成功输出一系列 HTML 链接时遇到问题。

private string GetEventSearchResults(ILambdaContext context, List<Event> events, string CustomerNumber)
    {
        var result = string.Empty;
        var link = string.Empty;

        if (events.Count > 0)
        {
            result = $"Events for {CustomerNumber}:";
            foreach (var evt in events)
            {
                link = "http://localhost/event/" + $"{evt.ID}";
                result += $"<br><a href=\"{link}\">Event: {evt.ID} - Status: {evt.Status}</a>";                                    
            }
        }
        else
        {
            result = "No Data found matching your query";
        }           

        return result;
    }     

当我的 Lambda 函数将此方法作为 LexResponse 调用时,

replyMessage = GetEventSearchResults(context, eventList, query.CustomerNumber);

return Close(
                sessionAttributes,
                "Fulfilled",
                new LexResponse.LexMessage
                {
                    ContentType = "PlainText",
                    Content = replyMessage
                }
                );

此响应随后由 Javascript 函数呈现在我的 HTML 页面中。呈现响应的 Javascript 的相关部分:

function showResponse(lexResponse) {

        var conversationDiv = document.getElementById('conversation');
        var responsePara = document.createElement("P");
        responsePara.className = 'lexResponse';
        if (lexResponse.message) {              
            responsePara.appendChild(document.createTextNode(lexResponse.message));
            responsePara.appendChild(document.createElement('br'));
        }
        if (lexResponse.dialogState === 'ReadyForFulfillment') {
            responsePara.appendChild(document.createTextNode(
                'Ready for fulfillment'));
            // TODO:  show slot values
        } 
        conversationDiv.appendChild(responsePara);
        conversationDiv.scrollTop = conversationDiv.scrollHeight;
    }

然而,Lex bot 显示的输出如下所示:

Lex Bot Output

任何人都可以帮助我了解到底发生了什么吗? Lex Response 的内容类型对此负责吗? (只有纯文本和 SSML 可用于 Lex 响应,所以我无法更改)

此外,如果可能的话,任何人都可以解释一下如何解决这个问题吗?谢谢!

你的代码是正确的,输出也是正确的。
但是,控制台 window 无法呈现结果的 HTML 部分。

您将在其上部署聊天机器人的客户端负责呈现输出。例如,如果您使用 ResponseCard 响应,控制台或网站将无法正确呈现它,但它会在 Facebook 和 Slack 上正确显示。因此,如果您将聊天机器人集成到某个网站上,它将根据您的需要在输出中正确显示链接。

您可以先尝试将您的聊天机器人与 Slack 或 Facebook 集成,以查看输出的呈现效果。

希望对您有所帮助。

经过进一步的试验和错误,我设法找到了适合我的解决方案。

function showResponse(lexResponse) {

        var conversationDiv = document.getElementById('conversation');
        var responsePara = document.createElement("P");
        responsePara.className = 'lexResponse';
        if (lexResponse.message) {
            var message = lexResponse.message.replace(/"/g, '\'');
            responsePara.innerHTML = message;               
            responsePara.appendChild(document.createElement('br'));
        }           
        conversationDiv.appendChild(responsePara);
        conversationDiv.scrollTop = conversationDiv.scrollHeight;
    }

通过将 LexResponse 设为内部 HTML,它修复了文本的标记,因此每次都可以看到 link。