【问题标题】:Facebook Messenger Bot, send Image AttachmentFacebook Messenger Bot,发送图片附件
【发布时间】:2016-08-08 22:53:50
【问题描述】:

我正在创建一个已上传图片的 Facebook 机器人,它会以图片作为响应。我可以通过附件发送图片并将其从服务器上删除,还是必须发送图片的 URL 并将图片保留在服务器上?

【问题讨论】:

    标签: facebook bots messenger


    【解决方案1】:

    您可以通过 Facebook Messenger API 发送附件,方法是使用 多部分请求 直接发布(不使用 payload.url 选项)。这里是 PHP & Guzzle (尽管任何好的 HTTP 请求包都应该这样做,不管脚本语言如何):

    use GuzzleHttp\Client;
    
    $client = new Client();
    $graphRequest = $client->request('POST', 'https://graph.facebook.com/v5.0/me/messages', [
        'query' => [
            'access_token' => $facebookInfo['pageAccessToken']
        ],
        'multipart' => [
            [
                'name' => 'messaging_type',
                'contents' => 'RESPONSE',
            ],
            [
                'name' => 'recipient',
                'contents' => json_encode(['id' => $yourRecipientPSID]),
            ],
            [
                'name' => 'message',
                'contents' => json_encode(['attachment' => ['type' => 'file', 'payload' => []]]),
            ],
            [
                'name' => 'filedata',
                'contents' => fopen($yourFilePath, 'r'),
                'filename' => $yourFileName,
            ],
        ],
    ]);
    

    请注意,attachments.payload 参数已设置,但 null。如果未设置 payload,Graph API 将返回 400 响应。

    【讨论】:

      【解决方案2】:

      您可以使用他们的上传 API 将您的附件上传到他们的服务器。

      curl -X POST -H "Content-Type: application/json" -d '{
        "message":{
          "attachment":{
            "type":"image", 
            "payload":{
              "url":"http://www.messenger-rocks.com/image.jpg", 
              "is_reusable":true,
            }
          }
        }
      }' "https://graph.facebook.com/v2.6/me/message_attachments?access_token=PAGE_ACCESS_TOKEN"
      

      上传调用会响应一个 attachment_id,它可以用来将附件发送给用户而无需再次上传。

      curl -X POST -H "Content-Type: application/json" -d '{
        "recipient": {
          "id": "USER_ID"
        },
        "message": {
          "attachment": {
            "type": "image",
            "payload": {
              "attachment_id": "1745504518999123"
            }
          }
        }
      }' "https://graph.facebook.com/me/messages?access_token=PAGE_ACCESS_TOKEN"   
      

      【讨论】:

        【解决方案3】:
            curl  \
          -F recipient='{"id":"USER_ID"}' \
          -F message='{"attachment":{"type":"image", "payload":{}}}' \
          -F filedata=@/tmp/testpng.png \
          "https://graph.facebook.com/v2.6/me/messages?access_token=PAGE_ACCESS_TOKEN"
        

        您可以在此处找到有关如何附加 jpg 或 png 的官方示例。 https://developers.facebook.com/docs/messenger-platform/send-api-reference#examples

        【讨论】:

        • 你知道如何通过 python 实现,特别是当文件是我无法保存在服务器中的 PIL 图像时?
        • 不知道,请尝试寻找包装 FB API 的 Python 库。什么是 PIL 图像?
        • 这里是如何在 python 中使用 requests 和额外的 requests_toolbelt 库来做到这一点。 gist.github.com/fatfingers/d7c090068a68b8b7238bd85374b6e34c
        【解决方案4】:


        我有同样的问题,但仍然没有找到答案。
        目前,使用 Facebook bot 发送图像的唯一方法是“image_url”和您的图像 url。

        【讨论】:

        • 是的,API 就是这么说的 :( 我的临时解决方案是在 cron 作业将其从服务器上擦除之前的 n 小时内提示用户下载图像。
        猜你喜欢
        • 2017-12-05
        • 2017-03-30
        • 2016-11-16
        • 1970-01-01
        • 2016-08-30
        • 2017-06-04
        • 1970-01-01
        • 1970-01-01
        • 2017-01-23
        相关资源
        最近更新 更多