Skip to content

Commit e13aed9

Browse files
committed
add onEvent for webhooks
1 parent 91a404d commit e13aed9

File tree

4 files changed

+96
-88
lines changed

4 files changed

+96
-88
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,8 @@ resultReceive = restApi.receiving.receiveNotification()
155155
`serviceMethods.deleteMessage` | Метод удаляет сообщение из чата | [DeleteMessage.md](https://github.com/green-api/docs/blob/master/ru/docs/api/service/deleteMessage.md)
156156
`serviceMethods.unarchiveChat` | Метод разархивирует чат | [UnarchiveChat.md](https://github.com/green-api/docs/blob/master/ru/docs/api/service/UnarchiveChat.md)
157157
`serviceMethods.setDisappearingChat` | Метод предназначен для изменения настроек исчезающих сообщений в чатах | [SetDisappearingChat.md](https://github.com/green-api/docs/blob/master/ru/docs/api/service/SetDisappearingChat.md)
158+
`webhooks.startReceivingNotifications` | Метод предназначен для запуска получения вебхуков | <библиотечный метод>
159+
`webhooks.stopReceivingNotifications` | Метод предназначен для остановки получения вебхуков | <библиотечный метод>
158160

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

examples/receiveNotification.py

Lines changed: 88 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
from os import environ
2+
from datetime import datetime
3+
import json
24
from whatsapp_api_client_python import greenAPI as greenAPI
5+
from whatsapp_api_client_python.tools.webhooks import TypeWebhook as TypeWebhook
36

47

58
ID_INSTANCE = environ['ID_INSTANCE']
@@ -8,7 +11,91 @@
811
restApi = greenAPI.RestApi(ID_INSTANCE, API_TOKEN_INSTANCE)
912

1013
def main():
11-
restApi.webhooks.startReceivingNotifications()
14+
restApi.webhooks.startReceivingNotifications(onEvent)
15+
16+
def onEvent(typeWebhook, body):
17+
if typeWebhook == TypeWebhook.INCOMING_MESSAGE_RECEIVED.value:
18+
onIncomingMessageReceived(body)
19+
elif typeWebhook == TypeWebhook.DEVICE_INFO.value:
20+
onDeviceInfo(body)
21+
elif typeWebhook == TypeWebhook.INCOMING_CALL.value:
22+
onIncomingCall(body)
23+
elif typeWebhook == TypeWebhook.INCOMING_MESSAGE_RECEIVED.value:
24+
onIncomingMessageReceived(body)
25+
elif typeWebhook == TypeWebhook.OUTGOING_API_MESSAGE_RECEIVED.value:
26+
onOutgoingAPIMessageReceived(body)
27+
elif typeWebhook == TypeWebhook.OUTGOING_MESSAGE_RECEIVED.value:
28+
onOutgoingMessageReceived(body)
29+
elif typeWebhook == TypeWebhook.OUTGOING_MESSAGE_STATUS.value:
30+
onOutgoingMessageStatus(body)
31+
elif typeWebhook == TypeWebhook.STATE_INSTANCE_CHANGED.value:
32+
onStateInstanceChanged(body)
33+
elif typeWebhook == TypeWebhook.STATUS_INSTANCE_CHANGED.value:
34+
onStatusInstanceChanged(body)
35+
36+
def onIncomingMessageReceived(body):
37+
idMessage = body['idMessage']
38+
eventDate = datetime.fromtimestamp(body['timestamp'])
39+
senderData = body['senderData']
40+
messageData = body['messageData']
41+
print(idMessage + ': '
42+
+ 'At ' + str(eventDate) + ' Incoming from ' \
43+
+ json.dumps(senderData, ensure_ascii=False) \
44+
+ ' message = ' + json.dumps(messageData, ensure_ascii=False))
45+
46+
def onIncomingCall(body):
47+
idMessage = body['idMessage']
48+
eventDate = datetime.fromtimestamp(body['timestamp'])
49+
fromWho = body['from']
50+
print(idMessage + ': '
51+
+ 'Call from ' + fromWho
52+
+ ' at ' + str(eventDate))
53+
54+
def onDeviceInfo(body):
55+
eventDate = datetime.fromtimestamp(body['timestamp'])
56+
deviceData = body['deviceData']
57+
print('At ' + str(eventDate) + ': ' \
58+
+ json.dumps(deviceData, ensure_ascii=False))
59+
60+
def onOutgoingMessageReceived(body):
61+
idMessage = body['idMessage']
62+
eventDate = datetime.fromtimestamp(body['timestamp'])
63+
senderData = body['senderData']
64+
messageData = body['messageData']
65+
print(idMessage + ': '
66+
+ 'At ' + str(eventDate) + ' Outgoing from ' \
67+
+ json.dumps(senderData, ensure_ascii=False) \
68+
+ ' message = ' + json.dumps(messageData, ensure_ascii=False))
69+
70+
def onOutgoingAPIMessageReceived(body):
71+
idMessage = body['idMessage']
72+
eventDate = datetime.fromtimestamp(body['timestamp'])
73+
senderData = body['senderData']
74+
messageData = body['messageData']
75+
print(idMessage + ': '
76+
+ 'At ' + str(eventDate) + ' API outgoing from ' \
77+
+ json.dumps(senderData, ensure_ascii=False) + \
78+
' message = ' + json.dumps(messageData, ensure_ascii=False))
79+
80+
def onOutgoingMessageStatus(body):
81+
idMessage = body['idMessage']
82+
status = body['status']
83+
eventDate = datetime.fromtimestamp(body['timestamp'])
84+
print(idMessage + ': '
85+
+ 'At ' + str(eventDate) + ' status = ' + status)
86+
87+
def onStateInstanceChanged(body):
88+
eventDate = datetime.fromtimestamp(body['timestamp'])
89+
stateInstance = body['stateInstance']
90+
print('At ' + str(eventDate) + ' state instance = ' \
91+
+ json.dumps(stateInstance, ensure_ascii=False))
92+
93+
def onStatusInstanceChanged(body):
94+
eventDate = datetime.fromtimestamp(body['timestamp'])
95+
statusInstance = body['statusInstance']
96+
print('At ' + str(eventDate) + ' status instance = ' \
97+
+ json.dumps(statusInstance, ensure_ascii=False))
98+
1299

13100
if __name__ == "__main__":
14101
main()

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
setuptools.setup(
77
name="whatsapp-api-client-python",
8-
version="0.0.19",
8+
version="0.0.20",
99
install_requires=['requests'],
1010
author="Ivan Sadovy",
1111
author_email="sadiv@bk.ru",

whatsapp_api_client_python/tools/webhooks.py

Lines changed: 5 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
from whatsapp_api_client_python.response import Response
2-
from datetime import datetime
3-
import json
42
from enum import Enum
53

64

@@ -30,77 +28,15 @@ def __init__(self, restApi) -> None:
3028
self.restApi = restApi
3129
self.started = False
3230

33-
def startReceivingNotifications(self) -> bool:
31+
def startReceivingNotifications(self, onEvent) -> bool:
3432
self.started = True
35-
self.job()
33+
self.job(onEvent)
3634

3735
def stopReceivingNotifications(self) -> bool:
3836
self.started = False
3937

40-
def onIncomingMessageReceived(self, body):
41-
idMessage = body['idMessage']
42-
eventDate = datetime.fromtimestamp(body['timestamp'])
43-
senderData = body['senderData']
44-
messageData = body['messageData']
45-
print(idMessage + ': '
46-
+ 'At ' + str(eventDate) + ' Incoming from ' \
47-
+ json.dumps(senderData, ensure_ascii=False) \
48-
+ ' message = ' + json.dumps(messageData, ensure_ascii=False))
49-
50-
def onIncomingCall(self, body):
51-
idMessage = body['idMessage']
52-
eventDate = datetime.fromtimestamp(body['timestamp'])
53-
fromWho = body['from']
54-
print(idMessage + ': '
55-
+ 'Call from ' + fromWho
56-
+ ' at ' + str(eventDate))
57-
58-
def onDeviceInfo(self, body):
59-
eventDate = datetime.fromtimestamp(body['timestamp'])
60-
deviceData = body['deviceData']
61-
print('At ' + str(eventDate) + ': ' \
62-
+ json.dumps(deviceData, ensure_ascii=False))
63-
64-
def onOutgoingMessageReceived(self, body):
65-
idMessage = body['idMessage']
66-
eventDate = datetime.fromtimestamp(body['timestamp'])
67-
senderData = body['senderData']
68-
messageData = body['messageData']
69-
print(idMessage + ': '
70-
+ 'At ' + str(eventDate) + ' Outgoing from ' \
71-
+ json.dumps(senderData, ensure_ascii=False) \
72-
+ ' message = ' + json.dumps(messageData, ensure_ascii=False))
73-
74-
def onOutgoingAPIMessageReceived(self, body):
75-
idMessage = body['idMessage']
76-
eventDate = datetime.fromtimestamp(body['timestamp'])
77-
senderData = body['senderData']
78-
messageData = body['messageData']
79-
print(idMessage + ': '
80-
+ 'At ' + str(eventDate) + ' API outgoing from ' \
81-
+ json.dumps(senderData, ensure_ascii=False) + \
82-
' message = ' + json.dumps(messageData, ensure_ascii=False))
83-
84-
def onOutgoingMessageStatus(self, body):
85-
idMessage = body['idMessage']
86-
status = body['status']
87-
eventDate = datetime.fromtimestamp(body['timestamp'])
88-
print(idMessage + ': '
89-
+ 'At ' + str(eventDate) + ' status = ' + status)
90-
91-
def onStateInstanceChanged(self, body):
92-
eventDate = datetime.fromtimestamp(body['timestamp'])
93-
stateInstance = body['stateInstance']
94-
print('At ' + str(eventDate) + ' state instance = ' \
95-
+ json.dumps(stateInstance, ensure_ascii=False))
96-
97-
def onStatusInstanceChanged(self, body):
98-
eventDate = datetime.fromtimestamp(body['timestamp'])
99-
statusInstance = body['statusInstance']
100-
print('At ' + str(eventDate) + ' status instance = ' \
101-
+ json.dumps(statusInstance, ensure_ascii=False))
102-
103-
def job(self) -> None:
38+
39+
def job(self, onEvent) -> None:
10440
print('Incoming notifications are being received. '\
10541
'To interrupt, press Ctrl+C')
10642
try:
@@ -113,24 +49,7 @@ def job(self) -> None:
11349
continue
11450
body = resultReceive.data['body']
11551
typeWebhook = body['typeWebhook']
116-
if typeWebhook == TypeWebhook.INCOMING_MESSAGE_RECEIVED.value:
117-
self.onIncomingMessageReceived(body)
118-
elif typeWebhook == TypeWebhook.DEVICE_INFO.value:
119-
self.onDeviceInfo(body)
120-
elif typeWebhook == TypeWebhook.INCOMING_CALL.value:
121-
self.onIncomingCall(body)
122-
elif typeWebhook == TypeWebhook.INCOMING_MESSAGE_RECEIVED.value:
123-
self.onIncomingMessageReceived(body)
124-
elif typeWebhook == TypeWebhook.OUTGOING_API_MESSAGE_RECEIVED.value:
125-
self.onOutgoingAPIMessageReceived(body)
126-
elif typeWebhook == TypeWebhook.OUTGOING_MESSAGE_RECEIVED.value:
127-
self.onOutgoingMessageReceived(body)
128-
elif typeWebhook == TypeWebhook.OUTGOING_MESSAGE_STATUS.value:
129-
self.onOutgoingMessageStatus(body)
130-
elif typeWebhook == TypeWebhook.STATE_INSTANCE_CHANGED.value:
131-
self.onStateInstanceChanged(body)
132-
elif typeWebhook == TypeWebhook.STATUS_INSTANCE_CHANGED.value:
133-
self.onStatusInstanceChanged(body)
52+
onEvent(typeWebhook, body)
13453
self.restApi.receiving.deleteNotification(
13554
resultReceive.data['receiptId'])
13655
print('End receiving')

0 commit comments

Comments
 (0)