LexResponse输出不理解HTML数据 [英] LexResponse output does not understand HTML data

查看:136
本文介绍了LexResponse输出不理解HTML数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

  private string GetEventSearchResults(ILambdaContext context,List< Event> events,string CustomerNumber)
{
var result = string.Empty;
var link = string.Empty; $(b)b
if(events.Count> 0)
{
result = ${CustomerNumber}的事件:;
foreach(var evt in events)
{
link =http:// localhost / event /+ ${evt.ID};
result + = $< br>< a href = \{link} \>事件:{evt.ID} - 状态:{evt.Status}< / a> ;
}
}
else
{
result =没有找到符合您的查询的数据;
}

返回结果;
}

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

  replyMessage = GetEventSearchResults(context,eventList,query.CustomerNumber); 
$ b $ 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:显示插槽值
}
conversationDiv.appendChild(responsePara);
conversationDiv.scrollTop = conversationDiv.scrollHeight;
}

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

Lex Bot输出 p>

任何人都可以请帮我理解究竟发生了什么? Lex Response的内容类型是否对此负责? (只有明文和SSML可用于Lex Response,所以我无法更改)

另外,如果可能的话,任何人都可以请解释如何尽可能地解决这个问题?谢谢!

解决方案

经过进一步的试验和错误,我设法找到了适用于我的解决方案。
$ b $ pre $ function showResponse
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,它修复了文本的标记,因此每次都可以看到链接。

I'm having a problem trying to get my AWS Lambda function to successfully output a series of HTML links when its running a SQL Query.

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;
    }     

When this method is called by my Lambda function as a LexResponse,

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

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

This response is then rendered in my HTML page by a Javascript function. Relevant portion of the Javascript that renders the response:

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;
    }

However, the output shown by the Lex bot is as shown below:

Lex Bot Output

Can anyone please help me understand what exactly is going on? Is the content type of the Lex Response responsible for this? (there's only plaintext and SSML available for Lex Response so I can't change that)

Also, if possible, can anyone please explain how to fix this if at all possible? Thanks!

解决方案

After further trial and error, I managed to get a solution that works for me.

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;
    }

By making the LexResponse an Inner HTML, it fixed the markup of the text and thus the link can be seen everytime.

这篇关于LexResponse输出不理解HTML数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆