我正在玩最近發佈的微軟Bot框架。 我做了以下步驟:爲什麼BotConnector的行爲與模擬器不同?
創建使用IDialog(Echo Bot sample)一個簡單的機器人,有仿真測試,部署到Azure的應用程序服務,並在dev.botframework.com註冊它。一切正常。
更新了機器人使用LuisDialog與Luis一起使用,並添加了[LuisModel]和[LuisIntent]屬性(基於Alarm Bot sample)並將其部署到雲中。
之後,我有一個奇怪的現象:如使用模擬器預計
本地和雲部署的工作,和路易斯部分效果很好。
當從BotConnector測試連接觸發相同的bot時,它不綁定Luis,而是輸入MessageReceivedAsync。
我檢查了bot路徑,應用程序ID和密鑰,重新部署了AppService並重新註冊了bot,而且我仍然得到相同的行爲。
我ReceiveMessageAsync看起來如下:
private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<Message> result)
{
var message = await result;
await context.PostAsync("You have just said: " + message.Text);
context.Wait(MessageReceivedAsync);
}
我不刪除它的原因,是因爲測試連接停止工作,沒有它。另一方面,仿真器運行良好。
BotConnector和仿真器中的測試連接是否指向相同的端點預計始終返回相同的結果? 或者我錯過了什麼?
您提到的MessageReceivedAsync - 它是_your_ MessageReceivedAsync,還是LuisDialog.MessageReceivedAsync? LuisDialog中的一個總是被調用,因爲這是分派給你的Luis方法的東西。如果它是您自己的...您需要將其刪除,以便LuisDialog中的人員可以處理和發送。 它應該在模擬器和連接器之間以相同的方式工作,但是在我們知道您所看到的是哪種方法之後,我們可以繼續處理這個問題。 –
我更新了帖子的細節。我無法從EchoBot示例中刪除此MessageReceivedAsync方法,因爲它會中斷測試連接。同樣,當我稍微修改字符串(「你說過的」,「你說過的」,「你剛纔說過的」)時,我重新部署了一次 - 我在測試連接中看到了這些變化,但它仍然沒有進入Luis部分。再次,當我從模擬器中觸發它時,端點正常工作。如果需要,我可以分享代碼/ appid /祕密。 –
我認爲問題在於你的Luis對話框以某種方式被破壞。添加您自己的MessageReceivedAsync會在開發計算機上隱藏失敗,但是當您部署時,該隱藏功能無法工作(因爲您正在部署發佈位,或者IIS的工作方式與IIS Express不同或其他)。 –