def add_volunteer(): def insert_row(): global google_client global spreadsheet_key row = {} row['name'] = f_name + ' ' + l_name row['phone'] = from_number row['response'] = response.upper() google_client.InsertRow(row, spreadsheet_key) response = Response() from_number = request.values.get('From') body = request.values.get('Body') client = twilio() global phone_number text_body = "" try: (f_name, l_name, response) = body.strip().split(' ') insert_row() text_body = "Thanks! Your response has been recorded." except ValueError: text_body = "Please enter a valid format." except Exception: text_body = "There was a problem recording your response. Please try again." client.messages.create(body=text_body, to=from_number, from_=phone_number) return str(response)
def do_auto_respond(): sms_message = request.form.get('sms-message', '') voice_message = request.form.get('voice-message', '') if len(sms_message) == 0 and len(voice_message) == 0: flash('Please provide a message', 'danger') return redirect('/auto-respond') sms_url = '' voice_url = '' if len(sms_message) > 0: twiml = '<Response><Sms>{}</Sms></Response>'.format(sms_message) sms_url = echo_twimlet(twiml) if len(voice_message) > 0: twiml = '<Response><Say>{}</Say></Response>'.format(voice_message) voice_url = echo_twimlet(twiml) try: client = twilio() client.phone_numbers.update(request.form['twilio_number'], friendly_name='[RRKit] Auto-Respond', voice_url=voice_url, voice_method='GET', sms_url=sms_url, sms_method='GET') flash('Auto-Respond has been configured', 'success') except Exception: flash('Error configuring number', 'danger') return redirect('/auto-respond')
def do_broadcast(): with open(os.path.join(app.root_path, app.config['NUMBERSDB']), 'r') as f: numbers = parse_numbers('\n'.join(json.loads(f.read()))) twiml = "<Response><Say>{}</Say></Response>" url = echo_twimlet(twiml.format(request.form.get('message', ''))) client = twilio() for number in numbers: try: if request.form['method'] == 'sms': client.messages.create( body=request.form['message'], to=number, from_=request.form['twilio_number'] ) else: client.calls.create( url=url, to=number, from_=request.form['twilio_number'] ) flash("Sent {} the message".format(number), 'success') except Exception: flash("Failed to send to {}".format(number), 'danger') return redirect('/broadcast')
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)) twiml = '<Response><Say>System is down for maintenance</Say></Response>' fallback_url = echo_twimlet(twiml) 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 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 do_broadcast(): numbers = parse_numbers(request.form.get('numbers', '')) twiml = "<Response><Say>{}</Say></Response>" url = echo_twimlet(twiml.format(request.form.get('message', ''))) media = check_is_valid_url(request.form.get('media', '')) client = twilio() for number in numbers: try: if request.form['method'] == 'sms': client.messages.create( to=number, from_=request.form.get('twilio_number', None), body=request.form.get('message', ''), media_url=media, ) else: client.calls.create( url=url, to=number, from_=request.form['twilio_number'] ) flash("Sent {} the message".format(number), 'success') except Exception: flash("Failed to send to {}".format(number), 'danger') return redirect('/broadcast')
def do_auto_respond(): sms_message = request.form.get("sms-message", "") voice_message = request.form.get("voice-message", "") if len(sms_message) == 0 and len(voice_message) == 0: flash("Please provide a message", "danger") return redirect("/auto-respond") sms_url = "" voice_url = "" if len(sms_message) > 0: twiml = "<Response><Sms>{}</Sms></Response>".format(sms_message) sms_url = echo_twimlet(twiml) if len(voice_message) > 0: twiml = "<Response><Say>{}</Say></Response>".format(voice_message) voice_url = echo_twimlet(twiml) try: client = twilio() client.phone_numbers.update( request.form["twilio_number"], friendly_name="[RRKit] Auto-Respond", voice_url=voice_url, voice_method="GET", sms_url=sms_url, sms_method="GET", ) flash("Auto-Respond has been configured", "success") except Exception: flash("Error configuring number", "danger") return redirect("/auto-respond")
def do_conference_line(): whitelist = parse_numbers(request.form.get('whitelist', '')) room = request.form.get('room', '') data = {} if len(whitelist): data['whitelist'] = whitelist if len(room): data['room'] = room qs = urlencode(data, True) url = "{}/handle?{}".format(request.base_url, qs) try: client = twilio() client.phone_numbers.update( request.form['twilio_number'], friendly_name='[RRKit] Conference Line', voice_url=url, voice_method='GET', fallback_voice_url=fallback(), fallback_voice_method='GET') flash('Conference Line configured', 'success') except Exception: flash('Error configuring number', 'danger') return redirect('/conference-line')
def do_survey(): numbers = parse_numbers(request.form['numbers']) survey = uuid.uuid4() url = "{}/handle?survey={}".format(request.base_url, survey) client = twilio() try: client.phone_numbers.update(request.form['twilio_number'], sms_url=url, sms_method='GET', friendly_name='[RRKit] Survey') except: flash('Unable to update number', 'danger') return redirect('/survey') from_number = client.phone_numbers.get(request.form['twilio_number']) flash('Survey is now running as {}'.format(survey), 'info') body = "{} Reply YES / NO".format(request.form['question']) for number in numbers: try: client.messages.create(body=body, to=number, from_=from_number.phone_number) flash('Sent {} the survey'.format(number), 'success') except Exception as e: flash("Failed to send to {}".format(number), 'danger') return redirect('/survey')
def do_noticeboard(): client = twilio() url = "{0}noticeboard/post".format(request.url_root) client.phone_numbers.update(request.form['twilio_number'], sms_url=url, sms_method='POST', friendly_name='[RRKit] Noticeboard') from_number = client.phone_numbers.get(request.form['twilio_number']) live_url = '{0}noticeboard/live/{1}'.format(request.url_root, from_number.phone_number) numbers = parse_numbers(request.form['numbers']) body = request.form.get('message', '').replace('{URL}', live_url) media = check_is_valid_url(request.form.get('media', '')) for num in numbers: client.messages.create(to=num, from_=from_number.phone_number, body=body, media_url=media) flash('Sent {0} the message'.format(num), 'success') return redirect('/noticeboard')
def add_volunteer(): def insert_row(): global google_client global spreadsheet_key row = {} row['name'] = f_name + ' ' + l_name row['phone'] = from_number row['response'] = response.upper() google_client.InsertRow(row, spreadsheet_key) response = Response() from_number = request.values.get('From') body = request.values.get('Body') client = twilio() global phone_number text_body = "" try: (f_name, l_name, response) = body.strip().split(' ') insert_row() text_body = "Thanks! Your response has been recorded." except ValueError: text_body = "Please enter a valid format." except Exception: text_body = "There was a problem recording your response. Please try again." client.messages.create( body=text_body, to=from_number, from_= phone_number ) return str(response)
def show_noticeboard_live(number=None): pusher_key = app.config.get('PUSHER_KEY', '') twilio_client = twilio() try: cleaned_number = number except: flash('We did not receive a correct number', 'danger') return redirect('/noticeboard') # Build a list of messages to our number that has media attached msgs = [] for m in twilio_client.messages.list(to=cleaned_number): if int(m.num_media) > 0: msgs.append(m) ''' Super janky because media is seperate from message resources. Let's mash the bits we want together and then add them to a list - Paul Hallett ''' msg_media_list = [] for m in msgs: d = {} d['image_url'] = twilio_client.media(m.sid).list()[0].uri d['body'] = m.body d['from'] = m.from_ msg_media_list.append(d) return render_template( 'noticeboard_live.html', pusher_key=pusher_key, messages=msg_media_list, number=number )
def show_noticeboard_live(number=None): pusher_key = app.config.get('PUSHER_KEY', '') twilio_client = twilio() try: cleaned_number = number except: flash('We did not receive a correct number', 'danger') return redirect('/noticeboard') # Build a list of messages to our number that has media attached msgs = [] for m in twilio_client.messages.list(to=cleaned_number): if int(m.num_media) > 0: msgs.append(m) ''' Super janky because media is seperate from message resources. Let's mash the bits we want together and then add them to a list - Paul Hallett ''' msg_media_list = [] for m in msgs: d = {} d['image_url'] = twilio_client.media(m.sid).list()[0].uri d['body'] = m.body d['from'] = m.from_ msg_media_list.append(d) return render_template('noticeboard_live.html', pusher_key=pusher_key, messages=msg_media_list, number=number)
def do_conference_line(): whitelist = parse_numbers(request.form.get('whitelist', '')) room = request.form.get('room', '') data = {} if len(whitelist): data['whitelist'] = whitelist if len(room): data['room'] = room qs = urlencode(data, True) url = "{}/handle?{}".format(request.base_url, qs) try: client = twilio() client.phone_numbers.update(request.form['twilio_number'], friendly_name='[RRKit] Conference Line', voice_url=url, voice_method='GET', fallback_voice_url=fallback(), fallback_voice_method='GET') flash('Conference Line configured', 'success') except Exception: flash('Error configuring number', 'danger') return redirect('/conference-line')
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)) twiml = "<Response><Say>System is down for maintenance</Say></Response>" fallback_url = echo_twimlet(twiml) 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 do_conference_line(): whitelist = parse_numbers(request.form.get("whitelist", "")) room = request.form.get("room", "") data = {} if len(whitelist): data["whitelist"] = whitelist if len(room): data["room"] = room qs = urlencode(data, True) url = "{}/handle?{}".format(request.base_url, qs) try: client = twilio() client.phone_numbers.update( request.form["twilio_number"], friendly_name="[RRKit] Conference Line", voice_url=url, voice_method="GET", fallback_voice_url=fallback(), fallback_voice_method="GET", ) flash("Conference Line configured", "success") except Exception: flash("Error configuring number", "danger") return redirect("/conference-line")
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 do_survey(): survey = uuid.uuid4() twilio_client = twilio() twilio_number = request.form['twilio_number'] numbers = parse_numbers(request.form['numbers']) sms_url = "{}/handle?survey={}".format(request.base_url, survey) try: twilio_client.phone_numbers.update(twilio_number, sms_url=sms_url, sms_method='GET', friendly_name='[RRKit] Survey') except: flash('Unable to update number', 'danger') return redirect('/survey') flash('Survey is now running as {}'.format(survey), 'info') kwargs = {} kwargs['body'] = "{} Reply YES / NO".format(request.form['question']) kwargs['from_'] = twilio_client.phone_numbers.get( twilio_number).phone_number kwargs['media'] = request.form.get('media', None) if request.form.get('media', None): kwargs.pop('media') for number in numbers: kwargs['to'] = number try: twilio_client.messages.create(**kwargs) flash('Sent {} the survey'.format(number), 'success') except Exception: flash("Failed to send to {}".format(number), 'danger') return redirect('/survey')
def do_survey(): numbers = parse_numbers(request.form["numbers"]) survey = uuid.uuid4() url = "{}/handle?survey={}".format(request.base_url, survey) client = twilio() try: client.phone_numbers.update( request.form["twilio_number"], sms_url=url, sms_method="GET", friendly_name="[RRKit] Survey" ) except: flash("Unable to update number", "danger") return redirect("/survey") from_number = client.phone_numbers.get(request.form["twilio_number"]) flash("Survey is now running as {}".format(survey), "info") body = "{} Reply YES / NO".format(request.form["question"]) for number in numbers: try: client.messages.create(body=body, to=number, from_=from_number.phone_number) flash("Sent {} the survey".format(number), "success") except Exception as e: flash("Failed to send to {}".format(number), "danger") return redirect("/survey")
def do_broadcast(): numbers = parse_numbers(request.form.get('numbers', '')) twiml = "<Response><Say>{}</Say></Response>" url = echo_twimlet(twiml.format(request.form.get('message', ''))) media = check_is_valid_url(request.form.get('media', '')) client = twilio() for number in numbers: try: if request.form['method'] == 'sms': client.messages.create( to=number, from_=request.form.get('twilio_number', None), body=request.form.get('message', ''), media_url=media, ) else: client.calls.create(url=url, to=number, from_=request.form['twilio_number']) flash("Sent {} the message".format(number), 'success') except Exception: flash("Failed to send to {}".format(number), 'danger') return redirect('/broadcast')
def do_noticeboard(): client = twilio() url = "{0}noticeboard/post".format(request.url_root) client.phone_numbers.update(request.form['twilio_number'], sms_url=url, sms_method='POST', friendly_name='[RRKit] Noticeboard') from_number = client.phone_numbers.get(request.form['twilio_number']) live_url = '{0}noticeboard/live/{1}'.format( request.url_root, from_number.phone_number ) numbers = parse_numbers(request.form['numbers']) body = request.form.get('message', '').replace('{URL}', live_url) media = check_is_valid_url(request.form.get('media', '')) for num in numbers: client.messages.create( to=num, from_=from_number.phone_number, body=body, media_url=media ) flash('Sent {0} the message'.format(num), 'success') return redirect('/noticeboard')
def show_noticeboard(): numbers = twilio_numbers() client = twilio() # Build a list of numbers that are being used for Noticeboard noticeboard_numbers = [] for p in client.phone_numbers.list(): if '[RRKit] Noticeboard' in p.friendly_name: noticeboard_numbers.append(p.phone_number) return render_template("noticeboard.html", url='{0}/live'.format(request.base_url), numbers=numbers, noticeboards=noticeboard_numbers)
def twilio_numbers(id_field="sid"): client = twilio() numbers = client.phone_numbers.list() result = [] for number in numbers: if number.friendly_name.startswith("[RRKit]"): display_name = "[{}] {}".format(number.friendly_name[len("[RRKit]") + 1 :], number.phone_number) else: display_name = number.phone_number result.append((getattr(number, id_field), display_name)) return result
def do_town_hall(): numbers = parse_numbers(request.form.get("numbers", "")) twiml = "<Response><Dial><Conference>{}</Conference></Dial></Response>" room = request.form.get("room", "town-hall") url = echo_twimlet(twiml.format(room)) client = twilio() for number in numbers: try: client.calls.create(url=url, to=number, from_=request.form["twilio_number"]) flash("{} contacted to join {}".format(number, room), "success") except Exception: flash("Unable to contact {}".format(number)) return redirect("/town-hall")
def twilio_numbers(id_field='sid'): client = twilio() numbers = client.phone_numbers.list() result = [] for number in numbers: if number.friendly_name.startswith('[RRKit]'): display_name = '[{}] {}'.format( number.friendly_name[len('[RRKit]') + 1:], number.phone_number) else: display_name = number.phone_number result.append((getattr(number, id_field), display_name)) return result
def show_noticeboard(): numbers = twilio_numbers() client = twilio() # Build a list of numbers that are being used for Noticeboard noticeboard_numbers = [] for p in client.phone_numbers.list(): if '[RRKit] Noticeboard' in p.friendly_name: noticeboard_numbers.append(p.phone_number) return render_template( "noticeboard.html", url='{0}/live'.format(request.base_url), numbers=numbers, noticeboards=noticeboard_numbers )
def do_broadcast(): numbers = parse_numbers(request.form.get("numbers", "")) twiml = "<Response><Say>{}</Say></Response>" url = echo_twimlet(twiml.format(request.form.get("message", ""))) client = twilio() for number in numbers: try: if request.form["method"] == "sms": client.messages.create(body=request.form["message"], to=number, from_=request.form["twilio_number"]) else: client.calls.create(url=url, to=number, from_=request.form["twilio_number"]) flash("Sent {} the message".format(number), "success") except Exception: flash("Failed to send to {}".format(number), "danger") return redirect("/broadcast")
def do_town_hall(): numbers = parse_numbers(request.form.get('numbers', '')) twiml = '<Response><Dial><Conference>{}</Conference></Dial></Response>' room = request.form.get('room', 'town-hall') url = echo_twimlet(twiml.format(room)) client = twilio() for number in numbers: try: client.calls.create(url=url, to=number, from_=request.form['twilio_number']) flash('{} contacted to join {}'.format(number, room), 'success') except Exception: flash('Unable to contact {}'.format(number)) return redirect('/town-hall')
def do_town_hall(): numbers = parse_numbers(request.form.get('numbers', '')) twiml = '<Response><Dial><Conference>{}</Conference></Dial></Response>' room = request.form.get('room', 'town-hall') url = echo_twimlet(twiml.format(room)) client = twilio() for number in numbers: try: client.calls.create( url=url, to=number, from_=request.form['twilio_number'] ) flash( '{} contacted to join {}'.format(number, room), 'success') except Exception: flash('Unable to contact {}'.format(number)) return redirect('/town-hall')
def do_forwarder(): normalized = convert_to_e164(request.form.get("number", "")) if not normalized: flash("Phone number is invalid, please try again", "danger") return redirect("/forwarder") twiml = "<Response><Dial>{}</Dial></Response>".format(normalized) url = echo_twimlet(twiml) try: client = twilio() client.phone_numbers.update( request.form["twilio_number"], friendly_name="[RRKit] Forwarder", voice_url=url, voice_method="GET" ) flash("Number configured", "success") except Exception: flash("Error configuring number", "danger") return redirect("/forwarder")
def do_forwarder(): normalized = convert_to_e164(request.form.get('number', '')) if not normalized: flash('Phone number is invalid, please try again', 'danger') return redirect('/forwarder') twiml = '<Response><Dial>{}</Dial></Response>'.format(normalized) url = echo_twimlet(twiml) try: client = twilio() client.phone_numbers.update(request.form['twilio_number'], friendly_name='[RRKit] Forwarder', voice_url=url, voice_method='GET') flash('Number configured', 'success') except Exception: flash('Error configuring number', 'danger') return redirect('/forwarder')
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)) twiml = '<Response><Say>System is down for maintenance</Say></Response>' fallback_url = echo_twimlet(twiml) 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 do_survey(): numbers = parse_numbers(request.form['numbers']) survey = uuid.uuid4() url = "{}/handle?survey={}".format(request.base_url, survey) client = twilio() try: client.phone_numbers.update(request.form['twilio_number'], sms_url=url, sms_method='GET', friendly_name='[RRKit] Survey') except: flash('Unable to update number', 'danger') return redirect('/survey') from_number = client.phone_numbers.get(request.form['twilio_number']) flash('Survey is now running as {}'.format(survey), 'info') body = "{} Reply YES / NO".format(request.form['question']) for number in numbers: try: client.messages.create( body=body, to=number, from_=from_number.phone_number, media_url=request.form.get('media', None) ) flash('Sent {} the survey'.format(number), 'success') except Exception: flash("Failed to send to {}".format(number), 'danger') return redirect('/survey')
def do_survey(): survey = uuid.uuid4() twilio_client = twilio() twilio_number = request.form['twilio_number'] numbers = parse_numbers(request.form['numbers']) sms_url = "{}/handle?survey={}".format(request.base_url, survey) try: twilio_client.phone_numbers.update( twilio_number, sms_url=sms_url, sms_method='GET', friendly_name='[RRKit] Survey' ) except: flash('Unable to update number', 'danger') return redirect('/survey') flash('Survey is now running as {}'.format(survey), 'info') kwargs = {} kwargs['body'] = "{} Reply YES / NO".format(request.form['question']) kwargs['from_'] = twilio_client.phone_numbers.get(twilio_number).phone_number kwargs['media'] = request.form.get('media', None) if request.form.get('media', None): kwargs.pop('media') for number in numbers: kwargs['to'] = number try: twilio_client.messages.create(**kwargs) flash('Sent {} the survey'.format(number), 'success') except Exception: flash("Failed to send to {}".format(number), 'danger') return redirect('/survey')
def do_simplehelp(): data = parse_form(request.form) url = "{}/handle?{}".format(request.base_url, urlencode(data, True)) twiml = "<Response><Say>System is down for maintenance</Say></Response>" fallback_url = echo_twimlet(twiml) 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 do_volunteer_signup(): def create_spreadsheet(): global google_client global spreadsheet_key (user, password) = get_google_creds(app.config) google_client = gdata.docs.client.DocsClient( source='VolunteerSignup') google_client.client_login(user, password, source='VolunteerSignup', service='writely') document = gdata.docs.data.Resource(type='spreadsheet', title=request.form.get( 'file-name', 'signup')) document = google_client.CreateResource(document) spreadsheet_key = document.GetId().split("%3A")[1] def update_column_names(): global google_client global spreadsheet_key google_client = gdata.spreadsheet.service.SpreadsheetsService() google_client.ClientLogin(user, password) google_client.UpdateCell(1, 1, 'name', spreadsheet_key) google_client.UpdateCell(1, 2, 'phone', spreadsheet_key) google_client.UpdateCell(1, 3, 'response', spreadsheet_key) numbers = parse_numbers(request.form.get('numbers', '')) # Update phone number url for replys url = "{}/handle?{}".format(request.base_url, request.query_string) twiml = '<Response><Say>System is down for maintenance</Say></Response>' fallback_url = echo_twimlet(twiml) try: client = twilio() client.phone_numbers.update( request.form['twilio_number'], friendly_name='[RRKit] Volunteer Signup', sms_url=url, sms_method='POST', sms_fallback_url=fallback_url, sms_fallback_method='GET') except Exception as e: print(e) flash('Error configuring phone number', 'danger') create_spreadsheet() update_column_names() client = twilio() # Since the value of the form is a PN sid need to fetch the number global phone_number phoneNumber = client.phone_numbers.get(request.form['twilio_number']) phone_number = phoneNumber.phone_number for number in numbers: try: client.messages.create(body=request.form['message'], to=number, from_=phoneNumber.phone_number) flash("Sent {} the message.".format(number), 'success') except Exception: flash("Failed to send to {}".format(number), 'danger') return redirect('/volunteer-signup')
def do_volunteer_signup(): def create_spreadsheet(): global google_client global spreadsheet_key (user, password) = get_google_creds(app.config) google_client = gdata.docs.client.DocsClient(source='VolunteerSignup') google_client.client_login(user, password, source='VolunteerSignup', service='writely') document = gdata.docs.data.Resource(type='spreadsheet', title=request.form.get('file-name', 'signup')) document = google_client.CreateResource(document) spreadsheet_key = document.GetId().split("%3A")[1] def update_column_names(): global google_client global spreadsheet_key google_client = gdata.spreadsheet.service.SpreadsheetsService() google_client.ClientLogin(user, password) google_client.UpdateCell(1, 1, 'name', spreadsheet_key) google_client.UpdateCell(1, 2, 'phone', spreadsheet_key) google_client.UpdateCell(1, 3, 'response', spreadsheet_key) numbers = parse_numbers(request.form.get('numbers', '')) # Update phone number url for replys url = "{}/handle?{}".format(request.base_url, request.query_string) twiml = '<Response><Say>System is down for maintenance</Say></Response>' fallback_url = echo_twimlet(twiml) try: client = twilio() client.phone_numbers.update(request.form['twilio_number'], friendly_name='[RRKit] Volunteer Signup', sms_url=url, sms_method='POST', sms_fallback_url=fallback_url, sms_fallback_method='GET') except Exception as e: print(e) flash('Error configuring phone number', 'danger') create_spreadsheet() update_column_names() client = twilio() # Since the value of the form is a PN sid need to fetch the number global phone_number phoneNumber = client.phone_numbers.get(request.form['twilio_number']) phone_number = phoneNumber.phone_number for number in numbers: try: client.messages.create( body=request.form['message'], to=number, from_= phoneNumber.phone_number ) flash("Sent {} the message.".format(number), 'success') except Exception: flash("Failed to send to {}".format(number), 'danger') return redirect('/volunteer-signup')