在 Twilio 中嵌套 if else

问题描述

我正在使用 Twilio 和 python 制作一个自动的 whatsapp 回复机器人,但是我遇到了问题并且无法在其中使用嵌套的 if else

from flask import Flask,request
import requests
from twilio.twiml.messaging_response import MessagingResponse

app = Flask(__name__)

@app.route('/mybot',methods = ['POST'])

def mybot():
    incoming_msg = request.values.get('Body','').lower()
    resp = MessagingResponse()
    msg = resp.message()
    responded = False

    print(incoming_msg)
    if incoming_msg == "list of doctors":
        msg.body("We have Dr. Phil with us today")
        responded = True

    if "book appointment" in str.lower(incoming_msg) or "see a doctor" in str.lower(incoming_msg):
            msg.body("Which department would you like to visit?\nPress :-\n1 - General Surgery\n2 - Internal Medicine\n3 - Gynaecology\n4 - Obstetrics\n5 - Ophthalmology\n6 - Orthopaedics\n7 - Dermatology Venereology & Leprology\n8 - ENT\n9 - Paediatric")
            if (incoming_msg == "1" or "general surgery" in incoming_msg): # This statement gets ignored
                msg.body("General Surgery")
            responded = True

其中 if (incoming_msg == "1" or "general surgery" in incoming_msg): 是问题陈述。

有什么办法可以解决这个问题吗?

解决方法

在这种情况下,您不能嵌套它们。用户的每个回答都是一条新的 SMS/WhatsApp 消息,并且会再次调用 mybot() 函数/webhook,因此在第二次调用中,您将不会预约看到incoming_msg 中的医生,但只是一个号码或部门名称。

试试这个:

def mybot():
    incoming_msg = request.values.get('Body','').lower()
    resp = MessagingResponse()
    msg = resp.message()
    responded = False

    if incoming_msg == "list of doctors":
        msg.body("We have Dr. Phil with us today")
        responded = True

    if "book appointment" in str.lower(incoming_msg) or "see a doctor" in str.lower(incoming_msg):
        msg.body("Which department would you like to visit?\nPress :-\n1 - General Surgery\n2 - Internal Medicine\n3 - Gynaecology\n4 - Obstetrics\n5 - Ophthalmology\n6 - Orthopaedics\n7 - Dermatology Venereology & Leprology\n8 - ENT\n9 - Paediatric")
        responded = True

    if incoming_msg == "1" or "general surgery" in incoming_msg:
        msg.body("General Surgery")
        responded = True

    [...]

只要您的所有选项/输入都是不同的,这就会起作用。