Может ли слабый бот отправлять сообщения другому боту?

У меня есть бот, и я могу с ним взаимодействовать. И есть еще один бот, и я бы хотел, чтобы мой бот общался с этим ботом, когда они находятся на одном канале. Это вообще возможно?

Я попытался включить упоминание типа <@IDBOT|name>: text, и хотя мне кажется, что упоминание было успешным, другой бот не отвечает. Если я опубликую это упоминание, оно сработает.

Есть ли здесь ограничение?


person Ricardo Enrique Ibarra Cabrera    schedule 24.06.2016    source источник
comment
Вы управляете другим ботом? Если да, то как вы там обнаруживаете упоминание и какие события вы получаете от Slack?   -  person user94559    schedule 24.06.2016
comment
Даже если вы не контролируете другого бота, вероятно, было бы полезно распечатать события в канале, соответствующие тому, когда ваш бот упоминает другого бота, а не вы упоминаете другого бота. Если есть разница между сообщениями, это может помочь отладить происходящее.   -  person user94559    schedule 24.06.2016


Ответы (2)


Да, оно может.

У меня была та же проблема, оказалось, что я включил какой-то код, который не понял, и этот код мешал ответу. Я написал об этом по электронной почте, и они поставили меня на место.

Проблемный код был таким:

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:

Когда сообщение отправляется ботом, оно будет иметь подтип, поэтому это означает, что ваша логика игнорирует любое сообщение бота. Это полезно, потому что не позволяет вашему боту отвечать на собственные сообщения, что может создать бесконечный цикл.

Вам нужно будет изменить это условие, чтобы ваш бот по-прежнему «игнорировал» свои собственные сообщения, но обрабатывал сообщения от других ботов. Вы можете сделать это, например, просмотрев идентификатор бота или идентификатор пользователя и отбросив эти сообщения, но не сообщения от других ботов.

В моем случае я хочу, чтобы бот всегда отвечал людям, а боты — только в том случае, если им доверяют, поэтому я сделал следующее:

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"]
person MatrixManAtYrService    schedule 05.04.2019
comment
В итоге я немного расширил это, остановился на этом: - person MatrixManAtYrService; 13.05.2019

Да, боты могут общаться друг с другом в канале.

Это зависит от того, как вы управляете слушающим ботом. Я использую ответвление официального кода Python Slackbot (https://github.com/bscan/python-slackbot), и в нем я проверяю ‹@U1234567>, где U1234567 — это user_id бота. Когда вы упоминаете @mybot, Slack заменяет @mybot на ‹@U1234567> в сообщении. Однако при публикации в качестве бота Slack не заменяет выноску на user_id. Вместо этого бот может напрямую поместить ‹@U1234567> в сообщение (и опубликовать, используя as_user=True). Slack будет отображать ‹@U1234567> как @mybot в канале, и бот сможет обнаружить это, если ищет именно эту строку сообщения.

Источник: поиграл, пока боты не заговорили друг с другом.

person bscan    schedule 31.03.2017
comment
@Clay, этот метод все еще работает для меня на сегодняшний день. - person bscan; 07.06.2018
comment
@Clay Ваш комментарий заставил меня подумать, что они изменили API, поэтому я связался с ними. Переписка между ботами по-прежнему разрешена. В моем случае это оказалось ошибкой в ​​​​моем коде (подробности см. В моем ответе). - person MatrixManAtYrService; 05.04.2019