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_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 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) flash("Sent {} the survey".format(number), "success") except Exception as e: 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_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_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_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 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_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_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_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_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_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_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')