示例#1
0
def handle_mqtt_message(client, userdata, message):
    data = dict(topic=message.topic, payload=message.payload.decode())
    # print(data)
    message = data["payload"]
    from_no = data["topic"].split("/")[1]
    print(message, from_no)

    if sparrow.is_sparrow_request(message):
        sparrow.handle_sparrow_request(from_no, message)
        return

    receiver = db.getReceiver(from_no)
    print(receiver)
    if receiver == db.IBM_RECEIVER:
        if sparrow.is_command(message):
            sparrow.handle_command(from_no, message)
            return

        reply = chatbot.handle_message(from_no, message)
        for message in reply:
            mqtt.publish(data["topic"].replace("receive", "response"), message)
            sleep(2)
        return
    else:
        messaging.send_message(receiver, message)
        return
示例#2
0
def handle_sparrow_request(from_no, sparrow_message):
    message = sparrow_message.split(' ', 1)[1].strip() # Remove first word (@sparrow here)
    if is_command(message):
        handle_command(from_no, message)
    else:
        replies = chatbot.handle_message(from_no, message)
        messaging.send_messages(from_no, replies)
示例#3
0
def listen_input():
    message = request.values.get('Body', None)
    from_no = request.values.get('From', None)
    print(message, from_no)

    #Handling Media content
    num_media = int(request.values.get("NumMedia"))
    if num_media > 0:
        media_url = request.values.get(f'MediaUrl0')
        mime_type = request.values.get(f'MediaContentType0')
        print(media_url, mime_type)
        if num_media > 1:
            messaging.send_message(
                from_no,
                "Multiple media cannot be sent. Sending only first media")

    #Handling @statefarm commands
    if statefarm.is_statefarm_request(message):
        t = Thread(target=statefarm.handle_statefarm_request,
                   args=(
                       from_no,
                       message,
                   ))
        t.start()
        # statefarm.handle_statefarm_request(from_no, message)
        return str(MessagingResponse())

    receiver = db.getReceiver(from_no)
    if receiver == db.IBM_RECEIVER:
        if statefarm.is_command(message):
            t = Thread(target=statefarm.handle_command,
                       args=(from_no, message))
            t.start()
            return str(MessagingResponse())
        elif num_media > 0:
            reply = "Sorry! Our Automated chatbot doesn't support Media at this point."
        elif message == "":
            reply = "Invalid format. Your message is empty!"
        else:
            replies = chatbot.handle_message(from_no, message)
            if len(replies) > 1:
                t = Thread(target=messaging.send_messages,
                           args=(from_no, replies))
                t.start()
                return (str(MessagingResponse()))
            else:
                reply = replies[0]
        resp = MessagingResponse()
        resp.message(reply)
        return str(resp)
    else:
        if num_media > 0:
            messaging.send_message_with_media(from_no, receiver, message,
                                              media_url, mime_type)
        elif message == "":
            messaging.send_message(from_no, "Invalid message. Can't be sent")
        else:
            messaging.send_message(receiver, message)
        return str(MessagingResponse())
示例#4
0
def handleVoiceResponse():
    #resp = VoiceResponse()
    soundURL = (request.values['RecordingUrl'])
    print(request.values)
    calltext = request.values['TranscriptionText']
    caller = request.values['From']

    msgBody = chatbot.handle_message(caller, calltext)
    messaging.send_messages(caller, msgBody)

    return 'success'