{ "info": { "author": "Juan Madurga", "author_email": "jlmadurga@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Framework :: Django", "Framework :: Django :: 1.8", "Framework :: Django :: 1.9", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Natural Language :: English", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5" ], "description": "=============================\nlistenclosely\n=============================\n\nCI:\n\n.. image:: https://img.shields.io/travis/jlmadurga/listenclosely.svg\n :target: https://travis-ci.org/jlmadurga/listenclosely\n\n.. image:: http://codecov.io/github/jlmadurga/listenclosely/coverage.svg?branch=master \n :alt: Coverage\n :target: http://codecov.io/github/jlmadurga/listenclosely?branch=master\n \n.. image:: https://requires.io/github/jlmadurga/listenclosely/requirements.svg?branch=master\n :target: https://requires.io/github/jlmadurga/listenclosely/requirements/?branch=master\n :alt: Requirements Status\n \nPyPI:\n\n\n.. image:: https://img.shields.io/pypi/v/listenclosely.svg\n :target: https://pypi.python.org/pypi/listenclosely\n\nDocs:\n\n.. image:: https://readthedocs.org/projects/listenclosely/badge/?version=latest\n :target: https://readthedocs.org/projects/listenclosely/?badge=latest\n :alt: Documentation Status\n\n\nListenclosely is a django-app that works as a middleman to connect instant messaging clients. Think on a Call Center/Customer Service using\nusing instant messaging... exactly what it does. \n\n * It is simple, connects *Askers* with online *Agents* until the *Chat* is considered as terminated and the *Agent* is released to attend other *Asker* chats. \n\n * It is flexible, so you can define your own strategies to assign *Agents* to *Askers* and your own messaging backend services.\n \n\n \nMessaging Services integrated:\n\n * Whatsapp https://github.com/jlmadurga/listenclosely-whatsapp\n \n * Telegram https://github.com/jlmadurga/listenclosely-telegram\n\nDocumentation\n-------------\n\nThe full documentation is at https://listenclosely.readthedocs.org.\n\n.. image:: https://raw.github.com/jlmadurga/listenclosely/master/docs/imgs/diagram.png\n :target: https://listenclosely.readthedocs.org\n \n* Asker1 is chatting with the Busy Agent\n* Asker2 try to chat but no free Agent was free so is waiting with a Pending chat to be attended by an agent\n* Asker3 is opening a chat and Online Agent will be assigned to the chat\n\n\t\nQuickstart\n----------\n\nInstall listenclosely::\n\n pip install listenclosely\n\nThen use it in a project::\n\n import listenclosely\n \nAdd it to django apps and migrate::\n\n\tINSTALLED_APPS = [\n\t\t...\n \t'listenclosely',\n \t...\n\t]\n\tpython manage.py migrate\n\t\nSelect, install and configure service backend ::\n\n\tLISTENCLOSELY_MESSAGE_SERVICE_BACKEND = \"listenclosely_telegram.service.TelegramMessageServiceBackend\"\n\t\nDefine your agent strategy or define your own::\n\n\tLISTENCLOSELY_AGENT_STRATEGY = 'listenclosely.strategies.first_free.FirstFreeAgentStrategy'\n\nAdd step to your celery app::\n\n\tfrom listenclosely.celery import ListenCloselyAppStep\n\tapp.steps['worker'].add(ListenCloselyAppStep)\n\t\nStart your celery app usign gevent::\n\n\tcelery --app=demo_app.celery:app worker -P gevent \n\nCall listen task or define a celery scheduler to execute::\n\t\n\tfrom listenclosely import tasks\n\ttasks.listen.delay()\n\n\nFeatures\n--------\n\n* Connects *Askers* and *Agents* in chats to establish a *Chat*\n* Strategies to find *Agent* to attend new *Asker* chat. Define your own strategies\n* Messaging Service Backend: Define your own messaging service backend implementations.\n* Cron tasks for attending pending chats and to terminate obsolete chats to release *Agents*\n\nRunning Tests\n--------------\n\nDoes the code actually work?\n\n::\n\n source /bin/activate\n (myenv) $ pip install -r requirements/test.txt\n (myenv) $ make test\n\n\n\n\n\n\nHistory\n-------\n\n0.1.0 (2016-01-14)\n++++++++++++++++++\n\n* First release on PyPI.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/jlmadurga/listenclosely", "keywords": "listenclosely", "license": "BSD", "maintainer": null, "maintainer_email": null, "name": "listenclosely", "package_url": "https://pypi.org/project/listenclosely/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/listenclosely/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/jlmadurga/listenclosely" }, "release_url": "https://pypi.org/project/listenclosely/0.1.2/", "requires_dist": null, "requires_python": null, "summary": "Listenclosely is a django-app that works as a middle man to connect instant messaging \n clients.", "version": "0.1.2" }, "last_serial": 2002904, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "e7e871231372c24c77e7c1ad8ce0f352", "sha256": "0cbf5fab7a501d2176df6c009b8141a782896c3d1d627d773a2a48c141e1f826" }, "downloads": -1, "filename": "listenclosely-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e7e871231372c24c77e7c1ad8ce0f352", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 15007, "upload_time": "2016-01-14T22:27:48", "url": "https://files.pythonhosted.org/packages/3f/2e/276f9f122ef9325578236206eafccfaf86452bd86704e8af035dd57c7433/listenclosely-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bf21997394c45ee7d68a94e3f8661877", "sha256": "b5c944672109af9f4478db14ae5976b6b4bcc9d75023c666b7c6ec8e6c38b1fe" }, "downloads": -1, "filename": "listenclosely-0.1.0.tar.gz", "has_sig": false, "md5_digest": "bf21997394c45ee7d68a94e3f8661877", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11815, "upload_time": "2016-01-14T22:27:40", "url": "https://files.pythonhosted.org/packages/0a/42/329023277675c10e681c3f9026f816ac4202e7ff9ce1a297fb560f9c5e95/listenclosely-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "bd1699dc0e5e1aa907e0c2cfa4de03fb", "sha256": "016d24d3608757742ad1536542659ed3347684fc975ebe92e627b1131f2bb0ac" }, "downloads": -1, "filename": "listenclosely-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bd1699dc0e5e1aa907e0c2cfa4de03fb", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 15319, "upload_time": "2016-01-15T12:26:25", "url": "https://files.pythonhosted.org/packages/5f/8e/b47af1f74a136b0798934c706d4e16ce676f95d9a0ba04bcc82ff23ca03c/listenclosely-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bd4a17061b7081826ddf0a8576b9956f", "sha256": "fce37ae30f2dc40b631616c17d6aacecefad3aaeb9e5bc94a6c58a485e5b1089" }, "downloads": -1, "filename": "listenclosely-0.1.1.tar.gz", "has_sig": false, "md5_digest": "bd4a17061b7081826ddf0a8576b9956f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11988, "upload_time": "2016-01-15T12:25:51", "url": "https://files.pythonhosted.org/packages/b6/ed/adfa350b7ba27d04b5ce2baf8003a4d4914e8bbe3b1e1d0831607718238c/listenclosely-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "3c52983854338e6b907ac0f4bf3e6849", "sha256": "ad8834ebaf32a2f7cf4424f173a49e1a6286c3a54a4ef930a70d802be1425841" }, "downloads": -1, "filename": "listenclosely-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3c52983854338e6b907ac0f4bf3e6849", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 15319, "upload_time": "2016-03-12T12:40:59", "url": "https://files.pythonhosted.org/packages/c6/bb/5c1e2584a483c5447c9612a20b9f112339718a40f349aa5afb859bb04f5d/listenclosely-0.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "27366106c33a13797fc5ddbd2dd8d55f", "sha256": "8e35fdd08f40e1e1ec708585887259e982a4afe219dbedc7035fdaffa9cfbb83" }, "downloads": -1, "filename": "listenclosely-0.1.2.tar.gz", "has_sig": false, "md5_digest": "27366106c33a13797fc5ddbd2dd8d55f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11987, "upload_time": "2016-03-12T12:40:53", "url": "https://files.pythonhosted.org/packages/13/91/e5d05f78a2493310462c33affab9e80d9beef84bf3d6ff0331d88e30c5ec/listenclosely-0.1.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "3c52983854338e6b907ac0f4bf3e6849", "sha256": "ad8834ebaf32a2f7cf4424f173a49e1a6286c3a54a4ef930a70d802be1425841" }, "downloads": -1, "filename": "listenclosely-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3c52983854338e6b907ac0f4bf3e6849", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 15319, "upload_time": "2016-03-12T12:40:59", "url": "https://files.pythonhosted.org/packages/c6/bb/5c1e2584a483c5447c9612a20b9f112339718a40f349aa5afb859bb04f5d/listenclosely-0.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "27366106c33a13797fc5ddbd2dd8d55f", "sha256": "8e35fdd08f40e1e1ec708585887259e982a4afe219dbedc7035fdaffa9cfbb83" }, "downloads": -1, "filename": "listenclosely-0.1.2.tar.gz", "has_sig": false, "md5_digest": "27366106c33a13797fc5ddbd2dd8d55f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11987, "upload_time": "2016-03-12T12:40:53", "url": "https://files.pythonhosted.org/packages/13/91/e5d05f78a2493310462c33affab9e80d9beef84bf3d6ff0331d88e30c5ec/listenclosely-0.1.2.tar.gz" } ] }