Python FB Messenger可以';我不能接收消息

Python FB Messenger可以';我不能接收消息,python,facebook,facebook-graph-api,flask,python-requests,Python,Facebook,Facebook Graph Api,Flask,Python Requests,我正在尝试使用最新发布的messenger平台api设置messenger聊天机器人。我在Heroku上设置了一个Python Flask服务器,并一直在调整这些指令,以尝试让我的页面接收服务器发送的消息: 到目前为止,我已经验证了回调url,并且能够在我在FB上发布到我的页面时接收消息(即,当我在FB上发布链接到我的应用程序的页面时,我的heroku日志显示正在接收发布请求)。但是,当我尝试从服务器向我的应用程序发送消息时,会得到以下JSON错误响应: 400: {"error":{"mess

我正在尝试使用最新发布的messenger平台api设置messenger聊天机器人。我在Heroku上设置了一个Python Flask服务器,并一直在调整这些指令,以尝试让我的页面接收服务器发送的消息:

到目前为止,我已经验证了回调url,并且能够在我在FB上发布到我的页面时接收消息(即,当我在FB上发布链接到我的应用程序的页面时,我的heroku日志显示正在接收发布请求)。但是,当我尝试从服务器向我的应用程序发送消息时,会得到以下JSON错误响应:

400: {"error":{"message":"(#100) param recipient must be non-empty.","type":"OAuthException","code":100,"fbtrace_id":"B3cni+LAmYU"}}
我正在使用请求库向页面发送请求。以下是我用于处理POST请求的代码:

import json
import os
import requests

from flask import Flask, request

app = Flask(__name__)

FB_MESSAGES_ENDPOINT = "https://graph.facebook.com/v2.6/me/messages"
FB_TOKEN = "EAADKWAcVj...AZDZD"

@app.route('/', methods=["POST"])
def chatbot_response():
    req_data = request.data

    data = json.loads(req_data)
    print "Data: ", data
    sender_id = data["entry"][0]["messaging"][0]["sender"]["id"]
    print "Sender id: ", sender_id
    send_back_to_fb = {
    "entry": [{"messaging": [{"recipient": {"id": str(sender_id)}}]}],
        "recipient": {
             "id": str(sender_id)},
        "message": "this is a test response message",
        "recipient": str(sender_id), "access_token": FB_TOKEN
    }

    params_input = {"access_token": FB_TOKEN, "recipient": sender_id}
    fb_response = requests.post(FB_MESSAGES_ENDPOINT,
                                params={"access_token": FB_TOKEN, "recipient":  {"id": str(sender_id)}, "json": "recipient": {"id": str(sender_id)}},
                                data=json.dumps(send_back_to_fb)) 



    print "Json of response: ", fb_response.json()

    # handle the response to the subrequest you made
    if not fb_response.ok:
        # log some useful info for yourself, for debugging
        print 'jeepers. %s: %s' % (fb_response.status_code, fb_response.text)


    return "OK", 200


if __name__ == '__main__':
    app.run(host="0.0.0.0")
我尝试了无数种不同类型的键/值编码,将“recipients”元素编码成json,但FB graph服务似乎不理解其中任何一种。如何对请求进行编码,以便FB知道“收件人”参数是什么

谢谢


编辑:

结果我不得不在POST请求的头中手动设置编码类型。添加以下行使我可以向FB发送可解释的文本响应:

headers = {'content-type':  'application/json'}

你可以试试这些,两者都可以

headers = {'Content-type': 'application/json'}
response = requests.post(url, data=json.dumps(send_back_to_fb), headers=headers)


使用facebook messenger平台的python库怎么样


数据
参数应该是字典。你试过了吗?是的,我试过了!不幸的是,它没有工作:(你让它工作了吗?我现在被困在同一个问题!
response = requests.post(url, json=send_back_to_fb)
from flask import Flask, request
from fbmq import Page

page = fbmq.Page(PAGE_ACCESS_TOKEN)

@app.route('/webhook', methods=['POST'])
def webhook():
  page.handle_webhook(request.get_data(as_text=True))
  return "ok"

@page.handle_message
def message_handler(event):
  page.send(event.sender_id, "HI!!!")