Добавить вложение карты в сообщение с помощью Microsoft Bot Framework

Проблема:

  • Прикрепляя карточку к диалоговому окну ответа, следующий код в основном взят из примеров ботов, но не отображает карточку в диалоговом окне ответа в ключевых частях логики отображения, которые я использовал.

У меня проблемы с прикреплением внутри задачи LUIS Intent.

Цель

  • Попросите пользователя задать вопрос, который LUIS не распознает, а затем ответить карточкой помощи, как только код перейдет в задачу LUIS intent, отвечающую за обработку нераспознанных. Могу ли я рассмотреть какую-либо другую структуру окна справки, в которой все еще используются карты?

Код

Откуда должна отображаться моя карта

[LuisIntent("None")]    
public async Task NoneHandler(IDialogContext context, LuisResult result) {
        string worriedFace = "\U0001F61F";
        string smilingFace = "\U0001F642";

        await context.PostAsync("I'm sorry, I didn't get that " + worriedFace + '.');
        await context.PostAsync("Here are some things I know how to talk about!" + smilingFace);

        var message = context.MakeMessage();

        var attachment = new CardDialog().ReceiptCard();
        message.Attachments.Add(attachment);

        await context.PostAsync(message);
    }

Класс карты созданного мной объекта View, который я пытаюсь отобразить.

namespace LUISBankingBot.Views
{
    using System.Collections.Generic;
    using Microsoft.Bot.Connector;
    using Microsoft.Bot.Builder.Dialogs;
    using System;
    using System.Threading.Tasks;

    public class CardDialog : IDialog<object>
    {
        public Task StartAsync(IDialogContext context)
        {
            throw new NotImplementedException();
        }

        public Attachment ReceiptCard()
        {
            var receiptCard = new ReceiptCard
            {
                Title = "John Doe",
                Facts = new List<Fact> { new Fact("Order Number", "1234"), new Fact("Payment Method", "VISA 5555-****") },
                Items = new List<ReceiptItem>
                {
                    new ReceiptItem("Data Transfer", price: "$ 38.45", quantity: "368", image: new CardImage(url: "https://github.com/amido/azure-vector-icons/raw/master/renders/traffic-manager.png")),
                    new ReceiptItem("App Service", price: "$ 45.00", quantity: "720", image: new CardImage(url: "https://github.com/amido/azure-vector-icons/raw/master/renders/cloud-service.png")),
                },
                Tax = "$ 7.50",
                Total = "$ 90.95",
                Buttons = new List<CardAction>
                {
                    new CardAction(
                        ActionTypes.OpenUrl,
                        "More information",
                        "https://account.windowsazure.com/content/6.10.1.38-.8225.160809-1618/aux-pre/images/offer-icon-freetrial.png",
                        "https://azure.microsoft.com/en-us/pricing/")
                }
            };

            return receiptCard.ToAttachment();
        }        
    }
}

person greg    schedule 07.12.2016    source источник
comment
И ... в чем проблема?   -  person Ezequiel Jadib    schedule 07.12.2016
comment
Проблема, с которой я столкнулся, заключается в прикреплении карточки к диалоговому окну ответа. Следующий код в основном взят из примеров ботов, но не отображает карточку в диалоговом окне ответа.   -  person greg    schedule 07.12.2016
comment
Какой канал вы используете?   -  person Ezequiel Jadib    schedule 07.12.2016
comment
Вы имеете в виду Microsoft.Bot.Connector под каналом?   -  person greg    schedule 07.12.2016
comment
Нет; Вы пробуете это в эмуляторе? в Фейсбуке? Skype? Бывает только с картой квитанции или, например, карта героя тоже не отображается?   -  person Ezequiel Jadib    schedule 07.12.2016
comment
С помощью эмулятора Microsoft Bot Framework (v.3.5.21). Образец github.com/Microsoft/BotBuilder-Samples/tree/ master / CSharp / работает в моем канале, но моя реализация в моем приложении не работает, так как я делаю что-то немного сложное с объединением реализации LUIS.   -  person greg    schedule 07.12.2016
comment
Давайте продолжим это обсуждение в чате.   -  person greg    schedule 08.12.2016


Ответы (1)


Пара вещей. Во-первых, вы, вероятно, получаете исключение null ref, когда пытаетесь добавить вложение, поскольку массив вложений еще не инициализирован.

message.Attachments = new List<Attachment>();

Кроме того, вам не нужно создавать CardDialog. Вот пример, который работает:

    [LuisIntent("None")]
    public async Task NoneHandler(IDialogContext context, LuisResult result)
    {
        string worriedFace = "\U0001F61F";
        string smilingFace = "\U0001F642";

        await context.PostAsync("I'm sorry, I didn't get that " + worriedFace + '.');
        await context.PostAsync("Here are some things I know how to talk about!" + smilingFace);

        var message = context.MakeMessage();

        var receiptCard = new ReceiptCard
        {
            Title = "John Doe",
            Facts = new List<Fact> { new Fact("Order Number", "1234"), new Fact("Payment Method", "VISA 5555-****") },
            Items = new List<ReceiptItem>
            {
                new ReceiptItem("Data Transfer", price: "$ 38.45", quantity: "368", image: new CardImage(url: "https://github.com/amido/azure-vector-icons/raw/master/renders/traffic-manager.png")),
                new ReceiptItem("App Service", price: "$ 45.00", quantity: "720", image: new CardImage(url: "https://github.com/amido/azure-vector-icons/raw/master/renders/cloud-service.png")),
            },
            Tax = "$ 7.50",
            Total = "$ 90.95",
            Buttons = new List<CardAction>
            {
                new CardAction(
                    ActionTypes.OpenUrl,
                    "More information",
                    "https://github.com/amido/azure-vector-icons/raw/master/renders/traffic-manager.png",
                    "https://azure.microsoft.com/en-us/pricing/")
            }
        };

        message.Attachments = new List<Attachment>();
        message.Attachments.Add(receiptCard.ToAttachment());

        await context.PostAsync(message);
    }
person Lars    schedule 08.12.2016
comment
Работает как шарм ???? спасибо за отзыв. Теперь я могу двигаться дальше со своим проектом! - person greg; 06.01.2017