diff --git a/README.md b/README.md index d9704f4..caaf591 100644 --- a/README.md +++ b/README.md @@ -237,6 +237,10 @@ print(response.data) | `serviceMethods.setDisappearingChat` | The method is designed to change the settings of disappearing messages in chats | [SetDisappearingChat](https://green-api.com/en/docs/api/service/SetDisappearingChat/) | | `webhooks.startReceivingNotifications` | The method is designed to start receiving new notifications | | | `webhooks.stopReceivingNotifications` | The method is designed to stop receiving new notifications | | +| `partner.GetInstances` | The method is for getting all the account instances created by the partner. | [GetInstances](https://green-api.com/en/docs/partners/getInstances/) | +| `partner.CreateInstance` | The method is for creating an instance. | [CreateInstance](https://green-api.com/en/docs/partners/createInstance/) | +| `partner.DeleteInstanceAccount` | The method is for deleting an instance. | [DeleteInstanceAccount](https://green-api.com/en/docs/partners/deleteInstanceAccount/) | + ## Service methods documentation diff --git a/docs/README.md b/docs/README.md index d8127a7..a8704ce 100644 --- a/docs/README.md +++ b/docs/README.md @@ -221,6 +221,9 @@ print(response.data) | `serviceMethods.setDisappearingChat` | Метод предназначен для изменения настроек исчезающих сообщений в чатах | [SetDisappearingChat](https://green-api.com/docs/api/service/SetDisappearingChat/) | | `webhooks.startReceivingNotifications` | Метод предназначен для старта получения новых уведомлений | | | `webhooks.stopReceivingNotifications` | Метод предназначен для остановки получения новых уведомлений | | +| `partner.GetInstances` | Метод предназначен для получения всех инстансов аккаунтов созданных партнёром. | [GetInstances](https://green-api.com/docs/partners/getInstances/) | +| `partner.CreateInstance` | Метод предназначен для создания инстанса от имени партнёра. | [CreateInstance](https://green-api.com/docs/partners/createInstance/) | +| `partner.DeleteInstanceAccount` | Метод предназначен для удаления инстанса аккаунта партнёра. | [DeleteInstanceAccount](https://green-api.com/docs/partners/deleteInstanceAccount/) | ## Документация по методам сервиса diff --git a/examples/partherMethods/CreateInstance.py b/examples/partherMethods/CreateInstance.py new file mode 100644 index 0000000..fdbd327 --- /dev/null +++ b/examples/partherMethods/CreateInstance.py @@ -0,0 +1,34 @@ +from whatsapp_api_client_python import API + +greenAPI = API.GreenApiPartner( + "gac.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst" +) + + +def main(): + settings = { + "name": "Created by Python SDK", + "webhookUrl": "https://webhook.url", + "webhookUrlToken": "auth_token", + "delaySendMessagesMilliseconds": 5000, + "markIncomingMessagesReaded": "yes", + "markIncomingMessagesReadedOnReply": "yes", + "outgoingWebhook": "yes", + "outgoingMessageWebhook": "yes", + "outgoingAPIMessageWebhook": "yes", + "stateWebhook": "yes", + "incomingWebhook": "yes", + "deviceWebhook": "yes", + "keepOnlineStatus": "yes", + "pollMessageWebhook": "yes", + "incomingBlockWebhook": "yes", + "incomingCallWebhook": "yes", + "editedMessageWebhook": "yes", + "deletedMessageWebhook": "yes" + } + + response = greenAPI.partner.createInstance(settings) + print(response.data) + +if __name__ == '__main__': + main() diff --git a/examples/partherMethods/DeleteInstanceAccount.py b/examples/partherMethods/DeleteInstanceAccount.py new file mode 100644 index 0000000..a6b48e0 --- /dev/null +++ b/examples/partherMethods/DeleteInstanceAccount.py @@ -0,0 +1,14 @@ +from whatsapp_api_client_python import API + +greenAPI = API.GreenApiPartner( + "gac.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst" +) + + +def main(): + response = greenAPI.partner.deleteInstanceAccount(1103123456) + print(response.data) + + +if __name__ == '__main__': + main() diff --git a/examples/partherMethods/GetInstances.py b/examples/partherMethods/GetInstances.py new file mode 100644 index 0000000..e24dd39 --- /dev/null +++ b/examples/partherMethods/GetInstances.py @@ -0,0 +1,13 @@ +from whatsapp_api_client_python import API + +greenAPI = API.GreenApiPartner( + "gac.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst" +) + + +def main(): + response = greenAPI.partner.getInstances() + print(response.data) + +if __name__ == '__main__': + main() diff --git a/examples/setSettings.py b/examples/setSettings.py new file mode 100644 index 0000000..4652e9e --- /dev/null +++ b/examples/setSettings.py @@ -0,0 +1,34 @@ +from whatsapp_api_client_python import API + +greenAPI = API.GreenAPI( + "1101000001", "d75b3a66374942c5b3c019c698abc2067e151558acbd412345" +) + + +def main(): + settings = { + "webhookUrl": "https://webhook.url", + "webhookUrlToken": "auth_token", + "delaySendMessagesMilliseconds": 5000, + "markIncomingMessagesReaded": "yes", + "markIncomingMessagesReadedOnReply": "yes", + "outgoingWebhook": "yes", + "outgoingMessageWebhook": "yes", + "outgoingAPIMessageWebhook": "yes", + "stateWebhook": "yes", + "incomingWebhook": "yes", + "deviceWebhook": "yes", + "keepOnlineStatus": "yes", + "pollMessageWebhook": "yes", + "incomingBlockWebhook": "yes", + "incomingCallWebhook": "yes", + "editedMessageWebhook": "yes", + "deletedMessageWebhook": "yes" + } + + response = greenAPI.account.setSettings(settings) + print(response.data) + + +if __name__ == '__main__': + main() diff --git a/whatsapp_api_client_python/API.py b/whatsapp_api_client_python/API.py index 62a2612..fb900f0 100644 --- a/whatsapp_api_client_python/API.py +++ b/whatsapp_api_client_python/API.py @@ -16,7 +16,8 @@ receiving, sending, serviceMethods, - webhooks + webhooks, + partner ) @@ -182,3 +183,33 @@ class GreenAPI(GreenApi): class GreenAPIError(Exception): pass + +class GreenApiPartner(GreenApi): + def __init__( + self, + partnerToken: str, + email: str = None, + host: str = "https://api.green-api.com" + ): + + super().__init__( + idInstance="", + apiTokenInstance="", + host=host + ) + + self.partnerToken = partnerToken + self.email = email + self.partner = partner.Partner(self) + + def request( + self, + method: str, + url: str, + payload: Optional[dict] = None, + files: Optional[dict] = None + ) -> GreenAPIResponse: + + url = url.replace("{{partnerToken}}", self.partnerToken) + + return super().request(method, url, payload, files) \ No newline at end of file diff --git a/whatsapp_api_client_python/tools/partner.py b/whatsapp_api_client_python/tools/partner.py new file mode 100644 index 0000000..73d3435 --- /dev/null +++ b/whatsapp_api_client_python/tools/partner.py @@ -0,0 +1,61 @@ +from typing import Dict, TYPE_CHECKING, Union + +from ..response import Response + +if TYPE_CHECKING: + from ..API import GreenApiPartner + +class Partner: + def __init__(self, api: "GreenApiPartner"): + self.api = api + + def getInstances(self) -> Response: + """ + The method is aimed for getting all the account instances created by the partner. + + https://green-api.com/en/docs/partners/getInstances/ + """ + + return self.api.request( + "GET", ( + "{{host}}/partner/" + "getInstances/{{partnerToken}}" + ) + ) + + def createInstance(self, requestBody: Dict[str, Union[int, str]]) -> Response: + """ + The method is aimed for creating a messenger account instance on the partner's part. + + https://green-api.com/en/docs/partners/createInstance/ + """ + + return self.api.request( + "POST", ( + "{{host}}/partner/" + "createInstance/{{partnerToken}}" + ), requestBody + ) + + def deleteInstanceAccount(self, idInstance: int) -> Response: + """ + The method is aimed for deleting an instance of the partners's account. + + https://green-api.com/en/docs/partners/deleteInstanceAccount/ + """ + + request_body = self.handle_parameters(locals()) + + return self.api.request( + "POST", ( + "{{host}}/partner/" + "deleteInstanceAccount/{{partnerToken}}" + ), request_body + ) + + def handle_parameters(self, parameters: dict) -> dict: + return { + key: value + for key, value in parameters.items() + if value is not None and key != "self" + } \ No newline at end of file