webex bot creation framework and tools via pip install webexbotsdk
^ EG
{
"botAccessToken": "", // (required) create a bot at https://developer.webex.com/my-apps
"port": 8080, // local server port
"botName": "", // give it a unique identifier (ex. mybot)
"encryptDb": false, // encrypts local json db
"botDbKey": "", // key used when 'encryptDb' is true
"ngrokAuthToken": "", // not recommended unless using a paid tier
"disableDb": false // disable tinydb
}
from webexbotsdk.teams import Bot
bot = Bot()
@bot.hears(r'hi|hello')
def hears_hi(message, data):
person = bot.api.people.get(message.personId)
return bot.api.messages.create(
roomId = message.roomId,
text = f"Hi {person.displayName}"
)
bot.setup('config.json')
bot.run()
from webexbotsdk.teams import Bot, sdk
class HiBot(Bot):
def say_hi(self, replyTo: sdk.Message) -> sdk.Message:
person:sdk.Person = self.api.people.get(replyTo.personId)
return self.api.messages.create(
roomId=replyTo.roomId,
text=f"Hi {person.displayName}"
)
hibot = HiBot()
@hibot.hears(r'hi|hello')
def hears_hi(message:sdk.Message, data):
hibot.say_hi(message)
hibot.setup('config.json')
hibot.run()
webexteamssdk is included
from webexbotsdk.teams import Bot
bot = Bot()
all_rooms = bot.api.rooms.list()
demo_rooms = [room for room in all_rooms if 'webexteamssdk Demo' in room.title]
local DB with TinyDB to remember things even after the bot is restarted
from webexbotsdk.teams import Bot
from webexbotsdk.tinydb import where
bot = Bot()
@bot.hears(r'remember (\d+)')
def hears_remember(message, data):
number = int(data['groups'][0][0])
bot.db.table('stuff').upsert(
{ 'personId':message.personId, 'number':number },
(where('personId') == message.personId) & (where('number') == number)
)
@bot.hears('recall')
def hears_recall(message, data):
docs = bot.db.table('stuff').search(where('personId') == message.personId)
bot.api.messages.create(
roomId=message.roomId,
text=f"I remember {', '.join([str(doc['number']) for doc in docs])}" if len(docs) > 0
else 'No numbers stored yet'
)
bot.setup('config.json')
bot.run()
from webexbotsdk.teams import Bot
from webexbotsdk.tinydb import where, dataclass, BotDoc
bot = Bot()
@dataclass
class Number(BotDoc):
personId:str
number:int
doc_id = bot.db.table('stuff').insert(Number(personId='asdf', number=14).dict())
docs = [Number(**doc) for doc in bot.db.table('stuff').get(doc_id=doc_id)]
bot.setup('config.json')
bot.run()
^ API
class Bot
app
Bottle local server for teams webhooks
api
WebexTeamsAPI will be abbreviated as teams
in this doc
db
TinyDB
log
python 3 Logger
setup(config:dict)
setup(path:str)
configure Bot using a python dict or a filepath to a json config
table(name:str) -> TinyDB.Table
retrieve tinydb table
run()
start the bot local server
send_card(roomId:str, card:teams.AdaptiveCard) -> teams.Message
mention(person:teams.Person|teams.Membership) -> str
mention(personId:str, displayName:str) -> str
(BROKEN) returns a formatted string for mentioning a user in a message
bot.api.message.create(text = f"hello {bot.mention(person)}")
send_help(source:teams.Message) -> teams.Message
reply to a message with help text which includes
- commands the bot recognizes
- command descriptions
hears(regex:str|list[str]|Pattern, name:str=None, description:str=None)
@decorator, listen for user giving the bot with a command
on(resource:str, event:str = None)
@decorator, listen for other resource events
#API | Framework helper methods
^ API
is_bot(person:teams.Person|teams.Membership) -> bool
determine whether a person is a human or bot
Create an Issue to:
- Ask a question
- Request a feature
- Report a bug
File a complaint
Pull requests from branches/forks are also welcome! I will try to respond to them ASAP.