我正在尝试实现简单的松弛机器人。因此,我配置了hubot
,它将接受来自slack
的输入,并将其传递到我的Web应用程序(django app
)中,它将接受来自django-app
的任何响应,并将回复松弛
在此过程中,我尝试使用django
将会话存储在request.session
中,但这未反映在slack
中。如果我在浏览器中访问django-url
,则可以存储会话并获得正确的会话响应。
问题是否出在slack
或我的方法上,有没有办法在请求django-app
时将会话存储在hubot中?
答案 0 :(得分:1)
我无法说出您使用的特定技术(hubot,django),但是我一直在通过Slack应用程序使用服务器会话,并且可以为您提供有关其工作原理的一般答案。请注意,我的Slack应用程序是使用PHP构建的,但是我认为可以放心地假设原理是相同的。
Slack不支持会话
通常,Slack不支持会话或上下文。相反,所有内容都是基于请求的。因此,如果您希望进行会话以在请求之间保持功能性上下文,则需要在Slack应用中自行进行组织。
将服务器会话与服务器请求一起使用的挑战
一个挑战是,大多数服务器会话都旨在与使用浏览器的客户端一起使用。例如PHP服务器会话将在浏览器中存储cookie,因此服务器知道哪些请求属于同一会话。这显然不适用于Slack,因为所有Slack请求均来自服务器,并且不涉及浏览器。
通过Slack使用服务器会话的方法
但是您可以通过以下两个技巧将Svers会话与Slack结合使用:
手动设置会话ID
通常,服务器会自动选择会话的ID,但是您也可以手动设置它。这使您可以告诉服务器继续由先前请求启动的现有会话。
在Slack控件中包含会话ID
用户的功能会话由他使用的Slack控件绑定在一起。 (例如,交互式按钮)。可以在这些控件中包含自定义数据(有关详细信息,请参见this answer),并允许您在其中包含当前会话ID。
完全方法
您将当前会话的ID包含在您使用应用创建的Slack控件中(例如,交互式按钮)。用户单击按钮后,Slack将向您的应用发送请求,其中将包含会话ID。这样一来,您的应用就可以继续已经启动的服务器会话。