Ejemplo n.º 1
0
    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')
Ejemplo n.º 2
0
    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')
Ejemplo n.º 3
0
    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')
Ejemplo n.º 4
0
    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")
Ejemplo n.º 5
0
    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")
Ejemplo n.º 6
0
    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')
Ejemplo n.º 7
0
    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')
Ejemplo n.º 9
0
    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')
Ejemplo n.º 10
0
    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')
Ejemplo n.º 11
0
    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')
Ejemplo n.º 12
0
    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')
Ejemplo n.º 13
0
    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')
Ejemplo n.º 14
0
    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")
Ejemplo n.º 15
0
    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")
Ejemplo n.º 16
0
    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')
Ejemplo n.º 17
0
    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')
Ejemplo n.º 18
0
    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')
Ejemplo n.º 19
0
    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')
Ejemplo n.º 20
0
    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')
Ejemplo n.º 21
0
    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')