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')
Exemple #7
0
    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')
Exemple #9
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')
Exemple #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')
    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
        )
Exemple #13
0
    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)
Exemple #14
0
    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')
Exemple #16
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")
Exemple #17
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")
Exemple #18
0
    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')
Exemple #19
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')
Exemple #20
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")
Exemple #21
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')
    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')
Exemple #23
0
    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)
Exemple #24
0
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
Exemple #25
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")
Exemple #26
0
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
        )
Exemple #28
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")
Exemple #29
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')
    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')
Exemple #31
0
    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')
Exemple #33
0
    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')
Exemple #34
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')
Exemple #35
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')
    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')
Exemple #37
0
    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')