我想更好地了解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,但仍然没有调用存储状态。
所以我的问题是。
答案 0 :(得分:1)
IBotState REST接口由两个服务实现。机器人 Framework Connector提供了实现此功能的云服务 在Azure中界面和存储数据。这些数据在静止时加密 不会故意过期。 Bot框架模拟器提供了一个 用于调试机器人的此接口的内存实现。 当仿真器进程退出时,此数据将过期。
默认的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)如何查看存储位置,以便当我切换到另一个存储位置(例如表存储)时,我可以确定它不再与默认状态存储器通信。 / p>
您可以在页面上托管网络聊天控件,在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/ < / p>
使用此方法,您将在fiddler中看到对state.botframework.com的调用。