Python: вызов функции из результатов другой функции для Chatbot - PullRequest
0 голосов
/ 31 декабря 2018

Я создаю чат-бота с pymessenger и wit.at.Я принимаю значение через одну сущность, предположим приветствие, и там я устанавливаю параметры для другой функции, но она не работает, когда я вызываю другую функцию.

def get_message():
    sample_responses = ["Hey Welcome May I know your Roll Number?", "Hi Welcome to  May I know your Roll Number"]
    return random.choice(sample_responses)

def cust(value):
    if value =="111":
        t1 = "Thor"
        val_off = "1"
    elif value =="222":
        t1 = "Steve"
        val_off = "2"
    elif value =="333":
        t1 = "Tony"
        val_off = "3"
    else:
        t1= ""
        val_off =""

def get_offer(val_off):
    if val_off == "1":
        offer_test = ("1. Thor"+"\n"+"2. Thor: Ragnarok+"\n"+"3. Avenger Series")
    elif val_off == "2":
        offer_test = ("1. First Avenger"+"\n"+"2. Winter Soldier"+"\n"+"3. Civil War")
    elif val_off =="3":
        offer_test = ("1. Iron Man 1"+"\n"+"2. Iron Man 2"+"\n"+"3. Civil War")
    return offer_test


app.route('/', methods=['POST'])
def webhook():
    data = request.get_json()
    log(data)
    if data['object'] == 'page':
        for entry in data['entry']:
            for messaging_event in entry['messaging']:

                sender_id = messaging_event['sender']['id']
                recipient_id = messaging_event['recipient']['id']

                if messaging_event.get('message'):
                    if 'text' in messaging_event['message']:
                        messaging_text = messaging_event['message']['text']
                    else:
                        messaging_text = 'no text'

                    response = None

                    entity, value = wit_response(messaging_text)


                    if entity == 'cust_greet':
                        response = get_message()
                    elif entity == 'cust_id':
                        test = cust(str(value))
                        val_off = test[1]
                        offer_response = get_offer(str(val_off))
                        esponse = "Hey "+test[0] +"?. "+"\n"+"How Can I help you? Are you interested in"+"\n"+"1.Bio"+"\n"+"2. Movie list"
                    elif entity == 'cust_movie':
                        response = offer_response

                    bot.send_text_message(sender_id, response)

Когда указывается номер броска: например.Будет вызвана функция 111 cust(), она скажет имя как Thor, установит val_off = 1 и вызовет функцию call_offer.Но когда я выбираю опцию "2. Список фильмов", я получаю сообщение об ошибке:

"response = offer_response UnboundLocalError: локальная переменная 'offer_response', на которую ссылаются до назначения"

1 Ответ

0 голосов
/ 31 декабря 2018

Пример функции:

def cust(value):
offer_response ="" ## if it is a string
offer_response = 0 ## if it is a number
    if value =="111":
        t1 = "Thor"
        val_off = "1"
        offer_response = get_offer(str(val_off)) 

Попробуйте:

elif entity == 'cust_movie':
    response = "Please let me know the type of movie by pressing only the digit"+"\n"+"1.Thor Series"+"\n"+"2. Avenger Series" +"\n"+"3.. Iron Man Series"
elif entity in( '1' , '2' ,'3'):
    response = get_offer(entity)        

Итак, когда вы вводите "cust_movie", бот попросит вас нажать на тип фильма, который вы хотите посмотреть,Он будет хранить значение 1,2,3

В соответствии с пользовательским вводом 1,2 или 3, бот проверит наличие другого цикла elif и перейдет к функции get_offer, и будет показан следующий список фильмов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...