Маршрутизация SMS-ответов Twilio в Python для разговорного бота - PullRequest
0 голосов
/ 25 июня 2018

Я студент университета относительно новичок в программировании на Python. Я пытался создать диалогового бота, который позволит пользователю планировать встречи с помощью SMS в Python.

Я следил за многими онлайн-учебниками по Python Twilio SMS, такими как официальное руководство Twilio. Я не могу понять, как направить ответ SMS-сообщения Twilio на соответствующий маршрут. Например, пользователь должен отправлять текстовые сообщения либо SCHEDULE, RESCHEDULE, CHECK, либо DROP, а приложение должно направлять их на соответствующий маршрут с некоторой логикой для обработки запроса (и ответа). с дальнейшим смс сообщением). Если они не вводят одно из четырех указанных слов, приложение должно перенаправить пользователя обратно на маршрут /inbound, чтобы попросить его снова уточнить, что они выбирают один из четырех приемлемых вариантов. Последние пару дней я действительно тяжело боролся с этим, запутавшись в routes и в том, стоит ли использовать message = client.messages.create или response = MessagingResponse() API Twilio. Я использую Flask для работы с возможностями веб-сервера.

Кроме того, знаете ли вы, как передать параметр по маршруту redirect, чтобы я мог использовать эти данные на следующем маршруте и сохранить их в базе данных?

Спасибо большое. Я очень ценю всю помощь, которую я могу получить.

from twilio.twiml.messaging_response import Body, Message, Redirect, MessagingResponse
from flask import Flask, request, session

app = Flask(__name__)


# Main function triggered by a POST request by ngrok. When an SMS is received, Twilio will send the POST.
@app.route('/inbound', methods=['POST'])
def inbound():
    """ Use Twilio API to reply to texts """
    sender = request.form['From']
    message = request.form['Body']
    recipient = request.form['To']              # Recipient Phone Number
    message_id = request.form['MessageSid']     # Twilio message id
    response = MessagingResponse()              # init a Twilio response
    formatted = message.lower().strip()         # formulate answer to message
    if "schedule" == formatted:
        reply = 'Hi, my name is Cletus. I\'d like to help you schedule your appointment today. What is your name? ' \
                'Please format \"First Last\" (ex: John Smith).'
        response.message(reply)
        response.redirect('/schedule')
        # write to db
    elif "reschedule" == formatted:
        reply = 'Hi, my name is Cletus. I\'d like to help you reschedule your appointment today. What is your name? ' \
                'Please format \"First Last\" (ex: John Smith).'
        response.message(reply)
        response.redirect('/reschedule')
    elif "appointments" == formatted:
        reply = 'Hi, my name is Cletus. I\'d like to help you check your upcoming appointment. What is your name? ' \
                'Please format \"First Last\" (ex: John Smith).'
        response.message(reply)
        response.redirect('/check')
    elif "drop" == formatted:
        reply = 'Hi, my name is Cletus. I\'d like to help you cancel your appointment. What is your name? ' \
                'Please format \"First Last\" (ex: John Smith).'
        response.message(reply)
        response.redirect('/drop')
    else:
        reply = 'Hi, my name is Cletus. How can I help you? You can text RESCHEDULE to reschedule you appointment, ' \
                'DROP to cancel your appointment, and APPOINTMENTS to receive a list of your currently scheduled ' \
                'appointments. Have a great day!'
        response.message(reply)
        response.redirect('/inbound')
    return str(response)


@app.route('/schedule', methods=['POST'])
def schedule():
    print('Finally routing to schedule')
    sender = request.form['From']
    message = request.form['Body']
    recipient = request.form['To']  # Recipient Phone Number
    message_id = request.form['MessageSid']  # Twilio message id
    response = MessagingResponse()  # init a Twilio response
    formatted = message.lower().strip()


@app.route('/reschedule', methods=['POST'])
def reschedule():
    sender = request.form['From']
    message = request.form['Body']
    recipient = request.form['To']  # Recipient Phone Number
    message_id = request.form['MessageSid']  # Twilio message id
    response = MessagingResponse()  # init a Twilio response
    formatted = message.lower().strip()


@app.route('/check', methods=['POST'])
def check():
    sender = request.form['From']
    message = request.form['Body']
    recipient = request.form['To']  # Recipient Phone Number
    message_id = request.form['MessageSid']  # Twilio message id
    response = MessagingResponse()  # init a Twilio response
    formatted = message.lower().strip()


@app.route('/drop', methods=['POST'])
def cancel():
    sender = request.form['From']
    message = request.form['Body']
    recipient = request.form['To']  # Recipient Phone Number
    message_id = request.form['MessageSid']  # Twilio message id
    response = MessagingResponse()  # init a Twilio response
    formatted = message.lower().strip()


if __name__ == '__main__':
    app.run(debug = True)
...