Exemplo n.º 1
0
def record_action():
    post_args = request.form
    print post_args

    # Fetch record url
    record_url = post_args.get('RecordUrl', '')
    record_duration = post_args.get('RecordingDuration', '')
    record_ms = post_args.get('RecordingStartMs', '')
    from_number = post_args.get('From', '')
    to_number = post_args.get('To', '')

    if record_duration == "-1":
        response = plivo.Response()
        return Response(str(response), mimetype='text/xml')

    recording_id = record_url.split('/')[-1].split('.mp3')[0]

    rd = get_redis_connection()

    email_body = VOICEMAIL_EMAIL_BODY % (to_number, from_number, record_url,
                                         record_duration)
    sms_body = VOICEMAIL_SMS_BODY % (to_number, from_number, record_url)
    hipchat_body = VOICEMAIL_HIPCHAT_BODY % (
        to_number, from_number, record_url, record_url, record_duration)

    rd.set(recording_id + 'email_body', email_body)
    rd.set(recording_id + 'sms_body', sms_body)
    rd.set(recording_id + 'hipchat_body', hipchat_body)

    response = plivo.Response()
    return Response(str(response), mimetype='text/xml')
Exemplo n.º 2
0
def record_dial_action():
    post_args = request.form
    print post_args

    # Fetch record url
    record_url = post_args.get('RecordUrl', '')
    record_duration = post_args.get('RecordingDuration', '')
    from_number = post_args.get('From', '')
    to_number = post_args.get('To', '')
    call_uuid = post_args.get('CallUUID', '')

    email_body = CALL_RECORDING_EMAIL_BODY % (to_number, from_number,
                                              record_url)
    sms_body = CALL_RECORDING_SMS_BODY % (to_number, from_number, record_url)
    hipchat_body = CALL_RECORDING_HIPCHAT_BODY % (to_number, from_number,
                                                  record_url, record_url)

    rd = get_redis_connection()

    voice_mail = rd.get('voice_mail_%s' % call_uuid)
    if voice_mail:
        response = plivo.Response()
        return Response(str(response), mimetype='text/xml')

    rd.set('call_recording_email_body' + call_uuid, email_body)
    rd.set('call_recording_sms_body' + call_uuid, sms_body)
    rd.set('call_recording_hipchat_body' + call_uuid, hipchat_body)

    response = plivo.Response()
    return Response(str(response), mimetype='text/xml')
Exemplo n.º 3
0
def conference():
    r = plivoxml.Response()
    r.addSpeak("Thanks for calling Plivo training conference!")
    conferenceName = "Plivo Test Conference"
    r.addConference(conferenceName)
    print(r.to_xml())
    return Response(str(r), mimetype='text/xml')
Exemplo n.º 4
0
def inbound():
    _from = request.values.get('CLID', None)
    to = request.values.get('To', None)

    if _from is None:
        _from = request.values.get('From', "")
    dial_music = request.values.get('DialMusic', "")
    destination = request.values.get('DESTINATION', "").strip()

    r = plivoxml.Response()

    if not destination:
        r.addHangup()
    else:
        d = r.addDial(callerId=_from, dialMusic=dial_music)
        if destination.isdigit():
            d.addNumber(destination)
        elif '@' in destination:
            d.addUser(destination)
        else:
            d.addUser('%s@%s' % (to, destination))

    ## Add logic for hostname and IP

    response = make_response(r.to_xml())
    response.headers['Content-Type'] = 'text/xml'
    return response
Exemplo n.º 5
0
def answer(args):
    if args.get('caller_id', None) is None:
        current_app.logger.warn("missing caller_id arg (url param)")
    if args.get('sip_username', None) is None:
        current_app.logger.warn("missing sip_username arg (url param)")
    current_app.logger.info("plivo answer url args:\n" + str(args))
    p_res = plivoxml.Response()
    to_key = ('ForwardTo' if 'ForwardTo' in args else 'To')
    if to_key not in args:
        p_res.addHangup()
        return _conv_p_res(p_res)
    dial = p_res.addDial(
        callerId=args.get('caller_id', ''),
        callerName=args.get('CallerName', ''),
    )
    if args[to_key][:4] == 'sip:':
        # unused, according to logs
        dial.addUser(args[to_key])
    elif (args[to_key] == args.get('caller_id', None)
          and args.get('sip_username', None) is not None):
        current_app.logger.info("call from: " + args.get('CallerName', '') +
                                '\n')
        dial.addUser('sip:' + args['sip_username'] + '@phone.plivo.com')
    else:
        dial.addNumber(args[to_key])
    return _conv_p_res(p_res)
def speak_xml():

    # Generate a Speak XML with the details of the text to play on the call.
    body1 = u'This is English!'
    params1 = {  
        'language': "en-GB", 
        'voice': "MAN"
    }
    r = plivoxml.Response()
    r.addSpeak(body1, **params1)
    body2 = u'Ce texte généré aléatoirement peut-être utilisé dans vos maquettes'
    params2 = {
        'language': "fr-FR"
    }
    r.addSpeak(body2, **params2)
    body3 = u'Это случайно сгенерированный текст может быть использован в макете'
    params3 = {
        'language': "ru-RU",
        'voice' : "MAN"
    }
    r.addSpeak(body3, **params3)
    ret_resp = make_response(r.to_xml())
    ret_resp.headers["Content-Type"] = "text/xml"
    print r.to_xml()
    return ret_resp
Exemplo n.º 7
0
def tree():
    response = plivoxml.Response()
    digit = request.form.get('Digits')

    if digit == "1":
        text = u"This message is being read out in English"
        params = {
            'language': "en-GB",
        }
        response.addSpeak(text,**params)

    elif digit == "2":
        text = u"Ce message est lu en français"
        params = {
            'language': "fr-FR",
        }
        response.addSpeak(text,**params)

    elif digit == "3":
        text = u"Это сообщение было прочитано в России"
        params = {
            'language': "ru-RU",
        }
        response.addSpeak(text,**params)

    else:
        response.addSpeak(WRONG_INPUT_MESSAGE)

    print response.to_xml()
    return Response(str(response), mimetype='text/xml')
Exemplo n.º 8
0
def inbound_sms():
    from_number = request.values.get('From')
    to_number = request.values.get('To')
    text = request.values.get('Text')
    print text

    body = ""
    try:
        body = text_response(text.split())
    except:
        body = "No text entered. Text a key word or phrase."

    if body == "":
        body = "'" + text + "' not found. Try another word or phrase."
    params = {
        "src": to_number,
        "dst": from_number,
    }

    resp = plivoxml.Response()
    resp.addMessage(body, **params)

    ret_response = make_response(resp.to_xml())
    ret_response.headers["Content-type"] = "text/xml"

    return ret_response
Exemplo n.º 9
0
def inbound_sms():
    # Sender's phone number
    from_number = request.values.get('From')
    # Receiver's phone number - Plivo number
    to_number = request.values.get('To')
    # The text which was received
    text_message = request.values.get('Text')
    best_location = find_best_loc(shelter_coordinates,
                                  find_long_lat(text_message))
    resp = plivoxml.Response()
    body = directions(best_location)
    params = {
        'src': '18053992192',  # Sender's phone number
        'dst': '15712550606',
        'callbackUrl':
        'http://ec2-54-200-133-41.us-west-2.compute.amazonaws.com:5000/SMS',  # URL that is notified by Plivo when a response is available and to which the response is sent
        'callbackMethod': "POST"  # The method used to notify the callbackUrl
    }
    # Message added
    resp.addMessage(body, **params)
    ret_response = make_response(resp.to_xml())
    ret_response.headers["Content-type"] = "text/xml"

    # Prints the XML
    print(resp.to_xml())
    return ret_response
Exemplo n.º 10
0
def transcription():
    get_args = request.args
    print get_args

    transcription = get_args.get('transcription', '')
    recording_id = get_args.get('recording_id', '')

    rd = get_redis_connection()

    email_body = rd.get(recording_id + 'email_body')
    sms_body = rd.get(recording_id + 'sms_body')
    hipchat_body = rd.get(recording_id + 'hipchat_body')

    rd.delete(recording_id + 'email_body')
    rd.delete(recording_id + 'sms_body')
    rd.delete(recording_id + 'hipchat_body')

    recording_transcribed = 'Recording transcribed - %s' % transcription
    email_body = email_body + recording_transcribed
    sms_body = sms_body + recording_transcribed
    hipchat_body = hipchat_body + recording_transcribed

    q.enqueue(send_email, VOICEMAIL_EMAIL_RECEIVERS, VOICEMAIL_EMAIL_SUBJECT,
              email_body)
    q.enqueue(send_sms, VOICEMAIL_SMS_RECEIVERS, sms_body)
    q.enqueue(send_hipchat,
              VOICEMAIL_HIPCHAT_ROOMS,
              hipchat_body,
              color='gray')

    response = plivo.Response()
    return Response(str(response), mimetype='text/xml')
Exemplo n.º 11
0
def send_message(type, from_number, to_number, body):
    if type == "Afyadevice":
        response = {
            "payload": {
                "success": "true",
                "task": "send",
                "messages": [{
                    "to": from_number,
                    "message": body,
                }]
            }
        }
        ret_response = json.dumps(response)

    else:
        resp = plivoxml.Response()
        params = {
            'src': to_number,  # Sender's phone number
            'dst': from_number,  # Receiver's phone Number
            'callbackUrl':
            "http://afya.herokuapp.com/report/",  # URL that is notified by Plivo when a response is available and to which the response is sent
            'callbackMethod':
            "GET"  # The method used to notify the callbackUrl
        }
        # Message added
        resp.addMessage(body, **params)
        ret_response = make_response(resp.to_xml())
        ret_response.headers["Content-type"] = "text/xml"
        # Prints the XML
        print resp.to_xml()
        # Returns the XML
    return ret_response
Exemplo n.º 12
0
def ivr():
    response = plivoxml.Response()
    if request.method == 'GET':
        # Go to http://plivo.com/docs/xml/getdigits/ for more details on GetDigits xml
        getdigits_action_url = url_for('ivr', _external=True)
        getDigits = plivoxml.GetDigits(action=getdigits_action_url,
                                       method='POST',
                                       timeout=7,
                                       numDigits=1,
                                       retries=1)
        getDigits.addSpeak(IVR_MESSAGE)
        response.add(getDigits)
        response.addSpeak(NO_INPUT_MESSAGE)

        return Response(str(response), mimetype='text/xml')
    elif request.method == 'POST':
        digit = request.form.get('Digits')

        if digit == "1":
            # Fetch a random joke using the Reddit API.
            joke = joke_from_reddit()
            response.addSpeak(joke)
        elif digit == "2":
            # Listen to a song
            response.addPlay(PLIVO_SONG)
        else:
            response.addSpeak(WRONG_INPUT_MESSAGE)

        return Response(str(response), mimetype='text/xml')
Exemplo n.º 13
0
def ivr_next():
    response = plivoxml.Response()
    digit = request.values.get('Digits')
    print(digit)
    if digit == "1":
        # Read out a text.
        response.addSpeak("You pressed one")
    elif digit == "2":
        # Patch to one number
        response.addSpeak("You are now being patched..")
        forwardNumber = "919952899700"
        params = {'dialMusic': 'Real'}
        response.addDial(**params).addNumber(forwardNumber)
    elif digit == "3":
        # call record
        response.addSpeak("Talk to the hand.")
        record_params = {
            'action': 'http://requestb.in/15j1zi21',
            'maxLength': '50',
            'finishOnKey': '*'
        }
        response.addRecord(**record_params)
        response.addSpeak("You dummy.")
    else:
        response.addSpeak("I'm not angry with you, I'm just disappointed!")

    return Response(str(response), mimetype='text/xml')
Exemplo n.º 14
0
def inbound_sms(request):
    # Sender's phone number
    request = request.POST
    from_number = request['From']
    # Receiver's phone number - Plivo number
    to_number = request['To']
    # The text which was received
    text_message = request['Text']
    loc = find_long_lat(text_message)
    best_location = find_best_loc(
        [x.address for x in Shelter.objects.all() if len(x.address) > 0], loc)

    resp = best_location
    body = directions(best_location, text_message, MyHTMLParser())
    params = {
        'src': to_number,  # Sender's phone number
        'dst': from_number,
        'callbackUrl':
        'http://ec2-54-200-133-41.us-west-2.compute.amazonaws.com:5000/sms/',  # URL that is notified by Plivo when a response is available and to which the response is sent
        'callbackMethod': "POST"  # The method used to notify the callbackUrl
    }
    # Message added
    body = resp
    r = plivoxml.Response()
    r.addMessage(body, **params)
    print r.to_xml()
    print {'Address': text_message, 'latitude': loc[0], 'longitude': loc[1]}
    requests.post(
        'http://ec2-54-200-133-41.us-west-2.compute.amazonaws.com:8002/shelters/heatdata',
        data={
            'Address': text_message,
            'latitude': loc[0],
            'longitude': loc[1]
        })
    return HttpResponse(str(r), content_type="text/xml")
Exemplo n.º 15
0
def guide_accept_sound(request):
	if request.method=="POST" and validate_signature(request, auth_token):
		intro = "A potential customer is calling from Saga. Remember that this call is recorded. Please press 1 to connect."
		r = plivoxml.Response()
		r.addWait(length=2)
		r.addSpeak(intro)
		print r.to_xml()
		return HttpResponse(str(r),content_type="text/xml")
Exemplo n.º 16
0
def call_hunting():
    r = plivoxml.Response()
    d = r.addDial()
    d.addUser("sip:[email protected]")
    d.addNumber("2222222222")
    d.addNumber("3333333333")
    print r.to_xml()
    return Response(str(r), mimetype='text/xml')
Exemplo n.º 17
0
def speak():
    # Enter the message you want to play
    text = "Congratulations! You just made a text to speech app on Plivo cloud!"
    parameters = {'loop': 1, 'language': "en-US", 'voice': "WOMAN"}

    response = plivoxml.Response()
    response.addSpeak(text, **parameters)

    return Response(str(response), mimetype='text/xml')
Exemplo n.º 18
0
def delayed_wait():
    r = plivoxml.Response()
    params = {
        'length': "10"  # Time to wait in seconds
    }
    r.addWait(**params)
    r.addSpeak("Hello")
    print r.to_xml()
    return Response(str(r), mimetype='text/xml')
Exemplo n.º 19
0
def conference():
    response = plivoxml.Response()
    response.addSpeak(
        'Hello. This is intel code fest. Please eat lots of pizza')

    conference_name = "demo"
    response.addConference(conference_name)

    return Response(str(response), mimetype='text/xml')
Exemplo n.º 20
0
def forward():
    if request.method == 'GET':
        frm = request.args['From']
        to = request.args['To']
        text = request.args['Text']
        numbers = request.args.get('Numbers')
        emails = request.args.get('Emails')
    elif request.method == 'POST':
        frm = request.form['From']
        to = request.form['To']
        text = request.form['Text']
        numbers = request.form.get('Numbers')
        emails = request.form.get('Emails')
    r = plivoxml.Response()
    if numbers or emails:
        if numbers:
            print ("Sending SMS")

            text = 'From: '+str(frm) + '; ' + text
            numbers = numbers.split(',')
            numbers = '<'.join(numbers)
            params = {
               'src' : str(to),
               'dst' : numbers,
               'type' : 'sms',
               }
            r.addMessage(text, **params)

        if emails:
            print ("Sending emails")

            frmEmail = str(frm) + '@' + mail_domain_incoming

            #Unmodified Text Here.
            try:
                redis_client.set(frm, 'True')
                redis_client.expire(frm, DEFAULT_KEY_EXPIRY)
            except:
                pass

            send_email(str(emails), frmEmail, frm, text)

            emails = emails.split(',')
            emails = '<'.join(emails)
            text = 'From: '+str(frm) + '; ' + text
            params = {
               'src' : str(frmEmail),
               'dst' : emails,
               'type' : 'sms',
               }
            #TODO: Add Email Type as Valid.
            #r.addMessage(body, **params)
        else:
            r.addHangup()
    response = make_response(r.to_xml())
    response.headers["Content-type"] = "text/xml"
    return response
Exemplo n.º 21
0
def beep_det():
    r = plivoxml.Response()
    params = {
        'length': "100",  # Time to wait in seconds
        'beep': "true"
    }
    r.addWait(**params)
    r.addSpeak("Hello")
    print r.to_xml()
    return Response(str(r), mimetype='text/xml')
Exemplo n.º 22
0
def basic_wait():
    r = plivoxml.Response()
    r.addSpeak("I will wait for 10 seconds")
    params = {
        'length': "10"  # Time to wait in seconds
    }
    r.addWait(**params)
    r.addSpeak("I just waited 10 seconds")
    print r.to_xml()
    return Response(str(r), mimetype='text/xml')
def connect():

    # Generate a Dial XML with the details of the number to call 
   
	body = "Connecting your call.."
	r = plivoxml.Response()
	r.addSpeak(body)
	number = "2222222222"
	d = r.addDial()
	d.addNumber(number)
def speak_xml():

    # Generate a Speak XML with the details of the text to play on the call.

    body = "Hello, Welcome to Plivo."
    r = plivoxml.Response()
    r.addSpeak(body)
    ret_resp = make_response(r.to_xml())
    ret_resp.headers["Content-Type"] = "text/xml"
    print r.to_xml()
    return ret_resp
Exemplo n.º 25
0
def call_guide(request, format=None):#Direction=inbound&From=13172097889&CallerName=%2B13172097889&BillRate=0.0085&To=13174275522&CallUUID=2e9856d8-135e-11e7-b774-dbf71cdc2903&CallStatus=ringing&Event=StartApp
	if request.method=="POST" and validate_signature(request, auth_token):
		intro = "Thank you for using Saga! Please enter the five digit code of the guide you wish to speak with."
		NO_INPUT_MESSAGE = "Sorry, I didn't catch that. Please hangup and try again later."
		r = plivoxml.Response()
		r.addSpeak(intro)
		getDigits = plivoxml.GetDigits(action=root + reverse('telecom:connect-guide'), method='POST', timeout=7, numDigits=5, retries=1)
		r.add(getDigits)
		r.addSpeak(NO_INPUT_MESSAGE)
		print r.to_xml()
		return HttpResponse(str(r),content_type="text/xml")
Exemplo n.º 26
0
def play_xml():

    # Generate a Play XML with the details of audio file to play during the call

    body = "https://s3.amazonaws.com/plivocloud/Trumpet.mp3"
    r = plivoxml.Response()
    r.addPlay(body)
    ret_resp = make_response(r.to_xml())
    ret_resp.headers["Content-Type"] = "text/xml"
    print r.to_xml()
    return ret_resp
Exemplo n.º 27
0
def connect_guide(request):
	if request.method=="POST" and validate_signature(request, auth_token):
		r = plivoxml.Response()
		code = request.POST.get("Digits")#TODO route back to call guide if they enter in the wrong code (self referential?)
		print code
		guideName = "Nick Saggese" #TODO dynamically getting guidename and number, dynamically change number on page to track new users
		guideNumber = "13172964334"
		msg = "Please wait while we connect you to " + guideName + " This call may be recorded for quality assurance."
		r.addSpeak(msg)
		r.addDial(action=root+reverse('telecom:connect-guide-result'), method='POST', confirmKey="1", confirmSound=root + reverse('telecom:guide-accept-sound'), timeout=60, callerName="Saga", callerId="3174275522").addNumber(guideNumber)
		print r.to_xml()
		return HttpResponse(str(r),content_type="text/xml")
Exemplo n.º 28
0
def conference():
    response = plivoxml.Response()
    response.addSpeak('You will now be placed into a demo conference.')
    params = {
    'enterSound' : "beep:1", # Used to play a sound when a member enters the conference
    'callbackUrl' : "https://morning-ocean-4669.herokuapp.com/response/conf_callback/", # If specified, information is sent back to this URL
    'callbackMethod' : "GET" # Method used to notify callbackUrl
    }
    conference_name = "demo" # Conference Room name
    response.addConference(conference_name, **params)
    print response.to_xml()
    return Response(str(response), mimetype='text/xml')
Exemplo n.º 29
0
def connect_guide_result(request):
	if request.method=="POST" and validate_signature(request, auth_token):

		if request.POST.get('DialStatus') == "completed":
			return HttpResponse("success")
		else:
			intro = "I'm sorry, but it looks like this guide is busy at the moment. It might be best to try again later. Thanks again for using Saga." #TODO lead monitoring and scheduling these calls, would be good to pass the guide name though
			r = plivoxml.Response()
			# r.addWait(length=2)
			r.addSpeak(intro)
			print r.to_xml()
			return HttpResponse(str(r),content_type="text/xml")
Exemplo n.º 30
0
def speak_xml(stan):
    # Generate a Speak XML with the details of the text to play on the call.
    r = plivoxml.Response()

    # Add Speak XML Tag with English text
    body1 = '%s' % stan
    params1 = {
        'language': "en-GB",  # Language used to read out the text.
        'voice': "WOMAN"  # The tone to be used for reading out the text.
    }
    r.addSpeak(body1, **params1)
    print(r.to_xml)
    return Response(str(r), mimetype='text/xml')