您可以使用 files.upload 作为其他用户将文件上传到 Slack API 吗?

Can you upload a file to the Slack API using files.upload as a different user?

我正在尝试找到一种方法,通过 Slack API 将应用程序 post 文本片段发送到我们的支持渠道。使用 files.upload 方法,我可以创建一个文本片段并与频道共享,但是 post 似乎来自我(因为用于验证请求的令牌是我的)。

我正在寻找一种方法来执行此操作,但要让它显示自定义用户名和图标,就像使用 chat.postMessage 方法的用户名和 icon_url 参数一样。有办法实现吗?

有两种方法。

方式1. - 如果你只想在频道上传而不需要听任何对话,那么你可以使用incoming-webhooks。然后覆盖用户名和图标。在 Here 中阅读 "Customizing your username and icon"。

方法 2 - 您可以创建一个 bot 用户并让 bot 用户为您键入 post 此消息。我猜你现在正在使用 Slack 生成的测试令牌,所以你只能得到你的名字。但是,如果您使用 bot-user,那么您可以为您的机器人使用自定义名称和 icon_url。

我希望这能回答你的问题。

是的,正如@Abhinav Rai 建议的那样,您需要有机器人。 Slack 支持刚刚回答了我同样的问题。

To upload files as a bot you'll need to create an associated 'bot user' and post the file using the bot's token: https://api.slack.com/bot-users — all files must be owned by a user account and the bot user will fill this requirement.

有一种方法 3 使用 chat.postMessage 函数中的用户名函数。按照这个 -

import slack
import json
import os

def pureimg(data1):
        data1 = '[{"text": "", "image_url": "'+data1+'"}]'
        data1 = [json.loads(data1[1:-1])]
        return data1

#This function will make the image url to correct format.

slacker = slack.WebClient(token='your-token-here')

payoff=os.path.join(os.path.dirname(os.path.realpath(__file__)), 'filename.png')
#It gives cross OS compatibility on filepath.

response=slacker.files_upload(channel='#theta',file=payoff)
payoff=response['file']['permalink']

#First We upload the local file to Slack and fetch permalink.
#If you do not have any local file just put the external image URL in the payoff.

response=slacker.chat_postMessage(channel='#channel_name', text="Sample Text", username='Bot name', attachments=pureimg(payoff), icon_emoji=':emoji:')

#Then, We post to Slack Channel as a bot!