Skip to main content

Python package for a Webex Bot based on websockets.

Project description

Introduction

Pypi Build Status

By using this module, you can create a Webex Teams messaging bot quickly in just a couple of lines of code.

This module does not require you to set up an ngrok tunnel to receive incoming messages when behind a firewall or inside a LAN. This package instead uses a websocket to receive messages from the Webex cloud.

Features

  • Uses the websockets module to receive incoming messages, thus avoiding the need to have a public IP or use incoming webhooks.
  • Simply add 'commands' which are just strings which instruct the bot to perform some action and reply with some result.
  • Allows for single or multi-post responses. This is useful if you want to reply with a lot of data, but it won't all fit in a single response.
  • Restrict bot to certain users or domains.
  • Uses the webexteamssdk package to send back replies from the bot.

Getting started

  1. Install this module from pypi:

pip install webex_bot

  1. On the Webex Developer portal, create a new bot token and expose it as an environment variable.
export WEBEX_TEAMS_ACCESS_TOKEN=<your bots token>
  1. Run your script:

python example.py

See example.py for details:

import os

from webex_bot.commands.echo import EchoCommand
from webex_bot.webex_bot import WebexBot

# Create a Bot Object
bot = WebexBot(teams_bot_token=os.getenv("WEBEX_TEAMS_ACCESS_TOKEN"))

# Add new commands for the bot to listen out for.
bot.add_command(EchoCommand())

# Call `run` for the bot to wait for incoming messages.
bot.run()

where EchoCommand is defined as:

import logging

from webex_bot.cards.echo_card import ECHO_CARD_CONTENT
from webex_bot.formatting import quote_info
from webex_bot.models.command import Command

log = logging.getLogger(__name__)


class EchoCommand(Command):

    def __init__(self):
        super().__init__(
            command_keyword="echo",
            help_message="Type in something here and it will be echo'd back to you. How useful is that!",
            card=ECHO_CARD_CONTENT)

    def execute(self, message, attachment_actions, activity):
        """
        If you want to respond to a submit operation on the card, you
        would write code here!

        You can return text string here or even another card (Response).

        This sample command function simply echos back the sent message.

        :param message: message with command already stripped
        :param attachment_actions: attachment_actions object
        :param activity: activity object

        :return: a string or Response object. Use Response if you want to return another card.
        """
        email = activity["actor"]['emailAddress']

        return quote_info(attachment_actions.inputs.get("message_typed"))
  1. Now, just interact 1-1 with the bot. Send it a message with the text:

echo

and off you go!

History

0.1.2 (2021-03-15)

  • First release on PyPI.

0.1.4 (2021-03-23)

  • Better retry on websocket connection failure
  • Added support for approved domains
  • Other cleanup

0.1.5 (2021-03-23)

  • Retry websocket connection on socket.gaierror. (#1)

0.1.6 (2021-03-25)

  • Send ack on websocket message received. (#2)

0.1.7 (2021-03-26)

  • Minor cleanup.
  • Log bot email on startup.

0.1.8 (2021-05-04)

  • Fetch incoming message ID as base64.

0.2.0 (2021-05-07)

  • Switch format entirely to use cards.

0.2.1 (2021-05-07)

  • Import fix

0.2.2 (2021-05-08)

  • Typo fix

0.2.3 (2021-05-10)

  • Fix no module found error

0.2.5 (2021-05-10)

  • Pin websockets version

0.2.6 (2021-05-21)

  • Couple of bug fixes and support python 3.8 fully

0.2.7 (2021-09-27)

  • Fix for #11 server rejected WebSocket connection: HTTP 404

0.2.8 (2022-01-06)

Breaking change for existing cards:

  • Pass activity down to execute function so attibutes such as email can be fetched from card actions.
  • Update your existing execute functions to include the extra activity parameter.
    def execute(self, message, attachment_actions, activity):
        log.info(
            f"activity={activity} ")
        email = activity["actor"]['emailAddress']
        return quote_info(f"person email is '{email}'")

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

webex_bot-0.2.9.tar.gz (20.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

webex_bot-0.2.9-py2.py3-none-any.whl (17.8 kB view details)

Uploaded Python 2Python 3

File details

Details for the file webex_bot-0.2.9.tar.gz.

File metadata

  • Download URL: webex_bot-0.2.9.tar.gz
  • Upload date:
  • Size: 20.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.8.12

File hashes

Hashes for webex_bot-0.2.9.tar.gz
Algorithm Hash digest
SHA256 8d814c178de1e53acb8b19902f6165e8377d029c7e39d0c541b507ea9dc34493
MD5 eb2d6a3b8f8d245a0cebac3046375e96
BLAKE2b-256 e5b9d82c75828337b1c4764b4ffdc08f6fb167b4a6920f2997a033dc5c6c7c64

See more details on using hashes here.

File details

Details for the file webex_bot-0.2.9-py2.py3-none-any.whl.

File metadata

  • Download URL: webex_bot-0.2.9-py2.py3-none-any.whl
  • Upload date:
  • Size: 17.8 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.8.12

File hashes

Hashes for webex_bot-0.2.9-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 bb08abe4d95d46337753ed740204053b552ca283647a7de9a36856831a1e2804
MD5 25ae1699f0ea5c5dcde89d6f2262910d
BLAKE2b-256 c618b4fc99c0729121196329ad31333c318b0c073a378ec8acbd9945684034f9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page