状态在Botframework

时间:2017-06-21 02:18:24

标签: c# azure 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 个答案:

答案 0 :(得分:1)

  1. 机器人默认情况下将其存储在哪里。
  2.   

    IBotState REST接口由两个服务实现。机器人   Framework Connector提供了实现此功能的云服务   在Azure中界面和存储数据。这些数据在静止时加密   不会故意过期。 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)如何查看存储位置,以便当我切换到另一个存储位置(例如表存储)时,我可以确定它不再与默认状态存储器通信。 / 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的调用。