'Slack API: Can't send attachments

I'm trying to send an attachment using Slack's Python Client but whenever I do I fail. I tried sending it with the Tester too but it still didn't work. Either I get {"ok": false,"error": "no_text"} or if I have the text property only the text is going to be sent. This is how I do it. I searched too but didn't found anything.

       attachment = json.dumps([{"attachments": [{"fallback": "Reddit Message","color": "#448aff","pretext":"You've got a new Message!","author_name": "Reddit","author_link": "https://reddit.com","author_icon": "imageurl","title": "Reddit Message","title_link": "https://reddit.com/message/inbox","text": "This is what I know about it.","fields": [{"title": "Author:","value": str(item.author),"short": "true"},{"title": "Subject: ","value": str(item.subject),"short": "true"},{"title": "Message:","value": str(item.body),"short": "false"}],"footer": "Reddit API","footer_icon": "anotherimageurl"}]})

sc.api_call("chat.postMessage",channel="U64KWRJAU",attachments=attachment,as_user=True)

Help would be appreciated. This should make sense but I don't get it why it doesn't work



Solution 1:[1]

From your reference, you need to pass attachment as a list. You won't need to have the attachments key in a dict containing the list.

attachment = json.dumps([
    {
        "fallback": "Reddit Message",
        "color": "#448aff",
        "pretext":"You've got a new Message!",
        "author_name": "Reddit",
        "author_link": "https://reddit.com",
        ....
    }
])

sc.api_call(
    "chat.postMessage", channel="U64KWRJAU",
    attachments=attachment, as_user=True)

Solution 2:[2]

I met the same issue and found the solution.
The problem is that if only attachments field is added into the payload, it will report no_text error. But if text field is added, slack message will only show the text content.

The solution:
When we want to display attachments, we need to add a basic blocks field instead of text field. Something like

{
    "blocks": [
        {
            "type": "section",
            "text": {
                "type": "mrkdwn",
                "text": "bar"
            }
        }
    ],
    "attachments": [
        {
            "color": "#FF0000",
            "blocks": [
                {
                    "type": "section",
                    "text": {
                        "type": "mrkdwn",
                        "text": "foo"
                    }
                }
            ]
        }
    ]
}

If putting the above payload into the Slack build kit, it will be a misleading. That's also why I stuck with the issue.

I would recommend to use chat.postMessage test to debug the payload. It will work like a charm.

https://stackoverflow.com/a/72036841/3409400

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 oscarz