我目前正在尝试将自定义Slack机器人集成到我的某个频道中。但是,我遇到的问题是机器人不是作为自定义机器人用户而是作为我发布。
机器人响应我的自定义命令和东西,但由于某种原因不发布我设置的机器人。我正在使用设置机器人时添加给我的API令牌,并将其添加到我正在测试的频道中。有人知道可能导致此问题的原因吗?
相关代码:
def handle_command(command, channel):
"""Receives commands directed at the bot and determines if they are valid commands. If so,
then acts on the commands. If not, returns back what it needs for clarification.
"""
response = "Hello there!"
if command.startswith("yes"):
response = "You posted 'yes'!"
SLACK_CLIENT.api_call("chat.postMessage", channel=channel,
text=response, as_user=True)
def parse_slack_output(slack_rtm_output):
"""The Slack Real Time Messaging API is an events firehose. This parsing function returns
None unless a message is directed at the Bot, based on its ID.
"""
output_list = slack_rtm_output
if output_list and len(output_list) > 0:
for output in output_list:
if output and 'text' in output and AT_BOT in output['text']:
# return text after the @ mention, whitespace removed
return output['text'].split(AT_BOT)[1].strip().lower(), \
output['channel']
return None, None
def main():
"""Obtains Google Credentials to rotate and update a Google Spreadsheet that keeps track of the
current engineer with 10 percent time. Notifies the engeineering team through a Google Calendar
event.
"""
if SLACK_CLIENT.rtm_connect():
print "Bot connected and running."
while True:
command, channel = parse_slack_output(SLACK_CLIENT.rtm_read())
if command and channel:
handle_command(command, channel)
time.sleep(1)
else:
print "Connection failed."
SLACK_CLIENT
已使用API和给定令牌初始化,AT_BOT
只是' @'的常量。角色和我的机器人的名字。
答案 0 :(得分:1)
我认为可能是因为您正在设置as_user=True
。
传递true以将消息作为authed用户发布,而不是作为bot。
您是否尝试将其设置为false?
SLACK_CLIENT.api_call("chat.postMessage", channel=channel,
text=response, as_user=False)
答案 1 :(得分:0)
此行为的另一个潜在原因可能是使用了哪个令牌。
当您使用bot用户安装Slack应用程序时,您将始终获得两个访问令牌:用户访问令牌和机器人访问令牌。 (source)
如果您使用机器人访问令牌消息将始终显示机器人名称,无论as_user
的{{1}}设置如何。 (source)
答案 2 :(得分:0)
通过as_user="true"
而不是as_user=True
为我工作。我认为客户端不会对Python布尔值进行任何特殊处理/转换,并且API可能期望文档中指示的为“ true”。
as_user
true
可选
如果传递true,则以身份验证的用户身份而不是漫游器身份发布消息。默认为false。请参阅下面的作者身份。此参数不能与较新的机器人令牌一起使用。