Skip to content

Commit a9e9e5e

Browse files
committed
webhooks
1 parent d1702a8 commit a9e9e5e

2 files changed

Lines changed: 161 additions & 0 deletions

File tree

examples/echo.py

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
from datetime import datetime
2+
from io import BytesIO, TextIOBase
3+
import json
4+
5+
import whatsapp_api_webhook_server_python.webhooksHTTPRequestHandler as webhooksHTTPRequestHandler
6+
from whatsapp_api_webhook_server_python.webhooks import TypeWebhook as TypeWebhook
7+
8+
def onEvent(webhookHandler: webhooksHTTPRequestHandler, typeWebhook: str, body):
9+
if typeWebhook == TypeWebhook.INCOMING_MESSAGE_RECEIVED.value:
10+
onIncomingMessageReceived(webhookHandler, body)
11+
elif typeWebhook == TypeWebhook.DEVICE_INFO.value:
12+
onDeviceInfo(webhookHandler, body)
13+
elif typeWebhook == TypeWebhook.INCOMING_CALL.value:
14+
onIncomingCall(webhookHandler, body)
15+
elif typeWebhook == TypeWebhook.INCOMING_MESSAGE_RECEIVED.value:
16+
onIncomingMessageReceived(webhookHandler, body)
17+
elif typeWebhook == TypeWebhook.OUTGOING_API_MESSAGE_RECEIVED.value:
18+
onOutgoingAPIMessageReceived(webhookHandler, body)
19+
elif typeWebhook == TypeWebhook.OUTGOING_MESSAGE_RECEIVED.value:
20+
onOutgoingMessageReceived(webhookHandler, body)
21+
elif typeWebhook == TypeWebhook.OUTGOING_MESSAGE_STATUS.value:
22+
onOutgoingMessageStatus(webhookHandler, body)
23+
elif typeWebhook == TypeWebhook.STATE_INSTANCE_CHANGED.value:
24+
onStateInstanceChanged(webhookHandler, body)
25+
elif typeWebhook == TypeWebhook.STATUS_INSTANCE_CHANGED.value:
26+
onStatusInstanceChanged(webhookHandler, body)
27+
28+
def onIncomingMessageReceived(webhookHandler: webhooksHTTPRequestHandler, body: object):
29+
idMessage = body['idMessage']
30+
eventDate = datetime.fromtimestamp(body['timestamp'])
31+
senderData = body['senderData']
32+
messageData = body['messageData']
33+
TextOut = idMessage + ': ' \
34+
+ 'At ' + str(eventDate) + ' Incoming from ' \
35+
+ json.dumps(senderData, ensure_ascii=False) \
36+
+ ' message = ' + json.dumps(messageData, ensure_ascii=False)
37+
webhookHandler.wfile.write((50 * '-' + '\n').encode("utf-8"))
38+
webhookHandler.wfile.write(TextOut.encode("utf-8"))
39+
40+
def onIncomingCall(webhookHandler: webhooksHTTPRequestHandler, body):
41+
idMessage = body['idMessage']
42+
eventDate = datetime.fromtimestamp(body['timestamp'])
43+
fromWho = body['from']
44+
TextOut = idMessage + ': ' \
45+
+ 'Call from ' + fromWho \
46+
+ ' at ' + str(eventDate)
47+
webhookHandler.wfile.write((50 * '-' + '\n').encode("utf-8"))
48+
webhookHandler.wfile.write(TextOut.encode("utf-8"))
49+
50+
def onDeviceInfo(webhookHandler: webhooksHTTPRequestHandler, body):
51+
eventDate = datetime.fromtimestamp(body['timestamp'])
52+
deviceData = body['deviceData']
53+
TextOut = 'At ' + str(eventDate) + ': ' \
54+
+ json.dumps(deviceData, ensure_ascii=False)
55+
webhookHandler.wfile.write((50 * '-' + '\n').encode("utf-8"))
56+
webhookHandler.wfile.write(TextOut.encode("utf-8"))
57+
58+
def onOutgoingMessageReceived(webhookHandler: webhooksHTTPRequestHandler, body):
59+
idMessage = body['idMessage']
60+
eventDate = datetime.fromtimestamp(body['timestamp'])
61+
senderData = body['senderData']
62+
messageData = body['messageData']
63+
TextOut = idMessage + ': ' \
64+
+ 'At ' + str(eventDate) + ' Outgoing from ' \
65+
+ json.dumps(senderData, ensure_ascii=False) \
66+
+ ' message = ' + json.dumps(messageData, ensure_ascii=False)
67+
webhookHandler.wfile.write((50 * '-' + '\n').encode("utf-8"))
68+
webhookHandler.wfile.write(TextOut.encode("utf-8"))
69+
70+
def onOutgoingAPIMessageReceived(webhookHandler: webhooksHTTPRequestHandler, body):
71+
idMessage = body['idMessage']
72+
eventDate = datetime.fromtimestamp(body['timestamp'])
73+
senderData = body['senderData']
74+
messageData = body['messageData']
75+
TextOut = idMessage + ': ' \
76+
+ 'At ' + str(eventDate) + ' API outgoing from ' \
77+
+ json.dumps(senderData, ensure_ascii=False) + \
78+
' message = ' + json.dumps(messageData, ensure_ascii=False)
79+
webhookHandler.wfile.write((50 * '-' + '\n').encode("utf-8"))
80+
webhookHandler.wfile.write(TextOut.encode("utf-8"))
81+
82+
def onOutgoingMessageStatus(webhookHandler: webhooksHTTPRequestHandler, body):
83+
idMessage = body['idMessage']
84+
status = body['status']
85+
eventDate = datetime.fromtimestamp(body['timestamp'])
86+
TextOut = idMessage + ': ' + str(eventDate) + ' status = ' + status
87+
webhookHandler.wfile.write((50 * '-' + '\n').encode("utf-8"))
88+
webhookHandler.wfile.write(TextOut.encode("utf-8"))
89+
90+
def onStateInstanceChanged(webhookHandler: webhooksHTTPRequestHandler, body):
91+
eventDate = datetime.fromtimestamp(body['timestamp'])
92+
stateInstance = body['stateInstance']
93+
TextOut = 'At ' + str(eventDate) + ' state instance = ' \
94+
+ json.dumps(stateInstance, ensure_ascii=False)
95+
webhookHandler.wfile.write((50 * '-' + '\n').encode("utf-8"))
96+
webhookHandler.wfile.write(TextOut.encode("utf-8"))
97+
98+
def onStatusInstanceChanged(webhookHandler: webhooksHTTPRequestHandler, body):
99+
eventDate = datetime.fromtimestamp(body['timestamp'])
100+
statusInstance = body['statusInstance']
101+
TextOut = 'At ' + str(eventDate) + ' status instance = ' \
102+
+ json.dumps(statusInstance, ensure_ascii=False)
103+
webhookHandler.wfile.write((50 * '-' + '\n').encode("utf-8"))
104+
webhookHandler.wfile.write(TextOut.encode("utf-8"))
105+
106+
def main():
107+
webhooksHTTPRequestHandler.startServer('127.0.0.1', 8000, onEvent)
108+
109+
if __name__ == "__main__":
110+
main()
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
from http.server import HTTPServer
2+
from http.server import BaseHTTPRequestHandler
3+
4+
from whatsapp_api_webhook_server_python.webhooks import Webhooks
5+
6+
7+
class WebhooksHTTPRequestHandler(BaseHTTPRequestHandler):
8+
9+
def do_GET(self):
10+
length = self.headers['Content-Length']
11+
if length != None:
12+
content_length = int()
13+
body = self.rfile.read(content_length)
14+
15+
Webhooks.webhookProccessing(body, self.onEvent)
16+
else:
17+
self.send_response(200)
18+
self.send_header('Content-type', 'text/html')
19+
self.end_headers()
20+
21+
def do_POST(self):
22+
content_length = int(self.headers['Content-Length'])
23+
dataBytes = self.rfile.read(content_length)
24+
dataText = dataBytes.decode("utf-8", 'ignore')
25+
26+
Webhooks.webhookProccessing(dataText, self.onEvent)
27+
28+
# self.send_response(200)
29+
# self.send_header('Content-type', 'text/html')
30+
# self.end_headers()
31+
# response = BytesIO()
32+
# response.write(b'This is POST request. ')
33+
# response.write(b'Received: ')
34+
# response.write(body)
35+
# self.wfile.write(response.getvalue())
36+
37+
def do_DELETE(self):
38+
# self.send_response(200)
39+
# self.send_header('Content-type', 'text/html')
40+
# self.end_headers()
41+
# self.wfile.write(b'Delete')
42+
content_length = int(self.headers['Content-Length'])
43+
body = self.rfile.read(content_length)
44+
45+
Webhooks.webhookProccessing(body, self.onEvent)
46+
47+
def startServer(host: str, port: int, onEvent):
48+
webhookHandler = WebhooksHTTPRequestHandler
49+
webhookHandler.onEvent = onEvent
50+
httpd = HTTPServer((host, port), webhookHandler)
51+
httpd.serve_forever()

0 commit comments

Comments
 (0)