【问题标题】:Can a slack bot message another bot?松弛的机器人可以向另一个机器人发送消息吗?
【发布时间】:2016-10-27 05:36:50
【问题描述】:

我有一个机器人,我可以与它互动。还有另一个机器人,当他们在同一个频道时,我希望我的机器人与那个机器人聊天。这可能吗?

我尝试添加像 <@IDBOT|name>: text 这样的提及,尽管在我看来提及成功,但其他机器人没有响应。如果我发布此提及,它将起作用。

这里有限制吗?

【问题讨论】:

  • 你控制其他机器人吗?如果是这样,您如何检测到那里的提及,以及您从 Slack 收到了哪些事件?
  • 即使您不控制其他机器人,打印出与您的机器人提及其他机器人与您提及其他机器人相对应的频道中的事件也可能很有用。如果消息之间存在差异,它可能有助于调试正在发生的事情。

标签: bots slack-api


【解决方案1】:

是的,可以。

我遇到了同样的问题,结果发现我包含了一些我不理解的代码,并且该代码阻止了响应。我通过电子邮件发送了关于这件事的懈怠,他们让我直截了当。

有问题的代码是这样的:

if event["type"] == "message" and not "subtype" in event:
    user_id, message = parse_direct_mention(event["text"])
    if user_id == self_id:
        return message, event["channel"]      

来自 slack 的有益回应:

以下情况是阻止您的机器人收听机器人消息的原因:

if event["type"] == "message" and not "subtype" in event:

当消息由机器人发送时,它会有一个子类型,因此这意味着您的逻辑忽略了任何机器人消息。 这很有帮助,因为它可以防止您的机器人响应自己的消息,这会造成无限循环。

您需要修改此条件,以便您的机器人仍然“忽略”自己的消息,但处理来自其他机器人的消息。例如,您可以通过查看机器人 ID 或用户 ID 并丢弃这些消息来执行此操作,而不是来自其他机器人的消息。

在我的情况下,我希望机器人始终响应人类,并且只有在他们受到信任时才响应机器人,所以我这样做了:

from_user = "subtype" not in event
from_friend_bot = (event["subtype"] == "bot_message") and (event['username'] == f'{ping_source}')
if from_user or from_friend_bot:
    user_id, message = parse_direct_mention(event["text"])
    if user_id == self_id:
        return message, event["channel"]

【讨论】:

【解决方案2】:

是的,机器人可以在频道中相互交谈。

这取决于你如何控制监听机器人。我正在使用官方 Python Slackbot 代码 (https://github.com/bscan/python-slackbot) 的分支,并在其中检查 其中 U1234567 是机器人的用户 ID。当你提到 @mybot 时,Slack 会在消息中将 @mybot 替换为 。但是,当作为机器人发布时,Slack 不会用 user_id 替换标注。相反,机器人可以直接将 放入消息中(并使用 as_user=True 发布)。 Slack 将在频道中将 显示为 @mybot,如果查找确切的消息字符串,机器人将能够检测到它。

来源:一直玩,直到机器人互相交谈。

【讨论】:

  • @Clay,这种方法到今天仍然对我有用。
  • @Clay 你的评论让我觉得他们改变了 API,所以我联系了他们。机器人对机器人的聊天仍然是允许的。就我而言,它原来是我的代码中的一个缺陷(有关详细信息,请参阅我的答案)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-21
  • 1970-01-01
  • 1970-01-01
  • 2018-05-17
  • 2018-03-19
  • 2018-02-13
  • 1970-01-01
相关资源
最近更新 更多