Javascript 如何使用npm';向Facebook发送API发送文件;没有上传文件的请求?

Javascript 如何使用npm';向Facebook发送API发送文件;没有上传文件的请求?,javascript,facebook,npm-request,facebook-send-api,Javascript,Facebook,Npm Request,Facebook Send Api,我正在实现一个使用Facebook发送API的机器人。根据,可以使用请求发送文件。文档提供了两种方法,一种是向文件发送URL,另一种是上载文件。我不想上传文件并给它一个URL,因为这是一个开源库,不想对实现做任何假设 我想直接上传文件。上载文件的文档使用cURL作为示例,如下所示: curl \ -F recipient='{"id":"USER_ID"}' \ -F message='{"attachment":{"type":"file", "payload":{}}}' \

我正在实现一个使用Facebook发送API的机器人。根据,可以使用请求发送文件。文档提供了两种方法,一种是向文件发送URL,另一种是上载文件。我不想上传文件并给它一个URL,因为这是一个开源库,不想对实现做任何假设

我想直接上传文件。上载文件的文档使用
cURL
作为示例,如下所示:

curl  \
  -F recipient='{"id":"USER_ID"}' \
  -F message='{"attachment":{"type":"file", "payload":{}}}' \
  -F filedata=@/tmp/receipt.pdf \
  "https://graph.facebook.com/v2.6/me/messages?access_token=PAGE_ACCESS_TOKEN"    
我目前的看法是,它应该是这样的:

facebook\u message.access\u token=configuration.access\u token;
var fileReaderStream=fs.createReadStream('./sampleData.json')
var formData={
“收件人”:JSON.stringify({
“id”:message.channel
}),
“附件”:JSON.stringify({
“类型”:“文件”,
“有效载荷”:{}
}),
“filedata”:fileReaderStream
}
请求({
“方法”:“POST”,
“json”:正确,
“formData”:formData,
“uri”:https://graph.facebook.com/v2.6/me/messages?access_token='+configuration.access_令牌
},
功能(错误、恢复、正文){
//***
});
运行此命令时,我收到以下响应:

{ 
  message: '(#100) Must send either message or state',
  type: 'OAuthException',
  code: 100,
  error_subcode: 2018015,
  fbtrace_id: '***' 
 }

官方示例应用程序包括通过URL上传文件的功能:

这是相关的功能:

function sendFileMessage(recipientId) {
  var messageData = {
    recipient: {
      id: recipientId
    },
    message: {
      attachment: {
        type: "file",
        payload: {
          url: SERVER_URL + "/assets/test.txt"
        }
      }
    }
  };

  callSendAPI(messageData);
}
如果您真的想以艰难的方式完成,请查看请求模块文档:
请查看部分中带有“formData”的示例代码。您正在使用“表单”,它似乎用于常规数据。

您收到的错误是因为
“附件”:{}
需要位于名为message的对象中。您必须使用facebook send API发送消息或发件人操作对象

var formData = {
                "recipient": JSON.stringify({
                  "id":message.channel
               }),
               "message": JSON.stringify({
               "attachment": {
                  "type":"file",
                  "payload":{}
              }
          }),
               "filedata": fileReaderStream

               }

Facebook应该在此之后接受您的api调用,但是我无法显示使用您的代码发送的jpg文件。也许它可以与您的JSON文件一起使用

我明确地说我不想上传该文件。为了使用这个示例函数,我必须有一个文件的URL。我没有文件的URL,我想直接上传。文件必须在服务器上,为什么不使用URL呢?为什么没有url?我不明白。我不知道你为什么投了反对票,我只是想帮你找到一个更简单的解决办法。不管怎么说,这不是一个错误的解决方案,它可以工作——只需要一个url。用户无论如何都会得到文件,所以为什么不这样做呢?编辑答案,参见最后的句子。它应该是formData,而不是form——至少请求模块的官方文档是这么说的。不是每个人都将Node.js作为web服务器运行。上传文件而不是提供URL是非常有意义的。你的问题中遗漏了一些非常重要的东西:什么东西不起作用?你调试过了吗?回拨中有什么信息吗?有人打电话吗?“这是我的解决方案,但它不起作用”对于stackoverflow来说有点太宽泛了。现在将其添加进来。非常感谢。