【问题标题】:How to send Image to Slack as slack bot via slackclient?如何通过 slackclient 将图像作为 slack 机器人发送到 Slack?
【发布时间】:2018-09-20 04:43:19
【问题描述】:

我正在构建一个简单的机器人来定期生成图表作为图像并通过 python slackclient 包发布到 slack。

我已经设法使用以下代码发送了一条机器人消息:

def post_message_to_channel(self, channel_id, message=DEFAULT_TEST_MESSAGE):
    sc = SlackClient(TOKEN)
    sc.api_call(
        "chat.postMessage",
        channel=channel_id,
        username='mybot',
        text='test text message'
    )

但是当我尝试对文件上传执行相同操作时,图像发送正确,但显示的是我的名字,而不是指定的机器人名称:

def post_image_to_channel(self, channel_name, filepath, tile='Test Upload'):
    sc = SlackClient(TOKEN)
    with open(filepath, 'rb') as file_content:
        sc.api_call(
                "files.upload",
                channels=channel_id,
                file=file_content,
                title=tile,
                username='mybot',               
            )

查看files.upload, 的松弛 API 文档,username 似乎不可用。

如何使用机器人名称发送 files.upload 图像?

【问题讨论】:

  • @monkut 你在哪里将机器人消息代码包含在你的 django 项目中是在 views.py 中吗
  • 我在 aws lambda 的独立函数中使用了它。如果使用 django,我可能会在我的应用目录中创建一个 functions.py 并将其放在那里。
  • 实际上我不得不发送给 slack 中的特定用户我该怎么做
  • @monkut 如果您不介意,请查看此问题一次stackoverflow.com/questions/61723283/… 我的朋友请帮忙

标签: python slack slack-api


【解决方案1】:

您必须使用机器人用户的机器人用户令牌发送文件。更多信息请参见官方文档https://api.slack.com/bot-users

【讨论】:

  • 是的,我必须“安装应用程序”,然后创建一个机器人用户。很难找到实际获取机器人令牌的链接/路径。使用机器人令牌,可以正确应用在创建机器人时定义的用户名。
  • 知道如何设置机器人图像吗?
  • bot 用户将使用您的 Slack 应用程序的图像,您可以在“基本信息”下的 Slack 应用程序管理页面中更新该图像
【解决方案2】:

另一种方法是将您的图像作为message attachments 的一部分发送。这样,您还可以在图表周围包含一些上下文信息。而且由于您正在发送消息,因此您仍然可以完全控制用户名等。

【讨论】:

  • 附件中的 image_url 是否也适用于系统映像文件?我们可以在哪里使用文件路径
  • @Eyshika URL 必须是托管在 Internet 服务器上的图像文件。它不适用于本地文件路径。只需将图像上传到 imgur 之类的图像服务器即可。
【解决方案3】:
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!

【讨论】:

  • 我无法让它工作。文件好像没有上传到频道
猜你喜欢
  • 2017-07-27
  • 1970-01-01
  • 2022-01-12
  • 2017-02-23
  • 2021-06-15
  • 1970-01-01
  • 1970-01-01
  • 2016-03-02
  • 1970-01-01
相关资源
最近更新 更多