예제 #1
0
def reply():
    app.logger.info("Inbound sms: %s" % str(request.form))
    # valiate user
    success = authorize.validate(str(request.form.get('From', None)))
    if not success:
        app.logger.error(
            str(request.form.get('From', None)) + "not authorized")
        return abort(401)
    app.logger.info(str(request.form.get('From', None)) + "authorized")

    # Rate limited
    user = str(request.form.get('From', None))
    if not rateLimiter.check(user):
        rateLimiter.new_user(user)
    request_premitted = rateLimiter.consume(user, 1)

    if not request_premitted:
        app.logger.error("%s is rate limited" % user)
        return "Rate limited. Try again in several minutes", 400

    # actual response
    resp = MessagingResponse()
    smsValid = validateSMS(request.form)
    if not smsValid:
        app.logger.error("Inbound sms validation failed")
        resp.message("Cannot search for a photo %s" % Response.emoji("cry"))
        return str(resp), 200, {'Content-Type': 'text/xml'}

    sms = parseSMS(request.form)

    ### Choose Photo
    app.logger.info("Selecting photo from dynamodb")
    selected_photo = SelectPhotoTask.RunNormal(flickr_client, sms)
    # selected_photo = SelectPhotoTask.RunRandom(flickr_client, sms) # for random pics

    ###
    res = Response.generateTwilioResponse(sms, selected_photo)
    # Add a message
    msg = resp.message(res['body'])
    if res.get('media', None):
        msg.media(res['media'])

    app.logger.info("Replying to %s with %s" % (res['from'], str(resp)))
    return str(resp), 200, {'Content-Type': 'text/xml'}
예제 #2
0
def test():
    return Response.emoji()