微软机器人 | QnAmaker- 如何以有序/项目符号格式显示答案

MS bot | QnAmaker- how to Display the answers in ordered /bulleted format

我在聊天机器人的后端使用 QnAMaker,它在直线机器人频道中 运行。 我想以项目符号/编号格式显示一些答案。

我尝试了some websites including this one.

中提到的一些方法

像这样

"Hi, Below is my list\n\n"+ "* Item 1\n\n"+ "* Item 2\n\n"+ "Item 1 ");

但对我没有任何作用,

此外,我想知道是否可以显示 table 数据/或任何 HTML 数据作为机器人的回复。

如果有人对此问题有任何解决方案,请告诉我

您似乎在尝试格式化 Azure Bot Framework 中的文本。看了你的代码后,我才知道,你已经差不多了,但是方法不正确。

您可以尝试以下方式

无序列表:

await turnContext.SendActivityAsync(MessageFactory.Text("Hi, Below is my unordered list  " + Environment.NewLine+ " 1. Item 1\r2. **Bold Item 2**\r3. **" + YourDynamicObject + "**"), cancellationToken);

有序列表:

await turnContext.SendActivityAsync(MessageFactory.Text("Hi, Below is my ordered list " + Environment.NewLine+ " - Item 1\r- **Bold Item 2**\r- [Hyperlink](https://whosebug.com/users/9663070/md-farid-uddin-kiron) 3"), cancellationToken);

请参阅下面的屏幕截图:

你会怎么做:

我已经在上面给了你代码示例,另外请记住语法之间的 space 例如,当你要制作 hyperlink 时,你必须遵循它的结构,如 [title](URL)但是如果你把 space 放在标题尖括号 [] 之后,它不会按预期工作,同样对于粗体 Bold 它不应该包含任何 space 之前和之后。您的代码也发生了同样的事情。

另一个问题是 new line 你可以使用 \n\n 甚至 Environment.NewLine

我想知道是否可以显示 table 数据/或任何 HTML 数据作为机器人的回复?

The answer is NO unfortunately you cannot display table data on bot at this moment. But it support few HTML Tag hope you got your answer.

如果您想了解更多关于 Azure Bot Card Formatting 的信息,可以参考 official document

希望对您有所帮助,遇到任何问题都可以随时提问。

实际上可以使用 markdown 将消息格式化为 table 格式。我不确定它是否适用于 QnA Maker,而且我几乎可以肯定它不会适用于所有渠道,但对于标准网络聊天,我已经能够发送 table 格式的消息,如下所示:

var ticketTable = `|Ticket# |Status |Summary|\n|:---|:---|:---|`;
for (var i = 0; i < ticketArray.length; i++) {
    ticketData = await RemedyServiceHelper.getTicketData(ticketArray[i]);
    ticketTable += `\n|${ticketData.ticketNumber}&nbsp;&nbsp;&nbsp;&nbsp;|${ticketData.status}&nbsp;&nbsp;&nbsp;&nbsp;|${ticketData.summary}|`;
}
await step.context.sendActivity(`Here is the current status of your requests:`);
await step.context.sendActivity(ticketTable);

虽然我可能不会推荐这个,因为不能保证它会通过所有渠道正确显示。我已经开始使用 Carousels 来以类似的方式显示项目。例如:

                var lineData = [];
                for (var idx = 0; idx < lineItemDetails.lineDetail.length; idx++) {
                    var title = `${lineItemDetails.orderNumber}  \r\n Line ${lineItemDetails.lineDetail[idx].lineNumber}`;
                    var message = `Product ID: ${lineItemDetails.product}  \r\n Status: ${lineItemDetails.lineDetail[idx].lineStatus}  \r\n Quantity: ${lineItemDetails.lineDetail[idx].quantity}  \r\n Date: ${lineItemDetails.lineDetail[idx].nextDate}  \r\n Carrier: ${lineItemDetails.lineDetail[idx].scacCode}  \r\n Tracking: ${lineItemDetails.lineDetail[idx].trackingNumber}`;
                    var lineCard = CardFactory.heroCard(title, message);
                    lineData.push(lineCard);
                }
                await step.context.sendActivity(`I found multiple lines or releases. Please scroll through the cards below to see each result.`);
                await step.context.sendActivity(MessageFactory.carousel(lineData));

我使用 Hero Cards 构建了这个,尽管您可以使用 Adaptive Cards 格式化卡片。虽然这些不会在所有频道中显示相同,但它们应该在所有频道中工作,因此比使用 table markdown 或HTML.