为什么我的Slack机器人会收到错误“429_client_error”?

时间:2017-09-21 15:29:31

标签: node.js slack-api

我正在研究Slack机器人的注意事项,并且我继续获得429_client_error。首先,它是否与Slack API文档here中描述的429 too many requests error相同?如果没有,那是什么?

如果确实是由于Slack速率限制,我不明白。我打印了所有机器人答案的日志,它们至少相隔一秒发送。即使我使用“非常慢”地记录机器人并在请求之间等待,我也有错误。

以下是互动的例子。

  

用户:我想添加一个注释。

     

Slack-Bot:当然。你的笔记内容是什么?

     

网友:我昨天遇见了我的阿比盖尔。我需要送他   我星期六拍的照片。

     

Slack-Bot:继续。

     

用户:我完成了。

     

Slack-Bot:太棒了。您可以添加以下参与者之一   你的笔记。

     
    
        
  1. 阿比盖尔·艾伦
  2.     
  3. Brian Bernard
  4.     
  5. Carl Carlson
  6.     
  7. 完成
  8.        

在最后一部分,我使用带按钮的交互式消息来提议参与者。在幕后,我实际上加载了超过3个人,所以当用户选择添加Brian时,我的机器人用一个新的参与者列表替换整个消息,用户可以从中选择。然后,当用户完成后,他必须选择最后一个按钮“完成”。

换句话说,我有一个按钮列表,每次用户选择列表中的一个项目时都会不断更新,直到用户满意为止。

这似乎是问题的一部分,因为我似乎只在对话的这个阶段得到429_client_error。我使用延迟来确保Slack机器人对用户的回答不会太快。我不明白是什么问题。

1 个答案:

答案 0 :(得分:0)

我在python应用程序上遇到了相同的松弛问题,并在slacker github repo中找到了关于它的讨论。

懒散的主要开发者os认为,解决方案是信息的本地缓存。他们甚至提供了示例代码here

from slacker import Users

class CachedUsers(Users):
    def __init__(self, *args, **kwargs):
        super(Users, self).__init__(*args, **kwargs)
        self.user_ids = {}

    def get_user_id(self, user_name):
        user_id = self.user_ids.get(user_name)

        if not user_id:
            user_id = super().get_user_id(user_name)
            self.user_ids[user_name] = user_id

        return user_id

如果您正在寻找以前无法在本地缓存的内容,请查看rate limits,您可以在Slack API中找到每个方法的层。