松弛的机器人消息可以另一个机器人?

时间:2016-06-24 14:43:02

标签: bots slack-api

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

我试图提及像<@IDBOT|name>: text这样的提及,即使在我看来提到成功,其他机器人也没有回应。如果我发布这个提及它将起作用。

这里有限制吗?

2 个答案:

答案 0 :(得分:1)

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

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

资料来源:玩得很开心,直到机器人互相交谈。

答案 1 :(得分: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"]      

懒散的有用回应:

  

以下情况是导致您的漫游器无法听取漫游器消息的原因:

     

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"]