From 051df228230f100feccb65eb2f65a7403a1b8852 Mon Sep 17 00:00:00 2001 From: Amele9 Date: Thu, 8 Jun 2023 19:27:29 +0500 Subject: [PATCH 1/7] Updated docs --- README.md | 151 +++++++++++++++++++++++++++----------------------- README_RUS.md | 149 +++++++++++++++++++++++++------------------------ 2 files changed, 159 insertions(+), 141 deletions(-) diff --git a/README.md b/README.md index bf0bd9b..7b0d001 100644 --- a/README.md +++ b/README.md @@ -6,121 +6,139 @@ ![](https://img.shields.io/github/actions/workflow/status/green-api/whatsapp-api-client-python/python-package.yml) ![](https://img.shields.io/pypi/dm/whatsapp-api-client-python) -- [Документация на русском языке](README_RUS.md) +- [Документация на русском языке](https://github.com/green-api/whatsapp-api-client-python/blob/master/README_RUS.md). -Python library for intagration with WhatsAPP messanger via API of [green-api.com](https://green-api.com/en/) service. To use the library you have to get a registration token and an account id in the [personal area](https://console.green-api.com). There is a free developer account tariff plan. +Python library for integration with WhatsAPP messanger via API of [green-api.com](https://green-api.com/en/) service. To +use the library you have to get a registration token and an account id in +the [personal cabinet](https://console.green-api.com/). There is a free developer account tariff plan. ## API -You can find REST API documentation by [url](https://green-api.com/en/docs/api/). The library is a wrapper for REST API, so the documentation at the above url applies to the library as well. +You can find REST API documentation by [link](https://green-api.com/en/docs/). The library is a wrapper for REST API, +so the documentation at the above url applies to the library as well. + +## Authorization + +To send a message or perform other Green API methods, the WhatsApp account in the phone app must be authorized. To +authorize the account, go to your [cabinet](https://console.green-api.com/) and scan the QR code using the WhatsApp app. ## Installation ```shell -pip install whatsapp-api-client-python +python -m pip install whatsapp-api-client-python ``` -## Import +## Import ``` from whatsapp_api_client_python import API ``` -## Authorization - -To send a message or to exacute some other Green-API method, you have to have the WhatsApp account in the phone application to be authorized. To authorize your account please go to the [personal area](https://console.green-api.com) and scan a QR-code using the WhatsApp application. ## Examples ### How to initialize an object -```python +``` greenAPI = API.GreenApi(ID_INSTANCE, API_TOKEN_INSTANCE) ``` ### Sending a text message to a WhatsApp number -```python -result = greenAPI.sending.sendMessage('79001234567@g.us', 'Message text') -``` - -Example url: [sendTextMessage.py](https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/sendTextMessage.py) - -Please note that keys can be obtained from environment variables: -```python -from os import environ +Link to example: [sendTextMessage.py]( +https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/sendTextMessage.py +). -ID_INSTANCE = environ['ID_INSTANCE'] -API_TOKEN_INSTANCE = environ['API_TOKEN_INSTANCE'] +``` +greenAPI.sending.sendMessage('11001234567@c.us', 'Message text') ``` ### Sending an image via URL -```python -result = greenAPI.sending.sendFileByUrl('120363025955348359@g.us', - 'https://www.google.ru/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png', - 'googlelogo_color_272x92dp.png', 'Google logo') -``` +Link to example: [sendPictureByLink.py]( +https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/sendPictureByLink.py +). -Example url: [sendPictureByLink.py](https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/sendPictureByLink.py) +``` +greenAPI.sending.sendFileByUrl( + '11001234567@c.us', + 'https://www.google.ru/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png', + 'googlelogo_color_272x92dp.png', + 'Google logo' +) +``` ### Sending an image by uploading from the disk -```python -result = greenAPI.sending.sendFileByUpload('120363025955348359@g.us', - 'C:\Games\PicFromDisk.png', - 'PicFromDisk.png', 'Picture from disk') -``` +Link to example: [sendPictureByUpload.py]( +https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/sendPictureByUpload.py +). -Example url: [sendPictureByUpload.py](https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/sendPictureByUpload.py) +``` +greenAPI.sending.sendFileByUpload( + '11001234567@c.us', + 'C:\Games\PicFromDisk.png', + 'PicFromDisk.png', + 'Picture from disk' +) +``` ### Group creation and sending a message to the group -```python +IMPORTANT: If one tries to create a group with a non-existent number, WhatsApp may block the sender's number. The number +in the example is non-existent. + +Link to example: [createGroupAndSendMessage.py]( +https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/createGroupAndSendMessage.py +). + +``` chatIds = [ - "79001234567@c.us" + "11001234567@c.us" ] -resultCreate = greenAPI.groups.createGroup('GroupName', - chatIds) +resultCreate = greenAPI.groups.createGroup( + 'GroupName', chatIds +) if resultCreate.code == 200: - resultSend = greenAPI.sending.sendMessage(resultCreate.data['chatId'], - 'Message text') + resultSend = greenAPI.sending.sendMessage( + resultCreate.data['chatId'], 'Message text' + ) ``` -IMPORTANT: If one tries to create a group with a non-existent number, WhatsApp -may block the sender's number. The number in the example is non-existent. - -Example url: [createGroupAndSendMessage.py](https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/createGroupAndSendMessage.py) - ### Receive incoming messages by HTTP API +Link to example: [receiveNotification.py]( +https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/receiveNotification.py +). + The general concept of receiving data in the Green API is described [here](https://green-api.com/en/docs/api/receiving/) To start receiving messages by the HTTP API you need to execute the library method: -```python +``` greenAPI.webhooks.startReceivingNotifications(onEvent) ``` onEvent - your method which should contain parameters: -Parameter | Description ------ | ----- -typewebhook | received message type (string) -body | message body (json) -Message body types and formats [here](https://green-api.com/en/docs/api/receiving/notifications-format/) +| Parameter | Description | +|-------------|--------------------------------| +| typeWebhook | received message type (string) | +| body | message body (json) | -This method will be called when an incoming message is received. Next, process messages according to the business logic of your system. +Message body types and formats [here](https://green-api.com/en/docs/api/receiving/notifications-format/). -## Examples list +This method will be called when an incoming message is received. Next, process messages according to the business logic +of your system. -Description | Module ------ | ----- -Example of sending text | [sendTextMessage.py](https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/sendTextMessage.py) -Example of sending a picture by URL | [sendPictureByLink.py](https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/sendPictureByLink.py) -Example of sending a picture by uploading from the disk | [sendPictureByUpload.py](https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/sendPictureByUpload.py) -Example of a group creation and sending a message to the group | [createGroupAndSendMessage.py](https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/createGroupAndSendMessage.py) -Example of incoming webhooks receiving | [receiveNotification.py](https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/receiveNotification.py) +## Examples list +| Description | Module | +|----------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------| +| Example of sending text | [sendTextMessage.py](https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/sendTextMessage.py) | +| Example of sending a picture by URL | [sendPictureByLink.py](https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/sendPictureByLink.py) | +| Example of sending a picture by uploading from the disk | [sendPictureByUpload.py](https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/sendPictureByUpload.py) | +| Example of a group creation and sending a message to the group | [createGroupAndSendMessage.py](https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/createGroupAndSendMessage.py) | +| Example of incoming webhooks receiving | [receiveNotification.py](https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/receiveNotification.py) | ## The full list of the library methods @@ -177,20 +195,15 @@ Example of incoming webhooks receiving | [receiveNotification.py](https://github ## Service methods documentation -[https://green-api.com/en/docs/api/](https://green-api.com/en/docs/api/) +[https://green-api.com/en/docs/api/](https://green-api.com/en/docs/api/). ## External products -* [requests](https://requests.readthedocs.io) - for http requests +- [requests](https://requests.readthedocs.io/en/latest/) - for http requests. ## License -[![CC BY-ND 4.0][cc-by-nd-shield]][cc-by-nd] - -This work is licensed under a -[Creative Commons Attribution-NoDerivatives 4.0 International License][cc-by-nd]. - -[cc-by-nd]: https://creativecommons.org/licenses/by-nd/4.0/ -[cc-by-nd-shield]: https://img.shields.io/badge/License-CC%20BY--ND%204.0-lightgrey.svg - -Please see file [LICENSE](LICENSE) \ No newline at end of file +Licensed under [ +Creative Commons Attribution-NoDerivatives 4.0 International (CC BY-ND 4.0) +](https://creativecommons.org/licenses/by-nd/4.0/) terms. +Please see file [LICENSE](https://github.com/green-api/whatsapp-api-client-python/blob/master/LICENSE). diff --git a/README_RUS.md b/README_RUS.md index 1b4ba62..152f2c0 100644 --- a/README_RUS.md +++ b/README_RUS.md @@ -6,116 +6,128 @@ ![](https://img.shields.io/github/actions/workflow/status/green-api/whatsapp-api-client-python/python-package.yml) ![](https://img.shields.io/pypi/dm/whatsapp-api-client-python) -- [English documentation](README.md) - -Python библиотека для интеграции с мессенджером WhatsAPP через API сервиса [green-api.com](https://green-api.com/). Чтобы воспользоваться библиотекой нужно получить регистрационный токен и id аккаунта в [личном кабинете](https://console.green-api.com). Есть бесплатный тариф аккаунта разработчика. +Python библиотека для интеграции с мессенджером WhatsApp через API сервиса [green-api.com](https://green-api.com/). +Чтобы воспользоваться библиотекой, нужно получить регистрационный токен и ID аккаунта +в [личном кабинете](https://console.green-api.com/). Есть бесплатный тариф аккаунта разработчика. ## API -Документация к REST API находится по [ссылке](https://green-api.com/docs/api/). Библиотека является оберткой к REST API, поэтому документация по ссылке выше применима и к самой библиотеке. +Документация к REST API находится по [ссылке](https://green-api.com/docs/api/). Библиотека является обёрткой к REST API, +поэтому документация по ссылке выше применима и к самой библиотеке. + +## Авторизация + +Чтобы отправить сообщение или выполнить другие методы GREEN API, аккаунт WhatsApp в приложении телефона должен быть в +авторизованном состоянии. Для авторизации аккаунта перейдите в [личный кабинет](https://console.green-api.com/) и +сканируйте QR-код с использованием приложения WhatsApp. ## Установка ```shell -pip install whatsapp-api-client-python +python -m pip install whatsapp-api-client-python ``` -## Авторизация +## Импорт -Чтобы отправить сообщение или выполнить другой метод Green-API, аккаунт WhatsApp в приложении телефона должен быть в авторизованном состоянии. Для авторизации аккаунта перейдите в [личный кабинет](https://console.green-api.com) и сканируйте QR-код с использованием приложения WhatsApp. +``` +from whatsapp_api_client_python import API +``` ## Примеры ### Как инициализировать объект -```python +``` greenAPI = API.GreenApi(ID_INSTANCE, API_TOKEN_INSTANCE) ``` ### Отправка текстового сообщения на номер WhatsApp -```python -result = greenAPI.sending.sendMessage('79001234567@g.us', 'Message text') -``` - -Ссылка на пример: [sendTextMessage.py](https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/sendTextMessage.py) +Ссылка на пример: [sendTextMessage.py](examples/sendTextMessage.py). -Обратите внимание, что ключи можно получать из переменных среды: -```python -from os import environ - -ID_INSTANCE = environ['ID_INSTANCE'] -API_TOKEN_INSTANCE = environ['API_TOKEN_INSTANCE'] +``` +greenAPI.sending.sendMessage('11001234567@c.us', 'Message text') ``` ### Отправка картинки по URL -```python -result = greenAPI.sending.sendFileByUrl('120363025955348359@g.us', - 'https://www.google.ru/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png', - 'googlelogo_color_272x92dp.png', 'Google logo') -``` +Ссылка на пример: [sendPictureByLink.py](examples/sendPictureByLink.py). -Ссылка на пример: [sendPictureByLink.py](https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/sendPictureByLink.py) +``` +greenAPI.sending.sendFileByUrl( + '11001234567@c.us', + 'https://www.google.ru/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png', + 'googlelogo_color_272x92dp.png', + 'Google logo' +) +``` ### Отправка картинки загрузкой с диска -```python -result = greenAPI.sending.sendFileByUpload('120363025955348359@g.us', - 'C:\\Games\\PicFromDisk.png', - 'PicFromDisk.png', 'Picture from disk') -``` +Ссылка на пример: [sendPictureByUpload.py](examples/sendPictureByUpload.py). -Ссылка на пример: [sendPictureByUpload.py](https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/sendPictureByUpload.py) +``` +greenAPI.sending.sendFileByUpload( + '11001234567@c.us', + 'C:\\Games\\PicFromDisk.png', + 'PicFromDisk.png', + 'Picture from disk' +) +``` ### Создание группы и отправка сообщения в эту группу -```python +ВАЖНО: Если попытаться создать группу с несуществующим номером WhatsApp может заблокировать номер отправителя. Номер в +примере не существует. + +Ссылка на пример: [createGroupAndSendMessage.py](examples/createGroupAndSendMessage.py). + +``` chatIds = [ - "79001234567@c.us" + "11001234567@c.us" ] -resultCreate = greenAPI.groups.createGroup('GroupName', - chatIds) +resultCreate = greenAPI.groups.createGroup( + 'GroupName', chatIds +) if resultCreate.code == 200: - resultSend = greenAPI.sending.sendMessage(resultCreate.data['chatId'], - 'Message text') + resultSend = greenAPI.sending.sendMessage( + resultCreate.data['chatId'], 'Message text' + ) ``` -ВАЖНО: Если попытаться создать группу с несуществующим номером WhatsApp -может заблокировать номер отправителя. Номер в примере не существует. - -Ссылка на пример: [createGroupAndSendMessage.py](https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/createGroupAndSendMessage.py) - ### Получение входящих сообщений через HTTP API -Общая концепция получения данных в Green API описана [здесь](https://green-api.com/docs/api/receiving/) -Для старта получения сообщений через HTTP API требуется выполнить метод библиотеки: +Ссылка на пример: [receiveNotification.py](examples/receiveNotification.py). + +Общая концепция получения данных в Green API описана [здесь](https://green-api.com/docs/api/receiving/). Для старта +получения сообщений через HTTP API требуется выполнить метод библиотеки: -```python +``` greenAPI.webhooks.startReceivingNotifications(onEvent) ``` onEvent - ваш метод, который должен содержать параметры: -Параметр | Описание ------ | ----- -typeWebhook | тип полученного сообщения (строка) -body | тело сообщения (json) -Типы и форматы тел сообщений [здесь](https://green-api.com/docs/api/receiving/notifications-format/) +| Параметр | Описание | +|-------------|------------------------------------| +| typeWebhook | тип полученного сообщения (строка) | +| body | тело сообщения (json) | -Этот метод будет вызываться при получении входящего сообщения. Далее обрабатываете сообщения согласно бизнес-логике вашей системы. +Типы и форматы тел сообщений [здесь](https://green-api.com/docs/api/receiving/notifications-format/). -## Список примеров +Этот метод будет вызываться при получении входящего сообщения. Далее обрабатываете сообщения согласно бизнес-логике +вашей системы. -Описание | Модуль ------ | ----- -Пример отправки текста | [sendTextMessage.py](https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/sendTextMessage.py) -Пример отправки картинки по URL | [sendPictureByLink.py](https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/sendPictureByLink.py) -Пример отправки картинки загрузкой с диска | [sendPictureByUpload.py](https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/sendPictureByUpload.py) -Пример создание группы и отправка сообщения в группу | [createGroupAndSendMessage.py](https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/createGroupAndSendMessage.py) -Пример получения входящих уведомлений | [receiveNotification.py](https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/receiveNotification.py) +## Список примеров +| Описание | Модуль | +|------------------------------------------------------|-----------------------------------------------------------------------| +| Пример отправки текста | [sendTextMessage.py](examples/sendTextMessage.py) | +| Пример отправки картинки по URL | [sendPictureByLink.py](examples/sendPictureByLink.py) | +| Пример отправки картинки загрузкой с диска | [sendPictureByUpload.py](examples/sendPictureByUpload.py) | +| Пример создание группы и отправка сообщения в группу | [createGroupAndSendMessage.py](examples/createGroupAndSendMessage.py) | +| Пример получения входящих уведомлений | [receiveNotification.py](examples/receiveNotification.py) | ## Полный список методов библиотеки @@ -172,22 +184,15 @@ body | тело сообщения (json) ## Документация по методам сервиса -[https://green-api.com/docs/api/](https://green-api.com/docs/api/) +[https://green-api.com/docs/api/](https://green-api.com/docs/api/). ## Сторонние продукты -* [requests](https://requests.readthedocs.io) - для http запросов +- [requests](https://requests.readthedocs.io/en/latest/) - для http запросов. ## Лицензия -Лицензировано на условиях MIT. Смотрите файл [LICENSE](LICENSE) - -[![CC BY-ND 4.0][cc-by-nd-shield]][cc-by-nd] - -Эта работа распространяется под лицензией -[Creative Commons Attribution-NoDerivatives 4.0 International License][cc-by-nd]. - -[cc-by-nd]: https://creativecommons.org/licenses/by-nd/4.0/ -[cc-by-nd-shield]: https://img.shields.io/badge/License-CC%20BY--ND%204.0-lightgrey.svg - -Пожалуйста, смотрите файл [LICENSE](LICENSE) +Лицензировано на условиях [ +Creative Commons Attribution-NoDerivatives 4.0 International (CC BY-ND 4.0) +](https://creativecommons.org/licenses/by-nd/4.0/). +[LICENSE](LICENSE). From a99de0d5bdbe7db66c71d73d87d3b52986037836 Mon Sep 17 00:00:00 2001 From: Amele9 Date: Thu, 8 Jun 2023 19:30:33 +0500 Subject: [PATCH 2/7] Updated .gitignore --- .gitignore | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index b6e4761..2dc53ca 100644 --- a/.gitignore +++ b/.gitignore @@ -20,7 +20,6 @@ parts/ sdist/ var/ wheels/ -pip-wheel-metadata/ share/python-wheels/ *.egg-info/ .installed.cfg @@ -50,6 +49,7 @@ coverage.xml *.py,cover .hypothesis/ .pytest_cache/ +cover/ # Translations *.mo @@ -72,6 +72,7 @@ instance/ docs/_build/ # PyBuilder +.pybuilder/ target/ # Jupyter Notebook @@ -82,7 +83,9 @@ profile_default/ ipython_config.py # pyenv -.python-version +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version # pipenv # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. @@ -91,7 +94,22 @@ ipython_config.py # install all needed dependencies. #Pipfile.lock -# PEP 582; used by e.g. github.com/David-OConnor/pyflow +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm __pypackages__/ # Celery stuff @@ -127,3 +145,16 @@ dmypy.json # Pyre type checker .pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +.idea/ From 312da5bef6c96c820f2b2529965cadf4992c9943 Mon Sep 17 00:00:00 2001 From: Amele9 Date: Thu, 8 Jun 2023 19:33:45 +0500 Subject: [PATCH 3/7] Updated setup.py --- examples/__init__.py | 0 setup.py | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 examples/__init__.py diff --git a/examples/__init__.py b/examples/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/setup.py b/setup.py index ad3d304..c6344d8 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setup( name="whatsapp-api-client-python", - version="0.0.36", + version="0.0.37", description=( "This library helps you easily create" " a Python application with WhatsApp API." @@ -15,7 +15,7 @@ author="GREEN API", author_email="support@green-api.com", url="https://github.com/green-api/whatsapp-api-client-python", - packages=find_packages(exclude=["examples", "tests"]), + packages=find_packages(exclude=["tests"]), classifiers=[ "Development Status :: 5 - Production/Stable", "Environment :: Console", From 43d6a9bc51db6c7ecbac59fc5124276fe6b48238 Mon Sep 17 00:00:00 2001 From: Amele9 Date: Mon, 12 Jun 2023 16:30:09 +0500 Subject: [PATCH 4/7] Updated license --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index ba6c28c..bbf5362 100644 --- a/LICENSE +++ b/LICENSE @@ -311,4 +311,4 @@ other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses. -Creative Commons may be contacted at creativecommons.org. \ No newline at end of file +Creative Commons may be contacted at creativecommons.org. From 476eb940caec22824bfab21d0c0959f1e1918c0a Mon Sep 17 00:00:00 2001 From: Amele9 Date: Mon, 12 Jun 2023 16:40:49 +0500 Subject: [PATCH 5/7] Updated examples --- examples/createGroupAndSendMessage.py | 38 +++++++++++++------------- examples/data/green-api-logo_2.png | Bin 0 -> 95237 bytes examples/sendPictureByLink.py | 24 +++++++++------- examples/sendPictureByUpload.py | 22 ++++++++------- examples/sendTextMessage.py | 18 ++++++------ 5 files changed, 55 insertions(+), 47 deletions(-) create mode 100644 examples/data/green-api-logo_2.png diff --git a/examples/createGroupAndSendMessage.py b/examples/createGroupAndSendMessage.py index 2323eae..236fda8 100644 --- a/examples/createGroupAndSendMessage.py +++ b/examples/createGroupAndSendMessage.py @@ -1,27 +1,27 @@ -from whatsapp_api_client_python import API as API +from whatsapp_api_client_python import API -ID_INSTANCE = '1101000001' -API_TOKEN_INSTANCE = '3e03ea9ff3324e228ae3dfdf4d48e409bfa1b1ad0b0c46bf8c' +greenAPI = API.GreenApi( + "1101000001", "d75b3a66374942c5b3c019c698abc2067e151558acbd412345" +) -greenAPI = API.GreenApi(ID_INSTANCE, API_TOKEN_INSTANCE) def main(): - chatIds = [ - "11001234567@c.us" - ] - resultCreate = greenAPI.groups.createGroup('GroupName', - chatIds) + create_group_response = greenAPI.groups.createGroup( + "Group Name", ["11001234567@c.us"] + ) + if create_group_response.code == 200: + print(create_group_response.data) - if resultCreate.code == 200: - print(resultCreate.data) - resultSend = greenAPI.sending.sendMessage(resultCreate.data['chatId'], - 'Message text') - if resultSend.code == 200: - print(resultSend.data) + send_message_response = greenAPI.sending.sendMessage( + create_group_response.data["chatId"], "Message text" + ) + if send_message_response.code == 200: + print(send_message_response.data) else: - print(resultSend.error) + print(send_message_response.error) else: - print(resultCreate.error) + print(create_group_response.error) -if __name__ == "__main__": - main() \ No newline at end of file + +if __name__ == '__main__': + main() diff --git a/examples/data/green-api-logo_2.png b/examples/data/green-api-logo_2.png new file mode 100644 index 0000000000000000000000000000000000000000..8717c3b787ad3b0d5fbe644424f4240ff5914e36 GIT binary patch literal 95237 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

p$fjf7OxN-IfK6vMS`1YUwI{d_Y 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�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 IM6N<$f~C9tGynhq literal 0 HcmV?d00001 diff --git a/examples/sendPictureByLink.py b/examples/sendPictureByLink.py index 00f3c94..5888e1c 100644 --- a/examples/sendPictureByLink.py +++ b/examples/sendPictureByLink.py @@ -1,15 +1,19 @@ -from whatsapp_api_client_python import API as API +from whatsapp_api_client_python import API -ID_INSTANCE = '1101000001' -API_TOKEN_INSTANCE = '3e03ea9ff3324e228ae3dfdf4d48e409bfa1b1ad0b0c46bf8c' +greenAPI = API.GreenApi( + "1101000001", "d75b3a66374942c5b3c019c698abc2067e151558acbd412345" +) -greenAPI = API.GreenApi(ID_INSTANCE, API_TOKEN_INSTANCE) def main(): - result = greenAPI.sending.sendFileByUrl('11001234567@c.us', - 'https://www.google.ru/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png', - 'googlelogo_color_272x92dp.png', 'Google logo') - print(result.data) + response = greenAPI.sending.sendFileByUrl( + "11001234567@c.us", + "https://green-api.com/green-api-logo_2.png", + "green-api-logo_2.png" + ) -if __name__ == "__main__": - main() \ No newline at end of file + print(response.data) + + +if __name__ == '__main__': + main() diff --git a/examples/sendPictureByUpload.py b/examples/sendPictureByUpload.py index 56854cd..e83f0ba 100644 --- a/examples/sendPictureByUpload.py +++ b/examples/sendPictureByUpload.py @@ -1,15 +1,17 @@ -from whatsapp_api_client_python import API as API +from whatsapp_api_client_python import API -ID_INSTANCE = '1101000001' -API_TOKEN_INSTANCE = '3e03ea9ff3324e228ae3dfdf4d48e409bfa1b1ad0b0c46bf8c' +greenAPI = API.GreenApi( + "1101000001", "d75b3a66374942c5b3c019c698abc2067e151558acbd412345" +) -greenAPI = API.GreenApi(ID_INSTANCE, API_TOKEN_INSTANCE) def main(): - result = greenAPI.sending.sendFileByUpload('11001234567@c.us', - "C:\\Games\\PicFromDisk.png", - 'PicFromDisk.png', 'Picture from disk') - print(result.data) + response = greenAPI.sending.sendFileByUpload( + "11001234567@c.us", "data/green-api-logo_2.png" + ) -if __name__ == "__main__": - main() \ No newline at end of file + print(response.data) + + +if __name__ == '__main__': + main() diff --git a/examples/sendTextMessage.py b/examples/sendTextMessage.py index 9260ff5..fd72930 100644 --- a/examples/sendTextMessage.py +++ b/examples/sendTextMessage.py @@ -1,13 +1,15 @@ -from whatsapp_api_client_python import API as API +from whatsapp_api_client_python import API -ID_INSTANCE = '1101000001' -API_TOKEN_INSTANCE = '3e03ea9ff3324e228ae3dfdf4d48e409bfa1b1ad0b0c46bf8c' +greenAPI = API.GreenApi( + "1101000001", "d75b3a66374942c5b3c019c698abc2067e151558acbd412345" +) -greenAPI = API.GreenApi(ID_INSTANCE, API_TOKEN_INSTANCE) def main(): - result = greenAPI.sending.sendMessage('11001234567@c.us', 'Message text') - print(result.data) + response = greenAPI.sending.sendMessage("11001234567@c.us", "Message text") -if __name__ == "__main__": - main() \ No newline at end of file + print(response.data) + + +if __name__ == '__main__': + main() From 109adffdf75de4b908003d4cd86410f81276d204 Mon Sep 17 00:00:00 2001 From: Amele9 Date: Mon, 12 Jun 2023 16:58:17 +0500 Subject: [PATCH 6/7] Updated docs --- README.md | 83 ++++++++++++++++++++++++++------------------------- README_RUS.md | 74 ++++++++++++++++++++++----------------------- 2 files changed, 80 insertions(+), 77 deletions(-) diff --git a/README.md b/README.md index 7b0d001..81689e1 100644 --- a/README.md +++ b/README.md @@ -8,18 +8,18 @@ - [Документация на русском языке](https://github.com/green-api/whatsapp-api-client-python/blob/master/README_RUS.md). -Python library for integration with WhatsAPP messanger via API of [green-api.com](https://green-api.com/en/) service. To -use the library you have to get a registration token and an account id in -the [personal cabinet](https://console.green-api.com/). There is a free developer account tariff plan. +whatsapp-api-client-python is a library for integration with WhatsApp messenger using the API +service [green-api.com](https://green-api.com/en/). You should get a registration token and an account ID in +your [personal cabinet](https://console.green-api.com/) to use the library. There is a free developer account tariff. ## API -You can find REST API documentation by [link](https://green-api.com/en/docs/). The library is a wrapper for REST API, -so the documentation at the above url applies to the library as well. +The documentation for the REST API can be found at the [link](https://green-api.com/en/docs/). The library is a wrapper +for the REST API, so the documentation at the link above also applies. ## Authorization -To send a message or perform other Green API methods, the WhatsApp account in the phone app must be authorized. To +To send a message or perform other GREEN API methods, the WhatsApp account in the phone app must be authorized. To authorize the account, go to your [cabinet](https://console.green-api.com/) and scan the QR code using the WhatsApp app. ## Installation @@ -39,7 +39,9 @@ from whatsapp_api_client_python import API ### How to initialize an object ``` -greenAPI = API.GreenApi(ID_INSTANCE, API_TOKEN_INSTANCE) +greenAPI = API.GreenApi( + "1101000001", "d75b3a66374942c5b3c019c698abc2067e151558acbd412345" +) ``` ### Sending a text message to a WhatsApp number @@ -49,7 +51,9 @@ https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/sen ). ``` -greenAPI.sending.sendMessage('11001234567@c.us', 'Message text') +response = greenAPI.sending.sendMessage("11001234567@c.us", "Message text") + +print(response.data) ``` ### Sending an image via URL @@ -59,12 +63,13 @@ https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/sen ). ``` -greenAPI.sending.sendFileByUrl( - '11001234567@c.us', - 'https://www.google.ru/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png', - 'googlelogo_color_272x92dp.png', - 'Google logo' +response = greenAPI.sending.sendFileByUrl( + "11001234567@c.us", + "https://green-api.com/green-api-logo_2.png", + "green-api-logo_2.png" ) + +print(response.data) ``` ### Sending an image by uploading from the disk @@ -74,34 +79,29 @@ https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/sen ). ``` -greenAPI.sending.sendFileByUpload( - '11001234567@c.us', - 'C:\Games\PicFromDisk.png', - 'PicFromDisk.png', - 'Picture from disk' +response = greenAPI.sending.sendFileByUpload( + "11001234567@c.us", "data/green-api-logo_2.png" ) + +print(response.data) ``` ### Group creation and sending a message to the group -IMPORTANT: If one tries to create a group with a non-existent number, WhatsApp may block the sender's number. The number -in the example is non-existent. +**Attention**. If one tries to create a group with a non-existent number, WhatsApp may block the sender's number. The +number in the example is non-existent. Link to example: [createGroupAndSendMessage.py]( https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/createGroupAndSendMessage.py ). ``` -chatIds = [ - "11001234567@c.us" -] -resultCreate = greenAPI.groups.createGroup( - 'GroupName', chatIds +create_group_response = greenAPI.groups.createGroup( + "Group Name", ["11001234567@c.us"] ) - -if resultCreate.code == 200: - resultSend = greenAPI.sending.sendMessage( - resultCreate.data['chatId'], 'Message text' +if create_group_response.code == 200: + send_message_response = greenAPI.sending.sendMessage( + create_group_response.data["chatId"], "Message text" ) ``` @@ -111,24 +111,27 @@ Link to example: [receiveNotification.py]( https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/receiveNotification.py ). -The general concept of receiving data in the Green API is described [here](https://green-api.com/en/docs/api/receiving/) -To start receiving messages by the HTTP API you need to execute the library method: +The general concept of receiving data in the GREEN API is described [here]( +https://green-api.com/en/docs/api/receiving/ +). To start receiving notifications by the HTTP API you need to execute the library method: ``` greenAPI.webhooks.startReceivingNotifications(onEvent) ``` -onEvent - your method which should contain parameters: +onEvent - your function which should contain parameters: -| Parameter | Description | -|-------------|--------------------------------| -| typeWebhook | received message type (string) | -| body | message body (json) | +| Parameter | Description | +|-------------|----------------------------------| +| typeWebhook | received notification type (str) | +| body | notification body (dict) | -Message body types and formats [here](https://green-api.com/en/docs/api/receiving/notifications-format/). +Notification body types and formats can be found [here]( +https://green-api.com/en/docs/api/receiving/notifications-format/ +). -This method will be called when an incoming message is received. Next, process messages according to the business logic -of your system. +This method will be called when an incoming notification is received. Next, process notifications according to the +business logic of your system. ## Examples list @@ -199,7 +202,7 @@ of your system. ## External products -- [requests](https://requests.readthedocs.io/en/latest/) - for http requests. +- [requests](https://requests.readthedocs.io/en/latest/) - for HTTP requests. ## License diff --git a/README_RUS.md b/README_RUS.md index 152f2c0..671754d 100644 --- a/README_RUS.md +++ b/README_RUS.md @@ -6,9 +6,9 @@ ![](https://img.shields.io/github/actions/workflow/status/green-api/whatsapp-api-client-python/python-package.yml) ![](https://img.shields.io/pypi/dm/whatsapp-api-client-python) -Python библиотека для интеграции с мессенджером WhatsApp через API сервиса [green-api.com](https://green-api.com/). -Чтобы воспользоваться библиотекой, нужно получить регистрационный токен и ID аккаунта -в [личном кабинете](https://console.green-api.com/). Есть бесплатный тариф аккаунта разработчика. +whatsapp-api-client-python - библиотека для интеграции с мессенджером WhatsApp через API +сервиса [green-api.com](https://green-api.com/). Чтобы воспользоваться библиотекой, нужно получить регистрационный токен +и ID аккаунта в [личном кабинете](https://console.green-api.com/). Есть бесплатный тариф аккаунта разработчика. ## API @@ -38,7 +38,9 @@ from whatsapp_api_client_python import API ### Как инициализировать объект ``` -greenAPI = API.GreenApi(ID_INSTANCE, API_TOKEN_INSTANCE) +greenAPI = API.GreenApi( + "1101000001", "d75b3a66374942c5b3c019c698abc2067e151558acbd412345" +) ``` ### Отправка текстового сообщения на номер WhatsApp @@ -46,7 +48,9 @@ greenAPI = API.GreenApi(ID_INSTANCE, API_TOKEN_INSTANCE) Ссылка на пример: [sendTextMessage.py](examples/sendTextMessage.py). ``` -greenAPI.sending.sendMessage('11001234567@c.us', 'Message text') +response = greenAPI.sending.sendMessage("11001234567@c.us", "Message text") + +print(response.data) ``` ### Отправка картинки по URL @@ -54,12 +58,13 @@ greenAPI.sending.sendMessage('11001234567@c.us', 'Message text') Ссылка на пример: [sendPictureByLink.py](examples/sendPictureByLink.py). ``` -greenAPI.sending.sendFileByUrl( - '11001234567@c.us', - 'https://www.google.ru/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png', - 'googlelogo_color_272x92dp.png', - 'Google logo' +response = greenAPI.sending.sendFileByUrl( + "11001234567@c.us", + "https://green-api.com/green-api-logo_2.png", + "green-api-logo_2.png" ) + +print(response.data) ``` ### Отправка картинки загрузкой с диска @@ -67,56 +72,51 @@ greenAPI.sending.sendFileByUrl( Ссылка на пример: [sendPictureByUpload.py](examples/sendPictureByUpload.py). ``` -greenAPI.sending.sendFileByUpload( - '11001234567@c.us', - 'C:\\Games\\PicFromDisk.png', - 'PicFromDisk.png', - 'Picture from disk' +response = greenAPI.sending.sendFileByUpload( + "11001234567@c.us", "data/green-api-logo_2.png" ) + +print(response.data) ``` ### Создание группы и отправка сообщения в эту группу -ВАЖНО: Если попытаться создать группу с несуществующим номером WhatsApp может заблокировать номер отправителя. Номер в -примере не существует. +**Важно**. Если попытаться создать группу с несуществующим номером WhatsApp, то может заблокировать номер отправителя. +Номер в примере не существует. Ссылка на пример: [createGroupAndSendMessage.py](examples/createGroupAndSendMessage.py). ``` -chatIds = [ - "11001234567@c.us" -] -resultCreate = greenAPI.groups.createGroup( - 'GroupName', chatIds +create_group_response = greenAPI.groups.createGroup( + "Group Name", ["11001234567@c.us"] ) - -if resultCreate.code == 200: - resultSend = greenAPI.sending.sendMessage( - resultCreate.data['chatId'], 'Message text' +if create_group_response.code == 200: + send_message_response = greenAPI.sending.sendMessage( + create_group_response.data["chatId"], "Message text" ) ``` -### Получение входящих сообщений через HTTP API +### Получение входящих уведомлений через HTTP API Ссылка на пример: [receiveNotification.py](examples/receiveNotification.py). -Общая концепция получения данных в Green API описана [здесь](https://green-api.com/docs/api/receiving/). Для старта -получения сообщений через HTTP API требуется выполнить метод библиотеки: +Общая концепция получения данных в GREEN API описана [здесь](https://green-api.com/docs/api/receiving/). Для старта +получения уведомлений через HTTP API требуется выполнить метод библиотеки: ``` greenAPI.webhooks.startReceivingNotifications(onEvent) ``` -onEvent - ваш метод, который должен содержать параметры: +onEvent - ваша функция, которая должен содержать параметры: -| Параметр | Описание | -|-------------|------------------------------------| -| typeWebhook | тип полученного сообщения (строка) | -| body | тело сообщения (json) | +| Параметр | Описание | +|-------------|-----------------------------------| +| typeWebhook | тип полученного уведомления (str) | +| body | тело уведомления (dict) | -Типы и форматы тел сообщений [здесь](https://green-api.com/docs/api/receiving/notifications-format/). +Типы и форматы тел уведомлений находятся [здесь](https://green-api.com/docs/api/receiving/notifications-format/). -Этот метод будет вызываться при получении входящего сообщения. Далее обрабатываете сообщения согласно бизнес-логике +Эта функция будет вызываться при получении входящего уведомления. Далее обрабатываете уведомления согласно бизнес-логике вашей системы. ## Список примеров @@ -188,7 +188,7 @@ onEvent - ваш метод, который должен содержать па ## Сторонние продукты -- [requests](https://requests.readthedocs.io/en/latest/) - для http запросов. +- [requests](https://requests.readthedocs.io/en/latest/) - для HTTP запросов. ## Лицензия From 9d02e055c51ee7071bb65c8e2725ff6a31b8b58d Mon Sep 17 00:00:00 2001 From: Amele9 Date: Wed, 14 Jun 2023 10:50:07 +0500 Subject: [PATCH 7/7] Updated examples --- README.md | 8 ++++++-- README_RUS.md | 8 ++++++-- examples/receiveNotification.py | 11 ++++++----- examples/sendPictureByLink.py | 3 ++- examples/sendPictureByUpload.py | 5 ++++- 5 files changed, 24 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 81689e1..ecfe11a 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,8 @@ https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/sen response = greenAPI.sending.sendFileByUrl( "11001234567@c.us", "https://green-api.com/green-api-logo_2.png", - "green-api-logo_2.png" + "green-api-logo_2.png", + "GREEN API logo" ) print(response.data) @@ -80,7 +81,10 @@ https://github.com/green-api/whatsapp-api-client-python/blob/master/examples/sen ``` response = greenAPI.sending.sendFileByUpload( - "11001234567@c.us", "data/green-api-logo_2.png" + "11001234567@c.us", + "data/green-api-logo_2.png", + "green-api-logo_2.png", + "GREEN API logo" ) print(response.data) diff --git a/README_RUS.md b/README_RUS.md index 671754d..7b821ff 100644 --- a/README_RUS.md +++ b/README_RUS.md @@ -61,7 +61,8 @@ print(response.data) response = greenAPI.sending.sendFileByUrl( "11001234567@c.us", "https://green-api.com/green-api-logo_2.png", - "green-api-logo_2.png" + "green-api-logo_2.png", + "GREEN API logo" ) print(response.data) @@ -73,7 +74,10 @@ print(response.data) ``` response = greenAPI.sending.sendFileByUpload( - "11001234567@c.us", "data/green-api-logo_2.png" + "11001234567@c.us", + "data/green-api-logo_2.png", + "green-api-logo_2.png", + "GREEN API logo" ) print(response.data) diff --git a/examples/receiveNotification.py b/examples/receiveNotification.py index 1a8e7b4..05edbf5 100644 --- a/examples/receiveNotification.py +++ b/examples/receiveNotification.py @@ -1,11 +1,12 @@ -from datetime import datetime import json -from whatsapp_api_client_python import API as API +from datetime import datetime + +from whatsapp_api_client_python import API -ID_INSTANCE = '1101000001' -API_TOKEN_INSTANCE = '3e03ea9ff3324e228ae3dfdf4d48e409bfa1b1ad0b0c46bf8c' +greenAPI = API.GreenApi( + "1101000001", "d75b3a66374942c5b3c019c698abc2067e151558acbd412345" +) -greenAPI = API.GreenApi(ID_INSTANCE, API_TOKEN_INSTANCE) def main(): greenAPI.webhooks.startReceivingNotifications(onEvent) diff --git a/examples/sendPictureByLink.py b/examples/sendPictureByLink.py index 5888e1c..03521f3 100644 --- a/examples/sendPictureByLink.py +++ b/examples/sendPictureByLink.py @@ -9,7 +9,8 @@ def main(): response = greenAPI.sending.sendFileByUrl( "11001234567@c.us", "https://green-api.com/green-api-logo_2.png", - "green-api-logo_2.png" + "green-api-logo_2.png", + "GREEN API logo" ) print(response.data) diff --git a/examples/sendPictureByUpload.py b/examples/sendPictureByUpload.py index e83f0ba..8921108 100644 --- a/examples/sendPictureByUpload.py +++ b/examples/sendPictureByUpload.py @@ -7,7 +7,10 @@ def main(): response = greenAPI.sending.sendFileByUpload( - "11001234567@c.us", "data/green-api-logo_2.png" + "11001234567@c.us", + "data/green-api-logo_2.png", + "green-api-logo_2.png", + "GREEN API logo" ) print(response.data)