Exemple #1
0
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