在Botframework中的状态

我想更好地了解botframework中的状态是如何工作的。

默认情况下,据说机器人的状态存储在https://state.botframework.com 。 因此,我应该能够从模板创建一个空白机器人,运行fiddler,并看到它向状态Web服务发出请求。 我看不出这种情况。

我从这个repo下载了Azure的botbuilder扩展(和示例): https : //github.com/Microsoft/BotBuilder-Azure 。 我使用示例应用程序在表存储中存储数据,它工作正常! 我可以在Fiddler和我的存储帐户中看到请求,我可以看到状态/数据被保存。

我注释掉了他们的示例应用程序的Azure代码并运行它。 再一次,我看不到对state.botframework.com的任何调用

我注册了一个测试机器人,并在我的机器人中输入这些凭据作为appId,然后我可以看到机器人调用webchat.botframework.com,但仍然没有调用存储状态。

所以我的问题是。

  1. 默认情况下,机器人在哪里存储它的状态。
  2. 如何查看存储位置,以便在切换到另一个存储位置(例如表存储)时,我可以确定它不再与默认状态存储通信。

  1. 默认情况下,机器人在哪里存储它的状态。

IBotState REST接口由两个服务实现。 Bot Framework Connector提供了一个实现此接口并在Azure中存储数据的云服务。 此数据在rest时加密,并且不会故意过期。 Bot框架模拟器提供此接口的内存实现,用于调试机器人。 当仿真器进程退出时,此数据将过期。

来自https://docs.microsoft.com/en-us/bot-framework/troubleshoot-general-problems#state-and-data-storage-a-idstatea

默认的StateClient的存储路径在.net sdk中: https : //github.com/Microsoft/BotBuilder/blob/b3fff1246348fe93ab2eb1fe654065ccfd863617/CSharp/Library/Microsoft.Bot.Connector.Shared/StateAPI/StateClient.cs#L268

编辑:sdk中的代码,用于检查通道是否为模拟器: https : //github.com/Microsoft/BotBuilder/blob/5367ba54b08670a714ab30035ac4316d07be5dc6/CSharp/Library/Microsoft.Bot.Connector.Shared/ActivityEx.cs#L220

2)如何查看存储位置,以便当我切换到另一个存储位置(例如表存储)时,我可以确定它不再与默认状态存储通信。

您可以在页面上托管网络聊天控件,在Visual Studio中本地运行bot,并使用ngrok将连接器服务中的流量重定向到本地计算机:

ngrok http 3979 -host-header="localhost:3979" 

然后更改机器人的https://dev.botframework.com/bots/settings?id=[YourBotHandle]中的消息传递端点,而不是https:// [SiteName] .azurewebsites.net / api / messages它是https: // [ngrokpath] / api / messages这里有一个很好的描述如何设置: https : //www.robinosborne.co.uk/2016/09/19/debugging-botframework-locally-using-ngrok/

使用此方法,您将在fiddler中看到对state.botframework.com的调用。