使用slack-api ruby​​ gem创建一个松散的机器人,而不是作为DM回应

时间:2015-06-06 04:10:19

标签: ruby slack-api

我使用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。

当我将频道更改为数据['频道']时,响应来自我的机器人kaya的DM,但进入无限循环。

如何进行非无限循环DM响应?

注意: 我想我看到它是如何发生的:通过选择机器人作为"频道"机器人正在回应它自己的反应,好像它是另一个用户正在谈论机器人"渠道。但是,我无法告诉我如何让响应来自我的机器人,而不是slackbot。

2 个答案:

答案 0 :(得分:0)

我认为您需要将username参数集包含在api:https://api.slack.com/methods/chat.postMessage的机器人名称中,或者您需要as_user选项。

答案 1 :(得分:0)

这混合了Web和RealTime Messaging 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循环,请确保您没有响应您发出的命令。还有其他方式,例如忽略机器人消息,但它不可靠。