Search code examples
slackslack-apislack-block-kit

Slack Actions API not sending entire payload


I'm building a slack app using the slack Bolt API, and I want to open modals from my App's home page when a button on the home page is clicked.

Here's the relevant bit of the action listener that is connected to the button:

app.action("follow-users-button", async ({ ack, payload, client }) => {

                await ack();
                console.log("app_home opening keyusermodal");
                // await block_actions.unfollowKeyuser(action);
                console.log("payload = " + JSON.stringify(payload));
                await client.views.open({
                    trigger_id: payload.trigger_id,

Here's what I get on my terminal when I click that button:

payload = {"action_id":"follow-users-button","block_id":"2JW","text":{"type":"plain_text","text":"Users","emoji":true},"value":"click_me_123","type":"button","action_ts":"1642280065.631917"}
[ERROR]  bolt-app missing required field: trigger_id

The JSON there is the action payload.

However, according to the Slack docs, this payload should be much larger. Here's the sample payload from Slack's Block Kit Builder:

{
    "type": "block_actions",
    "user": {
        "id": "U02NF0A8D9T",
        "username": "person",
        "name": "person",
        "team_id": "T02NTJ0UDP3"
    },
    "api_app_id": "A02",
    "token": "Shh_its_a_seekrit",
    "container": {
        "type": "message",
        "text": "The contents of the original message where the action originated"
    },
    "trigger_id": "12466734323.1395872398",
    "team": {
        "id": "T02NTJ0UDK3",
        "domain": "4most-r637660"
    },
    "enterprise": null,
    "is_enterprise_install": false,
    "state": {
        "values": {}
    },
    "response_url": "https://www.postresponsestome.com/T123567/1509734234",
    "actions": [
        {
            "type": "button",
            "block_id": "QdL",
            "action_id": "button-action",
            "text": {
                "type": "plain_text",
                "text": "Click Me",
                "emoji": true
            },
            "value": "click_me_123",
            "action_ts": "1642279809.506518"
        }
    ]
}

As you can see, I'm only receiving the actions element in my payload. Where's the rest of it? Why isn't it coming over? I need the trigger_id to open a modal (not having it causes the error), and getting things like user_id would be extremely helpful for my app.

Thanks in advance!


Solution

  • When working with the Bolt JS framework, the expected way to parse the action payload to get the trigger id is body.trigger_id.