Я студент университета относительно новичок в программировании на 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)