Event
trigger.webex_event
TriggerChat & messagingconnection requiredruns in-engine
Registers a Webex webhook per event in the tenant's Webex account on publish and starts one run per delivery, verified against X-Spark-Signature.
Start a run when Cisco Webex raises an event (message, membership, meeting).
Connection
- Required
- Yes — the node will not save without one
- Auth type
- Bearer token
- Providers
- Cisco Webex
- Secret shape
- the Webex access token (a bot token or an integration OAuth token)
- Resolved by
- config.connection_id, else node.connection_id
- Note
- The token needs the read scope for the resource being watched, and creates a webhook owned by whoever the token belongs to — a bot token only ever sees the spaces the bot is in. Publishing also needs MANTLE_APP_PUBLIC_BASE_URL set to a URL Webex can reach from the public internet.
Configuration
3 fields, none required. A dotted path is a nested object and name[] an array of objects — the editor renders the same tree.
| Field | Type | Required | Default | Constraints | Example |
|---|---|---|---|---|---|
resource The Webex noun to watch. One webhook is created per event on this resource; 'all' is Webex's firehose over memberships, messages and rooms and needs the read scope for all three. | string | No | messages | one of "all", "attachmentActions", "dataSources", "memberships", "messages", "rooms", "serviceApp", "telephony_calls", "telephony_conference", "telephony_mwi", "telephony_agent", "telephony_agentMonitoring", "telephony_queue", "telephony_queueMonitoring", "meetings", "recordings", "convergedRecordings", "meetingParticipants", "meetingTranscripts", "uc_counter", "adminBatchJobs" | — |
events The verbs to watch on that resource — each one is a separate webhook at Webex. Not every verb applies to every resource: messages has no 'updated', meetings has 'started' and 'ended', meetingParticipants has 'joined' and 'left'. | array | No | ["created"] | 1–8 characters; array of string | — |
filter Webex's own filter, to narrow what is delivered: name=value pairs joined with '&', e.g. roomId=Y2lzY29...&personEmail=ada@example.com. Without one the webhook fires for everything the token can see, and every delivery starts a run. | string | No | — | — | roomId=Y2lzY29zcGFyazovL3VzL1JPT00v |
Example configuration
Every value below is the contract’s own example or default — nothing invented.
{
"events": [
"created"
],
"filter": "roomId=Y2lzY29zcGFyazovL3VzL1JPT00v",
"resource": "messages"
}Output
One shape.
webex event
The flattened Webex delivery. data's own keys vary by resource, so the shape is open below the declared fields.
Extra keys beyond the ones listed can appear.
| Field | Type | Example |
|---|---|---|
event_id Mantle's idempotency key for this notification, built from Webex's own identity for it: resource, event, the resource id, and a digest of the resource body. Webex sends no delivery id of its own — the envelope's id is the webhook's — so a retry collapses onto the run it already started because it is byte-identical, not because Webex numbered it. | string | messages:created:Y2lzY29zcGFyazovL3VzL01FU1NBR0Uv:9f2b0c1d4e5a6b7c8d9e0f1a2b3c4d5e |
resource The noun the event is about, e.g. messages, memberships, meetings. | string | messages |
event The verb, e.g. created, deleted, started. Branch on this when the trigger watches more than one. | string | created |
webhook_id Id of the webhook that delivered this — the same on every delivery, so it identifies the subscription and never the event. | string | — |
webhook_name The name this webhook was created with. | string | — |
actor_id Person who caused the event: the author of a message, the person who removed a membership. | string | Y2lzY29zcGFyazovL3VzL1BFT1BMRS9mNWIz |
org_id Organisation that owns the webhook. | string | — |
created_by Person whose token created the webhook. | string | — |
owned_by Whether the webhook is owned by its creator or the org. | string | — |
filter The filter this webhook was registered with, if any. | string | — |
data_id Id of the resource the event is about, lifted out of data so the next node need not dig — the message id, the meeting id, the membership id. | string | Y2lzY29zcGFyazovL3VzL01FU1NBR0Uv |
data Webex's own representation of the resource. Its keys depend on resource, which is why this shape is open. Note that Webex omits encrypted content: a message arrives WITHOUT its text, and reading it means a webex.get_message call with the same connection. | object | — |
payload The delivery envelope exactly as Webex sent it, for anything the fields above do not lift out. | object | — |
{
"actor_id": "Y2lzY29zcGFyazovL3VzL1BFT1BMRS9mNWIz",
"created_by": "Y2lzY29zcGFyazovL3VzL1BFT1BMRS9mNWIz",
"data": {
"created": "2026-05-30T12:00:00.000Z",
"id": "Y2lzY29zcGFyazovL3VzL01FU1NBR0Uv",
"personEmail": "ada@example.com",
"personId": "Y2lzY29zcGFyazovL3VzL1BFT1BMRS9mNWIz",
"roomId": "Y2lzY29zcGFyazovL3VzL1JPT00v",
"roomType": "group"
},
"data_id": "Y2lzY29zcGFyazovL3VzL01FU1NBR0Uv",
"event": "created",
"event_id": "messages:created:Y2lzY29zcGFyazovL3VzL01FU1NBR0Uv:9f2b0c1d4e5a6b7c8d9e0f1a2b3c4d5e",
"filter": "roomId=Y2lzY29zcGFyazovL3VzL1JPT00v",
"org_id": "OTZhYmMyYWEtM2RjYy0xMWU1LWExNTI",
"owned_by": "creator",
"payload": {
"id": "Y2lzY29zcGFyazovL3VzL1dFQkhPT0sv",
"resource": "messages"
},
"resource": "messages",
"webhook_id": "Y2lzY29zcGFyazovL3VzL1dFQkhPT0sv",
"webhook_name": "Mantle workflow trigger (trigger.webex_event)"
}Notes
- Publishing creates the webhooks in Webex; unpublishing, disabling or archiving deletes them. A workflow that is off is off at Webex too.
- Every delivery is verified against X-Spark-Signature, the HMAC-SHA1 of the raw body keyed on a secret minted at registration. A delivery that does not verify is refused before the body is parsed.
- Webex strips encrypted content from a notification: a messages:created delivery carries the sender, room and timestamp but NOT the message text. Add a webex.get_message step on data_id to read it.
- Webex disables a webhook that fails 100 deliveries inside five minutes, and disables any webhook whose creating user leaves the organisation. Neither is visible from here — publish again to re-create.
- Webhooks are created creator-owned. Org-wide webhooks are limited to one per organisation, which is why this trigger never claims it.
See Event run in a workflow.
In a technical demo we add the Cisco Webex connection, drop the node on the canvas and let Workflow Health pre-flight it before the first real run.