我正在尝试使用新发布的来设置一个。我安装了托管在Heroku上的Python服务器,并对这些指令进行了调整,试图让我的页面接收我的服务器发送的消息:https://developers.facebook.com/docs/messenger-platform/quickstart
到目前为止,我已经验证了回调url,并且能够在我在FB上发布到我的页面时接收消息(也就是说,当我在FB上发送链接到我的应用程序的页面时,我的heroku日志显示已经收到了post请求)。但是,当我试图将消息从服务器发送到我的应用程序时,我会得到以下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")我尝试过将“收件人”元素的不同类型的键/值编码转换为json,但FB图形服务似乎没有理解它们。如何对我的请求进行编码,以便FB知道“收件人”param是什么?
谢谢!
编辑:
结果,我不得不在POST请求的标题中手动设置编码类型。添加了以下行,这样我就可以向FB发送可解释的文本响应:
headers = {'content-type': 'application/json'}发布于 2016-06-01 10:12:47
你可以试试这些,两者都能用
headers = {'Content-type': 'application/json'}
response = requests.post(url, data=json.dumps(send_back_to_fb), headers=headers)或
response = requests.post(url, json=send_back_to_fb)发布于 2016-09-23 00:30:26
使用facebook信使平台的python库如何?
https://github.com/conbus/fbmq
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!!!")https://stackoverflow.com/questions/37147755
复制相似问题