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.