Skip to main content

This package automates the process of bot creation

Project description

ChatBotMaker

This project aims to automate plateform messaging where the plateform support message forwarding.

Description

This module is based around a bot class in which you inject the necessary code / objects:

  • Messenger (An object that sends message or event back)
  • Dispatcher (An object that contains all the logic rule)
  • Database (An object that allows database interaction)

General Idea

User are in states and define what action should be executed.

A state is composed of 3 event and 1 input event (or main event):

  • func(user, user_input): main function called with the user's input
  • enter_func(user): called every time before the user sends text in its current state
  • pre_func(user): called when entering a state (ie. during change_state)
  • post_func(user): called when exiting a state (ie. during change_state)

InternalShema

Components

Messenger

You can create your own messenger class that should inherit the chatbotmaker.Messenger class.
It must implement a send(user_id: str, message:str) method and can implement other optional methods.

Dispatcher

The dispatcher recieves your config as a dictionnary in the following format:

{  
  'actions': {  
    'handle_name': {  
        'enter_func': lambda user: user.send_message('Hi there every time'),  
        'pref_func': lambda user: user.send_message('Hi there'),  
        'func': lambda user, user_input: user.change_state('home'),  
        'post_func': lambda user: user.send_message('You are redirected'),  
    },  
    'home': {  
        'pref_func': lambda user: user.send_message('Welcome back!'),  
        'func': 'lambda user, user_input: user.change_state(user_input)',  
    },  
    'input': {  
        'func': 'lambda user, user_input: (  
                    user.store_argument('input', user_input),  
                    user.change_state('home'),  
                )',  
    },  
    'help': Dispatcher.DEFAULT,
  }  
}
DEFAULT

You can associate function by their name to make the binding process easier. You must name your functions with {key}_{handle_name} (eg: func_help, pre_func_help, post_func_help). You then must pass the binding table dictionary to the Dispatcher constructor alongside the config __init__(self, config, env=None) . This generally are locals() or globals().

How does it work?

The user is the orm User class to whom we add some method (redirect failing attribute calls):

  • send_message(message: str)
  • change_state(state: str)
  • get_argument(name: str)
  • store_argument(name: str, value: str)
  • self.messenger, self.dispatcher, self.database (the one onjected in the bot)

Database

The given database database follows the following architecture:

  • users:
    • id = Column(Integer, primary_key=True)
    • fb_id = Column(String)
    • state = Column(String)
    • arguments = relationship('Argument', back_populates='user', lazy='dynamic')
  • arguments:
    • id = Column(Integer, primary_key=True)
    • name = Column(String)
    • value = Column(String)
    • user_id = Column(Integer, ForeignKey('users.id'))
    • user = relationship('User', uselist=False, back_populates='arguments')

The database expects a config (sqlachemy.config) object to initialize the database. Please check sqlalchemy configuration for more information.

Custom tables / ORM classes

You can add custom tables (thus ORM classes). To do so create your own base (declarative_base() from sqlalchemy) and with it your own models . Then inject it in the database object database([...], base=my_base).

In case you want to create relationships with default classes, it is possible. A function add_relationship(class_to_add, name, value) is available in the database module.

Usage

Default components

To avoid re-inventing the wheel, some "common" components have already been coded. They are in chatbotmaker.default.

Facebook

  • FacebookMessenger(authentication_token)
  • facebook_route(request, facebook_check_token, bot)
    • this flask routing should be called directly from the routing function

Dev

We have the dev file containing:

  • DevMessenger() # prints everythin in console

Installation

Using PIP since its a pip module repository:

42sh$ : pip install chatbotmaker

Contributing

Do no hesitate to make a pull request or launch a discussion. I am looking foreward to expand the default capabilites.

Authors and acknowledgment

Author:

Dominique MICHEL dominique.michel@epita.fr

Status

The project has reached its first final phase. Now there will be:

  • need to think about the design and facilitate user-database integration
    • Good work done here, maybe allow any orm engiine ine the future
  • need of tests (why not make a CI pipeline)
    • tests must tests more the content of the calls
    • github ci pipeline is so confusing coming from gitlab :o

Once the backend is functional and robust, i aim to make a frontend plateform to allow non-programming people to create bots too.

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

chatbotmaker-0.0.13.tar.gz (90.8 kB view details)

Uploaded Source

Built Distribution

chatbotmaker-0.0.13-py3-none-any.whl (11.1 kB view details)

Uploaded Python 3

File details

Details for the file chatbotmaker-0.0.13.tar.gz.

File metadata

  • Download URL: chatbotmaker-0.0.13.tar.gz
  • Upload date:
  • Size: 90.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.6.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.5

File hashes

Hashes for chatbotmaker-0.0.13.tar.gz
Algorithm Hash digest
SHA256 61dbb6bc9f2497a9ff6175058a12b5805a201586c3f65489a2955ac47179e364
MD5 d1e3c06ba4454c18b6da8506215d7e7b
BLAKE2b-256 f2ea3cfee07152477f79525e955762952386db7e9c0ac361b60dd358fc73c968

See more details on using hashes here.

File details

Details for the file chatbotmaker-0.0.13-py3-none-any.whl.

File metadata

  • Download URL: chatbotmaker-0.0.13-py3-none-any.whl
  • Upload date:
  • Size: 11.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.6.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.5

File hashes

Hashes for chatbotmaker-0.0.13-py3-none-any.whl
Algorithm Hash digest
SHA256 99e1225a5b835e85e95ede7496220e200b7928bf02c805da68841271c4a828a7
MD5 7124c7c41990ce9061b72f52039e578a
BLAKE2b-256 f97b2078e2ba0dc0a14cc14316b64a8628fbb294c0e9c756ac4d5c768a301b51

See more details on using hashes here.

Supported by

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