【问题标题】:Can Hubot Slack bot store sessionsHubot Slack 机器人可以存储会话吗
【发布时间】:2018-06-22 05:44:07
【问题描述】:
我正在尝试实现简单的 slack 机器人。所以我配置了hubot,它将接受来自slack 的输入并将其传递给我的webapp (django app),它将接受来自django-app 的任何响应并回复slack。
在此过程中,我尝试使用request.session 将会话存储在django 中,但这并未反映在slack 中。如果我在浏览器中访问django-url,它能够存储会话并通过会话获得正确的响应。
那么问题出在slack 还是我的方法上?有没有办法在向django-app 请求时将会话存储在hubot 中??
【问题讨论】:
标签:
django
slack-api
hubot
【解决方案1】:
我无法谈论您使用的具体技术(hubot、django),但我一直在使用我的 Slack 应用程序的服务器会话,并且可以就其工作原理为您提供一般性答案。请注意,我的 Slack 应用程序是使用 PHP 构建的,但我认为可以安全地假设原理是相同的。
Slack 不支持会话
一般来说,Slack 不支持会话或上下文。相反,一切都是基于请求的。因此,如果您想通过会话来保持请求之间的功能上下文,您需要在您的 Slack 应用程序中自行组织它。
使用服务器会话处理服务器请求的挑战
一个挑战是大多数服务器会话都设计为与使用浏览器的客户端一起工作。例如PHP 服务器会话将在浏览器中存储一个 cookie,因此服务器知道哪些请求属于同一个会话。这显然不适用于 Slack,因为所有 Slack 请求都来自服务器,并且不涉及浏览器。
通过 Slack 使用服务器会话的方法
但是您可以通过以下两个技巧将服务器会话与 Slack 一起使用:
手动设置会话 ID
通常会话的 ID 由服务器自动选择,但您也可以手动设置。这使您可以告诉服务器继续使用先前请求启动的现有会话。
在 Slack 控件中包含会话 ID
用户的功能会话由他使用的 Slack 控件绑定在一起。 (例如交互式按钮)。可以在这些控件中包含自定义数据(有关详细信息,请参阅this answer),并且允许您在其中包含当前会话 ID。
完整方法
您将当前会话的 ID 包含在您使用应用创建的 Slack 控件中(例如交互式按钮)。一旦用户点击一个按钮,Slack 就会向你的应用发送一个请求,其中将包含会话 ID。这允许您的应用继续已经启动的服务器会话。