How to create a Slack message containing an uploaded image?

后端 未结 2 1799
佛祖请我去吃肉
佛祖请我去吃肉 2021-01-18 02:20

I\'d like to create a message in the #general channel of my Slackspace from within a PHP script. The message should contain text and an image which was created locally on-th

2条回答
  •  春和景丽
    2021-01-18 02:23

    There are two different approaches on how to post a Slack message with an image.

    A. Upload image directly with message

    You can upload an image directly to Slack and share it in a channel. Within that request you can also add a comment that will appear as message above the images. This is the easiest approach, however you comment is limited to one string.

    API method: files.upload with these arguments:

    • channels: ID of one or multiple channel for the image to appear in
    • initial_comment: Your message

    B. Post message with image block / attachment

    Alternatively you can add an image to your normal message either as image block or secondary attachment. This only works with a public URL to your image file, so you first need to upload your image to an image hoster (which can be your Slack workspace) to get the public URL.

    In our example we will use Slack as image hoster, but you can use any image hoster (e.g. Imgur) even your own webserver, as long as you get a public URL for your image file.

    Step 1 - Upload image to Slack

    API method: files.upload with no special arguments, but make sure to get the file ID from the response. Don't include the channels argument or the image will be posted visible into those channel.

    Step 2 - Create public URL

    Next you have to mark the uploaded file as public. Only then will it be accessible through its public_url property

    API method: files.sharedPublicURL with the file ID as argument.

    Next you need to construct the direct image link from the link to website / permalink_public property of the file.

    The website link you get from permalink_public has the format:

    https://slack-files.com/{team_id}-{file_id}-{pub_secret}
    

    The direct link to the image has the format:

    https://files.slack.com/files-pri/{team_id}-{file_id}/{filename}?pub_secret={pub_secret}
    

    So you just need to extract the pub_secret from permalink_public and you should be able to construct the direct link to the image. The other parameters you can get from your file object.

    Step 3 - Send message

    Finally compose your message with the image URL either as Image Block or in a secondary attachment and submit it using a method of your choice.

    API method: chat.PostMessage or any other method for sending message incl. incoming webhooks.

    Answer to OP

    If you need to stick with webhooks as it appears from your comments and have no access to the Slack API I would suggest uploading the image to an image hoster (e.g. Imgur) and then use approach B.

    See also

    • Slack bot send an image
    • Can I upload an image as attachment with Slack API?
    • How to use the permalink_public URL of an uploaded image to include it in a message?

提交回复
热议问题