2017-06-27 108 views
0

我正在爲Microsoft團隊的機器人工作。我正在使用自定義機器人功能。我得到了bot作爲sideloaded包,但由於我的網絡的限制,我需要保持bot內部和使用自定義bot功能。我目前正在通過使用ngrok來隧道到我的本地主機來測試它。團隊機器人Activity.CreateReply拋出NullReferenceException

我現在遇到了一個問題,當我嘗試創建我的回覆。每當我打電話給我:

var reply = activity.CreateReply(message.ReadToEnd()); 

我得到一個NullReferenceException,說「對象引用未設置爲對象的實例」。消息是一個打開的.txt文件。每次我調用activity.CreateReply()時都會出現此錯誤。我不明白的一部分是,Bot框架模擬器中的一切都按預期工作,並且bot是一個sideloaded軟件包,但bot不是一個自定義bot。

這裏是我的全部Post方法:

public async Task<HttpResponseMessage> Post([FromBody]Activity activity) 
    { 
     var connector = new ConnectorClient(new Uri(activity.ServiceUrl)); 

     if (activity.Type == ActivityTypes.Message) 
     { 
      // Commands: 
      // Retrieve TFS Work Item(s) 
      if (new Regex(@"\but\s?\d{5}\b").IsMatch(activity.Text.ToLower())) 
      { 
       var reply = new RetrieveWorkItem(); 
       await connector.Conversations.ReplyToActivityAsync(reply.Response(activity)); 
      } 
      // Help 
      else if (activity.Text.ToLower().Contains("help")) 
      { 
       var message = File.OpenText($"{System.AppDomain.CurrentDomain.BaseDirectory}/Messages/HelpMessage.txt"); 
       var reply = activity.CreateReply(message.ReadToEnd()); 
       await connector.Conversations.ReplyToActivityAsync(reply); 
      } 
      // Not Recognized 
      else 
      { 
       var reply = activity.CreateReply("Command not recognized. Type \"@Keller Bot Help\" for a list of commands."); 
       await connector.Conversations.ReplyToActivityAsync(reply); 
      } 
     } 
     else 
     { 
      HandleSystemMessage(activity, connector); 
     } 

     var response = Request.CreateResponse(HttpStatusCode.OK); 
     return response; 
    } 

下面是完整的錯誤和堆棧跟蹤通過機器人發送:https://pastebin.com/ZSrjrA9z

+0

你確定該文件正在打開好嗎? –

+0

是的,問題不在文件中,因爲當bot被sideload或者正在使用完全相同的回調URL從模擬器運行時,它會打開得很好。我不是故意要把注意力集中在消息上,因爲我所有的activity.CreateReply()調用都會拋出相同的異常,包括// Not Recognized下的一個簡單字符串。 –

+0

是否有人能夠重現此?我試過了,我不能 – JasonSowers

回答

0

你說你實現這個作爲一個自定義的機器人,每個指令here。問題在於,它看起來好像在使用Bot Framework消息傳遞調用(例如CreateReply()),由於您在完成自定義bot過程時沒有處理已註冊的BF機器人,因此這種方法無效。

相反,您可以創建一個新的Activity()並返回它以響應HttpPost請求。

我們確實有一個sample你可以退房,以防萬一。

+0

工作,謝謝。我還有一個關於自定義bot的侷限性的問題。該文檔說,自定義機器人不能利用諸如「imBack和」invoke「之類的按鈕操作,這是否意味着按鈕除了打開URL之外不能做任何事情? –

相關問題