/
lambda_function.py
71 lines (53 loc) · 2.46 KB
/
lambda_function.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
##++++++ Amazon Lambda Function for processing WhatsApp incoming messages +++++
## Updated to Whatsapp API v14
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
import json
import os
import boto3
import time
lambda_client = boto3.client('lambda')
from utils import ( get_config,build_response,validate_healthcheck)
whatsapp_MetaData = os.environ.get('whatsapp_MetaData')
key_name_active_connections = os.environ.get('ENV_KEY_NAME')
dynamodb_resource=boto3.resource('dynamodb')
table = dynamodb_resource.Table(whatsapp_MetaData)
valid_display_phone_number = os.environ.get('DISPLAY_PHONE_NUMBER')
CONFIG_PARAMETER= os.environ['CONFIG_PARAMETER']
def batch_put_items(client, table_name, item_arrays):
table = client.Table(table_name)
with table.batch_writer() as batch:
for itm in item_arrays:
res = batch.put_item(Item=itm)
print(res)
def lambda_handler(event, context):
print (event)
connect_config=json.loads(get_config(CONFIG_PARAMETER))
if event['httpMethod'] == 'GET':
return build_response(200,
validate_healthcheck(event, connect_config['WHATS_VERIFICATION_TOKEN']))
if event.get("body") == None: build_response(200,"bye bye")
body = json.loads(event['body'])
WHATS_TOKEN = 'Bearer ' + connect_config['WHATS_TOKEN']
##WhatsApp specific iterations.
for entry in body['entry']:
print("Iterating entry")
print(entry)
display_phone_number=entry["changes"][0]["value"]["metadata"]["display_phone_number"]
timestamp = int(entry["changes"][0]["value"]["messages"][0]["timestamp"])
now = int(time.time())
diferencia = now - timestamp
if diferencia > 300: #session time in seg
print("old message")
break
if display_phone_number == valid_display_phone_number:
try:
entry[key_name_active_connections]=entry["changes"][0]["value"]["messages"][0]["id"]
entry["whats_token"] = WHATS_TOKEN
print("key_name_active_connections",entry[key_name_active_connections])
batch_put_items(dynamodb_resource, whatsapp_MetaData, [entry])
except:
print("No messages")
else:
print("No valid diplay phone number: ", display_phone_number)
return build_response(200,"OK")