2

我基于 Facebook Messenger 的 Echo-bot 给出了错误的状态码。尽管最终用户(直到现在的管理员)收到了准确的回显消息,但我的 webhook 从 Graph API 收到的反馈是:

{"error":{"message":"(#100) No matching user found","type":"OAuthException","code":100,"error_subcode":2018001,"fbtrace_id":"Fan1swU4dF8"}}

即使经过大量审查和冲浪,我也无法找出我的 webhook 代码的问题。下面是:

import os, sys
import requests
from flask import Flask, request
import json
from random import random, choice 

page_access_token="page_access_code"
chatbot=Flask(__name__)                                               

@chatbot.route('/', methods=['GET'])                                
def verify():
    print("Handling verification...")
    if request.args.get('hub.verify_token', '')=='verify_token':
        print("Verified!!")
        return request.args.get("hub.challenge",'')
    else:
        print("Wrong request!!")
        return "error!!"


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

                if things.get("message"):
                    s_id= things["sender"]["id"]                    
                    r_id= things["recipient"]["id"]                 
                    log("Sender id:"+ s_id)
                    log("Receiver id: "+ r_id)
                    try:
                        messaging_text= things["message"]["text"]          
                        send_message(s_id, str(messaging_text))
                    except:
                        send_message(s_id, "Sorry!! Couldn't understand that..")

                    if things.get("delivery"):
                        log("message delivered..")
                    elif things.get("optin"):
                        pass
                    elif things.get("postback"):
                        pass
    return 'ok', 200                                    




def send_message(r_id, messaging_text):                      
    r_id=str(r_id)
    log("sending message to {recipient}: {text}".format(recipient=r_id, text=messaging_text))

    params = {
        "access_token": page_access_token
    }
    headers = {
        "Content-Type": "application/json"
    }
    data = json.dumps({
        "recipient": {
            "id": r_id
        },
        "message": {
            "text": str(messaging_text)
        }
    })
    r = requests.post("https://graph.facebook.com/v2.12/me/messages", params=params, headers=headers, data=data)
    if r.status_code != 200:
        log(r.status_code)
        log(r.text)

def log(message):
    print(message)
    sys.stdout.flush()

if __name__=="__main__":
    chatbot.run(debug=True, port=5000)

PS。我是一个菜鸟,所以正确的描述或链接对我了解这个缺陷非常有帮助。

4

0 回答 0