0

slack-api我已经使用实时消息 API设置了一个 slack 机器人。

这是缩写的设置:

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'] 时,响应来自我的 bot kaya 的 DM,但进入无限循环。

如何获得非无限循环 DM 响应?

注意: 我想我看到了它是如何发生的:通过选择机器人作为“通道”,机器人正在响应它自己对我的响应,就好像它是另一个用户在与“机器人的”通道交谈一样。但我不知道还有什么方法可以让我的机器人而不是 slackbot 做出响应。

4

2 回答 2

0

我相信您需要将username参数设置为每个 api 的机器人名称:https://api.slack.com/methods/chat.postMessage,或者您需要该as_user选项。

于 2015-06-06T04:17:38.583 回答
0

这混合了 Web 和实时消息传递 API。您从 RealTime Messaging API 收到一条消息,然后您正在使用 Web API 回发。包含的答案as_user: true是正确的,但您应该改用 RTM API 将消息发回。

尝试使用https://github.com/dblock/slack-ruby-client来将两者完全分开。当机器人返回消息时,如下所示:

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

为避免 DM 循环,请确保您没有响应您发出的命令。还有其他方法,例如忽略机器人消息,但它不那么可靠。

于 2015-08-02T12:18:06.883 回答