A "Trade Floor" application that can receive PSTN calls (Webex Connect) with custom IVR, and direct the caller to a Webex Meeting (by way of Webex Calling). Can receive SIP calls from devices using a static dial string and direct them to the Webex Meeting as well.
This project was developed to provide a couple of methods for audio users to join a Webex Meeting without using the native Webex Meeting clients, and without being prompted to enter meeting access codes, or host pins.
The PSTN Flow:
- Caller dials a Webex Connect number which triggers a Webex Connect Flow.
- Webex Connect Flow collects DTMF input, and sends an HTTP POST with the caller number and entered digits to our server
- Webex Connect Flow patches the call to Webex Calling Queue (empty)
- Our server monitors the Webex Calling Queue using XSI
- When a call enters the Queue that matches the POST we received from the Webex Connect Flow, we transfer the call to the Webex Meeting
The SIP Flow:
- Caller dials a string in the format "meeting.PHONENUMBER.PIN@ourexpressway.exampledomain.com"
- The Cisco Expressway notifies our server (via Call Policy Service) of the incoming call
- Our server redirects the call to the Webex Meeting if the string and PIN are valid
The Server:
- Our python server.py is listening for POST requests from Webex Connect and the Cisco Expressway
- Our python server.py is monitoring the Webex Calling Queue
- It is also managing the scheduled meetings via the Webex Meetings REST API
- Retrieving/Storing configuration information from/to MongoDB
- Managing a playwright chromium subprocess to join the meetings and mute/unmute, admit/remove participants as needed
- Developed on MacOS Ventura (13.2.1) & Ubuntu 22.04
- Developed on Python 3.8.1 & 3.8.3
- Other OS and Python versions may work but have not been tested
- Mongo DB (i.e. Atlas)
- Cisco Expressway
- Webex Connect
- Webex Calling
- Webex Integration with the following scopes:
meeting:recordings_read meeting:admin_preferences_write spark:all meeting:admin_preferences_read meeting:participants_read meeting:admin_participants_read meeting:preferences_write spark-admin:people_write meeting:transcripts_read spark:people_write spark:organizations_read meeting:schedules_write meeting:controls_read meeting:admin_config_write meeting:admin_schedule_read spark-compliance:meetings_write meeting:admin_schedule_write meeting:schedules_read spark-admin:xsi meeting:recordings_write meeting:preferences_read spark:kms meeting:controls_write meeting:admin_recordings_write spark:xsi meeting:participants_write spark-admin:licenses_read meeting:admin_config_read meeting:transcripts_write spark-admin:people_read
pip3 install playwright
playwright install
playwright install-deps
pip3 install python-dotenv
pip3 install pymongo==3.10.1
pip3 install pymongo[srv]
pip3 install tornado==4.5.2
pip3 install requests
pip3 install requests-toolbelt
pip3 install wxcadm
pip3 install cachetools
- Clone this repo, and create a file named
.env
in the repo's root directory. - Populate the following environment variables to the .env file:
MY_APP_PORT=8080
DEV_MODE=false
PYTHON_PROC_NAME=python3
MY_COOKIE_SECRET="SOME_SECRET_STRING"
WEBEX_INTEGRATION_CLIENT_ID="CLIENT_ID"
WEBEX_INTEGRATION_CLIENT_SECRET="CLIENT_SECRET"
WEBEX_INTEGRATION_REFRESH_TOKEN="REFRESH_TOKEN_FOR_ADMIN_USER_IN_YOUR_ORG_USING_THIS_INTEGRATION"
MY_MONGO_URI="mongodb+srv://yourusername:yourpassword@yourcluster.abcde.mongodb.net/YOURDB?authSource=admin&retryWrites=true&w=majority"
MY_MONGO_DB="YOURDB"
- Run
python3 server.py
Check out our Vidcast recording, here!
*For more demos & PoCs like this, check out our Webex Labs site.
All contents are licensed under the MIT license. Please see license for details.
Everything included is for demo and Proof of Concept purposes only. Use of the site is solely at your own risk. This site may contain links to third party content, which we do not warrant, endorse, or assume liability for. These demos are for Cisco Webex usecases, but are not Official Cisco Webex Branded demos.
Please contact the Webex SD team at wxsd@external.cisco.com for questions. Or for Cisco internal, reach out to us on Webex App via our bot globalexpert@webex.bot & choose "Engagement Type: API/SDK Proof of Concept Integration Development".