2016-12-07 5 views
1

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

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

У меня возникли проблемы с приложением в рамках задачи 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); 
    } 

карта класса Вид объект I'ved созданным, что я пытаюсь отобразить.

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(); 
     }   
    } 
} 
+0

И ... какая проблема у вас? –

+0

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

+0

Какой канал вы используете? –

ответ

3

Пара вещей. Во-первых, вы, вероятно, получаете исключение 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); 
    } 
+0

Работает как очарование благодаря обратной связи. Теперь я могу двигаться вперед с моим проектом! –