def sms_handler(request): r = Response() body = request.POST["Body"] print body penalty_message = get_penalty_message(body) r.sms(penalty_message) return r
def testAddConferenceConvenceMethod(self): """ add a conference to a dial, conviently""" r = Response() d = r.addDial() d.addConference("My Room") r = self.strip(r) self.assertEquals(r, '<?xml version="1.0" encoding="utf-8"?><Response><Dial><Conference>My Room</Conference></Dial></Response>')
def handle_twilio_request(): """Respond to incoming Twilio requests.""" now = strftime("%Y-%m-%d %H:%M:%S", gmtime()) call_number = request.args.get('Called') call_number = phonenumbers.parse("+" + call_number, None) call_number = phonenumbers.format_number(call_number, phonenumbers.PhoneNumberFormat.E164) agent = models.Agent.query.filter_by(phone=call_number).first() conference_name = '{time}-{name}'.format(time=now, name=agent.username) response = Response() with response.dial() as r: r.conference(conference_name, beep=False, waitUrl='', startConferenceOnEnter="true", endConferenceOnExit="true") conf = models.Conference(name=conference_name, status="waiting", agent_id=agent.id) models.add(conf) models.commit() return str(response)
def coming_up(request): sessions = Session.objects.filter(is_public=True, event=Event.objects.current()) r = Response() inmsg = request.POST.get('Body').strip() or 'next' if inmsg.lower() == 'next': messages = _as_sms(Session.objects.next()) elif inmsg.lower() == 'now': messages = _as_sms(Session.objects.current()) elif inmsg.lower() == 'lunch': try: now = timezone.now() messages = _as_sms(Session.objects.filter(start_time__day=now.day, start_time__month=now.month, start_time__year=now.year, title__icontains='lunch')[0]) except IndexError: messages = ["No lunch on the schedule for today, sorry.\n"] else: try: ts = dateparse(inmsg) if ts.hour is 0 and ts.minute is 0: messages = ["A lot of stuff can happen in a whole day! Try specifying a time.\n"] else: messages = _as_sms(sessions.filter(start_time__lte=ts, end_time__gte=ts)) except: messages = ["Welcome to TCamp!\n\nOptions:\nnow: Current sessions\nnext: Next timeslot\nlunch: When's lunch?\n<time>, eg. 4:30pm: What's happening at 4:30?\n"] l = len(messages) for i, message in enumerate(messages): r.sms(message + '\n(%d/%d)' % (i+1, l)) return r
def verify_sms(request): from_number = request.POST.get("From", None) from_text = request.POST.get("Body", None) msg = game_logic(from_number, from_text) r = Response() r.message(msg) return r
def sms_personal(request): name = request.POST.get('Body', '') msg = 'Hey %s, how are you today?' % (name) r = Response() r.message(msg) return r
def sms(request): body = request.POST.get("Body", "") reg = RegistroSMS.objects.get(pk=body) msg = "Hola %s, que tal %s" % (reg.comprador.first_name, reg.vendedor.username) r = Response() r.sms(msg) return r
def conference(request, name, muted=None, beep=None, start_conference_on_enter=None, end_conference_on_exit=None, wait_url=None, wait_method=None, max_participants=None): """See: http://www.twilio.com/docs/api/twiml/conference. Usage:: # urls.py urlpatterns = patterns('', # ... url(r'^conference/?(P<name>\\w+)/$', 'django_twilio.views.conference', {'max_participants': 10}), # ... ) """ r = Response() r.dial().conference( name = name, muted = muted, beep = beep, startConferenceOnEnter = start_conference_on_enter, endConferenceOnExit = end_conference_on_exit, waitUrl = wait_url, waitMethod = wait_method, ) return r
def handle_replay_message(request): digits = request.GET['digits'] msg = get_fizzbuzz_message(int(digits)) twilio_response = Response() twilio_response.say(msg) return twilio_response
def do_ringdown(): numbers = parse_numbers(request.form.get('numbers', '')) data = { 'stack': numbers, 'sorry': request.form.get('sorry', '') } url = "{}/handle?{}".format(request.base_url, urlencode(data, True)) r = Response() r.say('System is down for maintenance') fallback_url = echo_twimlet(r.toxml()) try: client = twilio() client.phone_numbers.update(request.form['twilio_number'], friendly_name='[RRKit] Ringdown', voice_url=url, voice_method='GET', voice_fallback_url=fallback_url, voice_fallback_method='GET') flash('Number configured', 'success') except Exception: flash('Error configuring number', 'danger') return redirect('/ringdown')
def testToFromAction(self): """ Test the to, from, and status callback""" r = Response() r.append(twiml.Sms("Hello, World", to=1231231234, sender=3453453456, statusCallback="example.com?id=34&action=hey")) r = self.strip(r) self.assertEquals(r, '<?xml version="1.0" encoding="utf-8"?><Response><Sms from="3453453456" statusCallback="example.com?id=34&action=hey" to="1231231234">Hello, World</Sms></Response>')
def testAddNumberConvenienceStatusCallbackEvent(self): """ add a number to a dial, convience method """ r = Response() d = r.addDial() d.addNumber("1231231234", statusCallback="http://example.com", statusCallbackEvent="initiated completed") r = self.strip(r) assert_equal(r, '<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Number statusCallback="http://example.com" statusCallbackEvent="initiated completed">1231231234</Number></Dial></Response>')
def receive(request): logger.debug('Get params: {0}'.format(request.GET)) logger.debug('Post params: {0}'.format(request.POST)) # { # u'Body': [u'Helo toto'], # u'FromZip': [u''], # u'SmsStatus': [u'received'], # u'FromCountry': [u'CA'], # u'FromCity': [u'MONTREAL'], # u'ApiVersion': [u'2010-04-01'], # u'To': [u'+15144180546'], # u'From': [u'+15146258937'], # u'ToZip': [u''], # u'ToCountry': [u'CA'], # u'ToState': [u'QC'], # u'AccountSid': [u'AC791403f3ec0098401e629d6aaf6b44bd'], # u'SmsSid': [u'SMb928abbc11c19f6e9f5215ec15e151c8'], # u'ToCity': [u'MONTREAL'], # u'FromState': [u'QC'], # u'SmsMessageSid': [u'SMb928abbc11c19f6e9f5215ec15e151c8'] # } from_number = request.POST.get('From', None) if from_number in callers: r = Response() r.sms('Voici ton message, peanut! ({0})'.format(request.POST.get('Body', ''))) return r else: return HttpResponseNotFound('Could not find your stuff')
def handle_selection(request, slug): voicemailbox = get_object_or_404(VoicemailBox, slug=slug) chunk = voicemailbox.work.chunk_set.filter(number=request.POST.get('Digits')) if chunk.chunksubmission: r = Response() r.say( "Thank you. " "Please start reading, " "when you are done, you can hang up. " ) action = reverse('handle-recording', kwargs={'slug': slug}) r.record(action=action, timeout=20, maxLength=360, playBeep=True) @csrf_exempt def handle_recording(request, slug=None): voicemailbox = get_object_or_404(VoicemailBox, slug=slug) voicemailbox.collection.add_voicemail( audio_url=request.POST.get('RecordingUrl'), title='recorded in %s for %s' % (location, voicemailbox.target_location), location=voicemailbox.target_location, ) return HttpResponse()
def get(self, request, client_call, pks): pks = pks.split(",") try: shelter = Shelter.objects.get(pk=pks[0]) except Shelter.DoesNotExist: pks = ",".join(pks[1:]) if pks: return redirect(reverse("phone:start_shelter_call", kwargs={"pks": pks, "client_call": client_call})) site = Site.objects.get_current() client.calls.create( to=shelter.phone_number, from_=settings.TWILIO_CALLER_ID, url=urljoin( "http://" + site.domain, reverse("phone:verify_shelter_availability", kwargs={"client_call": client_call, "pk": pks[0]}), ), method="GET", status_callback="http://%s/phone/shelter_call_callback/%s/%s/" % (site.domain, client_call, ",".join(pks[1:])), status_method="GET", ) r = Response() r.say("We are contacting %s. Please hold." % shelter.name) r.enqueue(name="waiting_for_shelter", wait_url="http://twimlets.com/holdmusic?Bucket=com.twilio.music.ambient") return r
def test_add_queue(self): """ add a queue to a dial """ r = Response() d = r.dial() d.append(twiml.Queue("The Cute Queue")) r = self.strip(r) assert_equal(r, '<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Queue>The Cute Queue</Queue></Dial></Response>')
def testSipUsernamePass(self): """ should redirect the call """ r = Response() d = r.dial() d.sip('*****@*****.**', username='******', password='******') r = self.strip(r) assert_equal(r, '<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Sip password="******" username="******">[email protected]</Sip></Dial></Response>')
def voice(request): """Create a Twilio response object which gathers the callers input""" r = Response() with r.gather(action='/respond/') as g: g.say('Please enter a number to play phone buzz. Press the pound key when finished.', voice='woman') g.pause(length=10) return r
def do_simplehelp(): data = parse_form(request.form) url = "{}/handle?{}".format(request.base_url, urlencode(data, True)) r = Response() r.say('System is down for maintenance') fallback_url = echo_twimlet(r.toxml()) try: client = twilio() client.phone_numbers.update( request.form['twilio_number'], friendly_name='[RRKit] Simple Help Line', voice_url=url, voice_method='GET', voice_fallback_url=fallback_url, voice_fallback_method='GET' ) flash('Help menu configured', 'success') except Exception as e: print(e) flash('Error configuring help menu', 'danger') return redirect('/simplehelp')
def testSip(self): """ should redirect the call """ r = Response() d = r.dial() d.sip('*****@*****.**') r = self.strip(r) assert_equal(r, '<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Sip>[email protected]</Sip></Dial></Response>')
def phone_vote(request): body = request.POST.get('Body', None) from_number = request.POST.get('From', None) r = Response() message = '' if body and body.isdigit(): choice_id = int(body) choice = Choice.objects.filter(id=choice_id) if choice: c = choice[0] vc = VoterChoice.objects.filter(choice__poll=c.poll, phone_number=from_number) if vc: message = 'Sorry, you have already voted in this poll.' \ + ' You cannot vote twice.' elif c.poll.status() == 'ONGOING': c.votes += 1 c.save() vc_obj = VoterChoice(choice=c, phone_number=from_number) vc_obj.save() message = 'Thanks for your vote!' elif c.poll.status() == 'PENDING': message = 'Sorry, your vote is invalid.' \ + ' This poll has not yet begun.' else: message = 'Sorry, your vote is invalid.' \ + ' This poll has already finished.' if not message: message = 'Please text a vote number correctly to vote.' r.sms(message) return r
def testAddNumberConvience(self): """add a number to a dial, convience method""" r = Response() d = r.addDial() d.addNumber("1231231234") r = self.strip(r) self.assertEquals(r, '<?xml version="1.0" encoding="utf-8"?><Response><Dial><Number>1231231234</Number></Dial></Response>')
def get_sms_score(request): r = Response() return_number = request.POST['From'] print return_number try: team_id = request.POST['Body'] team = Team.objects.get(pk=team_id) scores = Score.objects.filter(team=team) sms_string = "Team:"+team.name +"\n" for score in scores: sms_string = sms_string + "Event: " +score.event.name+ " Score:"+str(score.score)+"\n" except Team.DoesNotExist: sms_string = "We're sorry, The team number entered does not exist." except ValueError: sms_string= "Invalid Team Number" r.sms(sms_string) return r
def handle_third_response(request): digits = request.POST.get('Digits', '') twilio_response_three=Response() #twilio_response_three.say(digits) twilio_response_three.play('http://travellingscholar.com/ammi/message6.mp3') twilio_response_three.gather(action='respond4', numDigits=1) return twilio_response_three
def giveHelp(person_one, request): """ Method for ending a conversation """ help_message = "" help_message += "End conversation: %s Unsubscribe: %s Help: %s" % (end_command, unsubscribe_command, help_command) r = Response() r.message(msg=help_message, to=person_one.phone_number) return r
def handle_noticeboard_inbound(): pusher_key = app.config.get('PUSHER_KEY', None) pusher_secret = app.config.get('PUSHER_SECRET', None) pusher_app_id = app.config.get('PUSHER_APP_ID', None) try: p = Pusher(pusher_app_id, pusher_key, pusher_secret) p['rrk_noticeboard_live'].trigger( 'new_message', { 'image': request.values.get('MediaUrl0', None), 'body': request.values.get('Body', None), 'from': request.values.get('From', None) } ) except: return '<Response />' to = request.values.get('To', '') r = Response() r.message( '''Thank you, your image has been posted to {0}noticeboard/live/{1}'''.format(request.url_root, to)) return r.toxml()
def sms(request): name = request.POST.get('Body', '') msg = 'Hey %s' r = Response() r.message(msg) return r
def testAddNumber(self): """add a number to a dial""" r = Response() d = twiml.Dial() d.append(twiml.Number("1231231234")) r.append(d) r = self.strip(r) self.assertEquals(r, '<?xml version="1.0" encoding="utf-8"?><Response><Dial><Number>1231231234</Number></Dial></Response>')
def sms(request): enrolleeNumber = request.POST.get('Body', '') msg = 'Enrollment for %s confirmed' % (enrolleeNumber) r = Response() r.message(msg) enrollmentMessage = 'You have been enrolled in this progam. Stay tuned!' sendMessage(enrolleeNumber, enrollmentMessage) return r
def testAddConference(self): """ add a conference to a dial""" r = Response() d = twiml.Dial() d.append(twiml.Conference("My Room")) r.append(d) r = self.strip(r) self.assertEquals(r, '<?xml version="1.0" encoding="utf-8"?><Response><Dial><Conference>My Room</Conference></Dial></Response>')
def testSipUsernamePass(self): """ should redirect the call """ r = Response() d = r.dial() d.sip('*****@*****.**', username='******', password='******') r = self.strip(r) assert_equal( r, '<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Sip password="******" username="******">[email protected]</Sip></Dial></Response>' )
def testAddNumberConvenience(self): """ add a number to a dial, convience method """ r = Response() d = r.addDial() d.addNumber("1231231234") r = self.strip(r) assert_equal( r, '<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Number>1231231234</Number></Dial></Response>' )
def gather_digits(request): twilio_response = Response() with twilio_response.gather(action='/respond/', numDigits=1) as g: g.say('Press one to hear a song, two to receive an SMS') g.pause(length=1) g.say('Press one to hear a song, two to receive an SMS') return twilio_response
def handle_replay_message(request): digits = request.GET['digits'] print 'through replay', digits msg = get_fizzbuzz_message(int(digits)) twilio_response = Response() twilio_response.say(msg) return twilio_response
def test_add_queue(self): """ add a queue to a dial """ r = Response() d = r.dial() d.append(twiml.Queue("The Cute Queue")) r = self.strip(r) assert_equal( r, '<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Queue>The Cute Queue</Queue></Dial></Response>' )
def testAddConferenceConvenceMethod(self): """ add a conference to a dial, conviently """ r = Response() d = r.addDial() d.addConference("My Room") r = self.strip(r) assert_equal( r, '<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Conference>My Room</Conference></Dial></Response>' )
def setUp(self): r = Response() r.enqueue("TestEnqueueAttribute", action="act", method='GET', waitUrl='wait', waitUrlMethod='POST') xml = r.toxml() #parse twiml XML string with Element Tree and inspect #structure tree = ET.fromstring(xml) self.conf = tree.find("./Enqueue")
def testSayFrench(self): """ should say hello monkey """ r = Response() r.append( twiml.Say(u("n\xe9cessaire et d'autres")) ) # it works on python 2.6 with the from __future__ import unicode_literal assert_equal( text_type(r), '<?xml version="1.0" encoding="UTF-8"?><Response><Say>nécessaire et d\'autres</Say></Response>' )
def setUp(self): r = Response() with r.dial() as dial: dial.conference("TestConferenceAttributes", beep=False, waitUrl="", startConferenceOnEnter=True, endConferenceOnExit=True) xml = r.toxml() #parse twiml XML string with Element Tree and inspect structure tree = ET.fromstring(xml) self.conf = tree.find(".//Conference")
def testSip(self): """ should redirect the call""" r = Response() d = r.dial() d.sip('*****@*****.**') r = self.strip(r) self.assertEquals( r, '<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Sip>[email protected]</Sip></Dial></Response>' )
def setUp(self): r = Response() with r.dial() as dial: dial.queue("TestQueueAttribute", url="", method='GET') xml = r.toxml() #parse twiml XML string with Element Tree and inspect #structure tree = ET.fromstring(xml) self.conf = tree.find(".//Queue")
def testNestedSayPlayPause(self): """ a gather with a say, play, and pause""" r = Response() g = twiml.Gather() g.append(twiml.Say("Hey")) g.append(twiml.Play("hey.mp3")) g.append(twiml.Pause()) r.append(g) r = self.strip(r) self.assertEquals(r, '<?xml version="1.0" encoding="UTF-8"?><Response><Gather><Say>Hey</Say><Play>hey.mp3</Play><Pause /></Gather></Response>')
def testAddNumber(self): """add a number to a dial""" r = Response() d = twiml.Dial() d.append(twiml.Number("1231231234")) r.append(d) r = self.strip(r) self.assertEquals( r, '<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Number>1231231234</Number></Dial></Response>' )
def testAddConference(self): """ add a conference to a dial""" r = Response() d = twiml.Dial() d.append(twiml.Conference("My Room")) r.append(d) r = self.strip(r) self.assertEquals( r, '<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Conference>My Room</Conference></Dial></Response>' )
def gather_digits(request): msg = 'Oye. Press a number to enter the world of Fizz Buzz. You can press maximum two digits' twilio_response = Response() with twilio_response.gather(action='/respond/', numDigits=2) as g: g.say(msg) g.pause(length=1) g.say(msg) return twilio_response
def sms(request): phone = request.POST.get('From', '') r = Response() if Caller.objects.filter(phone=phone).exists(): # DOES USER EXIST? caller = Caller.objects.get(phone=phone) if caller.isActive(): # AND IS NOT EXPIRED recieved_message = request.POST.get('Body', '') Message.objects.create_message(sender=caller, body=recieved_message) return HttpResponse(r.toxml(), content_type='text/xml')
def answer(request): logger.debug('Get params: {0}'.format(request.GET)) logger.debug('Post params: {0}'.format(request.POST)) from_number = request.POST.get('From', None) if from_number in callers: resp = Response() resp.say("Hello peanut") return str(resp) else: return HttpResponseNotFound()
def testSipUri(self): """ should redirect the call """ r = Response() d = r.dial() s = d.sip() s.uri('*****@*****.**') r = self.strip(r) assert_equal( r, '<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Sip><Uri>[email protected]</Uri></Sip></Dial></Response>' )
def handle_recording(): """Play back the caller's recording.""" recording_url = request.values.get("RecordingUrl", None) resp = Response() if recording_url: resp.say("Thanks for howling... take a listen to what you howled.") resp.play(recording_url) resp.say("Goodbye.") else: resp.say("An error has occurred. Goodbye.") return str(resp)
def handle_call(conference_id): conference = models.Conference.query.get(conference_id) response = Response() with response.dial() as r: r.conference(conference.name, beep=False, waitUrl='', startConferenceOnEnter="true", endConferenceOnExit="false") return str(response)
def log_contact(contact, user): time = timezone.now() LogEntry.objects.create(contact=contact, logged_by=user, time=timezone.now(), kind='in person') contact.last_contact = time contact.save() r = Response() r.message("Updated {} ({})".format(contact.name, contact.get_complete_url())) return HttpResponse(r.toxml(), content_type='text/xml')
def setUp(self): r = Response() with r.enqueue(None, workflowSid="Workflow1") as e: e.task('{"selected_language":"en"}', priority="10", timeout="50") xml = r.toxml() # parse twiml XML string with Element Tree and inspect # structure tree = ET.fromstring(xml) self.enqueue = tree.find("./Enqueue") self.task = self.enqueue.find(".//Task")
def testAddNumberConvenienceStatusCallbackEvent(self): """ add a number to a dial, convience method """ r = Response() d = r.addDial() d.addNumber("1231231234", statusCallback="http://example.com", statusCallbackEvent="initiated completed") r = self.strip(r) assert_equal( r, '<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Number statusCallback="http://example.com" statusCallbackEvent="initiated completed">1231231234</Number></Dial></Response>' )
def twilio_call_transfer_end(request, call_id): report = get_object_or_404(WhipReport, id=int(call_id)) report.call_status = "connection-ended" report.call_log["finished"] = dict(request.POST) report.call_log["finished"]["_request"] = get_request_log_info(request) report.save() resp = TwilioResponse() resp.say( "Your call to Congress has ended. Thank you for being a great citizen. Goodbye." ) return resp
def testActionMethod(self): """ Test the action and method parameters on Sms""" r = Response() r.append( twiml.Sms("Hello", method="POST", action="example.com?id=34&action=hey")) r = self.strip(r) self.assertEquals( r, '<?xml version="1.0" encoding="UTF-8"?><Response><Sms action="example.com?id=34&action=hey" method="POST">Hello</Sms></Response>' )
def twilio_call_transfer_ended(request, calllog_id): call_log = get_object_or_404(CallLog, id=int(calllog_id)) call_log.status = "connection-ended" call_log.log["finished"] = dict(request.POST) call_log.log["finished"]["_request"] = get_request_log_info(request) call_log.save() resp = TwilioResponse() resp.say( "Your call to Congress has ended. Thank you for being a good citizen. Goodbye." ) return resp
def testSayConvienceMethod(self): """convenience method: should say have a woman say hello monkey and loop 3 times and be in french""" r = Response() r.addSay("Hello Monkey", loop=3, voice=twiml.Say.MAN, language=twiml.Say.FRENCH) r = self.strip(r) self.assertEquals( r, '<?xml version="1.0" encoding="UTF-8"?><Response><Say language="fr" loop="3" voice="man">Hello Monkey</Say></Response>' )
def testNestedSayPlayPauseConvience(self): """ a gather with a say, play, and pause""" r = Response() g = r.addGather() g.addSay("Hey") g.addPlay("hey.mp3") g.addPause() r = self.strip(r) self.assertEquals( r, '<?xml version="1.0" encoding="UTF-8"?><Response><Gather><Say>Hey</Say><Play>hey.mp3</Play><Pause /></Gather></Response>' )
def testToFromAction(self): """ Test the to, from, and status callback""" r = Response() r.append( twiml.Sms("Hello, World", to=1231231234, sender=3453453456, statusCallback="example.com?id=34&action=hey")) r = self.strip(r) self.assertEquals( r, '<?xml version="1.0" encoding="UTF-8"?><Response><Sms from="3453453456" statusCallback="example.com?id=34&action=hey" to="1231231234">Hello, World</Sms></Response>' )
def sms_ahoy_reply(): """Respond to incoming messages with a friendly SMS.""" number = request.form['From'] message_body = request.form['Body'] # Start our response resp = Response() # Add a message resp.message("Hype, {}. This works! You just sent: {}".format( number, message_body)) return str(resp)