Skip to main content

Build serverless chatbot on BotHub.Studio

Project description

This package provide components to works with BotHub.Studio, which is a chatbot hosting service.

With bothub-cli, you can deploy a new chatbot with just four lines of commands.

Installation

To install bothub:

$ pip install bothub

The bothub package works on python2 and 3 both.

Getting Started

You can build an echo chatbot simply by subclassing BaseBot class and overriding handle_message method.

# -*- coding: utf-8 -*-

from bothub_client.bot import BaseBot

class Bot(BaseBot):
    """Represent a Bot logic which interacts with a user.

    BaseBot superclass have methods belows:

    * Send message
      * self.send_message(message, chat_id=None, channel=None, extra=None)
    * Data Storage
      * self.set_project_data(data)
      * self.get_project_data()
      * self.set_user_data(data, user_id=None, channel=None)
      * self.get_user_data(user_id=None, channel=None)
      * self.nlu(vendor) -> NluClient

    When you omit user_id and channel argument, it regarded as a user
    who triggered a bot.
    """

    def handle_message(self, event, context):
        self.send_message(event['content'])

When a bot receives a message from an user, it triggers handle_message method with event and context object.

An event is a dict which contains following items:

  • content: A message text received.

  • channel: Which channel (messenger platform) sent a message.

  • sender: Who sent a message. {"id": <user-id>, "name": "<username>}

  • chat_id: Chatroom ID where message is sent. It can be a 1:1 chatroom or group chatroom.

  • location: Location information if possible {"longitude": <float>, "latitude": <float>}

  • postback: A postback data.

  • new_joined: A boolean which indicates this bot was invited to some chatroom or not.

  • raw_data: A raw data itself messenger platforms sent.

You can respond to this message with various tools we provides.

Messaging

To send a message, use a self.send_message method with a message you want to send.

self.send_message('hello')

In most cases, you may omit user_id and channel arguments. Then it replies to whom sent a message to your bot. Put values to those arguments when you want to specify a receiver.

You can send a message with rich controls like ‘quick replies’ or ‘buttons’ using Message object.

from bothub_client.messages import Message

message = Message(event).add_quick_reply('Go ahead')\
                        .add_quick_reply('Never mind')\
                        .set_text('May I reserve the seat?')
self.send_message(message)

Message class provides these methods:

  • set_text(text)

  • add_url_button(text, url):

  • add_postback_button(text, payload)

  • add_quick_reply(text, payload=None, image_url=None)

  • add_location_request(text)

  • add_keyboard_button(text)

Storage

To store/retreive a property data, we provides following methods:

  • Project level

    • self.set_project_data(data): set data to a project

    • self.get_project_data(key=None): get data from a project

  • User level

    • self.set_user_data(data, user_id=None, channel=None): set user data

    • self.get_user_data(user_id=None, channel=None, key=None): get user data

data should be a dict. An existing properties not included in data will be ignored, not be deleted.

  • If user_id and channel is None, it regarded as a message sender.

  • When key is None, get whole dictionary will be returned. Otherwise, subtree of given key will be returned.

NLU Integeration

You can use nlu method to perform NLU after setup NLU integration at BotHub.Studio.

There are two styles to request to NLU service. (eg. to use API.ai)

First, use event object to construct message and session_id.

def handle_message(self, event, context):
    response = self.nlu('apiai').ask(event=event)
    self.send_message(response.next_message)

Or, put explicit message and session_id by yourself.

def handle_message(self, event, context):
    response = self.nlu('apiai').ask(message='hello', session_id='customer1')
    self.send_message(response.next_message)

If you want to use a language other than english, use lang keyword argument on ask() function.

ask method returns a NluResponse object which contains attributes like:

  • raw_response: A raw response which NLU service returns.

  • action: A NluAction class object to identify intent and required parameters.

  • next_message: Next message text to respond NLU service recommend.

A NluAction object contains attributes like:

  • intent: Intent name

  • parameters: parameter dict

  • completed: A boolean indicates whether action completed

For incompleted action, you need to reply to user with next_message attribute of a NluResponse instance to complete action.

License

This package is licensed under AGPLv3 for non-commercial personal use. If you want to use this package for commercial use, please contact to bothub@bothub.studio.

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

bothub-0.1.27.tar.gz (18.3 kB view details)

Uploaded Source

Built Distribution

bothub-0.1.27-py2.py3-none-any.whl (25.0 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file bothub-0.1.27.tar.gz.

File metadata

  • Download URL: bothub-0.1.27.tar.gz
  • Upload date:
  • Size: 18.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for bothub-0.1.27.tar.gz
Algorithm Hash digest
SHA256 818c305aa89a20d53dc2db3d7da236ddc183533ce299b048b0f4b4376416086f
MD5 36f2b846290d5f30431c00f2f9c6f5bb
BLAKE2b-256 ca31fa48cd57f559c9db7207708453c37301dae12e27c77be3ba9eb355cff977

See more details on using hashes here.

File details

Details for the file bothub-0.1.27-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for bothub-0.1.27-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 5ee67661890b681873bd65601a06a9e8d06abd026d157d88deceffd1cb1da632
MD5 afeb32265b0eccba292b080215df8f37
BLAKE2b-256 4047b1be39c2de148cf0649261b71e30fcf69145dac10d67ffdf0016bdae09f2

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