-1

Я создал fb бот, который просто перекликается с пользовательским вводом. Я хочу, чтобы он постоянно повторял вход пользователя и останавливался, когда пользователь вводит «bye». Как это сделать? Пожалуйста, помогите. Код: `` `импорт ОС импорт SYS импортКак создать боттон facebook, который эхом вводит бесконечное количество раз и вводит пользователя только тогда, когда пользователь вводит определенную команду (например, bye)?

JSON
import requests 
import time 
from flask import Flask, request 

app = Flask(__name__) 

@app.route('/', methods=['GET']) 
def verify(): 
    if request.args.get("hub.mode") == "subscribe" and request.args.get("hub.challenge"): 
     if not request.args.get("hub.verify_token") == os.environ["VERIFY_TOKEN"]: 
      return "Verification token mismatch", 403 
     return request.args["hub.challenge"], 200 

    return "Hello world", 200 


@app.route('/', methods=['POST']) 
def webhook(): 
    data = request.get_json() 
    if data["object"] == "page": 
     for entry in data["entry"]: 
      for messaging_event in entry["messaging"]: 
       if messaging_event.get("message"): # someone sent us a message 
        sender_id = messaging_event["sender"]["id"]   
        recipient_id = messaging_event["recipient"]["id"] 
        message_text = messaging_event["message"]["text"] 

        reply = "Received : " + message_text 

        if "bye" in message_text.lower(): 
         reply = "Good-bye" 
        send_message(sender_id, reply) 

    return "ok", 200 


def send_message(recipient_id, message_text): 

    log("sending message to {recipient}: {text}".format(recipient=recipient_id, text=message_text)) 

    params = { 
     "access_token": os.environ["PAGE_ACCESS_TOKEN"] 
    } 
    headers = { 
     "Content-Type": "application/json" 
    } 
    data = json.dumps({ 
     "recipient": { 
      "id": recipient_id 
     }, 
     "message": { 
      "text": message_text 
     } 
    }) 
    r = requests.post("https://graph.facebook.com/v2.6/me/messages", params=params, headers=headers, data=data) 
    if r.status_code != 200: 
     log(r.status_code) 
     log(r.text) 



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

Я создал fb-бот, который просто перекликается с пользовательским вводом. Я хочу, чтобы он постоянно повторял вход пользователя и останавливался, когда пользователь вводит «bye». Что я имею в виду, так это то, что пользовательский ввод повторяется бесконечно много раз, и бесконечный цикл ломается только тогда, когда встречается «бай». –

ответ

0

Как о возвращении без send_message(sender_id, reply) функции? Как это

if "bye" in message_text.lower(): 
    return "bye", 200 
+0

В этом случае пользователь не может видеть сообщение «Прощай». Кроме того, когда я делаю это в бесконечное эхо, он не нарушает бесконечный цикл. Нарушение бесконечной петли, как только будет отправлено до свидания, является целью вопроса. –

0

Этот код очень похож на ваш, за исключением того факта, что я использовал класс, основанный вид

Чтобы разорвать петлю добавить fbid пользователя в файл или БД после того как он/она говорит, пока. Каждый раз, когда отправляется сообщение, проверяйте fbid, чтобы узнать, сказал ли пользователь «пока». Если да, ответьте пустой ответ

def post_facebook_message(fbid, recevied_message): 
    """ 
    takes a user fb id and posts the bot message as response 
    """ 
    post_message_url = 'https://graph.facebook.com/v2.6/me/messages?access_token='+PAGE_ACCESS_TOKEN 
    response_msg = json.dumps({"recipient":{"id":fbid}, "message":{"text":recevied_message}}) 
    status = requests.post(post_message_url, headers={"Content-Type": "application/json"},data=response_msg) 
    print status.json() 

class FBBotView(generic.View): 
    #this is to verify your FB account with your program 
    #use ythe same verify token used while registering the bot 
    @method_decorator(csrf_exempt) 
    def get(self, request, *args, **kwargs): 
     if self.request.GET['hub.verify_token'] == VERIFY_TOKEN: 
      return HttpResponse(self.request.GET['hub.challenge']) 
     else: 
      return HttpResponse('Error, invalid token') 
    @method_decorator(csrf_exempt) 
    def dispatch(self, request, *args, **kwargs): 
     return generic.View.dispatch(self, request, *args, **kwargs) 

    # Post function to handle Facebook messages 
    def post(self, request, *args, **kwargs): 
     # Converts the text payload into a python dictionary 
     incoming_message = json.loads(self.request.body.decode('utf-8')) 
     # Facebook recommends going through every entry since they might send 
     # multiple messages in a single call during high load 
     for entry in incoming_message['entry']: 
      for message in entry['messaging']: 
       # Check to make sure the received call is a message call 
       # This might be delivery, optin, postback for other events 
       if 'message' in message: 
        if recieved_message.lower() == "bye": 
         #sends an empty response 
         message = "Good bye" 

        post_facebook_message(message['sender']['id'],message) 
     #this line is important because many times FB checks validity of webhook. 
     return HttpResponse() 
+0

В этом случае пользователь не может видеть сообщение «Прощай». Кроме того, когда я делаю это в бесконечное эхо, он не разрушает бесконечный цикл. Разрыв бесконечной петли, как только отправлено до свидания, является целью вопроса –

+0

@KaustabhDattaChoudhury, что вы имеете в виду, нарушая цикл? Вы имеете в виду, что бот не должен отвечать ничего, когда пользователь говорит Bye ?? –

+0

, если это так, добавьте эти fbid в базу данных или файл. –