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。
我在尝试让我的 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。