在一个松散的团队中,我们可以使用python向用户发送消息吗? 我见过各种API,它们向频道提供消息,但不向特定用户提供消息。我们可以这样做吗?
答案 0 :(得分:20)
是的,这可以做到。而不是"#channel_name"使用" @ user"在API中。当我们使用API而不是来自任何其他用户的直接消息时,用户将从slackbot接收消息。如果您想以经过身份验证的用户身份发布给该用户,请使用as_user= true
。
slack.chat.post_message('@to_user',msg,username='@from_user')
答案 1 :(得分:6)
这是我使用SlackClient包找到的Python解决方案:
from slackclient import SlackClient
slack_token = os.environ["SLACK_API_TOKEN"]
sc = SlackClient(slack_token)
sc.api_call(
"chat.postMessage",
channel="@username",
text="Test Message"
)
答案 2 :(得分:4)
简单的解决方案是使用Slack的Web API
和requests
:
import requests
# slack access bot token
slack_token = "xpxb-9534042403-731932630054-KSwhrmhg87TXGuF23Z4ipTRm"
data = {
'token': slack_token,
'channel': 'UJ24R2MPE', # User ID.
'as_user': True,
'text': "GO Home!"
}
requests.post(url='https://slack.com/api/chat.postMessage',
data=data)
您可以在此处获取用户ID:
答案 3 :(得分:2)
您可以获取用户IM频道列表,并将您的消息发布到任何IM频道(直接消息)。
from slackclient import SlackClient
SLACK_TOKEN = "xoxb-bottoken" # or a TEST token. Get one from https://api.slack.com/docs/oauth-test-tokens
slack_client = SlackClient(SLACK_TOKEN)
api_call = slack_client.api_call("im.list")
# You should either know the user_slack_id to send a direct msg to the user
user_slack_id = "USLACKBOT"
if api_call.get('ok'):
for im in api_call.get("ims"):
if im.get("user") == user_slack_id:
im_channel = im.get("id")
slack_client.api_call("chat.postMessage", channel=im_channel,
text="Hi Buddy", as_user=True)
答案 4 :(得分:1)
正如Deepali所说,只需将@user传递给channel参数即可。您还可以在RapidAPI here.上使用Slack postMessage端点API。此页面将允许您生成在python中进行API调用所需的代码并测试API调用。
RapidAPI将为您生成的代码如下所示:
from rapidconnect import RapidConnect
rapid = RapidConnect("SlackIntegration", "3b744317-91c6-48e8-bc90-305a52f36a5f")
result = rapid.call('Slack', 'postMessage', {
'token': '',
'channel': '',
'text': '',
'parse': '',
'linkNames': '',
'attachments': '',
'unfurlLinks': '',
'unfurlMedia': '',
'username': '',
'asUser': '',
'iconUrl': '',
'iconEmoji': ''
})
答案 5 :(得分:0)
我的示例基于本教程:build-first-slack-bot-python
通过调用,我能够解决问题:
userChannel = slack_client.api_call(
"im.open",
user=auser
)
然后发送消息
slack_client.api_call(
"chat.postMessage",
channel=userChannel['channel']['id'],
text=response or default_response,
as_user=True
)
之后,一切似乎按预期工作。我想在将来创建类似于“/ gifs”界面的东西。