Twilio Voice Gather + Django Regex Validation

Как использовать регулярные выражения для проверки пользовательского ввода, собранного через dtmf? Например: Я хочу применить проверку к нескольким представлениям в одном и том же файле views.py. Если пользовательский ввод прошел проверку, то перенаправить его на следующий вид. Если пользовательский ввод не прошел проверку, то используйте глагол Say, чтобы выдать сообщение об ошибке и перенаправить на текущий вид, чтобы пользователь мог попробовать еще раз.

Пример:
Пожалуйста, нажмите 123
Пользователь нажимает 384
Ввод проверяется по regex и не проходит валидацию
Скажите: Извините, но это неправильно.
перенаправить на текущее представление, чтобы пользователь мог повторить попытку
Пожалуйста, нажмите 123.

Пример:
Пожалуйста, нажмите 123
Пользователь нажимает 123
Ввод проверяется по regex и проходит валидацию
Пользователь перенаправляется к следующему представлению

Я использую:
Python 3.9.5
Django 3.2.8
twilio 7.1.0

Просто для ясности. Я спрашиваю не о том, какой regex использовать, а о том, как реализовать использование любого regex для целей валидации. Как мне заставить django выполнить проверку?

Спасибо!

Здесь евангелист-разработчик Twilio.

Ваш код примера не совсем правильный, вы не используете <Redirect> после <Gather>, чтобы перевести разговор дальше, вы должны добавить атрибут action со следующим URL.

def question_1():
    response = VoiceResponse()
    gather = Gather(input='dtmf', action='/question_2')
    gather.say('Blah blah blah.')
    response.append(gather)
    print(response)

Это будет означать, что когда пользователь вводит свои цифры, они отправляются как часть запроса к /question_2, как параметр Digits.

Итак, в /question_2 необходимо проверить, был ли ответ правильным. Если да, то вы можете вернуть следующий TwiML, в противном случае вы можете вернуться к /question_1.

def question_2():
    digits = request.POST.Digits
    response = VoiceResponse()
    if test_question_1(digits):
        gather = Gather(input='dtmf', action='/question_3')
        gather.say('Ask question 2.')
        response.append(gather)
    else:
        response.redirect("/question_1")
    print(response)

В приведенном выше коде не рассматривается проверка на соответствие цифрам, но это то место, где вы могли бы выполнить такую проверку.

Вернуться на верх