MS бот | QnAmaker - как отобразить ответы в упорядоченном / маркированном формате - PullRequest
1 голос
/ 21 февраля 2020

Я использую QnAMaker в качестве бота для своего чат-бота, который работает на прямом канале бота. Я хочу отобразить некоторые ответы в маркированном / пронумерованном формате.

Я пробовал некоторые методы, упомянутые в на некоторых веб-сайтах, включая этот.

, например,

"Привет, вот мой список \ n \ n" + "* Item 1 \ n \ n" + "* Item 2 \ n \ n" + "Item 1");

но у меня ничего не получалось,
enter image description here

Кроме того, я хочу знать, возможно ли отобразить таблицу данных / или любые данные HTML как Ответ бота.

Если у кого-то есть решение этой проблемы, пожалуйста, сообщите мне

Ответы [ 2 ]

3 голосов
/ 21 февраля 2020

Кажется, вы пытаетесь отформатировать текст в 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://stackoverflow.com/users/9663070/md-farid-uddin-kiron) 3"), cancellationToken);

См. Снимок экрана ниже:

enter image description here

Как бы вы это сделали:

Я уже дал вам пример кода выше, дополнительно сохранить Имея в виду пробел между синтаксисом, например, когда вы делаете hyperlink, вы должны следовать его структуре как [title](URL), но если вы поставите пробел после угловой скобки заголовка [], она не будет работать, как ожидается, также для жирного шрифта Жирный не должно содержать пробелов до и после. То же самое произошло с вашим кодом.

Другая проблема - new line, вы можете использовать \n\n, даже Environment.NewLine

Я хочу знать, возможно ли отобразить таблица данных / или любые HTML данные в качестве ответа бота?

Ответ NO к сожалению, вы не можете отобразить данные таблицы на боте в данный момент. Но он поддерживает несколько HTML Tag надеюсь, что вы получили ответ.

Если вы хотите узнать больше о Azure Bot Card Formatting, вы можете сослаться на официальный документ

Надеюсь, это поможет, и не стесняйтесь спрашивать, когда у вас возникнут какие-либо вопросы.

1 голос
/ 21 февраля 2020

На самом деле возможно форматировать сообщение в табличном формате, используя уценку. Я не уверен, что он будет работать с QnA Maker, и я почти уверен, что он не будет работать для каждого канала, но для стандартного веб-чата я смог отправить сообщения в формате таблицы следующим образом:

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

Я, вероятно, не рекомендовал бы это, хотя, потому что нет никакой гарантии, что он будет отображаться правильно по всем каналам Вместо этого я начал использовать Карусели для отображения предметов похожим образом. Например:

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

Я использовал Карты Героев, чтобы построить это, хотя вы могли форматировать карты так, как хотели, используя Адаптивные Карты. Хотя они не будут отображаться одинаковыми во всех каналах, они должны работать во всех каналах, поэтому безопаснее, чем использование табличной разметки или HTML.

...