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')
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')
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')
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
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
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')
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
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
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')
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
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')
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')
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")
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")
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')
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')
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')
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')
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
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')
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
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")
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
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")
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')
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")
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')