Skip to main content
# [Botanalytics](https://botanalytics.co) - Conversational analytics & engagement tool for chatbots

Python SDK currently supports


* [Google Assistant](http://docs.botanalytics.apiary.io/)
* [Amazon Alexa](http://docs.botanalytics.apiary.io/)
* [Facebook](http://docs.botanalytics.apiary.io/)
* [Slack](http://docs.botanalytics.apiary.io/)
* [Generic](http://docs.botanalytics.apiary.io/)

If you want to use nodejs instead, checkout [Botanalytics NodeJs SDK](https://github.com/Botanalyticsco/botanalytics)

## Setup

Create a free account at [https://www.botanalytics.co](https://www.botanalytics.co) and get a Token.

Botanalytics is available via pip.

```bash
pip install botanalytics
```

##### Google Assistant
```python
from botanalytics.google import GoogleAssistant, GoogleAssistantCloudFunctions
import os

# Optional callback function, if you specify it, you can handle failed
# attemps the way you want
def err_callback(err, reason, payload):
pass

# Debug(optional)->bool, token(required)->str, callback(optional)->function
botanalytics = GoogleAssistant(debug=True, token=os.environ['BOTANALYTICS_API_TOKEN'], callback=err_callback)
# request_payload -> dict, response_payload -> dict
botanalytics.log(request_payload, response_payload)

# For Google Cloud Functions
# Debug(optional)->bool, token(required)->str, async_logging(optional)->bool
botanalytics_gc = GoogleAssistantCloudFunctions(debug=True, token=os.environ['BOTANALYTICS_API_TOKEN'], async_logging=True)
# request_payload->dict, response_payload->dict
botanalytics_gc.log(request_payload, response_payload)

```

##### Amazon Alexa
```python
from botanalytics.amazon import AmazonAlexa, AmazonAlexaLambda
import os

# Optional callback function, if you specify it, you can handle failed
# attemps the way you want
def err_callback(err, reason, payload):
pass

# Debug(optional)->bool, token(required)->str, callback(optional)->function
botanalytics = AmazonAlexa(debug=True, token=os.environ['BOTANALYTICS_API_TOKEN'], callback=err_callback)
# request_payload -> dict, response_payload -> dict
botanalytics.log(request_payload, response_payload)

# For lambda
# Debug(optional)->bool, token(required)->str, async_logging(optional)->bool
botanalytics_aal = AmazonAlexaLambda(debug=True, token=os.environ['BOTANALYTICS_API_TOKEN'], async_logging=True)
# request_payload->dict, response_payload->dict
botanalytics_aal.log(request_payload, response_payload)

```

##### Facebook
```python
from botanalytics.facebook import FacebookMessenger
from http.server import BaseHTTPRequestHandler, HTTPServer
from urllib.parse import parse_qs
import requests
import os

# Optional callback function, if you specify it, you can handle failed
# attemps the way you want
def err_callback(err, reason, payload):
pass

botanalytics_token = os.environ['BOTANALYTICS_API_TOKEN']
fb_page_token = os.environ["FACEBOOK_PAGE_TOKEN"]
# Debug(optional)->bool, token(required)->str, fb_token(optional)-> str,
# callback(optional)->function
botanalytics = FacebookMessenger(
debug=True,
token=botanalytics_token,
fb_token=fb_page_token,
callback=err_callback)

class BasicRequestHandler(BaseHTTPRequestHandler):
def __init__(self, *args, **kwargs):
super(ServerHandler, self).__init__(*args, **kwargs)

def do_POST(self):
if self.path == '/webhook/facebook':
print('Incoming facebook message')
self.handle_facebook_message()
else:
# Handle your paths

def handle_facebook_message(self):
request_body = str(self.rfile.read(int(self.headers['content-length'])), 'utf-8')
message_payload = json.loads(request_body)
#log incoming message
botanalytics.log_incoming(message_payload)

for entry in message_payload['entry']:
page_id = entry['id']
message_time = entry['time']
for event in entry['messaging']:
sender_id = event['sender']['id']
message_to_build= {}

#
# Handle your event and build your message
#

# log outgoing message
botanalytics.log_outgoing(message_to_build, sender_id)

# send your message
response_message = {
"recipient": {"id":sender_id},
"message": message_to_build,
}
requests.post('https://graph.facebook.com/v2.6/me/messages?access_token='+fb_page_token,
json = response message)

self.send_response(200)

def run(server_class=HTTPServer, handler_class=BasicRequestHandler, port=8000):
server_address = ('', port)
httpd = server_class(server_address, handler_class)
print('Starting httpd...')
try:
httpd.serve_forever()
except BaseException as ki:
print(str(ki))


if __name__ == "__main__":
run()

```


##### Generic
```python
from botanalytics.generic import Generic
import os

# Optional callback function, if you specify it, you can handle failed
# attemps the way you want
def err_callback(err, reason, payload):
pass

# Debug(optional)->bool, token(required)->str, callback(optional)->function
botanalytics = Generic(debug=True, token=os.environ['BOTANALYTICS_API_TOKEN'], callback=err_callback)
# message -> dict
botanalytics.log(message)

```

##### SlackRTMApi
```python
from botanalytics.slack import SlackRTMApi
from slackclient import SlackClient
import os

sc = SlackClient(os.environ["SLACK_API_TOKEN"])

# Optional callback function, if you specify it, you can handle failed
# attemps the way you want
def err_callback(err, reason, payload):
pass

# Debug(optional)->bool, token(required)->str, slack_client_instance(required)-> SlackClient, callback(optional)->function
botanalytics = SlackRTMApi(debug=True, token=os.environ['BOTANALYTICS_API_TOKEN'], slack_client_instance=sc, callback=err_callback)
if sc.rtm_connect():
while sc.server.connected is True:
for message in sc.rtm_read():
# message -> dict
botanalytics.log_incoming(message)
# Handle incoming message
# .
# .
sc.rtm_send_message("welcome-test", "test")
botanalytics.log_outgoing("welcome-test", "test")
time.sleep(1)
else:
print "Connection Failed"


```

##### SlackEventApi
```python
from botanalytics.slack import SlackEventApi
from http.server import BaseHTTPRequestHandler, HTTPServer
from urllib.parse import parse_qs
import json

# Optional callback function, if you specify it, you can handle failed
# attemps the way you want
def err_callback(err, reason, payload):
pass

# Debug(optional)->bool, token(required)->str, slack_token(required)-> str, callback(optional)->function
botanalytics = SlackEventApi(debug=True, token=os.environ['BOTANALYTICS_API_TOKEN'], slack_token=os.environ["SLACK_API_TOKEN"], callback=err_callback)

class BasicRequestHandler(BaseHTTPRequestHandler):
def __init__(self, *args, **kwargs):
super(ServerHandler, self).__init__(*args, **kwargs)

def do_POST(self):
if self.path == '/slack/events':
print('Incoming event')
self.handle_slack_event()

elif self.path == '/slack/interactive':
print('Incoming interactive event')
self.handle_slack_interactive()
else:
# Handle your paths

def handle_slack_interactive(self):
byte_dictionary = parse_qs(self.rfile.read(int(self.headers['content-length'])), keep_blank_values=1)
interactive_payload = json.loads(byte_dictionary[b'payload'][0].decode())
botanalytics.log(interactive_payload)
#
# Handle interactive payload
#
self.send_response(200)

def handle_slack_event(self):
request_body = str(self.rfile.read(int(self.headers['content-length'])), 'utf-8')
event_payload = json.loads(request_body)
botanalytics.log(event_payload)
#
#Handle event message
#
self.send_response(200)

def run(server_class=HTTPServer, handler_class=BasicRequestHandler, port=8000):
server_address = ('', port)
httpd = server_class(server_address, handler_class)
print('Starting httpd...')
try:
httpd.serve_forever()
except BaseException as ki:
print(str(ki))


if __name__ == "__main__":
run()

```
Follow the instructions at [http://docs.botanalytics.apiary.io/](http://docs.botanalytics.apiary.io/)


Metadata

Release files for botanalytics 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for botanalytics 0.2.0
File Size Uploaded Provenance Actions
botanalytics-0.2.0.tar.gz 8.0 kB Without provenance Details for botanalytics-0.2.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for botanalytics 0.2.0
File Interpreter ABI Platform Actions
botanalytics-0.2.0-py2.py3-none-any.whl Python 2, Python 3 none any Details for botanalytics-0.2.0-py2.py3-none-any.whl

Total release size: 19.1 kB

Release files / botanalytics-0.2.0.tar.gz

Download URL botanalytics-0.2.0.tar.gz
Size 8.0 kB
Tags Source
SHA-256 checksum
How to use checksums
40793d136bd1215e12d8c4dc64bf7dfc8c5da9d58ca8155eccdf4dbf762a95f0
BLAKE2b-256 checksum
How to use checksums
22ebf2c483514a80cee2027ef9b755ccf536e0787422eadd65fd2ed52297c2b5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / botanalytics-0.2.0-py2.py3-none-any.whl

Download URL botanalytics-0.2.0-py2.py3-none-any.whl
Size 11.0 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
8fef4022cf3e10c7c4a1a65c3f0bf68d9c3c4190caee9cc50a3de7172317ca09
BLAKE2b-256 checksum
How to use checksums
77b6cee36879635960b6099cea2fed6188ac29b5fd3ed35125d0768b1512895a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Security for botanalytics 0.2.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page