Chatbot webhooks

User actions like slash commands, clicking UI elements on a chatbot message, or using a shortcut trigger webhooks to your endpoint URL.

Remember to verify that the request comes from Zoom.

Slash commands

Here are the JSON structures of a Slack and Zoom slash command.

{
    "token": "U0xBQ0tfVE9LRU4",
    "team_id": "U0xBQ0tfVEVBTV9JRA",
    "team_domain": "zoom",
    "channel_id": "U0xBQ0tfQ0hBTk5FTF9JRA",
    "channel_name": "Photos",
    "user_id": "U089PEMRAM8",
    "user_name": "jane.dev",
    "command": "/unsplash",
    "text": "island",
    "api_app_id": "U0xBQ0tfQVBJX0FQUF9JRA",
    "is_enterprise_install": "false",
    "enterprise_id": "U0xBQ0tfRU5URVJQUklTRV9OQU1F",
    "enterprise_name": "Zoom Video Communications, Inc.",
    "response_url": "https://hooks.slack.com/services/U0xBQ0tfSU5DT01JTkdfV0VCSE9PS19JRA/U0xBQ0tfSU5DT01JTkdfV0VCSE9PS19JRA/U0xBQ0tfSU5DT01JTkdfV0VCSE9PS19JRA",
    "trigger_id": "U0xBQ0tfVFJJR0dFUl9JRA"
}
{
    "event": "bot_notification",
    "payload": {
        "accountId": "Wk9PTV9BQ0NPVU5UX0lE",
        "channelName": "Marketing",
        "cmd": "island",
        "robotJid": "Wk9PTV9ST0JPVF9KSUQ@xmpp.zoom.us",
        "timestamp": 1740440972844,
        "toJid": "Wk9PTV9DSEFOTkVMX0lE@conference.xmpp.zoom.us",
        "triggerId": "Wk9PTV9UUklHR0VSX0lE",
        "userId": "Wk9PTV9VU0VSX0lE",
        "userJid": "Wk9PTV9VU0VSX0lE@xmpp.zoom.us",
        "userMemberId": "Wk9PTV9VU0VSX01FTUJFUl9JRA",
        "userName": "Jane Dev",
        "userStatus": "authorized"
    }
}

UI elements

Here are the JSON structures of a user action taken on a Slack and Zoom message with buttons.

{
    "payload": {
        "type": "block_actions",
        "user": {
            "id": "U0xBQ0tfVVNFUl9JRA",
            "username": "jane.dev",
            "name": "jane.dev",
            "team_id": "U0xBQ0tfVEVBTV9JRA"
        },
        "api_app_id": "U0xBQ0tfQVBJX0FQUF9JRA",
        "token": "U0xBQ0tfVE9LRU4",
        "container": {
            "type": "message",
            "message_ts": "1739922180.382039",
            "channel_id": "U0xBQ0tfQ0hBTk5FTF9JRA",
            "is_ephemeral": false
        },
        "trigger_id": "U0xBQ0tfVFJJR0dFUl9JRA",
        "team": {
            "id": "U0xBQ0tfVEVBTV9JRA",
            "domain": "zoom",
            "enterprise_id": "U0xBQ0tfRU5URVJQUklTRV9OQU1F",
            "enterprise_name": "Zoom Video Communications, Inc."
        },
        "enterprise": {
            "id": "U0xBQ0tfRU5URVJQUklTRV9OQU1F",
            "name": "Zoom Video Communications, Inc."
        },
        "is_enterprise_install": false,
        "channel": {
            "id": "U0xBQ0tfQ0hBTk5FTF9JRA",
            "name": "marketing"
        },
        "message": {
            "subtype": "bot_message",
            "text": "Tacos for lunch? 🌮 Up Vote button Down Vote button",
            "type": "message",
            "ts": "1739922180.382039",
            "bot_id": "U0xBQ0tfQk9UX0lE",
            "blocks": [
                {
                    "type": "section",
                    "block_id": "U0xBQ0tfQkxPQ0tfSUQ",
                    "text": {
                        "type": "plain_text",
                        "text": "Tacos for lunch? :taco:",
                        "emoji": true
                    }
                },
                {
                    "type": "actions",
                    "block_id": "U0xBQ0tfQkxPQ0tfSUQ",
                    "elements": [
                        {
                            "type": "button",
                            "action_id": "actionId-0",
                            "text": {
                                "type": "plain_text",
                                "text": "Up Vote",
                                "emoji": true
                            },
                            "style": "primary",
                            "value": "up-vote"
                        }
                    ]
                },
                {
                    "type": "actions",
                    "block_id": "U0xBQ0tfQkxPQ0tfSUQ",
                    "elements": [
                        {
                            "type": "button",
                            "action_id": "actionId-1",
                            "text": {
                                "type": "plain_text",
                                "text": "Down Vote",
                                "emoji": true
                            },
                            "style": "danger",
                            "value": "down-vote"
                        }
                    ]
                }
            ]
        },
        "state": {
            "values": {}
        },
        "response_url": "https://hooks.slack.com/services/U0xBQ0tfSU5DT01JTkdfV0VCSE9PS19JRA/U0xBQ0tfSU5DT01JTkdfV0VCSE9PS19JRA/U0xBQ0tfSU5DT01JTkdfV0VCSE9PS19JRA",
        "actions": [
            {
                "action_id": "actionId-0",
                "block_id": "U0xBQ0tfQkxPQ0tfSUQ",
                "text": {
                    "type": "plain_text",
                    "text": "Up Vote",
                    "emoji": true
                },
                "value": "up-vote",
                "style": "primary",
                "type": "button",
                "action_ts": "1739922234.736267"
            }
        ]
    }
}
{
    "event": "interactive_message_actions",
    "payload": {
        "accountId": "Wk9PTV9BQ0NPVU5UX0lE",
        "actionItem": {
            "text": "Up Vote",
            "value": "up-vote"
        },
        "channelName": "Marketing",
        "messageId": "Wk9PTV9NRVNTQUdFX0lE",
        "original": {
            "head": {
                "text": "Vote bot"
            },
            "body": [
                {
                    "footer": "Vote by John Dev",
                    "type": "section",
                    "sections": [
                        {
                            "text": "\"Tacos for Lunch?\"",
                            "type": "message"
                        },
                        {
                            "type": "actions",
                            "items": [
                                {
                                    "style": "Primary",
                                    "text": "Up Vote",
                                    "value": "up-vote"
                                },
                                {
                                    "style": "Danger",
                                    "text": "Down Vote",
                                    "value": "down-vote"
                                }
                            ]
                        }
                    ]
                }
            ]
        },
        "replyMainMessageId": "Wk9PTV9SRVBMWV9NQUlOX01FU1NBR0VfSUQ",
        "robotJid": "Wk9PTV9ST0JPVF9KSUQ@xmpp.zoom.us",
        "timestamp": 1740441144756,
        "toJid": "Wk9PTV9DSEFOTkVMX0lE@conference.xmpp.zoom.us",
        "triggerId": "Wk9PTV9UUklHR0VSX0lE",
        "userId": "Wk9PTV9VU0VSX0lE",
        "userJid": "Wk9PTV9VU0VSX0lE@xmpp.zoom.us",
        "userMemberId": "Wk9PTV9VU0VSX01FTUJFUl9JRA",
        "userName": "Jane Dev",
        "userStatus": "authorized"
    }
}

Shortcuts

Here are the differences between Slack and Zoom shortcuts.

Slack sends shortcuts as webhooks.

{
    "payload": {
        "type": "message_action",
        "token": "U0xBQ0tfVE9LRU4",
        "action_ts": "1739922431.349104",
        "team": {
            "id": "U0xBQ0tfVEVBTV9JRA",
            "domain": "zoom",
            "enterprise_id": "U0xBQ0tfRU5URVJQUklTRV9OQU1F",
            "enterprise_name": "Zoom Video Communications, Inc."
        },
        "user": {
            "id": "U0xBQ0tfVVNFUl9JRA",
            "username": "jane.dev",
            "team_id": "U0xBQ0tfVEVBTV9JRA",
            "name": "jane.dev"
        },
        "channel": {
            "id": "U0xBQ0tfQ0hBTk5FTF9JRA",
            "name": "engineering"
        },
        "is_enterprise_install": false,
        "enterprise": {
            "id": "U0xBQ0tfRU5URVJQUklTRV9OQU1F",
            "name": "Zoom Video Communications, Inc."
        },
        "callback_id": "U0xBQ0tfQ0FMTEJBQ0tfSUQ",
        "trigger_id": "U0xBQ0tfVFJJR0dFUl9JRA",
        "response_url": "https://hooks.slack.com/services/U0xBQ0tfSU5DT01JTkdfV0VCSE9PS19JRA/U0xBQ0tfSU5DT01JTkdfV0VCSE9PS19JRA/U0xBQ0tfSU5DT01JTkdfV0VCSE9PS19JRA",
        "message_ts": "1739921917.389869",
        "message": {
            "subtype": "bot_message",
            "text": "Hello world",
            "type": "message",
            "ts": "1739921917.389869",
            "bot_id": "U0xBQ0tfQk9UX0lE",
            "blocks": [
                {
                    "type": "rich_text",
                    "block_id": "U0xBQ0tfQkxPQ0tfSUQ",
                    "elements": [
                        {
                            "type": "rich_text_section",
                            "elements": [
                                {
                                    "type": "text",
                                    "text": "Hello world"
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    }
}

Shortcuts on Zoom Chat are currently not webhook based, instead, clicking a Zoom shortcut opens a WebView pointing to your webpage where you can add interactivity and use the Zoom Apps SDK.