【发布时间】:2017-01-17 15:38:25
【问题描述】:
我正在 GAE 上开发 FB 机器人,我的机器人的功能之一是发送图像。我想附上我的图片并将其发送给用户(不是通过链接)。
问题是我得到错误:必须指定收件人,但实际上我已经指定了它:
from requests_toolbelt import MultipartEncoder
from google.appengine.api import urlfetch
def send_image(recipient_id):
payload = {
'recipient': json.dumps(
{
'id': recipient_id
}
),
'message': json.dumps(
{
'attachment': {
'type': 'image',
'payload': {}
}
}
),
'filedata': (path, open(path, 'rb'))
}
multipart_data = MultipartEncoder(payload)
multipart_header = {
u'Content-Type': multipart_data.content_type
}
result = urlfetch.fetch(
url=request_endpoint,
payload=multipart_data,
method=urlfetch.POST,
headers=multipart_header,
deadline=10)
return result.content
result.response:
'{"error":{"message":"(#100) The parameter recipient is required","type":"OAuthException","code":100,"fbtrace_id":"CIGds8u22au"}}'
【问题讨论】:
-
能打印出result.content吗?可能收件人 ID 为空或消息格式错误。您可以使用链接模型发送相同的消息吗?
-
@MatthewFisher,感谢您的回复。我已经编辑了这个问题。我已经检查了 multipart_data 有非空字段接收者。接收者 = '{"id": "value"}'。我不想使用链接,因为我以编程方式生成图片,所以在这种情况下我需要一些托管。
-
这并不能告诉我们太多。打印 multipart_data 怎么样?可以发送其他消息吗?
-
@MatthewFisher, snag.gy/NTA1hv.jpg 我想问题是标题不合适,但看起来还可以,
-
如果能得到程序实际在网络上发送的纯文本,那就太好了。也许有'urlfetch'的调试输出。我想将它与此处的示例进行比较https://developers.facebook.com/docs/messenger-platform/send-api-reference/image-attachmen filedata 字段对我来说看起来很奇怪。我期望一个 MIME 编码的文本块。您可以尝试使用链接样式吗?最好了解收件人是实际问题还是错误消息具有误导性。
标签: facebook python-2.7 google-app-engine bots facebook-messenger