2017-06-13 44 views
1

我使用luis.ai和botframework正確答案:如何讓機器人以響應來自意圖

我的問題是,當我嘗試發送郵件(不屬於話語的一部分,所以未知輸入我沒有收到消息:「對不起,我不明白'{result.Query}',請再試一次」; ...但是每次都會出現歡迎消息,來自問候意向

我不' t知道爲什麼會發生這種情況 您能否幫我嗎?

這是我的代碼:MessagController.cs

using System.Net; 
using System.Net.Http; 
using System.Threading.Tasks; 
using System.Web.Http; 
using Microsoft.Bot.Builder.Dialogs; 
using Microsoft.Bot.Connector; 

namespace FirstBotApplication 
    { 
//[BotAuthentication] 
public class MessagesController : ApiController 
{ 
    /// <summary> 
    /// POST: api/Messages 
    /// Receive a message from a user and reply to it 
    /// </summary> 
    public async Task<HttpResponseMessage> Post([FromBody]Activity activity) 
    { 
     if (activity.Type == ActivityTypes.Message) 
     { 
      await Conversation.SendAsync(activity,() => new AllTheBot()); 
     } 
     else 
     { 
      HandleSystemMessage(activity); 
     } 
     var response = Request.CreateResponse(HttpStatusCode.OK); 
     return response; 
    } 

    private Activity HandleSystemMessage(Activity message) 
    { 
     if (message.Type == ActivityTypes.DeleteUserData) 
     { 
      // Implement user deletion here 
      // If we handle user deletion, return a real message 
     } 
     else if (message.Type == ActivityTypes.ConversationUpdate) 
     { 
      // Handle conversation state changes, like members being added and removed 
      // Use Activity.MembersAdded and Activity.MembersRemoved and Activity.Action for info 
      // Not available in all channels 
     } 
     else if (message.Type == ActivityTypes.ContactRelationUpdate) 
     { 
      // Handle add/remove from contact lists 
      // Activity.From + Activity.Action represent what happened 
     } 
     else if (message.Type == ActivityTypes.Typing) 
     { 
      // Handle knowing tha the user is typing 
     } 
     else if (message.Type == ActivityTypes.Ping) 
     { 
     } 

     return null; 
    } 
    } 
} 

luis.cs

using Microsoft.Bot.Builder.Dialogs; 
    using Microsoft.Bot.Builder.Luis; 
    using Microsoft.Bot.Builder.Luis.Models; 
    using Microsoft.Bot.Connector; 
    using System; 
    using System.Collections.Generic; 
    using System.IO; 
    using System.Linq; 
    using System.Threading.Tasks; 
    using System.Web; 


    namespace FirstBotApplication 
     { 
    // [LuisModel("Please Enter Your LUIS Model ID", "Please Enter Your LUIS 
    Subscription Key")] 

[Serializable] 
[LuisModel("xxxxxxx", "xxxxxxxxxxxx")] 

public class AllTheBot : LuisDialog<object> 
{ 
    // internal static string results; 
    public async Task None(IDialogContext context, LuisResult result) 
    { 
     string message = $"Sorry, I did not understand '{result.Query}'. Please try again"; 

     await context.PostAsync(message); 

     context.Wait(this.MessageReceived); 

} 









    [LuisIntent("grettings")] 
    [LuisIntent("intentfr")] 
    public async Task Greeting(IDialogContext context, IAwaitable<IMessageActivity> activity, LuisResult result) 
    { 
     //await context.PostAsync 
     //("Yes, you can leave your baggage at the Left Baggage counters located in all terminals. This service is available 24 hours daily at:" 
     //+ Environment.NewLine + "\n\n Terminal 1" +Environment.NewLine + " - Departure Transit Lounge West, Level 2" + Environment.NewLine + " - Level 3, Public Area" 
     //+ Environment.NewLine + "\n\n Terminal 2" +Environment.NewLine + " - Departure Transit Lounge Central, Level 2" + Environment.NewLine + " - Arrival Hall North, Level 1, Public Area" 
     //+ Environment.NewLine + "\n\n Terminal 3" + Environment.NewLine + " - Departure Transit Lounge North, Level 2" + Environment.NewLine + " - Departure Transit Lounge North, Level 2" 


      await context.PostAsync("Welcome :) "); 

      context.Wait(MessageReceived); 
     // results = "BaggageStorage";  
    } 

    [LuisIntent("test")] 
    public async Task test(IDialogContext context, IAwaitable<IMessageActivity> activity, LuisResult result) 
    { 
     await context.PostAsync("Do you want to test our bot ? We suggest to type : hi or who are you, help etc.."); 
     context.Wait(MessageReceived); 
    } 

    [LuisIntent("thankyou")] 
    public async Task thankyou(IDialogContext context, IAwaitable<IMessageActivity> activity, LuisResult result) 
    { 
     await context.PostAsync("I want to thank you for your time."); 
     context.Wait(MessageReceived); 
    } 



    [LuisIntent("exit")] 
     [LuisIntent("Utilities.Stop")] 
    public async Task exit(IDialogContext context, IAwaitable<IMessageActivity> activity, LuisResult result) 
    { 
     await context.PostAsync("Thank you for your time ! You are welcome again here :) "); 
     context.Wait(MessageReceived); 
    } 




} 
} 

回答

1

你無法不與 「無」 和空意圖裝飾。更新你的方法,所以它看起來像下面這樣:

[LuisIntent("None")] 
[LuisIntent("")] 
public async Task None(IDialogContext context, LuisResult result) 
{ 
    string message = $"Sorry, I did not understand '{result.Query}'. Please try again"; 

    await context.PostAsync(message); 

    context.Wait(this.MessageReceived); 
} 
+0

我嘗試這... ...但它是一回事:( – user38

+0

你需要做的,並且確保您在LUIS有沒有意圖,這是「訓練」相應 –

+0

後,我訓練機器人...作品好:0 thnx對所有 – user38