def receive(data: dict): """ Handler for webhook (currently for postback and messages) Parses out the message and bubbles it up to the processing layer """ log("Facebook message received: " + str(data)) if data.get('object') == 'page': log('Page data received!' + str(data['object'])) for entry in data.get('entry', None): log('Examining entry :' + str(entry)) for messaging_event in entry.get("messaging", None): log('Examining messaging_event:' + str(messaging_event)) # get all the messages if messaging_event.get('message', False): # We retrieve the Facebook user ID of the sender fb_id = messaging_event['sender']['id'] # check if user object is in current list, if not add them current_user = processing.USERS.find_user(fb_id) if not current_user: current_user = User('fb', fb_id) lat, long = extract_coords_from_messaging_event( messaging_event) if lat: current_user.add_coordinates(lat, long) print("USER IN STATE : " + current_user.state) processing.user_location_update(current_user) else: # We retrieve the message content text = messaging_event["message"]["text"] log("Received message: " + text + " from sender id: " + fb_id) # append latest message to user object current_user.append_message(text) # create or find the user object, bubble user up to processing processing.process_user_message(current_user) else: # Returned another event log('Received an invalid message on the facebook endpoint: ' + data) return 'Server Error', 500 return 'OK', 200