Skip to content

Commit a8134b1

Browse files
authored
Merge pull request #70 from green-api/SW-3741
SW-3741: Added Parther Methods
2 parents 3489b18 + f604ad2 commit a8134b1

8 files changed

Lines changed: 195 additions & 1 deletion

File tree

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,10 @@ print(response.data)
237237
| `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/) |
238238
| `webhooks.startReceivingNotifications` | The method is designed to start receiving new notifications | |
239239
| `webhooks.stopReceivingNotifications` | The method is designed to stop receiving new notifications | |
240+
| `partner.GetInstances` | The method is for getting all the account instances created by the partner. | [GetInstances](https://green-api.com/en/docs/partners/getInstances/) |
241+
| `partner.CreateInstance` | The method is for creating an instance. | [CreateInstance](https://green-api.com/en/docs/partners/createInstance/) |
242+
| `partner.DeleteInstanceAccount` | The method is for deleting an instance. | [DeleteInstanceAccount](https://green-api.com/en/docs/partners/deleteInstanceAccount/) |
243+
240244

241245
## Service methods documentation
242246

docs/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,9 @@ print(response.data)
221221
| `serviceMethods.setDisappearingChat` | Метод предназначен для изменения настроек исчезающих сообщений в чатах | [SetDisappearingChat](https://green-api.com/docs/api/service/SetDisappearingChat/) |
222222
| `webhooks.startReceivingNotifications` | Метод предназначен для старта получения новых уведомлений | |
223223
| `webhooks.stopReceivingNotifications` | Метод предназначен для остановки получения новых уведомлений | |
224+
| `partner.GetInstances` | Метод предназначен для получения всех инстансов аккаунтов созданных партнёром. | [GetInstances](https://green-api.com/docs/partners/getInstances/) |
225+
| `partner.CreateInstance` | Метод предназначен для создания инстанса от имени партнёра. | [CreateInstance](https://green-api.com/docs/partners/createInstance/) |
226+
| `partner.DeleteInstanceAccount` | Метод предназначен для удаления инстанса аккаунта партнёра. | [DeleteInstanceAccount](https://green-api.com/docs/partners/deleteInstanceAccount/) |
224227

225228
## Документация по методам сервиса
226229

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
from whatsapp_api_client_python import API
2+
3+
greenAPI = API.GreenApiPartner(
4+
"gac.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst"
5+
)
6+
7+
8+
def main():
9+
settings = {
10+
"name": "Created by Python SDK",
11+
"webhookUrl": "https://webhook.url",
12+
"webhookUrlToken": "auth_token",
13+
"delaySendMessagesMilliseconds": 5000,
14+
"markIncomingMessagesReaded": "yes",
15+
"markIncomingMessagesReadedOnReply": "yes",
16+
"outgoingWebhook": "yes",
17+
"outgoingMessageWebhook": "yes",
18+
"outgoingAPIMessageWebhook": "yes",
19+
"stateWebhook": "yes",
20+
"incomingWebhook": "yes",
21+
"deviceWebhook": "yes",
22+
"keepOnlineStatus": "yes",
23+
"pollMessageWebhook": "yes",
24+
"incomingBlockWebhook": "yes",
25+
"incomingCallWebhook": "yes",
26+
"editedMessageWebhook": "yes",
27+
"deletedMessageWebhook": "yes"
28+
}
29+
30+
response = greenAPI.partner.createInstance(settings)
31+
print(response.data)
32+
33+
if __name__ == '__main__':
34+
main()
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from whatsapp_api_client_python import API
2+
3+
greenAPI = API.GreenApiPartner(
4+
"gac.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst"
5+
)
6+
7+
8+
def main():
9+
response = greenAPI.partner.deleteInstanceAccount(1103123456)
10+
print(response.data)
11+
12+
13+
if __name__ == '__main__':
14+
main()
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from whatsapp_api_client_python import API
2+
3+
greenAPI = API.GreenApiPartner(
4+
"gac.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst"
5+
)
6+
7+
8+
def main():
9+
response = greenAPI.partner.getInstances()
10+
print(response.data)
11+
12+
if __name__ == '__main__':
13+
main()

examples/setSettings.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
from whatsapp_api_client_python import API
2+
3+
greenAPI = API.GreenAPI(
4+
"1101000001", "d75b3a66374942c5b3c019c698abc2067e151558acbd412345"
5+
)
6+
7+
8+
def main():
9+
settings = {
10+
"webhookUrl": "https://webhook.url",
11+
"webhookUrlToken": "auth_token",
12+
"delaySendMessagesMilliseconds": 5000,
13+
"markIncomingMessagesReaded": "yes",
14+
"markIncomingMessagesReadedOnReply": "yes",
15+
"outgoingWebhook": "yes",
16+
"outgoingMessageWebhook": "yes",
17+
"outgoingAPIMessageWebhook": "yes",
18+
"stateWebhook": "yes",
19+
"incomingWebhook": "yes",
20+
"deviceWebhook": "yes",
21+
"keepOnlineStatus": "yes",
22+
"pollMessageWebhook": "yes",
23+
"incomingBlockWebhook": "yes",
24+
"incomingCallWebhook": "yes",
25+
"editedMessageWebhook": "yes",
26+
"deletedMessageWebhook": "yes"
27+
}
28+
29+
response = greenAPI.account.setSettings(settings)
30+
print(response.data)
31+
32+
33+
if __name__ == '__main__':
34+
main()

whatsapp_api_client_python/API.py

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616
receiving,
1717
sending,
1818
serviceMethods,
19-
webhooks
19+
webhooks,
20+
partner
2021
)
2122

2223

@@ -182,3 +183,33 @@ class GreenAPI(GreenApi):
182183

183184
class GreenAPIError(Exception):
184185
pass
186+
187+
class GreenApiPartner(GreenApi):
188+
def __init__(
189+
self,
190+
partnerToken: str,
191+
email: str = None,
192+
host: str = "https://api.green-api.com"
193+
):
194+
195+
super().__init__(
196+
idInstance="",
197+
apiTokenInstance="",
198+
host=host
199+
)
200+
201+
self.partnerToken = partnerToken
202+
self.email = email
203+
self.partner = partner.Partner(self)
204+
205+
def request(
206+
self,
207+
method: str,
208+
url: str,
209+
payload: Optional[dict] = None,
210+
files: Optional[dict] = None
211+
) -> GreenAPIResponse:
212+
213+
url = url.replace("{{partnerToken}}", self.partnerToken)
214+
215+
return super().request(method, url, payload, files)
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
from typing import Dict, TYPE_CHECKING, Union
2+
3+
from ..response import Response
4+
5+
if TYPE_CHECKING:
6+
from ..API import GreenApiPartner
7+
8+
class Partner:
9+
def __init__(self, api: "GreenApiPartner"):
10+
self.api = api
11+
12+
def getInstances(self) -> Response:
13+
"""
14+
The method is aimed for getting all the account instances created by the partner.
15+
16+
https://green-api.com/en/docs/partners/getInstances/
17+
"""
18+
19+
return self.api.request(
20+
"GET", (
21+
"{{host}}/partner/"
22+
"getInstances/{{partnerToken}}"
23+
)
24+
)
25+
26+
def createInstance(self, requestBody: Dict[str, Union[int, str]]) -> Response:
27+
"""
28+
The method is aimed for creating a messenger account instance on the partner's part.
29+
30+
https://green-api.com/en/docs/partners/createInstance/
31+
"""
32+
33+
return self.api.request(
34+
"POST", (
35+
"{{host}}/partner/"
36+
"createInstance/{{partnerToken}}"
37+
), requestBody
38+
)
39+
40+
def deleteInstanceAccount(self, idInstance: int) -> Response:
41+
"""
42+
The method is aimed for deleting an instance of the partners's account.
43+
44+
https://green-api.com/en/docs/partners/deleteInstanceAccount/
45+
"""
46+
47+
request_body = self.handle_parameters(locals())
48+
49+
return self.api.request(
50+
"POST", (
51+
"{{host}}/partner/"
52+
"deleteInstanceAccount/{{partnerToken}}"
53+
), request_body
54+
)
55+
56+
def handle_parameters(self, parameters: dict) -> dict:
57+
return {
58+
key: value
59+
for key, value in parameters.items()
60+
if value is not None and key != "self"
61+
}

0 commit comments

Comments
 (0)