Spaces:
Runtime error
Runtime error
File size: 3,065 Bytes
48c823d |
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 72 73 74 75 76 77 78 79 80 81 82 83 84 |
import os
from datetime import datetime
from dotenv import load_dotenv
from supabase import create_client
load_dotenv()
SUPA = create_client(os.environ.get('SUPABASE_URL'), os.environ.get('SUPABASE_KEY'))
def log_message_data_through_supabase_api(table_name, log_data):
return SUPA.table(table_name).insert(log_data).execute()
def format_datetime_in_isoformat(dt):
return getattr(dt.now(), 'isoformat', lambda x: None)()
def get_or_create_supabase_entry(table_name, insert_data, check_variable=None):
""" Checks whether a project or contact exists in the database and adds if one is not found
Input:
- table_name: str- the name of the table in Supabase that is being examined
- insert_data: json - the data to insert
- check_variable: str/None - the specific field to examine for existing matches
Result
- logged_data - an object with the Supabase data
"""
if table_name == 'contact':
resp = SUPA.table('contact').select("*").eq("original_contact_id", insert_data['original_contact_id']).eq("project", insert_data['project']).execute()
else:
resp = SUPA.table(table_name).select("*").eq(check_variable, insert_data[check_variable]).execute()
if len(resp.data) == 0:
logged_data = log_message_data_through_supabase_api(table_name, insert_data)
else:
logged_data = resp
return logged_data
def prepare_message_data_for_logging(message_data, nlu_response):
""" Builds the message data for each table and ensures it's logged to the database
Input:
- message_data: an object with the full message data from Turn.io/Whatsapp
"""
project_data = {
'name': "Rori",
# Autogenerated fields: id, created_at, modified_at
}
project_data_log = get_or_create_supabase_entry('project', project_data, 'name')
contact_data = {
'project': project_data_log.data[0]['id'], # FK
'original_contact_id': message_data['contact_uuid'],
'urn': "",
'language_code': "en",
'contact_inserted_at': format_datetime_in_isoformat(datetime.now())
# Autogenerated fields: id, created_at, modified_at
}
contact_data_log = get_or_create_supabase_entry('contact', contact_data)
del message_data['author_id']
message_data = {
'contact': contact_data_log.data[0]['id'], # FK
'original_message_id': message_data['message_id'],
'text': message_data['message_body'],
'direction': message_data['message_direction'],
'sender_type': message_data['author_type'],
'channel_type': "whatsapp / turn.io",
'message_inserted_at': message_data['message_inserted_at'],
'message_modified_at': message_data['message_updated_at'],
'message_sent_at': format_datetime_in_isoformat(datetime.now()),
'nlu_response': nlu_response,
'request_object': message_data
# Autogenerated fields: created_at, modified_at
}
message_data_log = log_message_data_through_supabase_api('message', message_data) |