Skip to main content

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.

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

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

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.

Release history Release notifications | RSS feed

This release

0.0.13 This release

2 files

0.0.12

2 files

0.0.11

2 files

0.0.10

2 files

0.0.9

2 files

0.0.8

2 files

0.0.7

2 files

0.0.6

2 files

0.0.5

2 files

0.0.4

2 files

0.0.3

2 files

0.0.2

2 files

0.0.1

2 files

Supported by

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