{ "info": { "author": "Enis Gayretli", "author_email": "tech@botanalytics.co", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3" ], "description": "# [Botanalytics](https://botanalytics.co) - Conversational analytics & engagement tool for chatbots\n\nPython SDK currently supports\n\n\n* [Google Assistant](https://botanalytics.co/docs#google-assistant)\n* [Amazon Alexa](https://botanalytics.co/docs#amazon-alexa)\n* [Facebook](https://botanalytics.co/docs#facebook-messenger)\n* [Slack](https://botanalytics.co/docs#slack)\n* [Generic](https://botanalytics.co/docs#generic)\n* [Rasa](https://botanalytics.co/docs#rasa)\n\nIf you want to use nodejs instead, checkout [Botanalytics Node.js SDK](https://github.com/Botanalyticsco/botanalytics)\n\nIf you want to use ruby instead, checkout [Botanalytics Ruby SDK](https://github.com/Botanalyticsco/botanalytics-ruby)\n\n## Setup\n\nCreate a free account at [https://www.botanalytics.co](https://www.botanalytics.co) and get a Token.\n\nBotanalytics is available via pip.\n\n```bash\npip install botanalytics\n```\n\n##### Google Assistant\n```python\nfrom botanalytics.google import GoogleAssistant\nfrom botanalytics.google import GoogleAssistantCloudFunctions\nimport os\n\n# Optional callback function, if you specify it, you can handle failed\n# attemps the way you want\ndef err_callback(err, reason, payload):\n pass\n\n# Debug(optional)->bool, token(required)->str,\n# callback(optional)->function, async(optional)-> bool\nbotanalytics = GoogleAssistant(\n debug=True,\n token=os.environ['BOTANALYTICS_API_TOKEN'],\n callback=err_callback,\n async=True\n )\n# request_payload -> dict, response_payload -> dict\nbotanalytics.log(request_payload, response_payload)\n\n# For Google Cloud Functions\n# Debug(optional)->bool, token(required)->str, async(optional)->bool\nbotanalytics_gc = GoogleAssistantCloudFunctions(\n debug=True,\n token=os.environ['BOTANALYTICS_API_TOKEN'],\n async=True)\n# request_payload->dict, response_payload->dict\nbotanalytics_gc.log(request_payload, response_payload)\n\n```\n\n##### Amazon Alexa\n```python\nfrom botanalytics.amazon import AmazonAlexa, AmazonAlexaLambda\nimport os\n\n# Optional callback function, if you specify it, you can handle failed\n# attemps the way you want\ndef err_callback(err, reason, payload):\n pass\n\n# Debug(optional)->bool, token(required)->str,\n# callback(optional)->function, async(optional)-> bool\nbotanalytics = AmazonAlexa(\n debug=True,\n token=os.environ['BOTANALYTICS_API_TOKEN'],\n callback=err_callback,\n async=True)\n# request_payload -> dict, response_payload -> dict\nbotanalytics.log(request_payload, response_payload)\n\n# For lambda\n# Debug(optional)->bool, token(required)->str, async(optional)->bool\nbotanalytics_aal = AmazonAlexaLambda(\n debug=True,\n token=os.environ['BOTANALYTICS_API_TOKEN'],\n async=True)\n# request_payload->dict, response_payload->dict\nbotanalytics_aal.log(request_payload, response_payload)\n\n```\n\n##### Facebook\n```python\nfrom botanalytics.facebook import FacebookMessenger\nfrom http.server import BaseHTTPRequestHandler, HTTPServer\nfrom urllib.parse import parse_qs\nimport requests\nimport json\nimport os\n\n# Optional callback function, if you specify it, you can handle failed\n# attemps the way you want\ndef err_callback(err, reason, payload):\n pass\n\nbotanalytics_token = os.environ['BOTANALYTICS_API_TOKEN']\nfb_page_token = os.environ[\"FACEBOOK_PAGE_TOKEN\"]\n# Debug(optional)->bool, token(required)->str, fb_token(optional)-> str,\n# callback(optional)->function, async(optional)-> bool\nbotanalytics = FacebookMessenger(\n debug=True,\n token=botanalytics_token,\n fb_token=fb_page_token,\n callback=err_callback,\n async=True\n )\n\nclass BasicRequestHandler(BaseHTTPRequestHandler):\n def __init__(self, *args, **kwargs):\n super(ServerHandler, self).__init__(*args, **kwargs)\n\n def do_POST(self):\n if self.path == '/webhook/facebook':\n print('Incoming facebook message')\n self.handle_facebook_message()\n else:\n # Handle your paths\n\n def handle_facebook_message(self):\n request_body = str(\n self.rfile.read(\n int(self.headers['content-length'])\n ),\n 'utf-8')\n message_payload = json.loads(request_body)\n #log incoming message\n botanalytics.log_incoming(message_payload)\n\n for entry in message_payload['entry']:\n page_id = entry['id']\n message_time = entry['time']\n for event in entry['messaging']:\n sender_id = event['sender']['id']\n message_to_build= {}\n\n #\n # Handle your event and build your message\n #\n\n # log outgoing message\n botanalytics.log_outgoing(message_to_build, sender_id)\n\n # send your message\n response_message = {\n \"recipient\": {\"id\":sender_id},\n \"message\": message_to_build,\n }\n requests.post(\n 'https://graph.facebook.com/v2.6/me/messages?access_token='+fb_page_token,\n json = response_message)\n\n self.send_response(200)\n\ndef run(server_class=HTTPServer, handler_class=BasicRequestHandler,\n port=8000):\n server_address = ('', port)\n httpd = server_class(server_address, handler_class)\n print('Starting httpd...')\n try:\n httpd.serve_forever()\n except BaseException as ki:\n print(str(ki))\n\n\nif __name__ == \"__main__\":\n run()\n\n```\n\n\n##### Generic\n```python\nfrom botanalytics.generic import Generic\nimport os\n\n# Optional callback function, if you specify it, you can handle failed\n# attemps the way you want\ndef err_callback(err, reason, payload):\n pass\n\n# Debug(optional)->bool, token(required)->str,\n# callback(optional)->function, async(optional)-> bool\nbotanalytics = Generic(\n debug=True,\n token=os.environ['BOTANALYTICS_API_TOKEN'],\n callback=err_callback,\n async=True)\n# message -> dict\nbotanalytics.log(message)\n\n```\n\n##### Rasa\n\nThere are two options to integrate Rasa with Botanalytics\n\n**OPTION 1: Endpoints.yml**\n\n**Add Botanalytics to your endpoints.yml**\n\nAdd a line to your endpoints.yml so that rasa-core is configured to send events to Botanalytics:\n\n```yaml\nevent_broker:\n type: botanalytics.rasa.Rasa\n api_token: BOTANALYTICS_TOKEN\n debug: true\n```\n**OPTION 2: Event Broker**\n**Include Botanalytics**\n```python\nfrom botanalytics.rasa import Rasa\n```\n**Consume events with Botanalytics**\n```python\n\ndef _callback(ch, method, properties, body):\n event = json.loads(body)\n db = Rasa(token=os.environ['BOTANALYTICS_TOKEN'])\n db.publish(event)\n\n```\n\n##### SlackRTMApi\n```python\nfrom botanalytics.slack import SlackRTMApi\nfrom slackclient import SlackClient\nimport os\n\nsc = SlackClient(os.environ[\"SLACK_API_TOKEN\"])\n\n# Optional callback function, if you specify it, you can handle failed\n# attemps the way you want\ndef err_callback(err, reason, payload):\n pass\n\n# Debug(optional)->bool, token(required)->str,\n# slack_client_instance(required)-> SlackClient,\n# callback(optional)->function, async(optional)-> bool\nbotanalytics = SlackRTMApi(\n debug=True,\n token=os.environ['BOTANALYTICS_API_TOKEN'],\n slack_client_instance=sc, callback=err_callback\n async=True\n )\nif sc.rtm_connect():\n while sc.server.connected is True:\n for message in sc.rtm_read():\n # message -> dict\n botanalytics.log_incoming(message)\n # Handle incoming message\n # .\n # .\n sc.rtm_send_message(\"welcome-test\", \"test\")\n botanalytics.log_outgoing(\"welcome-test\", \"test\")\n time.sleep(1)\nelse:\n print \"Connection Failed\"\n\n\n```\n\n##### SlackEventApi\n```python\nfrom botanalytics.slack import SlackEventApi\nfrom http.server import BaseHTTPRequestHandler, HTTPServer\nfrom urllib.parse import parse_qs\nimport json\n\n# Optional callback function, if you specify it, you can handle failed\n# attemps the way you want\ndef err_callback(err, reason, payload):\n pass\n\n# Debug(optional)->bool, token(required)->str,\n# slack_token(required)-> str, callback(optional)->function\n# async(optional)-> bool\nbotanalytics = SlackEventApi(\n debug=True,\n token=os.environ['BOTANALYTICS_API_TOKEN'],\n slack_token=os.environ[\"SLACK_API_TOKEN\"],\n callback=err_callback,\n async=True\n )\n\nclass BasicRequestHandler(BaseHTTPRequestHandler):\n def __init__(self, *args, **kwargs):\n super(ServerHandler, self).__init__(*args, **kwargs)\n\n def do_POST(self):\n if self.path == '/slack/events':\n print('Incoming event')\n self.handle_slack_event()\n\n elif self.path == '/slack/interactive':\n print('Incoming interactive event')\n self.handle_slack_interactive()\n else:\n # Handle your paths\n\n def handle_slack_interactive(self):\n byte_dictionary = parse_qs(\n self.rfile.read(\n int(self.headers['content-length'])),\n keep_blank_values=1\n )\n interactive_payload = json.loads(\n byte_dictionary[b'payload'][0].decode()\n )\n botanalytics.log(interactive_payload)\n #\n # Handle interactive payload\n #\n self.send_response(200)\n\n def handle_slack_event(self):\n request_body = str(\n self.rfile.read(\n int(self.headers['content-length'])\n ),\n 'utf-8'\n )\n event_payload = json.loads(request_body)\n botanalytics.log(event_payload)\n #\n #Handle event message\n #\n self.send_response(200)\n\ndef run(server_class=HTTPServer, handler_class=BasicRequestHandler,\n port=8000):\n server_address = ('', port)\n httpd = server_class(server_address, handler_class)\n print('Starting httpd...')\n try:\n httpd.serve_forever()\n except BaseException as ki:\n print(str(ki))\n\n\nif __name__ == \"__main__\":\n run()\n\n```\nFollow the instructions at [https://botanalytics.co/docs](https://botanalytics.co/docs)", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/Botanalyticsco/botanalytics-python", "keywords": "botanalytics bot bots analytics chatbot chatbots conversational facebook google amazon ibm voice actions lex alexa messsenger assistant watson", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "botanalytics", "package_url": "https://pypi.org/project/botanalytics/", "platform": "", "project_url": "https://pypi.org/project/botanalytics/", "project_urls": { "Homepage": "https://github.com/Botanalyticsco/botanalytics-python" }, "release_url": "https://pypi.org/project/botanalytics/0.2.8/", "requires_dist": null, "requires_python": "", "summary": "Conversational analytics & engagement tool for chatbots", "version": "0.2.8" }, "last_serial": 5735818, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "a4565b7bc21d99453b2e3df5b708c86f", "sha256": "1fec47b6b5ab34e13ee4f31429a4492b6e20ccd2f04072731dc0d2e6594ba884" }, "downloads": -1, "filename": "botanalytics-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a4565b7bc21d99453b2e3df5b708c86f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9570, "upload_time": "2018-04-13T11:40:44", "url": "https://files.pythonhosted.org/packages/db/45/cc30bc88ad2d7849fa0e3fc19e6b8fe4e34bdcea8123b59ead9a3bf4b0cf/botanalytics-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e88fe04accb0db271c5152bed64aad0e", "sha256": "a3649974f1a31b8c1e0b5b599b77473f5ae9a6c17486c5526d0885fd3674f1e3" }, "downloads": -1, "filename": "botanalytics-0.1.0.tar.gz", "has_sig": false, "md5_digest": "e88fe04accb0db271c5152bed64aad0e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7037, "upload_time": "2018-04-13T11:40:46", "url": "https://files.pythonhosted.org/packages/c5/b0/55d16d38fed90ee6ffb2314c4010bd17da34c5c054b7d2157cfdb860f38c/botanalytics-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "693cfaaaef9b135c6376862250eda24c", "sha256": "8fef4022cf3e10c7c4a1a65c3f0bf68d9c3c4190caee9cc50a3de7172317ca09" }, "downloads": -1, "filename": "botanalytics-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "693cfaaaef9b135c6376862250eda24c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11027, "upload_time": "2018-04-16T09:40:57", "url": "https://files.pythonhosted.org/packages/77/b6/cee36879635960b6099cea2fed6188ac29b5fd3ed35125d0768b1512895a/botanalytics-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5e14463beb971c3ddb54c13df0d3d9d9", "sha256": "40793d136bd1215e12d8c4dc64bf7dfc8c5da9d58ca8155eccdf4dbf762a95f0" }, "downloads": -1, "filename": "botanalytics-0.2.0.tar.gz", "has_sig": false, "md5_digest": "5e14463beb971c3ddb54c13df0d3d9d9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8035, "upload_time": "2018-04-16T09:40:59", "url": "https://files.pythonhosted.org/packages/22/eb/f2c483514a80cee2027ef9b755ccf536e0787422eadd65fd2ed52297c2b5/botanalytics-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "df2f1a9bfe8f0868417accb5ecec3635", "sha256": "b124c1f518f6539663f2671c534e160ea362eccbc02931430ec4ebfaf1415fab" }, "downloads": -1, "filename": "botanalytics-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "df2f1a9bfe8f0868417accb5ecec3635", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11453, "upload_time": "2018-04-20T12:14:35", "url": "https://files.pythonhosted.org/packages/d4/e5/84079464f3909f9ef31bf578826421a5283f8e72f91162797ba0fc0fecc8/botanalytics-0.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f0060dc532266a7660ee652dd072d25b", "sha256": "8e47f34f1a275556802281faf71fe7087e1e60c3e58cbbc0c8c8b9858c95f332" }, "downloads": -1, "filename": "botanalytics-0.2.1.tar.gz", "has_sig": false, "md5_digest": "f0060dc532266a7660ee652dd072d25b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8477, "upload_time": "2018-04-20T12:14:37", "url": "https://files.pythonhosted.org/packages/3d/57/c55723b177c4f45d46b46469bb1f8e440afddefaff34a13348e8947188ea/botanalytics-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "316cd380ece4489fb0088801b0708bb5", "sha256": "bbc8cd9f06d90c73a837ffecac5ff7a2f2e12cda94607feaac03d5daf0bc8c61" }, "downloads": -1, "filename": "botanalytics-0.2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "316cd380ece4489fb0088801b0708bb5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11455, "upload_time": "2018-04-20T13:01:19", "url": "https://files.pythonhosted.org/packages/c6/ba/1af87e0f56fa417b1bd9c97acb39976d3a73dbc5dc873fb9d585cff9908b/botanalytics-0.2.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7ecd802225f5edebd22c7cb398608b50", "sha256": "6f67aa9fe6f34e32c5ba1f1551189e61b81925a1fd43b75b881b7b2cc3d3a02d" }, "downloads": -1, "filename": "botanalytics-0.2.2.tar.gz", "has_sig": false, "md5_digest": "7ecd802225f5edebd22c7cb398608b50", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8481, "upload_time": "2018-04-20T13:01:23", "url": "https://files.pythonhosted.org/packages/78/a9/53ef95cf8980324ce1a82f9658dee0f3b296012d1ebc87a410b77b4a4cd1/botanalytics-0.2.2.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "948c28c86d9ceffc8d082069647db12f", "sha256": "cf228ccd1bb232ebb6f94bb2d35f6ffa64023dc32892907fb2ead0e17036e4bf" }, "downloads": -1, "filename": "botanalytics-0.2.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "948c28c86d9ceffc8d082069647db12f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11458, "upload_time": "2018-04-23T14:04:18", "url": "https://files.pythonhosted.org/packages/bf/cf/553a6d9fb9715f902f2fa2e9f58fc18a9a4fd29b95083ffc0afa1a334abb/botanalytics-0.2.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2e7c756af077d395a63aee5e8433a52c", "sha256": "161c23829735b196812147daea323287aac4f7b5cefea588e3901568f3febaaa" }, "downloads": -1, "filename": "botanalytics-0.2.4.tar.gz", "has_sig": false, "md5_digest": "2e7c756af077d395a63aee5e8433a52c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8468, "upload_time": "2018-04-23T14:04:19", "url": "https://files.pythonhosted.org/packages/8c/00/aaab82bd96b06bb664ca2735cc6d0d1e3f055cad54dc8974554b9cb407b9/botanalytics-0.2.4.tar.gz" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "3f50f44b0cddae3b933b4a0c7f78b984", "sha256": "c83f88e103dbd565c9baef43b29c13f26cb721c338bf7c9e4b32f4ee3523a15b" }, "downloads": -1, "filename": "botanalytics-0.2.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3f50f44b0cddae3b933b4a0c7f78b984", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11477, "upload_time": "2018-04-24T21:32:19", "url": "https://files.pythonhosted.org/packages/6f/47/9913c390d93b2043265f18ed8d89a0cf1cf42b5deebae4ffe1d487866492/botanalytics-0.2.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2018f889e5dc5850dc639a42cdd79cf2", "sha256": "5745a0cb4c016c6a29e6adbb41a223182efb305d78b3626a6c0db90281be5d53" }, "downloads": -1, "filename": "botanalytics-0.2.5.tar.gz", "has_sig": false, "md5_digest": "2018f889e5dc5850dc639a42cdd79cf2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8499, "upload_time": "2018-04-24T21:32:20", "url": "https://files.pythonhosted.org/packages/a6/94/faecbf4b58efd9696a0c6ba5bbfa4c5daaef87500ff4540eeded235c325d/botanalytics-0.2.5.tar.gz" } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "38272eb973a3b551b8a7204613e59219", "sha256": "2d53ae682527cc47e678dbf70b9907fad085a2075fd3b2a8541b4bf316e8c104" }, "downloads": -1, "filename": "botanalytics-0.2.6.tar.gz", "has_sig": false, "md5_digest": "38272eb973a3b551b8a7204613e59219", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9181, "upload_time": "2019-08-06T21:25:28", "url": "https://files.pythonhosted.org/packages/ea/e5/70777a67962c0cb0ef0aa696ea8e73bcfd06706b87e261c62496ec65b4ff/botanalytics-0.2.6.tar.gz" } ], "0.2.7": [ { "comment_text": "", "digests": { "md5": "06750e5e9db4f043c96af5d8eafb1a68", "sha256": "bbad1a577a8e0f80bc2a0c05105cafcafbdbf57fad7dc16657e71a3bb78a869b" }, "downloads": -1, "filename": "botanalytics-0.2.7.tar.gz", "has_sig": false, "md5_digest": "06750e5e9db4f043c96af5d8eafb1a68", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9194, "upload_time": "2019-08-07T11:07:17", "url": "https://files.pythonhosted.org/packages/cb/0d/a7f116991970831e23642d671b8255e5d7d32e6481f1c2f40b5fe0d9275e/botanalytics-0.2.7.tar.gz" } ], "0.2.8": [ { "comment_text": "", "digests": { "md5": "2c1eab110de956f70bfd51ae6b8fa5d7", "sha256": "ea1b47e21f706db5b22c1604d6137af02dc3f3827a883e9d819d3ef5efb92a08" }, "downloads": -1, "filename": "botanalytics-0.2.8.tar.gz", "has_sig": false, "md5_digest": "2c1eab110de956f70bfd51ae6b8fa5d7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9191, "upload_time": "2019-08-27T09:35:55", "url": "https://files.pythonhosted.org/packages/12/c3/f138e4230907aa70c20587de89ace7b3ca8d1ba0d8c295f9aba4e7199ecf/botanalytics-0.2.8.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "2c1eab110de956f70bfd51ae6b8fa5d7", "sha256": "ea1b47e21f706db5b22c1604d6137af02dc3f3827a883e9d819d3ef5efb92a08" }, "downloads": -1, "filename": "botanalytics-0.2.8.tar.gz", "has_sig": false, "md5_digest": "2c1eab110de956f70bfd51ae6b8fa5d7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9191, "upload_time": "2019-08-27T09:35:55", "url": "https://files.pythonhosted.org/packages/12/c3/f138e4230907aa70c20587de89ace7b3ca8d1ba0d8c295f9aba4e7199ecf/botanalytics-0.2.8.tar.gz" } ] }