通过Slack API将文件发布到聊天

时间:2017-08-06 10:47:28

标签: python slack-api

我尝试使用Python的库slackclient通过Slack API传送视频。

我经常使用slack.api_call('chat.postMessage'...)并且我熟悉'files.upload'但是当我执行

slack = SlackClient(TOKEN)
slack.api_call('files.upload', file=open('video.mp4', 'rb')...)

该文件已上传到指定频道,但未作为消息发布。

我想要实现的是创建一条消息,我可以将其作为私人消息发送,或者发送到看起来像这样的频道

enter image description here

如果可能的话,可能会在其上方添加一些文字。

我已经浏览了文档中的Attachment部分,但无法找到与文件相关的任何内容。 如果有办法不以二进制格式提供文件,但作为链接也可以(只要它以嵌入方式显示)。

3 个答案:

答案 0 :(得分:5)

这个示例脚本怎么样?它使用io.BytesIO(f.read())作为文件。为了使用它,files:write:user必须包含在范围内。关于文本,您可以使用initial_comment导入它。在我的环境中,attachments无法用于files.upload。 API文档为https://api.slack.com/methods/files.upload

脚本:

with open('./sample.mp4', 'rb') as f:
    slack.api_call(
        "files.upload",
        channels='#sample',
        filename='sample.mp4',
        title='sampletitle',
        initial_comment='sampletext',
        file=io.BytesIO(f.read())
    )

结果:

enter image description here

如果我误解了你的问题,我很抱歉。

答案 1 :(得分:3)

我遇到了这个问题,因为我遇到了同样的问题-我的文件将上传并得到响应,但是该文件不会发布到我发送的频道中。对我来说,阅读Slack API文档对我来说是一件糟糕的工作。我已经多次使用chat.postMessage,并且只包含一个“通道”参数。这是该API:https://api.slack.com/methods/chat.postMessage

files.upload方法希望在'channels'参数中使用逗号分隔的频道列表。请参见https://api.slack.com/methods/files.upload。当我从“频道”更改为“频道” 并确保将其作为列表传递时,我已成功将图像发布到所需的频道。

那么对于原始问题,请在您使用的代码(https://ibb.co/hwH5hF)的链接中尝试将channel='bla'更改为channels=['bla']

答案 2 :(得分:2)

这对我有用:

import slack

client = slack.WebClient(token='xoxb-XXX')

with open('/path/to/attachment.jpeg', 'rb') as att:
    r = client.api_call("files.upload", files={
        'file': att,
    }, data={
        'channels': '#my_channel',
        'filename': 'downloaded_filename.jpeg',
        'title': 'Attachment\'s title',
        'initial_comment': 'Attachment\'s description',
    })
    assert r.status_code == 200