Python 如何将Bot Framework会话信息保存/加载到本地磁盘或从本地磁盘加载?

Python 如何将Bot Framework会话信息保存/加载到本地磁盘或从本地磁盘加载?,python,botframework,microsoft-teams,Python,Botframework,Microsoft Teams,我有一个关于微软团队Python机器人的问题。如果已将bot添加到一些个人聊天和群聊天中,并且我重新启动了bot,则有时需要再次将bot添加到聊天中。所以我想创建机器人会话 可以在Microsoft团队中进行机器人会话吗?我想将会话信息存储在本地磁盘上,然后让bot在启动时加载该数据 我的机器人程序代码非常类似于 谢谢你的帮助 更新: 就像我说的,我的机器人代码非常类似于,但有点不同。因此,我为这个问题创建了一个示例。首先,我在Azure中创建了一个机器人并进行了设置 在此之后,在我的bot的

我有一个关于微软团队Python机器人的问题。如果已将bot添加到一些个人聊天和群聊天中,并且我重新启动了bot,则有时需要再次将bot添加到聊天中。所以我想创建机器人会话

可以在Microsoft团队中进行机器人会话吗?我想将会话信息存储在本地磁盘上,然后让bot在启动时加载该数据

我的机器人程序代码非常类似于

谢谢你的帮助

更新:

就像我说的,我的机器人代码非常类似于,但有点不同。因此,我为这个问题创建了一个示例。首先,我在Azure中创建了一个机器人并进行了设置

在此之后,在我的bot的
config.py
文件中,我设置了端口、Microsoft应用程序ID和密码(通过单击“管理”按钮生成)

导入操作系统
“”“Bot配置”“”
类DefaultConfig:
“”“Bot配置”“”
端口=3978
APP_ID=os.environ.get(“MicrosoftAppId”、“sadasd”)
APP_PASSWORD=os.environ.get(“MicrosoftAppPassword”、“ASDASDASD”)
在此之后,我执行命令
ngrok http3978
,并将生成的端点放入Azure bot配置中。为了将bot注册为应用程序,我在团队中使用appstudio。在我这样做之后,我只需要在CMD中运行bot,这样我就可以运行类似于
python run.py

运行bot后,我可以将其添加到通道中,并运行在代码中创建的命令和函数

这只是我如何设置bot的一个示例。主bot位于Linux服务器上

这就是为什么我想让bot保留会话信息,并在服务器或bot重新启动后加载它。有时,在我重新启动bot或服务器后,它不再在聊天室或团队中。在将来,我想做一些命令,并使用cron作业或类似的东西来执行它们

如果聊天中机器人消失,那么我不能在聊天中使用机器人命令。例如,我在聊天中添加了两个机器人。在我重新启动其中一个后,我无法从中得到任何响应,如下图所示

还有“我看不见机器人”

我有个主意。在聊天室中添加机器人后,我在控制台中看到:

将新对话添加到列表:{'additional_properties':{},'activity_id':'123215513','user':,'bot':,'conversation':,'channel_id':'MSTeam','locale':'en US','service_url':'https://smba.trafficmanager.net/emea/'}
格式:

{
“其他_属性”:{},
“活动id”:“123215513”,
“用户”:,
“bot”:,
“对话”:,
“频道id”:“MSTeam”,
“区域设置”:“en US”,
“服务url”:https://smba.trafficmanager.net/emea/"
}

因此,如果我存储这些信息,然后在启动bot时加载,也许它会工作?

bot中有一个选项可以保存对话的记录,但这有点无关。基本上,需要知道的重要一点是,您不需要存储您自己的任何内容-从用户的角度来看,整个对话历史记录都保存在Teams客户端中,从您的机器人的角度来看,存储整个对话历史并不能真正为您带来任何好处-用户状态比对话历史更相关。这将是在您选择的持久性中存储对象(例如,数据库、nosql存储、azure blobs等等),但它将是您选择为用户存储的状态(基本上是在某种“用户”集合中存储应用程序的任何有意义的属性)。这绝对是一个可能且经常必要的概念,此链接将对您有用:

重要的是要知道,这与按照定义的时间表(例如Cron)向用户发送消息是不同的。要使其发挥作用,您需要仔细阅读一个称为“主动消息传递”的概念。我在Teams PnP gallery上有一个专门处理它的示例(仅在Node和Dotnet中编写代码——恐怕没有python,但希望它对您有用)。看看吧。请注意,在这个链接的底部是关于这个主题的进一步阅读列表

以上两个想法结合在一起的地方是,您需要存储有关用户的特定状态,以便以后能够发送主动消息。在我链接到的示例中,我展示了如何获取发送主动消息所需的设置,但我没有包括将它们保存到数据存储的概念-这取决于您自己在bot中的实现(例如SQL Azure、MongoDb、blob等等)


同样重要的是要注意(我认为这是混淆的一部分,事实上也是我编写示例的原因之一)——您的主动代码不需要与您的bot位于同一组代码中!你的机器人可能是在某处运行的web服务,而你的主动代码是Azure函数/Lambda/类似的。

正如希尔顿所说,尝试将机器人状态保存到本地磁盘是个坏主意。而且,没有必要这样做。希尔顿和我都链接了一些文档,这些文档可以帮助您理解如何保存机器人状态


我无法重现您在团队聊天中删除机器人时遇到的问题。基于团队的工作方式和机器人的工作方式,这个问题听起来无论如何都是不可能的。团队应该无法知道您的机器人是启动还是停止。您的服务器可能设置为根据bot启动和停止的时间从团队对话中手动卸载bot,但这仍然非常奇怪。我愿意继续与您一起解决此问题,但我想我现在会发布一个答案,以防您想在奖金到期前将奖金奖励给某人。

您说需要再次将机器人添加到聊天中是什么意思?当您不将机器人重新添加到聊天中时,它会遇到什么样的问题?)很抱歉,不是