Created
March 9, 2023 04:25
-
-
Save theriley106/b696e6d8ae7b957d6d2d675253b350dd to your computer and use it in GitHub Desktop.
Twilio WhatsApp Rain Water Collection Bot
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from __future__ import print_function | |
import os | |
from twilio.rest import Client | |
from datetime import datetime | |
from urllib import parse | |
import requests | |
import base64 | |
import re | |
import pymongo | |
try: | |
from keys import * | |
except: | |
AUTH = os.environ["auth_token"] | |
SID = os.environ["account_sid"] | |
MONGO_URL = os.environ("mongo_url") | |
client = pymongo.MongoClient(MONGO_URL) | |
db = client.test | |
db = client['RainWater'] | |
collection = db['RainWaterCollection'] | |
def extract_image_base64(url): | |
if url != None: | |
response = requests.get(url).content | |
return base64.b64encode(response) | |
def extract_measurement_from_body(body): | |
if body != None: | |
digits = re.findall("\d+", body) | |
if len(digits) == 0: | |
return | |
return int(digits[0]) | |
def twilio_response_to_dict(event): | |
toKeep = {"ProfileName", "Body", "From", "MediaUrl0", "To"} | |
db = {k: None for k in toKeep} | |
for k, v in [(str(k.decode('utf-8')), str(v.decode('utf-8'))) for k, v in parse.parse_qsl(base64.b64decode(event.get("body")))]: | |
if k in toKeep: | |
db[k] = v | |
if db['MediaUrl0'] == None: | |
return db.get("From"), db.get("To"), "Reporting Failed. Please attach a photo." | |
measurement = extract_measurement_from_body(db.get("Body")) | |
if measurement == None: | |
return db.get("From"), db.get("To"), "No measurement found in text." | |
db['base64Image'] = extract_image_base64(db.get("MediaUrl0")) | |
db['measurement'] = measurement | |
db['date'] = datetime.now().strftime("%I:%M%p %B %d, %Y") | |
collection.insert_one(db) | |
return db.get("From"), db.get("To"), "Thanks for reporting! I've added your measurement of volume [{}] to our database!".format(measurement) | |
def lambda_handler(event, context): | |
fromVal, toVal, message = twilio_response_to_dict(event) | |
client = Client(SID, AUTH) | |
client.messages.create( | |
body=message, | |
from_=toVal, | |
to=fromVal, | |
) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment