我使用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。
答案 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循环,请确保您没有响应您发出的命令。还有其他方式,例如忽略机器人消息,但它不可靠。