How to Set Up a Webex Meeting Bot with Unified
November 7, 2026
Overview
Webex (meeting bot) (webexmeetingbot) is the integration that gives you a calendar_bot and calendar_botevents for Webex meetings. It is separate from the Webex integration: existing Webex connections don't change, and your end users connect Webex (meeting bot) on its own.
A Webex meeting bot is a monitor: no bot joins the meeting, and no audio, video or chat is captured. Unified follows the meeting through Webex webhooks:
- while the meeting runs: meeting started and ended, participants joined and left
- after the meeting:
RECORDING_READY(the bot'srecording_idis set) and the Webex transcript asTRANSCRIPT_RECEIVEDevents
The same connection also gives you Webex's calendar_calendar, calendar_event, calendar_recording and calendar_webinar objects. They work as on the Webex integration, and their scopes are requested only when you select their permissions.
For how to create bots and receive events, see How to Build a Meeting Bot with Unified.
⚠️ Important: bring your own Webex integration
Unified has no shared OAuth credentials for Webex (meeting bot). You create your own Webex integration (Webex's name for an OAuth app) and enter its client ID and secret in Unified.
What you'll need
- A Webex account that can sign in to the Webex Developer Portal
- End users on Webex sites with Webex Meetings
- For recordings: cloud recording, which isn't on the Webex Free plan. For transcripts: recording plus Webex Assistant / Closed Captions or the Cisco AI Assistant (transcripts aren't available on Webex for Government)
Step 1: Create a Webex integration
- In the Webex Developer Portal, open My Webex Apps and create an Integration.
- Add the Unified redirect URI for your region:
- US:
https://api.unified.to/oauth/code - EU:
https://api-eu.unified.to/oauth/code - AU:
https://api-au.unified.to/oauth/code
- US:
- Select the scopes in Step 2, save, and copy the Client ID and Client Secret. Webex shows the client secret only once, when you create the integration.
Step 2: Scopes
| Scope | Unified permission | Why |
|---|---|---|
meeting:schedules_read | calendar_bot_read, calendar_bot_write, calendar_botevent_read, calendar_event_read, calendar_recording_read | Find the meeting when a bot is created; meeting started and ended webhooks; list meetings |
meeting:participants_read | calendar_botevent_read, calendar_event_read | Participant joined and left webhooks |
meeting:recordings_read | calendar_botevent_read, calendar_recording_read | Recording created webhooks; reading the recording |
meeting:transcripts_read | calendar_botevent_read, calendar_recording_read | Transcript created webhooks, transcript snippets and recording transcripts |
Unified also requests the OpenID sign-in scopes (openid, profile, email); you don't select those in My Webex Apps. If you select other permissions, add the scopes the Webex integration uses for them: spark:rooms_read (calendar_calendar_read), and meeting:schedules_write and meeting:participants_write (calendar_event_write, calendar_webinar_write). |
Webex lists the scope each webhook resource needs in Register and manage webhooks.
Step 3: Enter your credentials in Unified
- In the Unified app, open Integrations and activate Webex (meeting bot).
- Enter your Webex integration's Client ID and Client Secret.
- Select the permissions you need:
calendar_bot_read,calendar_bot_writeandcalendar_botevent_readfor bots,calendar_event_readto list events (creating a bot from anevent_idneeds onlycalendar_bot_write), andcalendar_recording_readto read recordings.
Step 4: Webhook setup
There is nothing to configure in Webex. When you create a native calendar_botevent webhook on a connection, Unified registers six Webex webhooks for that connection, one per notification:
meetingsstarted and endedmeetingParticipantsjoined and leftrecordingscreatedmeetingTranscriptscreated
Each has its own random secret, as Webex recommends, and Unified verifies every delivery with the secret of the webhook that sent it. Deleting the Unified webhook removes the Webex registrations. Webex disables a webhook after repeated delivery failures and doesn't re-enable it; if events stop, delete the calendar_botevent webhook and create it again.
Create the webhook before the meeting starts, or the bot misses the meeting.
How end users connect
End users authorize Webex (meeting bot) through Unified's authorization flow (embedded authorization or the authorization link) and approve the scopes above. A bot only receives notifications from its own connection's webhooks.
Test the setup
- Create a
calendar_botwith the Webex meeting link (meeting_url), or with theidof acalendar_eventlisted on the same connection (event_id, the Webex meeting ID). The bot isREADY. A bot created from anevent_idthat is a meeting instance already in progress starts inIN_CALL_NOT_RECORDING; a bot created from ameeting_urlalways starts inREADY. - Create a native webhook for
calendar_botevent/createdon the same connection. - Start the meeting: expect
BOT_STATUS_CHANGEtoIN_CALL_NOT_RECORDINGandPARTICIPANT_JOINEDevents. - End the meeting: expect
BOT_STATUS_CHANGEtoCALL_ENDED. If the meeting was recorded or transcribed, expectRECORDING_READYandTRANSCRIPT_RECEIVEDevents later. - Read the recording with
GET /calendar/{connection_id}/recording/{recording_id}on the same connection.
Limits
- Unsupported features return
501(Not supported by this integration: …):join_at, and anyrecording_config(media capture or transcription). Malformed input returns400.automatic_leaveisn't used. - Final status is
CALL_ENDED****. Themeetings.endednotification doesn't say whether a recording will follow, so a Webex bot never moves toDONE. Watch forRECORDING_READY. - Recordings: Webex returns only recordings of meetings hosted by or shared with the connected user. A recording can take up to 24 hours to be ready, and a transcript about twice the meeting's length (up to 24 hours).
- No live transcript, chat, webcam, screen-share or speaking events. Transcripts arrive after the meeting, one
TRANSCRIPT_RECEIVEDper snippet. Unified asks for 100 snippets per page, for up to 50 pages. - Recurring meetings: a bot created for a series or scheduled meeting follows the first occurrence that starts after the bot was created.
- One active bot per meeting link per connection: creating another while an earlier bot for exactly the same link is still active (not
CALL_ENDED,DONEorFATAL) returns409. - Only
namecan be updated. An update withmeeting_urlorevent_idreturns400. - Other errors on create:
400for malformed input,404when no Webex meeting matches the link orevent_id, and422when the meeting has no web link. - Webex aims to make the API data behind a notification available within 10 minutes (in 99.5% of cases); until then, looking it up can return
404. If the transcript isn't readable yet, Unified tries again for about 12 minutes, soTRANSCRIPT_RECEIVEDevents can arrive that much later than the transcript notification. - Deleting a bot stops following the meeting; no event is sent.
Troubleshooting
❌ No events at all
- The
calendar_boteventwebhook was created after the meeting started, or on another connection - The Webex integration is missing a scope from Step 2 (reconnect after adding scopes)
❌ Creating a bot returns 501
The request includes join_at or recording_config. Remove them.
❌ No recording or transcript events
- The meeting wasn't recorded or transcribed in Webex, or the site's plan has no cloud recording
- The connected user didn't host the meeting and the recording wasn't shared with them
- The connection is missing
meeting:recordings_readormeeting:transcripts_read - Webex hasn't finished processing it yet (up to 24 hours)
❌ Events stopped arriving
Webex disabled the registrations after repeated delivery failures. Delete the calendar_botevent webhook and create it again.