{ "info": { "author": "Praekelt Foundation", "author_email": "dev@praekeltfoundation.org", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "Natural Language :: English", "Programming Language :: Python :: 2.7" ], "description": "Vumi Messenger Transport\n========================\n\n.. image:: https://img.shields.io/travis/praekeltfoundation/vumi-messenger.svg\n :target: https://travis-ci.org/praekeltfoundation/vumi-messenger\n\n.. image:: https://img.shields.io/pypi/v/vxmessenger.svg\n :target: https://pypi.python.org/pypi/vxmessenger\n\n.. image:: https://coveralls.io/repos/praekeltfoundation/vumi-messenger/badge.png?branch=develop\n :target: https://coveralls.io/r/praekeltfoundation/vumi-messenger?branch=develop\n :alt: Code Coverage\n\n.. image:: https://readthedocs.org/projects/vumi-facebook-messenger/badge/?version=latest\n :target: http://vumi-facebook-messenger.readthedocs.org/\n :alt: vxmessenger Docs\n\nAll of Vumi's applications can be surfaced on Messenger with the Messenger Transport.\nIt provides a great experience for interactive mobile conversations at scale.\n\nNote on compatibility\n=====================\n\nPlease note that breaking changes to the transport interface were introduced in version 2.0.0.\nIf your setup uses the old interface, you should use a previous version (1.2.6 or earlier), as the changes are not backwards compatible.\n\n\nGetting Started\n===============\n\nInstall Junebug_, the standalone Vumi transport launcher and the Facebook Messenger Transport::\n\n $ apt-get install redis-server rabbitmq-server\n $ pip install junebug\n $ pip install vxmessenger\n\nLaunch the Junebug service with thet Vumi Messenger channel configured::\n\n $ jb -p 8000 \\\n --channels facebook:vxmessenger.transport.MessengerTransport \\\n --logging-path .\n\nUsing the template, below and update your FB_PAGE_ID, FB_ACCESS_TOKEN and\nsave it as a file called ``config.json``:\n\n.. code-block:: json\n\n {\n \"type\": \"facebook\",\n \"label\": \"Sample Facebook Channel\",\n \"mo_url\": \"http://127.0.0.1:8000/channel/message\",\n \"status_url\": \"http://127.0.0.1:8000/channel/status\",\n \"public_http\": {\n \"enabled\": true,\n \"web_path\": \"/api\",\n \"web_port\": 8051\n },\n \"config\": {\n \"web_path\": \"/api\",\n \"web_port\": 8051,\n \"noisy\": true,\n \"page_id\": \"YOUR_FB_PAGE_ID\",\n \"retrieve_profile\": false,\n \"outbound_url\": \"https://graph.facebook.com/v2.8/me/messages\",\n \"access_token\": \"YOUR_FB_PAGE_ID\",\n \"redis_manager\": {\n },\n \"request_batch_size\": 20,\n \"request_batch_wait_time\": 0.1\n }\n }\n\nThe Messenger transport makes use of Facebook's Batch API, passing instructions\nfor multiple operations in a single HTTP request. The number of operations to\nsend in each request is set in the ``request_batch_size`` field, while the number\nof seconds to wait between requests is set in the ``request_batch_wait_time`` field.\nThe batch size has a maximum of 50 (also the default), and the wait time defaults to\n0.1 seconds.\n\nThe transport makes use of Redis to queue requests before sending them. If you'd like\nto customize your Redis settings (eg. the port number), pass your desired configuration\nas a JSON object in the ``redis_manager`` field. Passing an empty object causes the\ntransport to use the default configuration.\n\nPost the config to Junebug to start the channel::\n\n $ curl -X POST -d@config.json http://localhost:8000/channels/\n\nYou're now able to communicate with Facebook's Messenger API and can offer\nbot access to your Vumi application.\n\nFacebook will want to verify your application, for that to work make sure it's served over SSL.\nThe API URL is::\n\n http://localhost:8051/api\n\nIf you've used a different ``web_port`` and ``web_path`` parameter you'll need to update the URL accordingly.\n\n.. note::\n\n There is also a Dockerfile available that you can customise to run\n Junebug in a Docker container: http://github.com/praekeltfoundation/docker-junebug\n\n The Docker container includes Nginx and offers the Junebug_ API under the\n ``/jb/`` endpoint, all other transports are made available from the root path.\n For the example above the endpoint would be ``/api`` on port 80.\n\n\nHook up an Application to your Messenger integration\n====================================================\n\nAll Vumi applications can be surfaced on Facebook Messenger as bots, how about\nhooking up a simple game of hangman?::\n\n $ twistd -n vumi_worker \\\n --worker-class=vumi.demos.hangman.HangmanWorker \\\n --set-option=random_word_url:http://randomword.setgetgo.com/get.php \\\n --set-option=transport_name:messenger_transport \\\n --set-option=worker_name:hangman\n\nJavascript Sandbox applications are also available.\nCheck out some of the examples below:\n\nSample FAQ browser\n https://github.com/smn/faqbrowser-docker\n\nSample Service rating application\n https://github.com/smn/servicerating-docker\n\n.. note::\n\n Do you want to expose multiple applications within a single Bot?\n The Vumi Application Router allows you to do exactly that, have a look\n at the `example router specifically for Facebook Messenger `_.\n\nRicher Templates\n================\n\nThe Vumi Messenger Transport allows one to use the richer templates available,\nincluding texts, images, hyperlinks and buttons.\n\nTo make use of these add the relevant ``helper_metadata`` to your outbound\nVumi message:\n\nA Button Reply\n~~~~~~~~~~~~~~\n\nPlease be aware of the limitations_ that Facebook applies to these messages.\nA call to action may only have a maximum of 3 buttons and character count\nlimits appy.\n\n.. code-block:: python\n\n self.publish_message(\n helper_metadata={\n 'messenger': {\n 'attachment': {\n 'type': 'template',\n 'payload': {\n 'template_type': 'button'\n 'text': 'The accompanying text with the button',\n 'buttons': [{ # Up to 3 buttons\n 'type': 'postback', # defaults to postback if not specified\n 'title': 'Button 1',\n 'payload': json.dumps({\n # In here you can put whatever you want to\n # 'content' and 'in_reply_to' will go into the standard vumi message\n 'content': 'The content expected when a button is pressed', # This can be left blank\n 'in_reply_to': 'The ID of the previous message', # This can be left blank\n # Anything else will end up in transport_metadata.messenger and helper_metadata.messenger\n 'anything_extra': 'Bonus!'\n })\n }, {\n 'type': 'web_url',\n 'title': 'Button 2',\n 'url': 'http://some.url'\n }, {\n 'type': 'phone_number',\n 'title': 'Button 3',\n 'url': '+271234567'\n }]\n }\n }\n }\n })\n\nA Generic Reply\n~~~~~~~~~~~~~~~\n\nPlease be aware of the limitations_ that Facebook applies to these messages.\nA call to action may only have a maximum of 3 buttons, 10 elements, and character count\nlimits appy.\n\n.. code-block:: python\n\n self.publish_message(\n helper_metadata={\n 'messenger': {\n 'attachment': {\n 'type': 'template',\n 'payload': {\n 'template_type': 'generic'\n 'elements': [{ # Up to 10 elements\n 'title': 'The title',\n 'subtitle': 'The subtitle', # This can be left blank\n 'image_url': 'The image_url to use', # This can be left blank\n 'item_url': 'The url if you click on the element', # Optional, Cannot be used with default_action\n 'default_action': { # The action if you click on element, optional, Cannot be user with item_url\n 'url': 'http://test',\n 'webview_height_ratio': 'compact|tall|full', # Leave out for regular link\n 'messenger_extensions': True, # If you are using the js extensions api, optional\n 'fallback_url': 'http://moo' # Fallback URL if target doesn't support js extensions\n # will use url if not found, optional\n },\n 'buttons': [{ # Up to 3 buttons\n 'type': 'postback', # defaults to postback if not specified\n 'title': 'Button 1',\n 'payload': json.dumps({\n # In here you can put whatever you want to\n # 'content' and 'in_reply_to' will go into the standard vumi message\n 'content': 'The content expected when a button is pressed', # This can be left blank\n 'in_reply_to': 'The ID of the previous message', # This can be left blank\n # Anything else will end up in transport_metadata.messenger and helper_metadata.messenger\n 'anything_extra': 'Bonus!'\n })\n }, {\n 'type': 'web_url',\n 'title': 'Button 2',\n 'url': 'http://some.url'\n }, {\n 'type': 'phone_number',\n 'title': 'Button 3',\n 'url': '+271234567'\n }, {\n # Share this post with friends. Only available in Generic Reply\n 'type': 'element_share'\n }]\n }]\n }\n }\n }\n })\n\nA List Reply\n~~~~~~~~~~~~~~~\n\nPlease be aware of the limitations_ that Facebook applies to these messages.\nA call to action may only have a maximum of 1 button per element, 2-4 elements, 1 extra button, and character count\nlimits appy.\n\n.. code-block:: python\n\n self.publish_message(\n helper_metadata={\n 'messenger': {\n 'attachment': {\n 'type': 'template',\n 'payload': {\n 'template_type': 'list'\n 'top_element_style': 'compact|large', # Defines top element style\n # Defaults to compact if not specified\n 'elements': [{ # 2 - 4 elements\n 'title': 'The title',\n 'subtitle': 'The subtitle', # This can be left blank\n 'image_url': 'The image_url to use', # This can be left blank\n 'default_action': { # The action if you click on element, optional\n 'url': 'http://test',\n 'webview_height_ratio': 'compact|tall|full', # Leave out for regular link, optional\n 'messenger_extensions': True, # If you are using the js extensions api, optional\n 'fallback_url': 'http://moo' # Fallback URL if target doesn't support js extensions\n # will use url if not found, optional\n },\n 'buttons': [{ # Up to 1 button\n 'type': 'postback', # defaults to postback if not specified\n 'title': 'Button 1',\n 'payload': json.dumps({\n # In here you can put whatever you want to\n # 'content' and 'in_reply_to' will go into the standard vumi message\n 'content': 'The content expected when a button is pressed', # This can be left blank\n 'in_reply_to': 'The ID of the previous message', # This can be left blank\n # Anything else will end up in transport_metadata.messenger and helper_metadata.messenger\n 'anything_extra': 'Bonus!'\n })\n }, {\n 'type': 'web_url',\n 'title': 'Button 2',\n 'url': 'http://some.url'\n }, {\n 'type': 'phone_number',\n 'title': 'Button 3',\n 'url': '+271234567'\n }]\n }],\n 'buttons': [{ # Up to 1 button at bottom of list\n ...\n }]\n }\n }\n }\n })\n\nA Receipt Reply\n~~~~~~~~~~~~~~~\n\nPlease be aware of the limitations_ that Facebook applies to these messages.\n\n.. code-block:: python\n\n self.publish_message(\n helper_metadata={\n 'messenger': {\n 'attachment': {\n 'type': 'template',\n 'payload': {\n 'template_type': 'receipt',\n 'order_number': '123', # Must be unique\n 'currency' 'ZAR'\n 'payment_method': 'EFT',\n 'recipient_name': 'John Doe',\n 'summary': {\n 'total_cost': 100.0,\n # Optional fields\n 'subtotal': 40.0,\n 'total_tax': 10.0,\n 'shipping_cost': 10.00,\n },\n # Optional fields\n 'merchant_name': 'XYZ Inc.'\n 'order_url': 'http://example.com',\n 'timestamp': '12345678',\n 'elements': [\n # Up to 100 elements\n {\n 'title': 'element title',\n 'price': 10\n # Optional fields\n 'subtitle': 'element subtitle',\n 'quantity': 1,\n 'currency': 'ZAR',\n 'image_url': 'http://example.com',\n },\n ],\n 'adjustments': [\n {\n 'name': 'discount',\n 'amount': 1,\n },\n ],\n 'address': {\n 'street_1': '1 Main Street',\n 'street_2': 'Suburb' # This field is optional\n 'city': 'Cape Town',\n 'state': 'WC',\n 'country': 'RSA',\n 'postal_code': '1234',\n },\n }\n }\n }\n })\n\nQuick replies\n~~~~~~~~~~~~~\n\nA Quick Reply is similar to a button reply, but Messenger shows the buttons\ntemporarily and they disappear after being pressed. You can also have up to\n10 buttons. Only ``postback`` buttons is allowed in this mode.\n\nQuick replies can be appended to any message format.\n\n.. code-block:: python\n\n self.publish_message(\n helper_metadata={\n 'messenger': {\n ...\n 'quick_replies': [{ # Up to 10 quick replies\n 'type': 'text', # defaults to text if not specified\n 'title': 'Button 1',\n 'image_url': 'The image_url to use', # This can be left blank\n 'payload': json.dumps({\n # In here you can put whatever you want to\n # 'content' and 'in_reply_to' will go into the standard vumi message\n 'content': 'The content expected when a button is pressed', # This can be left blank\n 'in_reply_to': 'The ID of the previous message', # This can be left blank\n # Anything else will end up in transport_metadata.messenger and helper_metadata.messenger\n 'anything_extra': 'Bonus!'\n })\n }, {\n 'type': 'location',\n }]\n }\n })\n\n\nMessage format\n==============\n\nDue to some extra features of the messenger platform, there is some extra data that you may need to pay attention to:\n\n**transport_metadata:**\n\nContains a dict ``messenger`` with the following keys:\n\n``mid``:\n Messenger message id.\n\n``attachments``:\n List containing dictionaries as such:\n\n .. code-block:: json\n\n {\n \"type\":\"image\",\n \"payload\": {\n \"url\":\"IMAGE_URL\"\n }\n }\n\n``optin``:\n Dict containing a ``ref`` key, which is the PASS_THROUGH_PARAM as defined by:\n\n https://developers.facebook.com/docs/messenger-platform/plugin-reference#send_to_messenger\n\nOther items defined in ``payload``:\n e.g. ``\"anything_extra\": \"Bonus\"``\n\n**helper_metadata:**\n\nContains a dict ``messenger`` with the same data as ``transport_metadata`` and the user profile as such:\n\nNote: only if ``retrieve_profile`` is configured as ``true``\n\n.. code-block:: json\n\n {\n \"first_name\": \"Firstname\",\n \"last_name\": \"Lastname\",\n \"profile_pic\": \"IMAGE_URL\"\n }\n\nSupported webhooks\n~~~~~~~~~~~~~~~~~~\n\n``messages``:\n Standard conversational messages & attachments.\n\n``messaging_postbacks``:\n Postback buttons.\n\n``messaging_optins``:\n Send-to-Messenger / authentication callback.\n\n\n.. _Junebug: http://junebug.readthedocs.org\n.. _limitations: https://developers.facebook.com/docs/messenger-platform/send-api-reference#guidelines", "description_content_type": null, "docs_url": "https://pythonhosted.org/vxmessenger/", "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/praekeltfoundation/vumi-messenger", "keywords": "vxmessenger", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "vxmessenger", "package_url": "https://pypi.org/project/vxmessenger/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/vxmessenger/", "project_urls": { "Homepage": "https://github.com/praekeltfoundation/vumi-messenger" }, "release_url": "https://pypi.org/project/vxmessenger/2.0.1/", "requires_dist": [ "Klein", "click", "treq", "vumi", "junebug" ], "requires_python": "", "summary": "This is the vxmessenger project.", "version": "2.0.1" }, "last_serial": 2987781, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "b6b6b0d31a5ccd19ce11a9e62ea84a34", "sha256": "84577b76b956f8abbaff12e86ff98be83f9eb7ac5319751ed826c029d79c77a5" }, "downloads": -1, "filename": "vxmessenger-0.0.1-py2-none-any.whl", "has_sig": false, "md5_digest": "b6b6b0d31a5ccd19ce11a9e62ea84a34", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 10648, "upload_time": "2016-04-12T19:23:33", "url": "https://files.pythonhosted.org/packages/33/7d/af6a5bc2813c47bbb945edd4b6d0c7d63602e67b94c13bc7955e0a149fde/vxmessenger-0.0.1-py2-none-any.whl" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "efc63ff57c0eed0dc7ad39e3c13a67a3", "sha256": "25fc6913c2742eab500d5baeed7cea6c7c6fc75d5d624aaa47b5cc5fc6b71714" }, "downloads": -1, "filename": "vxmessenger-1.0.0-py2-none-any.whl", "has_sig": false, "md5_digest": "efc63ff57c0eed0dc7ad39e3c13a67a3", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 10646, "upload_time": "2016-04-12T19:26:36", "url": "https://files.pythonhosted.org/packages/79/11/bb6ba1455f18f88ebca1ef2913bb042f231f219184cc8c19e8717a04e289/vxmessenger-1.0.0-py2-none-any.whl" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "363a357e73405a9d5e5d69ff859dffa5", "sha256": "0a6849482b887c82765db0c16a691b38392d13f138bf74b08b4afeeb245e6305" }, "downloads": -1, "filename": "vxmessenger-1.1.0-py2-none-any.whl", "has_sig": false, "md5_digest": "363a357e73405a9d5e5d69ff859dffa5", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 12082, "upload_time": "2016-04-28T10:19:31", "url": "https://files.pythonhosted.org/packages/02/a6/ec27a5b58a7691defdb04002f016a781d5ef59a1b19ad9ff2d04d91e54af/vxmessenger-1.1.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ff64a291ed84f002464e1d594a4743ab", "sha256": "4b9d9049b2d6a20af76af6785b0b328d7e68f4b00cf4171796ee3d957f610d10" }, "downloads": -1, "filename": "vxmessenger-1.1.0.tar.gz", "has_sig": false, "md5_digest": "ff64a291ed84f002464e1d594a4743ab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13026, "upload_time": "2016-04-28T10:20:03", "url": "https://files.pythonhosted.org/packages/b3/1c/02ee71d4a0449e2fbb4091c1d618d4bf9bfb603d8a1f0eb5cfebc0f161a8/vxmessenger-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "6d17dc56ed9af0b14f0b94c24a3c2d53", "sha256": "630fa210c01b8239ab1bd396452108ce63d4369072d0e8aa65c6c5df0f964517" }, "downloads": -1, "filename": "vxmessenger-1.1.1-py2-none-any.whl", "has_sig": false, "md5_digest": "6d17dc56ed9af0b14f0b94c24a3c2d53", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 12088, "upload_time": "2016-04-28T10:58:33", "url": "https://files.pythonhosted.org/packages/1b/a3/086192bdc2e535cb1c569819a45fafdcc9efdfb90f314df953c3a4f2836f/vxmessenger-1.1.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ef9a4ef44df878690f3da0ee6191164d", "sha256": "8a5b6806ae8366a4f80b260dd103737709c8006c0b4eb485a5c6e3d0e9d5f8f8" }, "downloads": -1, "filename": "vxmessenger-1.1.1.tar.gz", "has_sig": false, "md5_digest": "ef9a4ef44df878690f3da0ee6191164d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13023, "upload_time": "2016-04-28T10:58:42", "url": "https://files.pythonhosted.org/packages/37/a8/ed36ae38c9bdc1f3ef2eb5b1d50c0edb5e768cbccf4e5a640078fe95a8dc/vxmessenger-1.1.1.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "26f48f9b5788b8fab6d41f4ec63958d3", "sha256": "728942bbdd2ecdc24bd8be4ccafdd4ee76e3fb59d80b8b3dd2f1c7640c950413" }, "downloads": -1, "filename": "vxmessenger-1.2.0-py2-none-any.whl", "has_sig": false, "md5_digest": "26f48f9b5788b8fab6d41f4ec63958d3", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 13338, "upload_time": "2016-04-29T12:00:34", "url": "https://files.pythonhosted.org/packages/66/c1/59551ad3995288cf60db3222715b96b369b1cf7d7f5575e992841f4053e1/vxmessenger-1.2.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5b4b0c0f84885e9b5a2f066647c92b84", "sha256": "fcb250c0801750b60c8c0d648d13ed50b0c7483f8f32cd6d9999dbdb7f375e52" }, "downloads": -1, "filename": "vxmessenger-1.2.0.tar.gz", "has_sig": false, "md5_digest": "5b4b0c0f84885e9b5a2f066647c92b84", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13874, "upload_time": "2016-04-29T12:00:45", "url": "https://files.pythonhosted.org/packages/7b/26/ff5f1d1a4944700c729850dc9b3731ca1c5853abf8f22039821f2ade5d02/vxmessenger-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "ac049a74fb74b7326de897fcf9b4c768", "sha256": "4d25a4002d610eb008b44e352d4b4a3cf6d90eab70e0de4e559fb788928fd359" }, "downloads": -1, "filename": "vxmessenger-1.2.1-py2-none-any.whl", "has_sig": false, "md5_digest": "ac049a74fb74b7326de897fcf9b4c768", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 13417, "upload_time": "2016-09-09T06:44:37", "url": "https://files.pythonhosted.org/packages/32/fe/da5aa8cd5c167311cc376e9e796aa7ea3ab40e4413cae54364c004677dcc/vxmessenger-1.2.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "39b21a149b13583c4987c118052a3ae4", "sha256": "6bd76f1f11d301e3c1920703128e81e96b50b696b2fb68f768439dcea9497ed5" }, "downloads": -1, "filename": "vxmessenger-1.2.1.tar.gz", "has_sig": false, "md5_digest": "39b21a149b13583c4987c118052a3ae4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14739, "upload_time": "2016-09-09T06:44:39", "url": "https://files.pythonhosted.org/packages/af/5a/72295aa3bee40255e19b95b528057d4567173e02072dbb413c950ff2f171/vxmessenger-1.2.1.tar.gz" } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "b675a02c2307786bff29c757a90b0b8d", "sha256": "1523e362c1c561e7ec8fb7dc6b81aa1626e1ea1239350b74c812c838cf501f65" }, "downloads": -1, "filename": "vxmessenger-1.2.2-py2-none-any.whl", "has_sig": false, "md5_digest": "b675a02c2307786bff29c757a90b0b8d", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 13475, "upload_time": "2016-09-09T11:23:38", "url": "https://files.pythonhosted.org/packages/90/c4/64d1df176ad870e9c84d06ca71f7b4ed5f272cd6859cee2f3fe297e81c00/vxmessenger-1.2.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ffe55f000841284eb1a0a7ff0d29029d", "sha256": "d632380f26bea8b86f07017a78fd69576a1bed014b366165261c9b9086ecc958" }, "downloads": -1, "filename": "vxmessenger-1.2.2.tar.gz", "has_sig": false, "md5_digest": "ffe55f000841284eb1a0a7ff0d29029d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14820, "upload_time": "2016-09-09T11:23:40", "url": "https://files.pythonhosted.org/packages/bd/7f/6425ec17727e4a4d427bb1adad5cb5b333e7ffcced0c59993636fa8070c6/vxmessenger-1.2.2.tar.gz" } ], "1.2.3": [ { "comment_text": "", "digests": { "md5": "ed0a68016da02e23d305003f5c4949b9", "sha256": "7e2ec598ec868d1dd15eaa399b7072945cabc45eeb1c6cba8bececdccb8a36e1" }, "downloads": -1, "filename": "vxmessenger-1.2.3-py2-none-any.whl", "has_sig": false, "md5_digest": "ed0a68016da02e23d305003f5c4949b9", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 13945, "upload_time": "2016-09-13T05:14:08", "url": "https://files.pythonhosted.org/packages/52/42/eceb6e9e95ce38f5856155ac9e4ab7dfb72fa4d0eeaeb9c3ce2fd5662d15/vxmessenger-1.2.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "be08a363d01b498d14674068d5a85b2e", "sha256": "3dd92f338c62b22488c951a047e95ac501565f16c85f42f3f77645d58ca4a87e" }, "downloads": -1, "filename": "vxmessenger-1.2.3.tar.gz", "has_sig": false, "md5_digest": "be08a363d01b498d14674068d5a85b2e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15196, "upload_time": "2016-09-13T05:14:10", "url": "https://files.pythonhosted.org/packages/dd/4d/f4baf0c7cbbfb083e9822ddeac54f1fb00e695e4bbcde3ca885b8db09e64/vxmessenger-1.2.3.tar.gz" } ], "1.2.4": [ { "comment_text": "", "digests": { "md5": "4f13e767c68e01917a52f620abd9d31f", "sha256": "873d70b92b7fa520697bafed98e16080abfb0438d3652892d77ee598c6f78a8b" }, "downloads": -1, "filename": "vxmessenger-1.2.4-py2-none-any.whl", "has_sig": false, "md5_digest": "4f13e767c68e01917a52f620abd9d31f", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 14002, "upload_time": "2016-10-03T17:51:16", "url": "https://files.pythonhosted.org/packages/6b/68/969dd8cd843cd044901c280ed524bf575a2fbe46da887ab7b24fa4f04a3a/vxmessenger-1.2.4-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1f3226f663e7e6f263feda1662d9fa09", "sha256": "d136432dd23cc17f1a01a972c99fddf9175aeff17dbb072c77b547b035ebc5dc" }, "downloads": -1, "filename": "vxmessenger-1.2.4.tar.gz", "has_sig": false, "md5_digest": "1f3226f663e7e6f263feda1662d9fa09", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15256, "upload_time": "2016-10-03T17:51:18", "url": "https://files.pythonhosted.org/packages/d2/91/574c1e6ff814ef5ee4e34d7c053900400d6457796f4ac4cb2f13de4ab53f/vxmessenger-1.2.4.tar.gz" } ], "1.2.5": [ { "comment_text": "", "digests": { "md5": "b6e7f460f0639f476055f8c667037ea8", "sha256": "a2e8f7b0d791cde2ab7181b67be29a13985ef28daad4579d253bc761e52ca26e" }, "downloads": -1, "filename": "vxmessenger-1.2.5-py2-none-any.whl", "has_sig": false, "md5_digest": "b6e7f460f0639f476055f8c667037ea8", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 15157, "upload_time": "2016-11-29T13:47:19", "url": "https://files.pythonhosted.org/packages/22/d5/51e7944822365163341f7a797f9c6fc23bd3c696adfc0ca218ab5b202c25/vxmessenger-1.2.5-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b91f986c161639066fe347de32e98bdb", "sha256": "cb741631ac8cc57c87fed30c1349934f4ca119083ce9ed1812a739acae355c49" }, "downloads": -1, "filename": "vxmessenger-1.2.5.tar.gz", "has_sig": false, "md5_digest": "b91f986c161639066fe347de32e98bdb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16341, "upload_time": "2016-11-29T13:47:21", "url": "https://files.pythonhosted.org/packages/fc/1a/29a45d6e9b8fbe1e364754038d84e6925357b20330b34fe4d751f022f21d/vxmessenger-1.2.5.tar.gz" } ], "1.2.6": [ { "comment_text": "", "digests": { "md5": "4fc20d4c8e7c7a960bcaa66b4717416b", "sha256": "d265fb6eb0561f4bf99578a3ddec1c2d1827824e6c35b0b255b68f0dda3fb2fd" }, "downloads": -1, "filename": "vxmessenger-1.2.6-py2-none-any.whl", "has_sig": false, "md5_digest": "4fc20d4c8e7c7a960bcaa66b4717416b", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 16473, "upload_time": "2017-01-09T10:38:59", "url": "https://files.pythonhosted.org/packages/74/42/e4891649427755f85ed51183d5ded1de0c47e4d5a7831ad8ee90afcd2f5a/vxmessenger-1.2.6-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b30688cb97845ea6a5816a66791c59cd", "sha256": "cac69dee2b9e84457a783e145caedcf2dd6ad3cff3aa21af89e252e674a51173" }, "downloads": -1, "filename": "vxmessenger-1.2.6.tar.gz", "has_sig": false, "md5_digest": "b30688cb97845ea6a5816a66791c59cd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17559, "upload_time": "2017-01-09T10:39:01", "url": "https://files.pythonhosted.org/packages/0e/ec/94d050b0b8a29dc007039620198be332c9c9dc5aff75c35142a649f32859/vxmessenger-1.2.6.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "e0a7706c89178130add268beef064f98", "sha256": "420ee652051a60d15ef29e7d235a0b5bf8653b732df0303942129f7a5fc0698e" }, "downloads": -1, "filename": "vxmessenger-2.0.0-py2-none-any.whl", "has_sig": false, "md5_digest": "e0a7706c89178130add268beef064f98", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 17900, "upload_time": "2017-06-27T14:34:37", "url": "https://files.pythonhosted.org/packages/77/25/ca9993196fae65884d2053163e06e0c2ed727284bef81a0ab5993174f85a/vxmessenger-2.0.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6e5d4f66252b66b6785ade399c21c72b", "sha256": "5a0c53e14a53a6d0d6077379ac00273450d52fc2fd073565ee687ece96f1623b" }, "downloads": -1, "filename": "vxmessenger-2.0.0.tar.gz", "has_sig": false, "md5_digest": "6e5d4f66252b66b6785ade399c21c72b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18613, "upload_time": "2017-06-27T14:34:38", "url": "https://files.pythonhosted.org/packages/ca/03/972a12bc845534bfcf2ae255c2ca8e39a54d6b4d3e7f03df325a8f252c7c/vxmessenger-2.0.0.tar.gz" } ], "2.0.1": [ { "comment_text": "", "digests": { "md5": "27c4dc955d22e0e5ad36306d19f28fb6", "sha256": "770edb17e6117f0428d24dc8a90b1d1e1a248ca950725e1ee866d09f77ffff26" }, "downloads": -1, "filename": "vxmessenger-2.0.1-py2-none-any.whl", "has_sig": false, "md5_digest": "27c4dc955d22e0e5ad36306d19f28fb6", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 17917, "upload_time": "2017-06-29T15:29:13", "url": "https://files.pythonhosted.org/packages/e0/6c/ce875ef4c2477b2d02b325a30d71e6a99cb37cd232a9bf8d2084ef8c62c0/vxmessenger-2.0.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "13c5dad69e60212c288556ebcc62e26e", "sha256": "34f2bba24d423db2ca39e6eb295ebf19340653a1eb96f82a36edfad724ad8e61" }, "downloads": -1, "filename": "vxmessenger-2.0.1.tar.gz", "has_sig": false, "md5_digest": "13c5dad69e60212c288556ebcc62e26e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18637, "upload_time": "2017-06-29T15:29:14", "url": "https://files.pythonhosted.org/packages/8a/96/f58543fc2564a5484e63dab8ff2669ad75abcaa72008c45bf42eeb8f267b/vxmessenger-2.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "27c4dc955d22e0e5ad36306d19f28fb6", "sha256": "770edb17e6117f0428d24dc8a90b1d1e1a248ca950725e1ee866d09f77ffff26" }, "downloads": -1, "filename": "vxmessenger-2.0.1-py2-none-any.whl", "has_sig": false, "md5_digest": "27c4dc955d22e0e5ad36306d19f28fb6", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 17917, "upload_time": "2017-06-29T15:29:13", "url": "https://files.pythonhosted.org/packages/e0/6c/ce875ef4c2477b2d02b325a30d71e6a99cb37cd232a9bf8d2084ef8c62c0/vxmessenger-2.0.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "13c5dad69e60212c288556ebcc62e26e", "sha256": "34f2bba24d423db2ca39e6eb295ebf19340653a1eb96f82a36edfad724ad8e61" }, "downloads": -1, "filename": "vxmessenger-2.0.1.tar.gz", "has_sig": false, "md5_digest": "13c5dad69e60212c288556ebcc62e26e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18637, "upload_time": "2017-06-29T15:29:14", "url": "https://files.pythonhosted.org/packages/8a/96/f58543fc2564a5484e63dab8ff2669ad75abcaa72008c45bf42eeb8f267b/vxmessenger-2.0.1.tar.gz" } ] }