Search code examples
slackslack-api

"Invalid blocks" when updating ephemeral message via response_url webhook


According to Slack's documentation, you can use blocks to update an entire ephemeral message by simply replacing the entire message by setting replace_original as true when posting to the response_url provided in the interaction payload when using buttons.

However, when I'm sending the POST request to the provided response_url after a button has been pressed and I attempt to use blocks, I get the following error: 404 : [{"ok":false,"error":"invalid_blocks"}]

Strangely enough, the payload I'm including for blocks is generated by the same method that creates the original ephemeral message which works fine without any issues.

I was able to replace the entire message with just a plain text message by using the text field indicated in the documentation and it works fine if I don't include the blocks array. I did find some documentation here for posting messages via incoming webhooks here but it looks the same as what I'm sending now.

Here's the body of the request I'm sending:

{
"blocks":
[
    {
        "type": "image",
        "imageUrl": "https://example.com/image.jpeg",
        "altText": "alt-text",
        "title":
        {
            "type": "plain_text",
            "text": "some text"
        }
    },
    {
        "type": "actions",
        "elements":
        [
            {
                "type": "button",
                "text":
                {
                    "type": "plain_text",
                    "text": "Send",
                    "emoji": false
                },
                "value": "send",
                "style": "primary"
            },
            {
                "type": "button",
                "text":
                {
                    "type": "plain_text",
                    "text": "Find new",
                    "emoji": false
                },
                "value": "some text"
            },
            {
                "type": "button",
                "text":
                {
                    "type": "plain_text",
                    "text": "Cancel",
                    "emoji": false
                },
                "value": "cancel"
            }
        ]
    }
],
"replace_original": "true",
"text": "some fallback text"
}

Solution

  • You have two typos in your blocks: imageUrl and altText. Slack expects these to be snake case, i.e. image_url and alt_text.

    You can use Slack's Block Kit Builder to debug the blocks payload.