{"id":13764384,"url":"https://github.com/marksull/err-backend-cisco-webex-teams","last_synced_at":"2026-01-30T12:48:25.294Z","repository":{"id":48356142,"uuid":"146394957","full_name":"marksull/err-backend-cisco-webex-teams","owner":"marksull","description":"Err Backend for Cisco Webex Teams","archived":false,"fork":false,"pushed_at":"2025-10-05T01:08:30.000Z","size":198,"stargazers_count":25,"open_issues_count":1,"forks_count":6,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-10-05T03:24:39.822Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/marksull.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-08-28T05:11:37.000Z","updated_at":"2025-10-05T01:08:33.000Z","dependencies_parsed_at":"2025-05-10T19:41:14.286Z","dependency_job_id":null,"html_url":"https://github.com/marksull/err-backend-cisco-webex-teams","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/marksull/err-backend-cisco-webex-teams","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marksull%2Ferr-backend-cisco-webex-teams","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marksull%2Ferr-backend-cisco-webex-teams/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marksull%2Ferr-backend-cisco-webex-teams/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marksull%2Ferr-backend-cisco-webex-teams/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marksull","download_url":"https://codeload.github.com/marksull/err-backend-cisco-webex-teams/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marksull%2Ferr-backend-cisco-webex-teams/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28912915,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-30T12:13:43.263Z","status":"ssl_error","status_checked_at":"2026-01-30T12:13:22.389Z","response_time":66,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-03T16:00:19.784Z","updated_at":"2026-01-30T12:48:25.283Z","avatar_url":"https://github.com/marksull.png","language":"Python","funding_links":[],"categories":["Bot frameworks"],"sub_categories":[],"readme":"err-backend-cisco-webex-teams\n======\n\nThis is an err (http://errbot.io) backend for Cisco Webex Teams (https://www.webex.com/products/teams/index.html) \n(formally Cisco Spark).\n\nThis repo is based off my previous Cisco Spark repo (https://github.com/marksull/err-backend-cisco-spark) but with one \nbig difference: this uses websockets and not webhooks to communicate with Webex Teams. This makes a big difference when \nit comes to deploying your bot behind a firewall or NAT device as the connection is initiated outbound and held open so\nthere are no need for webhooks, firewall/nat changes, or tunnels (like NGROK) to provide access to your bot.\n\nThe websocket implementation comes from: https://github.com/cgascoig/ciscospark-websocket\n\n## WebexTeamsSDK versus WebexPythonSDK\n\nWebexTeamsSDK migrated to WebexPythonSDK when Python 2 support was dropped. As all maintenance and new features are now\nbeing added to WebexPythonSDK, this backend has been updated to use WebexPythonSDK. This backend uses: \n- WebexTeamsSDK for versions prior to 2.0.0\n- WebexPythonSDK for versions 2.0.0 and later\n\n## Quick Start\n\nThe quickest way to get started is to use Docker to build the image and run the preconfigured container.\n\n1) Create a new bot here (if required) and note the token : https://developer.webex.com/my-apps/new/bot \n2) Clone this repo: `git clone https://github.com/marksull/err-backend-cisco-webex-teams.git`\n3) From the cloned repo directory, copy the `.env` file to `.env.local` and update the environment variables in `.env.local`\n4) From the cloned repo directory, build and run the Docker image: `make build_run`\n\nThis will start the container and run the bot. Start a 1:1 chat with the bot using the bot's email \naddress created during the teams bot registration process.\n\nUse the command `help` to see the available commands.\n\nThere are nine example plugins included in the container. To see the list of plugins use the command `status plugins`.\n\nTo see the examples in action, use the following commands:\n1) `simple message this is my message` - get a simple message in response\n2) `example card` - get a card, selected an option from the dropdown, and receive a response\n3) `example upload` - get a message and multiple example files uploaded\n4) `simple message with callback` - get a simple message in response with a callback (check the logs for the callback response)\n5) `remember this` - remember a message and recall it later\n6) `recall` - recall the message remembered in the previous command\n7) `args remember blue green` - remember a message with multiple args and recall it later\n8) `args recall` - recall the message remembered in the previous command with multiple args\n9) `example large response` - see how to manually paginate a large response when using fenced code blocks\n10) `template this is my message` - see how to use errbot templates to build your replies\n11) `this is a bad message` - see how to custom handle a message that is not a valid command (only required if you want to do something special - i.e. ask OpenAI?)\n12) `details` - start an example flow conversation to sequentially gather details from the user\n\nTo stop the container, issue a `Control-c`.\n\n### Quick Command\n\nUsing the Quick Start method, here is how you would introduce your own simple command and test it out:\n\n1) Within this repo, open the file [plugins/err-example-simple/examplesimple.py](plugins/err-example-simple/examplesimple.py)\n2) Add a new command of your choosing, for example:\n```python\n    @botcmd\n    def my_new_command(self, msg, _):\n        yield f\"Hello, {msg.frm.email}! This is your new command.\"\n```\n3) Build and run Docker image using the LOCAL repo that you just modified: `make test_build_run`\n4) Issue the command `my new command` in a 1:1 chat with the bot\n\n\n## Installation\n\nIf you want to set up your own custom bot, you can follow the instructions below.\n\n```\ngit clone https://github.com/marksull/err-backend-cisco-webex-teams.git\n```\n\nTo your errbot config.py file add the following:\n\n```\nBACKEND = 'CiscoWebexTeams'\nBOT_EXTRA_BACKEND_DIR = '/path_to/err-backend-cisco-webex-teams'\n```\n\n## Bot Configuration\n\nTo configure the bot you will need a Bot TOKEN. If you don't already have a bot setup on Cisco Webex Teams  details can\nbe found here: https://developer.webex.com/my-apps/new/bot.\n\n```python\nBOT_IDENTITY = {\n    'TOKEN': '\u003cinsert your token in here\u003e',\n}\n```\n\nIn a Webex Teams GROUP room (more than two people), to direct a command to the bot you need to prefix it with the name of the\nbot as you would any other person in the room (for example, type @ and select the bot name). \nAs Webex Teams will prefix the command with this name it is important that it is stripped from the \nincoming command for it to be processed correctly. To achieve this add your bot name \n(exactly as configured in Webex Teams) to the BOT_PREFIX:\n\n```python\nBOT_PREFIX = 'my-webex-teams-bot-name '\n```\n\nIn a Webex Teams DIRECT room chat with the bot, the bot prefix is not sent with the command. Ensure\nto enable BOT_PREFIX_OPTIONAL_ON_CHAT so that the prefix is not required for direct communication:\n\n```python\nBOT_PREFIX_OPTIONAL_ON_CHAT = True\n```\n\nTo restrict the bot to only respond to commands to users from specific domains only, define PERMITTED_DOMAINS:\n\n```python\nPERMITTED_DOMAINS = [\"mydomain.com\"]\n```\n\n\n## Cards\n\nA custom card callback handler has now been implemented to make it easier to work with cards. Refer to the\nexample plugin [err-example-card](plugins/err-example-cards)\n\n## Uploads\n\nWhile Webex Teams does not support the creation of a Message with both text and file(s) for upload, this backend \nwill now automatically split the message and the file upload into multiple messages. Refer to the example  [err-example-upload](plugins/err-example-upload)\n\n## Credit\n\nI unrestrainedly plagiarized from most of the already existing err backends and cgascoig's ciscospark-websocket implementation \n(https://github.com/cgascoig/ciscospark-websocket).\n\n## Contributing\n\nHappy to accept Pull Requests\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarksull%2Ferr-backend-cisco-webex-teams","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarksull%2Ferr-backend-cisco-webex-teams","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarksull%2Ferr-backend-cisco-webex-teams/lists"}