создание слабого бота с использованием рубинового драгоценного камня slack-api, не отвечающего в качестве DM

Я настроил слабый бот, используя slack-api и API для обмена сообщениями в реальном времени.

Вот сокращенная установка:

client.on :message do |data|
  d {data}
  bot_response = BotResponse.get_bot_response(data['text'], "session_slack")
  Slack.chat_postMessage channel: data['user'], text: "#{bot_response}"
end

client.start

В этой версии postMessage ответ приходит от Slackbot, а не от моего бота (по имени kaya).

Цель: я хочу ответить, чтобы прийти как DM от бота, которому он был отправлен.

Когда я меняю канал на data['channel'), ответ приходит в виде DM от моего бота-кая, но попадает в бесконечный цикл.

Как мне получить небесконечный цикл ответа DM?

ПРИМЕЧАНИЕ. Кажется, я понимаю, как это происходит: выбирая бота в качестве «канала», бот отвечает на свой собственный ответ мне, как если бы это был другой пользователь, говорящий в «канале бота». " канал. Но я не могу сказать, как еще получить ответ от моего бота, а не от slackbot.


person Satchel    schedule 06.06.2015    source источник


Ответы (2)


Я считаю, что вам нужно включить параметр username в имя бота для API: https://api.slack.com/methods/chat.postMessage или вам нужна опция as_user.

person Jim Deville    schedule 06.06.2015
comment
Да, я добавил это. Он по-прежнему помещает его в другое место, но правильно назвал его. Похоже, мой мальчик воспринимает собственные ответы как исходные данные. Так что что-то с DM от бота кажется неправильным. - person Satchel; 07.06.2015

Это смешивает Интернет и API обмена сообщениями в реальном времени. Вы получаете сообщение от API обмена сообщениями в реальном времени, а затем используете веб-API для обратной отправки. Ответ на включение as_user: true правильный, но вместо этого вы должны использовать API RTM для отправки сообщения обратно.

Вместо этого попробуйте https://github.com/dblock/slack-ruby-client. разделяет двоих. Отправка сообщения обратно в качестве бота выглядит так:

client.message channel: data['channel'], text: "Hi <@#{data['user']}>!"

Чтобы избежать циклов DM, убедитесь, что вы не отвечаете на команды, которые вы отправляете. Есть и другие способы, например, игнорирование сообщений ботов, но они не так надежны.

person dB.    schedule 02.08.2015