使用 Python Slack 机器人同时为多个用户提供服务

Serving multiple users at once with a Python Slack bot

我有一个用 Python 运行 在 Amazon EC2 上用 Django 作为框架编写的机器人。该机器人的最终目标是同时维持与同一个 Slack 团队中多个用户的对话。据我了解,亚马逊将处理 Slack 团队之间的负载,但我正在尝试弄清楚如何在单个 Slack 中管理负载。

现在,我的机器人处于繁忙的循环中,等待单个用户响应。我一直在对此进行一些研究 - Celery 是完成这项工作的正确工具吗?我应该将每个对话拆分成单独的 thread/task,还是让调度员处理新消息?有没有办法让 Slack 发送中断,还是我被 while 循环卡住了?

感谢任何help/guidance!我对此很陌生。

编辑:我设法通过实现与每个用户相关的 "Conversation" 对象列表来解决这个问题。这些对象保存每个对话的状态,以便机器人可以在用户再次发送消息时从中断的地方继续。

假设:

  • 您使用的是来自 slack 的传出 webhook,而不是实时消息 API
  • 您不是在尝试进行某种需要保持每个问题和答案之间的状态的多重问答响应。

跳过所有 Django 的东西,只使用 AWS Lambda 来响应用户请求。这只适用于相当简单的 "MyBot: do_something_for_me" 风格的东西,但它对我们来说效果很好。由于没有 ec2,没有 rds,易于部署等,因此也更容易管理。只需确保为每个 Lambda 请求设置合理的时间限制即可。根据我的经验,通常 3 秒就足够了,除非你有一个更大的脚本。

如果你真的真的真的必须维护所有这些状态,那么你最好只在 Flask 中快速编写一些东西,而不是完成 django 的所有设置。然后你将不得不处理所有的部署、自动缩放、备份繁琐的事情,你会为任何网络服务,但如果你需要它,那么你需要它 =)